Compare commits

..

343 Commits

Author SHA1 Message Date
eggmanQQQ
ce50e32a73 feat ; 去掉 carshCat 2024-09-26 16:11:20 +08:00
eggmanQQQ
7223db9e9c fix: 修复bug , 增加全局报错日志抓取 2024-09-26 15:28:07 +08:00
eggmanQQQ
4a2a9d4400 feat : 明文流量修改回退 2024-09-25 19:39:57 +08:00
eggmanQQQ
8049bdf6ea fix : bug 修复 2024-09-25 19:37:21 +08:00
eggmanQQQ
c90a961e2f feat : 修改权限 , 新增 定制礼物, 去掉友盟取设备号的sdk , 明文请求修改 2024-09-25 19:06:52 +08:00
eggmanQQQ
892f7c3e70 fix: vip 时间 2024-09-24 18:36:54 +08:00
eggmanQQQ
4c8182ee2f update version to 1.0.16 2024-09-24 18:26:33 +08:00
eggmanQQQ
343e73c6e3 feat: 修改 cp 相关bug 2024-09-24 18:18:53 +08:00
eggmanQQQ
eabe2ae7f8 feat : 修复bug 2024-09-24 11:31:29 +08:00
eggmanQQQ
36c011d18e feat : cp 功能 , 个人主页UI修改 , cp列表 , 房间cp飘屏,cp相关动画 , vip中心banner 显示剩余时间 2024-09-23 16:10:39 +08:00
eggmanQQQ
f929d78540 feat : 房間按鈕調整 (欠缺几个图片。app icon 和空状态图 未更改 2024-09-14 15:30:09 +08:00
eggmanQQQ
8184cdd6e1 feat: 房间 排行按钮, 音乐按钮 2024-09-13 13:53:13 +08:00
max
e4d44155dc feat: 更改类名 ,处理代码区分 2024-09-12 19:20:13 +08:00
max
06c974a6ed feat: 图片资源 格式转换 2024-09-12 19:03:23 +08:00
max
4bfbd19b53 fix: 修复bug, 调整升级弹窗不再弹出, 兼容旧版本连击横幅,礼物动画加快, 2024-09-12 18:55:55 +08:00
max
61a26f0c4f fix: 调整ui, 修复bug 2024-09-12 10:15:17 +08:00
max
e8cfc8a13b fix:异常注释 2024-09-11 16:23:24 +08:00
max
295de38074 feat: 幸运礼物 弹窗跟飘屏 , 替换 金币图标 2024-09-11 16:21:58 +08:00
max
e3c5f10d02 feat: 联机送礼功能 2024-09-09 18:39:22 +08:00
max
d949cfa7ff temp save 2024-09-05 19:24:44 +08:00
max
e30f4fd15f feat: 更正 tabbar size 2024-08-30 20:57:09 +08:00
max
90ece5366b feat: 更新数据明文处理 2024-08-30 20:54:13 +08:00
max
555b81589c feat: 修正 en 语言的部分 UI 2024-08-30 16:15:31 +08:00
max
e4cdc39ad8 feat: 修正反饋問題 2024-08-30 15:54:20 +08:00
max
09411df1ff feat:UI 調整 2024-08-29 19:21:07 +08:00
max
9cbc6cf39f fix: 修正 VIP 購買選項 model 2024-08-29 18:19:44 +08:00
max
444d043aa8 feat: 修改聯繫人列表 UI 2024-08-29 17:06:40 +08:00
max
f99d193598 feat: 修改信息列表 UI 2024-08-29 16:42:24 +08:00
max
4a57bd50c5 feat:UI 調整 2024-08-29 12:00:28 +08:00
eggmanQQQ
8a59f8a769 feat: 调整 RTL 布局 UI 2024-08-29 11:59:28 +08:00
max
2c1ecbb263 feat:UI 調整 2024-08-28 21:41:19 +08:00
max
aa2987cb0d feat:修正問題 2024-08-28 21:40:15 +08:00
eggmanQQQ
5e6864d87f feat: 更新 UI 2024-08-28 21:39:59 +08:00
eggmanQQQ
6aabeb3eb3 feat: 更新 UI 2024-08-28 17:36:16 +08:00
eggmanQQQ
9ff48bc500 feat: 移除资源,补充多语言 2024-08-28 13:55:59 +08:00
max
e9ba0b1929 feat:調整 VIP 顯示邏輯,移除公聊廳 2024-08-28 13:55:12 +08:00
max
adf2adc173 feat:調整 VIP 顯示邏輯,移除公聊廳 2024-08-27 16:51:46 +08:00
max
74b2d71821 調試 UI 2024-08-27 16:51:46 +08:00
eggmanQQQ
81a5c6ba65 feat: 補充卡片背景,補充 VIP 資源播放 MP4 的功能 2024-08-27 16:31:44 +08:00
eggmanQQQ
5f8a8113c6 feat:个人资料卡支持 MP4 资源 2024-08-27 11:53:49 +08:00
eggmanQQQ
b0bf9ce98d feat: 调整文案 2024-08-27 11:24:32 +08:00
eggmanQQQ
c3fcbc3942 feat: 更新资源,调整布局 2024-08-27 10:33:34 +08:00
max
6e08f397ee fix:Vip 頁面支持 MP4 播放,修正佈局問題 2024-08-26 16:58:19 +08:00
eggmanQQQ
3d29568b3c feat: 更新 VIP 页面 UI & 功能 2024-08-26 09:13:28 +08:00
eggmanQQQ
cb4dac8e81 feat: 更新 VIP 页面 UI & 功能 2024-08-23 19:29:38 +08:00
eggmanQQQ
f58701a2d6 version update 2024-08-20 10:53:52 +08:00
max
654bc45c8c fix:修正信息 tag 列表項阿語環境在 Android 低版本時佈局異常問題 2024-08-13 18:35:23 +08:00
max
87a36d796c Version Update 2024-08-13 18:19:19 +08:00
eggmanQQQ
0bc1023c99 fix: 修正用户访问失败时的返回处理 2024-08-06 19:27:00 +08:00
max
154e688673 version code update 2024-08-06 11:20:31 +08:00
max
a91dee592d fix:補充查找禮物的類型 2024-08-05 21:42:47 +08:00
eggmanQQQ
7ef78bc3e1 fix: 調整多語言時,點擊 tab 的移動判斷 2024-08-05 19:22:44 +08:00
eggmanQQQ
b5bcd9cb5f fix: 調整多語言時,禮物面板 tab 的默認方向 2024-08-05 19:06:08 +08:00
max
de7eb25045 feat:隱藏超級幸運禮物標記 2024-08-05 18:57:18 +08:00
eggmanQQQ
029b7fcf96 feat: 完成礼物面板调整 2024-08-05 16:39:41 +08:00
eggmanQQQ
23a3858a2c feat: "我的" 列表支持跳转至“我的装扮” 2024-08-02 10:32:49 +08:00
eggmanQQQ
67044ded6b fix:修正个播房玩法入口布局 2024-08-01 17:57:01 +08:00
eggmanQQQ
3e6d34a986 fix:修正个播房玩法入口布局 2024-07-31 18:48:14 +08:00
max
e7ca237a3e fix:修正個播房遊戲玩法入口的顯示問題 2024-07-31 17:51:20 +08:00
max
e26d548515 version_code update 2024-07-29 10:24:14 +08:00
eggmanQQQ
539be23e47 feat:调整配置入口按钮间距 2024-07-26 16:56:52 +08:00
eggmanQQQ
dcafb35e24 feat:调整配置入口按钮显示逻辑 2024-07-26 15:35:02 +08:00
eggmanQQQ
8fa429aca6 feat:更新数据的获取逻辑,接入配置按钮的跳转行为 2024-07-26 11:31:15 +08:00
max
f08b6d4577 新增 model 2024-07-25 22:28:54 +08:00
max
3ea7aecd5c feat:處理底部按鈕顯示邏輯 2024-07-25 18:31:50 +08:00
eggmanQQQ
178f4e24ef 更换资源 2024-07-25 16:12:07 +08:00
max
e2861459fb feat:玩法列表支持最多 3 行並滾動 2024-07-25 15:14:08 +08:00
eggmanQQQ
d704a44106 feat:更新玩法按鈕以及顯示內容 2024-07-24 20:08:03 +08:00
max
da81a4e905 feat:更新房間底部 layout 2024-07-24 14:54:41 +08:00
max
6c081d9a38 fix:修正英語翻譯 2024-07-24 12:13:56 +08:00
max
37d897035f feat:固化混淆配置 2024-07-12 19:07:32 +08:00
max
cea25c7497 feat:调整重名类命名 2024-07-12 14:25:32 +08:00
max
47d2bfd145 feat:替换登录页-logo图片 2024-07-12 11:21:44 +08:00
max
047e1454bd feat:适配Android14 2024-07-12 09:55:16 +08:00
max
714d5baec6 fix:修复个播粉丝团RTL适配问题 2024-07-11 18:56:09 +08:00
max
b20ee8064c fix:修复房间音乐音量无法调节bug 2024-07-11 18:24:50 +08:00
max
711135ae90 feat:移除不必要的debug-toast 2024-07-11 17:21:32 +08:00
max
ecf42e368e feat:完成游戏开黑翻译
fix:UI问题修复
2024-07-11 16:06:05 +08:00
max
205e1180e7 feat:首页-房间列表 麦位头像改为动态数据 2024-07-11 15:41:02 +08:00
max
bc48cc86a9 fix:礼物名称 动态适配多语言 2024-07-11 11:24:18 +08:00
max
e7b73a2961 feat:完成游戏开黑功能 2024-07-10 19:57:20 +08:00
max
5070e21d16 feat:【开黑】完成部分UI 2024-07-10 19:57:19 +08:00
max
049006aa8b feat:补充异常信息展示 2024-07-10 19:56:04 +08:00
max
86b498c00e feat:删除测试代码,删除不必要的log
fix:完善销毁逻辑
2024-07-09 15:57:11 +08:00
max
6df95cf11f feat:适配BillingService2,完善支付回调 2024-07-09 15:57:10 +08:00
max
3b407c0bd6 feat:初步实现H5唤起支付逻辑(不完善,用于打内测包验证) 2024-07-09 15:57:10 +08:00
max
83af08076a fix:头条UI微调 2024-07-09 15:56:20 +08:00
max
cdc1c51fec feat:调整版本号 2024-07-08 11:27:30 +08:00
max
a8191616a3 feat:私聊、公聊、房间、支持垃圾字检测 2024-07-08 11:27:11 +08:00
max
410832690f feat:调整启动背景-logo 2024-07-08 11:27:11 +08:00
max
b1d2f0515b fix:修复麦位空指针异常 2024-07-05 18:26:14 +08:00
max
82c2d8c25d feat:修改启动页背景 2024-07-04 19:17:35 +08:00
max
549088c99e feat:完成公聊厅-头条UI调整 2024-07-04 19:01:24 +08:00
max
5910e7c5fd feat:配置云信-安全通ID 2024-07-04 17:52:42 +08:00
max
53aed7599a feat:头条间距微调 2024-07-04 16:46:12 +08:00
max
8aebb7c2c2 feat:调整房间公聊-头条UI 2024-07-04 16:38:32 +08:00
max
3a120bf5f0 fix:修复反馈-联系客服-排序问题 2024-07-04 16:13:38 +08:00
max
2a0d8f06fa feat:头饰支持SVGA(个人资料页、房间个人资料弹窗、动态列表、动态详情、我的头饰列表、公聊厅、房间麦位) 2024-07-04 15:19:11 +08:00
max
495bae0d00 fix:修复反馈-bug 2024-07-03 19:40:59 +08:00
max
2af7cec8dd feat:完成反馈功能 2024-07-03 16:47:14 +08:00
max
e9e4da8d60 feat:补充启动时更新ticket逻辑 2024-07-02 17:36:08 +08:00
max
14c1805a2b feat:完成部分页面主题UI修改 2024-07-02 15:28:16 +08:00
max
066fc4056b feat:固化最新混淆配置 2024-07-01 09:38:36 +08:00
max
f8ad0d3961 feat:个人资料页UI微调
feat:首页房间列表-背景-阿语调整
2024-06-28 17:37:16 +08:00
max
0d974866c8 feat:调整首页-房间列表-背景多语言资源 2024-06-28 16:38:46 +08:00
max
b4f3c4f3e3 feat:补充混淆忽略 2024-06-28 16:24:53 +08:00
max
f74b744f56 fix:调整房间公告icon 2024-06-28 16:04:32 +08:00
max
b8f73ec0d5 feat:新增动态相关混淆配置 2024-06-28 14:44:16 +08:00
max
3ff80994f1 fix:调整动态部分翻译 2024-06-28 14:32:58 +08:00
max
c1426b39c4 fix:动态部分UI微调 2024-06-28 14:32:58 +08:00
max
3b28974919 feat:初步恢复动态 2024-06-28 14:32:57 +08:00
max
63a28bc142 fix:调整个人资源页部分文案翻译 2024-06-28 11:53:50 +08:00
max
729d626006 fix:修复个播-小麦位头像框大小比例问题 2024-06-28 10:50:06 +08:00
max
a407268be1 fix:修复房间麦位魅力icon 展示不完整bug 2024-06-28 09:47:08 +08:00
max
f4808e8acf fix:补充房间底部加号红点刷新时机 2024-06-28 09:34:07 +08:00
max
3e49dae43b feat:调整房间类型切换图片资源 2024-06-28 09:23:08 +08:00
max
35d53ccdb2 fix:调整已关注 翻译文案 2024-06-28 09:19:26 +08:00
max
2a20d75ffd feat:调整个人资料页 关注按钮 文案 2024-06-27 19:47:07 +08:00
max
5f157d8454 feat:聚会房、狂欢房 开放PK功能 2024-06-27 16:40:48 +08:00
max
5fbee068dc fix:调整切换房间页面部分图片资源 2024-06-27 16:18:01 +08:00
max
046c7d66cd fix:调整房间底部加号-红点提示逻辑:单独处理房间类型的功能提示
fix:修复游戏房未能返回之前房间类型问题
2024-06-27 16:18:01 +08:00
max
accf4562b1 fix:修复普通房麦位索引展示问题(1-8) 2024-06-27 16:18:00 +08:00
max
5b90524144 feat:适配房间类型切换-多语言翻译 2024-06-27 16:18:00 +08:00
max
1284a6e8a2 feat:调整房间公告位置 2024-06-27 16:18:00 +08:00
max
afdf3093a1 feat:新增聚会房、狂欢房; 2024-06-27 16:17:27 +08:00
max
843a37ed97 feat:初步完成房间类型切换页面 2024-06-27 16:14:52 +08:00
max
f99c6d8b37 fix:修复个人资料页UI问题 2024-06-27 14:49:13 +08:00
max
7add521040 feat:调整首页分页大小:50 2024-06-27 11:08:18 +08:00
max
b673f5603f fix:调整个人资料相册数据源 2024-06-27 11:06:03 +08:00
max
a4f9559ad9 fix:修复个人资料页部分UI细节问题 2024-06-27 10:07:10 +08:00
max
3226109442 fix:修复个人资料页部分BUG 2024-06-27 10:07:10 +08:00
max
3c60225e35 feat:调整个性签名默认值展示 2024-06-27 10:07:10 +08:00
max
0a70c6a478 feat:删除用户信息页不必要的请求 2024-06-27 10:06:53 +08:00
max
16a8f9a52a fix:调整翻译
feat:完成勋章展示
2024-06-27 10:06:27 +08:00
max
2a1983aa46 feat:完成个人资料页-UI改版 2024-06-27 10:06:26 +08:00
max
eb187ebc56 feat:调整首页列表分页大小
fix:修复首页列表底部间距问题(被遮挡)
2024-06-25 17:10:46 +08:00
max
f4ef62d2d6 固化混淆配置 2024-06-25 10:02:34 +08:00
max
49a10d9f40 feat:调整版本号 2024-06-24 17:40:34 +08:00
max
42b47fcb64 fix:修复PK-RTL适配问题 2024-06-24 16:26:04 +08:00
max
709b0b0274 fix:调整一些翻译 2024-06-24 15:54:39 +08:00
max
b6d59b5986 feat:微调UI 2024-06-24 14:52:49 +08:00
max
ef80b15f27 feat:修改背包icon 2024-06-24 14:22:24 +08:00
max
c14d376a1a feat;调整首页列表分页大小(减轻服务端压力) 2024-06-24 11:44:37 +08:00
max
7f8cd70d99 feat:调整“我的”翻译 2024-06-21 17:46:38 +08:00
max
d2a686f572 feat:首页房间列表:增加公告标题默认值 2024-06-21 16:53:31 +08:00
max
693a14d6cf fix:修复房间排行榜热度-最小化后恢复页面未展示最新值bug 2024-06-21 15:34:16 +08:00
max
cf078ebc5b feat:调整首页列表-公告展示字段 2024-06-20 19:01:05 +08:00
max
408fe443f4 fix:修复首页-排行榜-RTL问题 2024-06-20 17:56:39 +08:00
max
442bd1f238 fix:修复PK邀请弹窗 适配问题 2024-06-20 16:33:07 +08:00
max
4eed4c0cfb fix:修复首页-我的-房间卡片 展示bug 2024-06-20 15:56:10 +08:00
max
bf3ea4b437 feat:调整启动图标 2024-06-20 10:59:12 +08:00
max
f161a8e96b feat:补充翻译 2024-06-19 19:14:39 +08:00
max
574f290004 feat:首页排行榜资源位-背景改为本地 2024-06-19 18:51:59 +08:00
max
a46b5b4f32 feat:调整首页-排行榜-UI
fix:修复首页-我的列表不能主动刷新问题
2024-06-19 18:51:59 +08:00
max
936dd2f8e8 fix:修复首页排行榜异常 2024-06-19 18:51:59 +08:00
max
9d0b6e3a9f feat:完成我的-菜单列表:动态数据(接口) 2024-06-19 18:51:58 +08:00
max
14fa576814 feat:完善首页数据对接(首页排行榜、我的房间、房间标签列表)
feat:删除部分无用代码
2024-06-19 18:51:58 +08:00
max
9d14936d9c feat:初步实现首页排行榜UI效果 2024-06-19 18:51:58 +08:00
max
3dec68b1fc fix:修复一些英文翻译 2024-06-19 18:51:57 +08:00
max
3c75f0e86a feat:删除首页历史无用代码
feat:调整首页刷新机制(去掉定时刷新任务、改为每次可见刷新)
feat:完善首页-我的-房间信息展示
2024-06-19 18:51:57 +08:00
max
0caee6e191 feat:调整翻译文案 2024-06-19 18:51:43 +08:00
max
b9f87b4984 feat:初步完成首页改版UI部分(首页-推荐、首页-我的) 2024-06-19 18:49:52 +08:00
max
2b22fb3d4c fix:修复线上检测异常(房间公聊列表) 2024-06-19 16:25:00 +08:00
max
d80128f217 feat:调整礼物面板-背包图标大小 2024-06-19 15:52:22 +08:00
max
57a7bee15d 补充提交 2024-06-19 15:52:22 +08:00
max
677eb4327b feat:补充翻译 2024-06-19 15:52:22 +08:00
max
d8815a23e7 feat:完成房间礼物面板-背包位置调整
feat:调整礼物面板部分layout的间距、高度
2024-06-19 15:52:21 +08:00
max
a7faa20321 feat:调整房间在线人数定时任务时长 2024-06-19 15:52:21 +08:00
max
612bd50545 feat:调整给自己送礼的提示文案 2024-06-19 15:52:20 +08:00
max
3187bc0d37 fix:增加给自己送礼的提示(文案待确定) 2024-06-19 15:52:20 +08:00
max
48d2bc88b8 fix:修复团队PK-结束后进度未清零bug 2024-06-19 15:52:20 +08:00
max
168c0eab09 feat:补充游戏房、个播房:房间榜热度展示 2024-06-19 15:52:20 +08:00
max
d1fc37aa24 feat:完成房间榜流水展示 2024-06-19 15:52:19 +08:00
max
94cebe457a feat:补充PK-UI-多语言适配 2024-06-19 15:52:19 +08:00
max
6e8f69d273 feat:完善PK-UI改版:多语言资源适配 2024-06-19 15:52:18 +08:00
max
80d852114c fix:修改房间PK面板拖拽实现方案(RTL适配问题)
fix:修改首页房间悬浮球实现方案(RTL适配问题)
2024-06-19 15:52:17 +08:00
max
634adc5f19 fix:房间团队PK-阿语适配 2024-06-19 15:52:17 +08:00
max
3408f444aa fix:修复PK-头像缩放适配问题 2024-06-19 15:52:17 +08:00
max
95f65558a4 feat:完成房间团队PK-UI改版 2024-06-19 15:52:15 +08:00
max
fbb7d20f3d feat:迁移PK入口到玩法列表
feat:部分UI微调
2024-06-19 15:52:15 +08:00
max
12edababcd feat:调整跨房PK倒计时 颜色 2024-06-19 15:52:14 +08:00
max
97949c4828 feat:完成跨房PK-UI改版 2024-06-19 15:52:14 +08:00
max
78fa5751a6 feat:COS 增加动态配置(是否全球加速) 2024-06-14 16:00:55 +08:00
max
a6798cf35d fix:修复首页房间最小化入口展示不出来问题(去掉再次请求用户信息接口的逻辑,改用读取房间信息里面头像字段) 2024-06-11 10:26:22 +08:00
max
89940edd58 feat:固化混淆配置 2024-06-11 09:42:49 +08:00
max
fb202c1c73 fix:修复公聊厅消息过滤问题 2024-06-07 20:32:19 +08:00
max
840a1243aa fix:修复1v1游戏登录IM问题
fix:修复公聊新消息过滤器问题
2024-06-07 20:03:46 +08:00
max
2019411763 feat:调整部分文案 2024-06-07 18:28:07 +08:00
max
e0e07c718a feat:增加日志输出控制(根据环境) 2024-06-07 17:54:08 +08:00
max
02595f81f7 fix:调整部分翻译 2024-06-07 17:48:41 +08:00
max
95d0527fc9 fix:调整部分场景的时间格式化-时区 2024-06-07 14:27:22 +08:00
max
bc3426c574 fix:修复线上检测异常:Exception java.lang.NullPointerException 2024-06-07 11:21:15 +08:00
max
a2976dbc74 fix;修复线上检测异常:Exception java.util.ConcurrentModificationException 2024-06-07 11:16:06 +08:00
max
e942696e14 fix:修复线上检测空指针异常 2024-06-07 11:05:35 +08:00
max
7c3dee48ae fix:修复空指针异常 2024-06-07 10:45:00 +08:00
max
eabb3a5bd3 fix:修复钱包钻石余额格式化展示问题
fix:修复兑换金币余额格式化展示问题
2024-06-06 16:52:00 +08:00
max
fbc76a0bd3 fix:游戏房增加小时榜(牌照房切换为游戏房需要展示小时榜) 2024-06-06 16:17:36 +08:00
max
d044756bd7 fix:修复游戏麦位布局问题 2024-06-06 16:10:23 +08:00
max
8ad993bb6b fix:修复UI反馈问题 2024-06-06 15:41:57 +08:00
max
f325df4ed0 feat:固化混淆配置 2024-06-06 14:32:57 +08:00
max
19cbd94e98 feat:补充翻译 2024-06-06 11:20:34 +08:00
max
85b9ce903f fix:相亲模式隐藏游戏列表入口 2024-06-06 11:14:29 +08:00
max
408ec3f811 feat:补充文件上传异常时toast具体原因 2024-06-06 11:08:00 +08:00
max
cafeee5305 feat:完善钱包余额更新
feat:调整我的入口UI(钱包、VIP、公会)
2024-06-06 10:53:51 +08:00
max
818acaee8f feat:房间-游戏列表-icon字段调整 2024-06-05 20:07:25 +08:00
max
e72423708e feat:初步完成钱包UI改版(缺少入口icon替换等和兑换跳转联调) 2024-06-05 20:06:01 +08:00
max
5ba98cdb9e fix:调整更新房间接口传参 2024-06-05 15:57:20 +08:00
max
13d87309e1 fix:补充1v1游戏房从后台恢复的状态同步机制 2024-06-05 15:56:45 +08:00
max
dc5d160086 feat:普通房开放跨房PK入口
feat:PK入口迁移到玩法弹窗(待完善,目前注释了关键代码:下个版本的需求)
2024-06-05 14:31:41 +08:00
max
7dca9a1ed5 fix:修复游戏结果状态显示错误问题 2024-06-04 19:49:16 +08:00
max
fc2c2433aa fix:游戏结束后退出云信 2024-06-04 19:29:08 +08:00
max
7aeb80599d fix:游戏结束主动退出游戏 2024-06-04 18:32:57 +08:00
max
53b7bb87f1 fix:修复游戏结果多语言UI适配问题 2024-06-04 18:13:45 +08:00
max
994f0900a7 feat:调整房间标题长度输入限制(改为25) 2024-06-04 17:12:32 +08:00
max
764227edcd feat:调整页面背景主题色资源 2024-06-04 17:07:59 +08:00
max
640d59d4f5 feat:调整转赠相关的翻译文案 2024-06-04 16:55:44 +08:00
max
11bc8068bd feat:调整部分翻译文案 2024-06-04 15:56:56 +08:00
max
bc8f1a6660 feat:游戏退出提示区分状态 2024-06-04 15:19:59 +08:00
max
93fc9d2fef fix:游戏房补充退出房间逻辑 2024-06-04 15:09:52 +08:00
max
2d9c152bd6 feat:调整1v1游戏显示区域 2024-06-04 11:32:46 +08:00
max
0e3d9695f9 feat:完成房间公聊-头条入口调整 2024-06-04 10:52:33 +08:00
max
1acbead001 feat:游戏麦位改为9麦,增加礼物值展示 2024-06-03 19:18:47 +08:00
max
b25276875b feat:完成房间-游戏切换入口调整需求 2024-06-03 19:00:13 +08:00
max
6de2f68106 feat:调整恢复游戏房接口名 2024-06-03 18:18:02 +08:00
max
7ff35b1a50 feat:游戏排行榜入口无需翻译 2024-06-03 16:32:14 +08:00
max
0c4df905e3 feat:补充游戏切换房间逻辑 2024-06-03 16:18:24 +08:00
max
aa0baeccf1 feat:完善游戏翻译
fix:修复结算状态显示bug
2024-06-03 11:54:09 +08:00
max
8a66c4bdb8 feat:补充开始游戏 刷新余额逻辑 2024-06-03 10:19:58 +08:00
max
5c262c93c9 feat:完善游戏断网重连刷新机制
feat:完善部分UI调整
2024-06-03 10:10:29 +08:00
max
2b0e52ac20 feat:恢复游戏dialog禁止空白取消 2024-05-31 20:46:34 +08:00
max
d2d738f618 feat:补充异常退出-恢复游戏策略 2024-05-31 20:28:01 +08:00
max
cdbb895a68 feat:完成游戏SDK加载与游戏状态关联
feat:公屏数据与游戏状态关联
feat:增加轮次ID协议
2024-05-31 19:47:51 +08:00
max
a6f5b24a6d feat:完善提前中端结果展示 2024-05-31 16:13:20 +08:00
max
126215949f feat:游戏房公屏默认添加第一条系统公告 2024-05-31 14:03:01 +08:00
max
92a0e4b408 feat:完成游戏结算 2024-05-31 12:58:38 +08:00
max
5be8ebde3a feat:完善游戏房状态维护 2024-05-30 19:18:05 +08:00
max
2396eb9089 feat:完成部分房间信息获取逻辑对接 2024-05-29 19:31:29 +08:00
max
65ef4810e3 feat:完善游戏房公屏展示与消息发送 2024-05-29 15:26:04 +08:00
max
c72af689e5 feat:初步实现购买游戏接口(待完整联调)
feat:完善游戏房UI
feat:初步实现游戏引擎功能
2024-05-28 19:34:03 +08:00
max
c8f83b4ad8 feat:初步搭建游戏房框架(待完善)
feat:完成游戏首页UI与部分接口联调
feat:完成游戏房部分UI
2024-05-27 19:52:11 +08:00
max
088756891e feat:调整礼物资源缓存文件目录命名 2024-05-23 16:41:29 +08:00
max
e2ad02e8a6 feat:固化新增代码的混淆配置 2024-05-23 16:12:54 +08:00
max
8f4fd9bf7e fix:修复google检测到的异常 2024-05-23 15:36:42 +08:00
max
e998245340 fix:修复因时区导致生日展示错误问题 2024-05-23 15:06:53 +08:00
max
ac212c4949 style:优化礼物弹窗-幸运横幅UI适配 2024-05-23 14:47:34 +08:00
max
115d0d3a01 feat:调整房间公聊Tab文案 2024-05-23 14:47:05 +08:00
max
2aef4076ef style:调整房间背景item样式 2024-05-22 18:06:24 +08:00
max
ded1072961 fix:修复UI反馈问题(房间背景条目-使用中文案未上下局中、主麦没人时礼物值未相对局中问题、调整锁麦ICON) 2024-05-22 17:54:21 +08:00
max
37eaf9d08d fix:修复上个版本做公聊误把私聊语言入口隐藏问题 2024-05-22 16:05:18 +08:00
max
17a56f4c65 fix:修复房间背景设置item间距问题 2024-05-22 16:03:27 +08:00
max
89b381bfbc feat:完成礼物资源预缓存功能,修改礼物播放下载方案 2024-05-22 15:15:16 +08:00
max
58f1002b4e feat:调整麦位icon
feat:调整消息气泡样式
2024-05-22 15:09:18 +08:00
max
8475180048 feat:修改房间背景列表 2024-05-22 14:45:06 +08:00
max
4903a3f9a8 feat:房间背景item圆角展示 2024-05-22 14:23:35 +08:00
max
6b6e72ff25 feat:完成房间底部菜单UI调整 2024-05-22 14:07:11 +08:00
max
9d96b25208 feat:完成房间主题背景设置功能 2024-05-22 14:04:47 +08:00
max
494628918d feat:调整小时榜、房间榜 文案翻译 并修复RTL模式下的适配问题 2024-05-21 19:26:30 +08:00
max
6229ba57be feat:完成家族小秘书消息对接(和之前的家族逻辑一样,只是协议码不对)
fix:修复公会小秘书消息文案展示不完整问题
2024-05-21 19:13:37 +08:00
max
cab7e3542e fix:修复房间在线列表 RTL适配问题 2024-05-21 15:40:54 +08:00
max
a62278ed30 feat:适配新的H5公会体系入口跳转 2024-05-21 11:17:35 +08:00
max
3d707b19db fix:调整送礼数量选择popup-all样式 2024-05-20 17:48:31 +08:00
max
21d982246c feat:完成房间部分UI改版:标题栏新增头像、新增在线列表展示、去掉游戏房小麦位、调整小时榜、房间榜、音乐入口的UI位置 2024-05-20 17:42:33 +08:00
max
21f0a84904 feat:替换我的-我转转赠ICON 2024-05-20 10:11:14 +08:00
max
92070af5e8 feat:恢复转赠功能 2024-05-17 19:56:26 +08:00
max
6ca5589efc fix:修复房间-用户弹窗部分操作按钮图标不对问题 2024-05-17 16:18:45 +08:00
max
d472d671ba feat:完成房间功能弹窗入口改动(部分功能入口移植到房间设置中) 2024-05-17 16:18:19 +08:00
max
9a7c41b6b2 feat:JS新增跳转API(收益记录) 2024-05-17 14:18:45 +08:00
max
d3b3ce8be2 feat:麦位号UI调整(NO.x) 2024-05-17 11:29:28 +08:00
max
812061a601 feat:去掉老板位的特殊UI 2024-05-17 11:10:19 +08:00
max
c666c39769 多语言适配:部分布局属性修改(left->start、right->end等) 2024-05-17 10:50:38 +08:00
max
1b09c46bfc feat:修改VIP中心-返金币icon 2024-05-16 17:59:25 +08:00
max
37b91c22cb feat:移除房间底部VIP入口 2024-05-16 17:18:09 +08:00
max
e500d7a01f feat:完成礼物数量UI改动 2024-05-16 17:13:01 +08:00
max
cab220d917 fix:修复公聊-用户头像字段-读取错误问题 2024-05-15 19:29:21 +08:00
max
70040c5ee1 fix:修复SUD桌球游戏无法加载问题(资源混淆导致,加白解决) 2024-05-15 19:28:20 +08:00
max
7576b30ae7 feat:固化新增的混淆配置 2024-05-15 09:33:27 +08:00
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
1540 changed files with 62795 additions and 11824 deletions

View File

@@ -22,9 +22,9 @@ android {
buildConfigField "boolean", "ISOLATION_MODE", "$isolationMode"
resConfigs "en", "zh-rTW", "ar"
if (isolationMode) {
resValue "string", "app_name", "Mo-debug"
resValue "string", "app_launch_name", "Mo-debug"
} else {
resValue "string", "app_name", "MoliStar"
resValue "string", "app_launch_name", "MoliStar"
}
}
@@ -115,6 +115,9 @@ android {
'src/module_super_admin/java',
'src/module_album/java',
'src/module_treasure_box/java',
'src/module_public_chat/java',
'src/module_game/java',
'src/module_community/java',
]
@@ -129,6 +132,9 @@ android {
'src/module_super_admin/res',
'src/module_album/res',
'src/module_treasure_box/res',
'src/module_public_chat/res',
'src/module_game/res',
'src/module_community/res',
]
@@ -199,6 +205,7 @@ dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2'
api 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
@@ -215,7 +222,6 @@ dependencies {
api "com.jzxiang.pickerview:TimePickerDialog:1.0.1"
api "com.github.zyyoona7:EasyPopup:1.0.2"
api "com.github.donkingliang:LabelsView:1.6.5"
api "com.github.yyued:SVGAPlayer-Android:2.6.1"
api "com.ms-square:expandableTextView:0.1.4"
annotationProcessor 'androidx.annotation:annotation:1.6.0'
@@ -265,6 +271,8 @@ dependencies {
//wheelView
implementation 'com.contrarywind:wheelview:4.1.0'
// 轮播组件
implementation 'io.github.youth5201314:banner:2.2.3'
implementation project(':modules:module_base')
if (!isolationMode && file("../modules/module_google/build.gradle").exists()) {
@@ -289,7 +297,26 @@ aabResGuard {
mappingFile = file("aab-res-guard-mapping.txt").toPath() // Mapping file used for incremental obfuscation
whiteList = [ // White list rules
"*.R.raw.*",
"*.R.drawable.icon"
"*.R.drawable.icon",
// SUD游戏-start
"*.R.drawable.fsm_*",
"*.R.string.fsm_*",
"*.R.layout.fsm_*",
"*.R.color.fsm_*",
"*.R.id.fsm_*",
"*.R.style.fsm_*",
"*.R.dimen.fsm_*",
"*.R.array.fsm_*",
"*.R.integer.fsm_*",
"*.R.bool.fsm_*",
"*.R.mipmap.fsm_*",
"*.R.styleable.fsm_*",
"*.R.id.*loading*",
"*.R.id.container_progress",
"*.R.id.reload_btn",
"*.R.id.unitySurfaceView",
"*.R.string.game_view_content_description"
// SUD游戏-end
]
obfuscatedBundleFileName = "MoliStar-app.aab" // Obfuscated file name, must end with '.aab'
mergeDuplicatedRes = true // Whether to allow the merge of duplicate resources
@@ -314,6 +341,39 @@ xmlClassGuard {
"com.chwl.core": "com.hhchu.core",
"com.chwl.library": "com.hhchu.library"]
moveDir = [
"com.chwl.app.community.dynamic" : "ffefcef.ddbccaec",
"com.chwl.app.community.helper" : "eaeecbea.ccefdeaf",
"com.chwl.app.community.holder" : "aafebee.febeeba",
"com.chwl.app.community.im" : "eedadfa.cccedea",
"com.chwl.app.community.publish" : "ddae.cfdb",
"com.chwl.app.community.square" : "bddfb.eedde",
"com.chwl.app.community.user_dynamic" : "ddcdbcbc.acbfcfba",
"com.chwl.app.community.utils" : "cceaf.cbdcdb",
"com.chwl.app.community.widget" : "bdfaa.beeefc",
"com.chwl.app.community" : "cadfd.aeddb",
"com.chwl.app.avroom.headline" : "eefce.eecad",
"com.chwl.core.bean.game" : "caeccd.fdedac",
"com.chwl.core.bean.room" : "afceec.aaafbc",
"com.chwl.app.game" : "fcbfeb.ebfceac",
"com.chwl.core.sud" : "baecf.deccfc",
"com.chwl.library.download" : "aeacf.cecdd",
"com.chwl.app.pay.activity" : "abbe.faaca",
"com.chwl.app.pay.adapter" : "daddd.dcadd",
"com.chwl.app.pay.fragment" : "fceff.acfcf",
"com.chwl.app.pay.interfaces" : "eaadf.dbeecd",
"com.chwl.app.pay.password" : "ebcfe.adfea",
"com.chwl.app.pay.widget" : "fbfb.caeb",
"com.chwl.app.avroom.online" : "bfbdecb.fafffbbc",
"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",

View File

@@ -482,7 +482,7 @@
-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 tech.sud.mgp.SudMGPWrapper.** {*;}
#new after proguard
-dontwarn bdcb.eedb.**

View File

@@ -51,9 +51,9 @@
tools:node="remove" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission tools:node="remove" android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission tools:node="remove" android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
@@ -82,12 +82,13 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- 对于 Android 12.0 及以上设备,还需要添加如下权限: -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
<application
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"
@@ -265,6 +266,12 @@
android:name=".avroom.activity.RoomSettingActivity"
android:label="@string/main_androidmanifest_07"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomTypeSwitchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomBgSettingActivity"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomManagerListActivity"
android:label="@string/main_androidmanifest_08"
@@ -309,6 +316,9 @@
android:name=".ui.user.activity.UserInfoActivity"
android:label="@string/main_androidmanifest_016"
android:screenOrientation="portrait" />
<activity
android:name=".ui.user.activity.UserCpListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".audio.AudioRecordActivity"
android:label="@string/main_androidmanifest_017"
@@ -317,6 +327,9 @@
android:name=".ui.pay.ChargeActivity"
android:label="@string/main_androidmanifest_018"
android:screenOrientation="portrait" />
<activity
android:name=".ui.wallet.WalletActivity"
android:screenOrientation="portrait" />
<activity
android:name=".home.activity.CollectionRoomActivity"
android:label="@string/main_androidmanifest_019"
@@ -667,6 +680,10 @@
android:name=".ui.webview.DialogWebViewActivity"
android:theme="@style/dialog_web_view_activity"
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"
@@ -719,8 +736,8 @@
android:name=".ui.setting.PermissionGuideActivity"
android:screenOrientation="portrait" />
<activity
android:name=".vip.VipMainActivity"
android:screenOrientation="portrait" /> <!-- 隐私设置 -->
android:name=".vip.VipCenterActivity"
android:screenOrientation="portrait" />
<activity
android:name=".vip.VipSettingActivity"
android:screenOrientation="portrait" /> <!-- 通知提醒设置 -->
@@ -863,23 +880,86 @@
<service
android:name="com.netease.nimlib.service.NimService"
android:foregroundServiceType="remoteMessaging"
android:process=":core" />
<service
android:name="com.netease.nimlib.service.NimService$Aux"
android:foregroundServiceType="remoteMessaging"
android:process=":core" />
<service
android:name="com.netease.nimlib.job.NIMJobService"
android:foregroundServiceType="remoteMessaging"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":core" />
<service android:name="com.netease.nimlib.service.ResponseService" />
<service android:name="com.netease.nimlib.service.ResponseService"
android:foregroundServiceType="remoteMessaging"/>
<service
android:name=".service.DaemonService"
android:foregroundServiceType="mediaPlayback"
android:enabled="true" />
<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" />
<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=".game.ui.game.GameActivity"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".community.dynamic.view.DynamicDetailActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".community.publish.view.PublishActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustNothing" />
<activity
android:windowSoftInputMode="adjustPan"
android:name=".ui.feedback.FeedbackActivity"
android:screenOrientation="portrait" />
<activity android:name=".ui.debug.DebugActivity"
android:screenOrientation="portrait"/>
<activity android:name=".ui.game_team.record.GameTeamRecordActivity"
android:screenOrientation="portrait"/>
</application>
</manifest>

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.

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.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -23,22 +23,30 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import com.chwl.app.base.GlobalViewModelOwner;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.community.square.SquareFragment;
import com.chwl.app.game.core.GameStateAbility;
import com.chwl.app.game.data.GameModel2;
import com.chwl.app.game.ui.game.GameActivity;
import com.chwl.app.game.ui.game.GameIntent;
import com.chwl.app.game.ui.home.GameHomeFragment;
import com.chwl.app.star.StarFragment;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.settings.SettingsModel;
import com.chwl.library.utils.JavaUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.team.TeamService;
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.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.application.IReportConstants;
@@ -84,7 +92,6 @@ import com.chwl.core.channel_page.model.ChannelPageModel;
import com.chwl.core.community.event.SquareTaskEvent;
import com.chwl.core.community.event.UnReadCountEvent;
import com.chwl.core.home.bean.MainTabType;
import com.chwl.core.home.event.RefreshHomeDataEvent;
import com.chwl.core.home.event.VisitorUnreadCountEvent;
import com.chwl.core.home.model.GameHomeModel;
import com.chwl.core.home.model.HomeModel;
@@ -119,10 +126,6 @@ import org.jetbrains.annotations.NotNull;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
/**
* @author Administrator
@@ -135,13 +138,13 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private static final String TAG = "MainActivity";
private static final String EXTRA_APP_QUIT = "APP_QUIT";
private final SparseArray<Fragment> fragmentArray = new SparseArray<>();
private DragLayout avatarLayout;
private View avatarLayout;
private CircleImageView avatarImage;
private LivingIconView userLivingView;
private MainTabLayout mMainTabLayout;
private AnchorCardView anchorCardView;
private View viewClose;
private int mCurrentTabType = MainTabType.TAB_TYPE_STAR;
private int mCurrentTabType = MainTabType.TAB_TYPE_HOME;
/**
* 房间最小化动画换成属性动画原先的补间动画影响了activity的生命周期
*/
@@ -154,13 +157,15 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private boolean mResumed = false;
@Nullable
private Fragment tempFragment = null;
private DialogManager resumeGameDialogManager;
@Nullable
private Runnable touchRunnable;
{
fragmentArray.put(MainTabType.TAB_TYPE_STAR, new StarFragment());
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
}
@@ -219,7 +224,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class);
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
homeViewModel = viewModelProvider.get(HomeViewModel.class);
NimMiddleActivity.firstEnter = false;
if (savedInstanceState != null) {
mCurrentTabType = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION);
@@ -230,11 +236,10 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
.doOnError(throwable -> onNeedLogin())
.subscribe();
initView();
InitialModel.get().getMainTabInfosLiveData().observeForever(mainTabInfo -> {
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
}
});
List<MainTabInfo> mainTabInfo = InitialModel.get().getMainTabInfosLiveData().getValue();
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
}
initMaterialView();
onParseIntent();
updateDatas();
@@ -243,17 +248,13 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
EventBus.getDefault().register(this);
otherModelInit();
Observable.interval(60, TimeUnit.SECONDS)
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> EventBus.getDefault().post(new RefreshHomeDataEvent()));
homeViewModel.getAnchorInfoLiveData().observe(this, anchorInfo -> {
if (anchorInfo != null) {
anchorCardView.setAnchorInfo(anchorInfo);
DemoCache.saveAnchorCardView(2);
}
});
checkResumeGame();
}
private void otherModelInit() {
@@ -263,6 +264,48 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
IMBroadcastManager.get().onCreate();
ImageLoadUtilsV2.init(context);
SettingsModel.get().checkSysAccount();
initPreloadResource();
}
@SuppressLint("CheckResult")
private void checkResumeGame() {
GameModel2.INSTANCE.getResumeGameRoomInfo().compose(bindToLifecycle()).subscribe(gameRoomInfo -> {
if (gameRoomInfo != null && gameRoomInfo.getData() != null) {
Integer state = gameRoomInfo.getData().getMatchStatus();
if (state != null && (state == GameStateAbility.STATE_MATCH_SUCCESS || state == GameStateAbility.STATE_MATCHING)) {
if (resumeGameDialogManager == null) {
resumeGameDialogManager = new DialogManager(this);
}
resumeGameDialogManager.showOkCancelDialog(getString(R.string.resume_game_tips), getString(R.string.join_organization_ok), getString(R.string.join_organization_no), false, new DialogManager.OkCancelDialogListener() {
@Override
public void onOk() {
long gameId = JavaUtil.str2long(gameRoomInfo.getData().getMgId());
int gameMode = 0;
GameActivity.Companion.start(context, new GameIntent(gameId, gameMode));
}
@Override
public void onCancel() {
DialogManager.OkCancelDialogListener.super.onCancel();
Long roomId = gameRoomInfo.getRoomId();
if (roomId != null) {
GameModel2.INSTANCE.closeGameRx(roomId).compose(bindToLifecycle()).subscribe(s -> {
}, throwable -> {
});
}
}
});
}
}
}, throwable -> {
});
}
private void initPreloadResource() {
PreloadResourceViewModel viewModel = new ViewModelProvider(
GlobalViewModelOwner.Companion.getInstance()
).get(PreloadResourceViewModel.class);
viewModel.start();
}
@Override
@@ -395,6 +438,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
protected void onDestroy() {
CleanLeakUtils.fixInputMethodManagerLeak(MainActivity.this);
super.onDestroy();
if (resumeGameDialogManager != null) {
resumeGameDialogManager.dismissDialog();
}
ImInitHelper.get().unInit();
EventBus.getDefault().unregister(this);
stopRoomMinAnim();
@@ -529,27 +575,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private void updateRoomState() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
UserModel.get().getUserInfo(roomInfo.getUid())
.subscribe(userInfo -> {
if (userInfo != null) {
displayAvatarLayout(userInfo.getAvatar(), roomInfo.getTitle(), userInfo.getErbanNo());
} else {
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(roomInfo.getUid() + "");
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(roomInfo.getUid() + "", new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
} else {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
displayAvatarLayout(roomInfo.getAvatar(), roomInfo.getTitle(), roomInfo.getUid());
}
}
@@ -600,16 +626,10 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
transaction.show(showFragment);
if (tempFragment != null) {
transaction.hide(tempFragment);
if (tempFragment instanceof MainTabContentView) {
((MainTabContentView) tempFragment).onVisibleStateChanged(false);
}
}
tempFragment = showFragment;
if (!isDestroyed()) {
transaction.commitNowAllowingStateLoss();
if (tempFragment instanceof MainTabContentView) {
((MainTabContentView) tempFragment).onVisibleStateChanged(true);
}
}
mCurrentTabType = tabType;

View File

@@ -1,5 +1,4 @@
package com.chwl.app
interface MainTabContentView {
fun onVisibleStateChanged(showOrHide: Boolean) {}
}

View File

@@ -9,6 +9,7 @@ import android.content.res.Configuration;
import android.graphics.Color;
import android.net.http.HttpResponseCache;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -24,6 +25,7 @@ import com.chwl.library.language.LanguageHelper;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
import com.liulishuo.filedownloader.FileDownloader;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
@@ -83,7 +85,6 @@ import com.chwl.library.common.file.FileHelper;
import com.chwl.library.net.rxnet.RxNet;
import com.chwl.library.net.rxnet.converter.GsonConverterPlugins;
import com.chwl.library.utils.AppMetaDataUtil;
import com.chwl.library.utils.AppUtils;
import com.chwl.library.utils.DeviceUuidFactory;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
@@ -324,6 +325,7 @@ public class App extends BaseApp {
BasicConfig.INSTANCE.setVoiceDir(Constants.VOICE_DIR);
BasicConfig.INSTANCE.setCacheDir(Constants.CACHE_DIR);
BasicConfig.INSTANCE.setImageDir(Constants.IMAGE_CACHE_DIR);
com.example.lib_utils.log.LogUtil.INSTANCE.setConsolePrinterEnabled(BuildConfig.DEBUG);
}
/**
@@ -415,7 +417,7 @@ public class App extends BaseApp {
httpParams.put("netType", String.valueOf(SystemUtils.getNetworkType(context)));
httpParams.put("model", SystemUtils.getPhoneModel());
httpParams.put("appVersion", VersionUtil.getLocalName(context));
httpParams.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context)));
httpParams.put("appVersionCode", String.valueOf(VersionUtil.getVersionCode(context)));
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());
@@ -457,6 +459,7 @@ public class App extends BaseApp {
.build();
Realm.setDefaultConfiguration(config);
FileDownloader.setup(BasicConfig.INSTANCE.getAppContext());
LogUtil.i(TAG, channel);
}
@@ -481,7 +484,6 @@ public class App extends BaseApp {
ChannelModel.get();
MarketVerifyModel.get();
GiftModel.get();
GiftModel.get().tryLoadGiftList();
// 模厅
HallDataManager.get().application();
//全局处理

View File

@@ -97,7 +97,7 @@ public class GlobalHandleManager {
Activity activity = getActivity();
if (activity == null) return;
if (AvRoomDataManager.get().isSelfGamePlaying()) return;
LevelUpDialog.start(activity, event.getLevelName(), true);
// LevelUpDialog.start(activity, event.getLevelName(), true);
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -105,7 +105,7 @@ public class GlobalHandleManager {
Activity activity = getActivity();
if (activity == null) return;
if (AvRoomDataManager.get().isSelfGamePlaying()) return;
LevelUpDialog.start(activity, event.getLevelName(), false);
// LevelUpDialog.start(activity, event.getLevelName(), false);
}
private static final class Helper {

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,7 @@ public abstract class BottomViewListenerWrapper {
}
public void onRoomGameplayClick(boolean isOnlyPK){
}
}

View File

@@ -2,9 +2,6 @@ package com.chwl.app.avroom.activity;
import static android.view.View.VISIBLE;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY;
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;
@@ -14,6 +11,7 @@ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_ROOM_
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.app.FragmentManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
@@ -36,12 +34,18 @@ import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
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.library.widget.SVGAView;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
import com.chwl.core.support.room.AudioRoomContext;
import com.chwl.core.support.room.RoomWidget;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.NIMSDK;
@@ -88,7 +92,6 @@ 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;
@@ -97,7 +100,6 @@ 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;
@@ -176,6 +178,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private static final String TAG = "AVRoomActivity";
private static final int SHOW_RED_DIALOG_MAX = 10;
public static boolean isPKModel = false;
private static SVGAView.SVGACache svgaCache;
public static SVGAView.SVGACache getSvgaCache() {
if (svgaCache == null) {
svgaCache = SVGAView.newCache(20);
}
return svgaCache;
}
/**
* 管理限制进房
*/
@@ -219,6 +230,8 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private RoomNotifyManager roomNotify;
private BaiShunGameWebFragment baiShunGameFragment;
public static void start(Context context, long roomUid) {
startForFromType(context, roomUid, FROM_TYPE_NORMAL, null, null);
}
@@ -896,6 +909,10 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
GiftModel.get().cancelCountDownTimer();
EventBus.getDefault().unregister(this);
DemoCache.saveBoolean("FirstCharge", false);
if (svgaCache != null) {
svgaCache.clear();
}
svgaCache = null;
super.onDestroy();
}
@@ -917,7 +934,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);
@@ -1260,15 +1279,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);
// 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;
// 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);
@@ -1354,10 +1373,21 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return this;
}
@Override
public FragmentManager getFragmentManager() {
return super.getFragmentManager();
}
@Nullable
@Override
public RoomContext getRoomContext() {
return RoomContext.Companion.get();
return AudioRoomContext.Companion.get();
}
@NonNull
@Override
public LiveData<? extends RoomContext> getRoomContextLiveData() {
return AudioRoomContext.Companion.getContextLiveData();
}
@NonNull
@@ -1366,12 +1396,19 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
return this;
}
@NonNull
@Override
public androidx.fragment.app.FragmentManager getViewFragmentManager() {
return getSupportFragmentManager();
}
@Nullable
@Override
public RoomWidget findWidget(@NonNull String name) {
return null;
}
private static class GiftBroadcastObserver implements Observer<BroadcastMessage> {
private WeakReference<AVRoomActivity> mReference;
@@ -1441,4 +1478,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

@@ -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

@@ -0,0 +1,77 @@
package com.chwl.app.avroom.activity
import android.annotation.SuppressLint
import androidx.core.view.WindowCompat
import com.chwl.app.R
import com.chwl.app.avroom.adapter.RoomBgAdapter
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.databinding.RoomBgSettingActivityBinding
import com.chwl.core.auth.AuthModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.model.RoomSettingModel
import com.chwl.library.utils.ResUtil
import com.netease.nim.uikit.StatusBarUtil
class RoomBgSettingActivity : BaseViewBindingActivity<RoomBgSettingActivityBinding>() {
private val adapter = RoomBgAdapter()
private val model = RoomSettingModel()
override fun init() {
initWhiteTitleBar(ResUtil.getString(R.string.room_theme))
mTitleBar.setTitleColor(resources.getColor(R.color.white))
mTitleBar.setLeftImageResource(R.drawable.arrow_left_white)
binding.recyclerView.adapter = adapter
adapter.selectItem(AvRoomDataManager.get().mCurrentRoomInfo?.backPic)
adapter.setOnItemClickListener { _, view, position ->
adapter.getItem(position)?.let {
if (adapter.getSelectItem() != it) {
showUpdateRoomBackgroundTips(it)
}
}
}
val list = listOf(
"https://image.molistar.xyz/BG_0.webp",
"https://image.molistar.xyz/BG_1.webp",
"https://image.molistar.xyz/BG_2.webp",
"https://image.molistar.xyz/BG_3.webp",
"https://image.molistar.xyz/BG_4.webp",
"https://image.molistar.xyz/BG_5.webp"
)
adapter.setNewData(list)
}
private fun showUpdateRoomBackgroundTips(url: String) {
dialogManager.showOkCancelDialog(
getString(R.string.room_theme_changed_tips),
getString(R.string.btn_text_confirm_select_team_member)
) {
updateRoomBackground(url)
}
}
@SuppressLint("CheckResult")
private fun updateRoomBackground(url: String) {
dialogManager.showProgressDialog(this)
model.updateRoomBackground(AuthModel.get().currentUid, url)
.compose(bindToLifecycle()).subscribe({
dialogManager.dismissDialog()
toast(R.string.avroom_dialog_roomimposedialog_04)
adapter.selectItem(url)
}, {
dialogManager.dismissDialog()
toast(it.message)
})
}
override fun needSteepStateBar(): Boolean {
return true
}
override fun setStatusBar() {
StatusBarUtil.transparencyBar(this)
StatusBarUtil.StatusBarLightMode(this)
WindowCompat.getInsetsController(window, window.decorView).let {
it.isAppearanceLightStatusBars = false
}
}
}

View File

@@ -8,11 +8,17 @@ import android.text.SpannableString;
import android.text.TextUtils;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.utils.SingleToastUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
@@ -112,6 +118,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
}
initView();
initLeaveMode();
loadGiftValueState();
getMvpPresenter().requestRoomInfo(roomInfo.getUid());
mRoomBgLayout.setVisibility(View.GONE);
if (!AvRoomDataManager.get().isRoomOwner() && !AvRoomDataManager.get().isSuperAdmin()) {
@@ -149,6 +156,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
managerLayout.setOnClickListener(this);
blackLayout.setOnClickListener(this);
mRoomBgLayout.setOnClickListener(this);
binding.layoutTheme.setOnClickListener(this);
binding.switchAudio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
@@ -190,6 +198,28 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
}
}
private void loadGiftValueState(){
if (SuperAdminUtil.isSuperAdmin()) {
binding.layoutGiftValue.setVisibility(View.GONE);
return;
}
if (AvRoomDataManager.get().isCpRoom()) {
binding.layoutGiftValue.setVisibility(View.GONE);
return;
}
if (!AvRoomDataManager.get().isManager()) {
binding.layoutGiftValue.setVisibility(View.GONE);
return;
}
if (AvRoomDataManager.get().isOpenKTV()) {
binding.layoutGiftValue.setVisibility(View.GONE);
return;
}
boolean openGiftValue = AvRoomDataManager.get().isShowGiftValue();
binding.layoutGiftValue.setVisibility(View.VISIBLE);
setSelected(binding.switchGiftValue, openGiftValue);
}
/**
* 更改房间设置的消息
*/
@@ -295,6 +325,9 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.layout_theme:
startActivity(new Intent(context, RoomBgSettingActivity.class));
break;
case R.id.manager_layout:
RoomManagerListActivity.start(this);
break;
@@ -516,10 +549,59 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
}
break;
case R.id.switch_gift_value:
switchGiftValue();
break;
default:
}
}
private void switchGiftValue(){
if (AvRoomDataManager.get().isCpRoom()) {
return;
}
if (AvRoomDataManager.get().isDatingMode()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_029));
return;
}
if (AvRoomDataManager.get().isOpenKTV()) {
SingleToastUtil.showToast(R.string.before_open_gift_value_should_close_ktv_model);
return;
}
//开启礼物值不需要弹框
if (!AvRoomDataManager.get().isShowGiftValue()) {
handleOpenGiftValue();
return;
}
if (!GiftValueDialogUiHelper.get().isNeedConfirmDialog(
GiftValueDialogUiHelper.TYPE_CLOSE_SHOW_GIFT_VALUE)) {
handleOpenGiftValue();
return;
}
GiftValueDialogUiHelper.get().showGiftValueDialog(context, getDialogManager(),
GiftValueDialogUiHelper.TYPE_CLOSE_SHOW_GIFT_VALUE,
this::handleOpenGiftValue);
}
private void handleOpenGiftValue() {
boolean isOpen = !binding.switchGiftValue.isSelected();
getDialogManager().showProgressDialog(this);
GiftValueModel.get().openGiftValue(isOpen)
.compose(RxHelper.bindContext(context))
.subscribe(new DontWarnObserver<String>() {
@Override
public void accept(String s, String error) {
super.accept(s, error);
getDialogManager().dismissDialog();
if (error != null) {
SingleToastUtil.showToast(error);
} else {
setSelected(binding.switchGiftValue, !binding.switchGiftValue.isSelected());
}
}
});
}
@Override
public void onResultRequestTagAllSuccess(List<RoomSettingTabInfo> tabInfoList) {
this.tabInfoList = tabInfoList;
@@ -806,4 +888,10 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
StatusBarUtil.transparencyBar(this);
StatusBarUtil.StatusBarLightMode(this);
}
private void setSelected(ImageView imageView, boolean isSelected) {
imageView.setSelected(isSelected);
imageView.setImageResource(isSelected ?
R.drawable.icon_room_set_lock_true : R.drawable.icon_room_set_lock_false);
}
}

View File

@@ -0,0 +1,142 @@
package com.chwl.app.avroom.activity
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.view.View
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.databinding.RoomTypeSwitchActivityBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.super_admin.util.SuperAdminUtil
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import com.example.lib_utils.ktx.singleClick
import com.netease.nim.uikit.StatusBarUtil
class RoomTypeSwitchActivity : BaseViewBindingActivity<RoomTypeSwitchActivityBinding>() {
private var currentType: Int? = null
private var selectType: Int? = null
companion object {
fun isCanSwitch(): Boolean {
if (SuperAdminUtil.isSuperAdmin()) {
return false
}
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
return false
}
if (AvRoomDataManager.get().isDatingMode) {
return false
}
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
if (roomInfo == null || roomInfo.isPermitRoom == 1) {
return false
}
return AvRoomDataManager.get().isManager
}
fun start(context: Context) {
context.startActivity(Intent(context, RoomTypeSwitchActivity::class.java))
}
}
override fun init() {
initWhiteTitleBar(ResUtil.getString(R.string.room_type))
initEvent()
this.currentType = AvRoomDataManager.get().mCurrentRoomInfo?.type
updateSelectView(currentType)
}
private fun initEvent() {
binding.tvSubmit.singleClick {
selectType?.let {
if (currentType != it) {
trySwitchRoomType(it)
}
}
}
addTypeSelectClick(binding.iv9, RoomInfo.ROOMTYPE_HOME_PARTY)
addTypeSelectClick(binding.iv10, RoomInfo.ROOMTYPE_PARTY)
addTypeSelectClick(binding.iv15, RoomInfo.ROOMTYPE_REVELRY)
}
private fun addTypeSelectClick(view: View, type: Int) {
view.setOnClickListener {
updateSelectView(type)
}
}
private fun updateSelectView(type: Int?) {
this.selectType = type
val views = mapOf(
RoomInfo.ROOMTYPE_HOME_PARTY to binding.iv9Border,
RoomInfo.ROOMTYPE_PARTY to binding.iv10Border,
RoomInfo.ROOMTYPE_REVELRY to binding.iv15Border
)
val displayRes = mapOf(
RoomInfo.ROOMTYPE_HOME_PARTY to R.drawable.room_type_bg_9,
RoomInfo.ROOMTYPE_PARTY to R.drawable.room_type_bg_10,
RoomInfo.ROOMTYPE_REVELRY to R.drawable.room_type_bg_15
)
views.forEach {
it.value.isVisible = it.key == type
}
val resId = displayRes.get(type)
if (resId != null) {
binding.ivSelected.setImageResource(resId)
} else {
binding.ivSelected.setImageDrawable(null)
}
if (type == currentType) {
binding.tvSubmit.setText(R.string.room_type_using)
} else {
binding.tvSubmit.setText(R.string.room_type_use)
}
}
private fun trySwitchRoomType(type: Int) {
val currentType = this.currentType
if (currentType != null && currentType > type) {
dialogManager.showOkCancelDialog(
ResUtil.getString(R.string.switch_room_type_tips),
ResUtil.getString(R.string.login_fragment_adduserinfofragment_04)
) {
requestSwitchRoomType(type)
}
} else {
requestSwitchRoomType(type)
}
}
@SuppressLint("CheckResult")
private fun requestSwitchRoomType(type: Int) {
dialogManager.showProgressDialog(context)
OpenRoomHelper.updateRoomInfoRx(
AvRoomDataManager.get().mCurrentRoomInfo,
type,
0
).compose(bindToLifecycle()).subscribe({
dialogManager.dismissDialog()
finish()
}, {
SingleToastUtil.showToast(it.message)
dialogManager.dismissDialog()
})
}
override fun needSteepStateBar(): Boolean {
return true
}
override fun setStatusBar() {
super.setStatusBar()
StatusBarUtil.transparencyBar(this)
StatusBarUtil.StatusBarLightMode(this)
}
}

View File

@@ -15,8 +15,12 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.coorchice.library.SuperTextView;
import com.example.lib_utils.StringUtils2;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGAImageView;
import com.chwl.app.R;
@@ -55,6 +59,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
public static final String MICRO_TYPE_DATING = "dating";
public static final String MICRO_TYPE_DATING_VIP = "dating_vip";
public static final String MICRO_TYPE_SINGLE = "single";
public static final String MICRO_TYPE_PARTY = "party";
public static final String MICRO_TYPE_REVELRY = "revelry";
protected static final int TYPE_KING = 2;
protected static final int TYPE_BOSS = 1;
protected static final int TYPE_NORMAL = 0;
@@ -76,11 +83,16 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
if (roomQueueInfo == null) return;
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
holder.micPositionNameOffset = getMicPositionNameOffset();
holder.bind(roomQueueInfo, position - 1);
}
public abstract String microType();
protected int getMicPositionNameOffset() {
return 2;
}
@Override
public int getItemCount() {
return 9;
@@ -137,9 +149,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
SVGAImageView ivHalo;
@Nullable
ImageView ivHeadWear;
@Nullable
TextView tvNumber;
SVGAView ivHeadWear;
@Nullable
ImageView ivCharmLevelTag;
@@ -148,6 +158,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
RoomQueueInfo info;
int position = TYPE_INVALID;
int micPositionNameOffset = 2;
NormalMicroViewHolder(View itemView) {
super(itemView);
@@ -158,13 +169,15 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivAvatar = itemView.findViewById(R.id.avatar);
ivHeadWear = itemView.findViewById(R.id.iv_head_wear);
tvNick = itemView.findViewById(R.id.nick);
tvNumber = itemView.findViewById(R.id.tv_number);
ivCharmLevelTag = itemView.findViewById(R.id.iv_charm_level_tag);
ivKickGuard = itemView.findViewById(R.id.iv_kick_guard);
ivUpImage.setOnClickListener(this);
ivLockImage.setOnClickListener(this);
ivAvatar.setOnClickListener(this);
if (ivHeadWear != null) {
ivHeadWear.bindCache(AVRoomActivity.getSvgaCache());
}
}
public void clear() {
@@ -270,6 +283,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
private void clearHeadWear() {
if (ivHeadWear == null) return;
ivHeadWear.clearAnimation();
ivHeadWear.stopAnimation();
ivHeadWear.setImageDrawable(null);
ivHeadWear.setTag(R.id.mic_item_head_wear, null);
ivHeadWear.setVisibility(View.GONE);
@@ -277,41 +291,29 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
protected void setDefalutText(int index) {
tvNick.setTextColor(Color.WHITE);
tvNick.setText(ResUtil.getString(R.string.avroom_adapter_basemicroviewadapter_01));
if (tvNumber != null) {
tvNumber.setBackgroundResource(R.drawable.icon_bg_number_default);
tvNumber.setTextColor(Color.WHITE);
tvNumber.setText(String.valueOf(index + 1));
}
tvNick.setText(getMicPositionName(index));
}
protected String getMicPositionName(int index) {
return "NO." + (index + micPositionNameOffset);
}
protected void setSelectText(int index, String nick, int gender) {
tvNick.setText(StringExtensionKt.subAndReplaceDot(StringUtil.removeBlanks(nick), 7));
tvNick.setTextColor(context.getResources().getColor(R.color.white));
if (tvNumber != null) {
if (AvRoomDataManager.get().isOpenPKMode()) { // pk模式不加性别背景
tvNumber.setBackgroundResource(R.drawable.icon_bg_number_default);
tvNumber.setTextColor(context.getResources().getColor(R.color.white));
} else {
tvNumber.setBackgroundResource(gender == 1 ? R.drawable.bg_number_male : R.drawable.bg_number_female);
tvNumber.setTextColor(context.getResources().getColor(R.color.white));
}
tvNumber.setText(String.valueOf(index + 1));
}
}
//优先使用MicMemberInfo里面的头饰
private void updateNobleView(MicMemberInfo chatRoomMember) {
if (ivHeadWear == null) return;
String headWear = chatRoomMember.getHeadWearUrl();
int headWearType = chatRoomMember.getHeadWearType();
if (TextUtils.isEmpty(headWear)) {
headWear = NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) != null ?
NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) :
NobleUtil.getHeadResource(HeadWearInfo.PIC, chatRoomMember);
String type = NobleUtil.getHeadResource(HeadWearInfo.TYPE, chatRoomMember);
headWearType = StringUtils2.INSTANCE.toInt(type);
}
String nobleHeadWear = (String) NobleUtil.getResource(NobleResourceType.KEY_HEAD_WEAR, chatRoomMember);
if (!TextUtils.isEmpty(headWear)) {
@@ -319,7 +321,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
//只有头饰发生改变才更新,防止闪烁
if (!headWear.equals(ivHeadWear.getTag(R.id.mic_item_head_wear))) {
ivHeadWear.setTag(R.id.mic_item_head_wear, headWear);
NobleUtil.loadMicHeadWear(headWear, ivHeadWear, R.id.mic_item_head_wear, headWear);
AvatarHelper.loadAvatarFrame(ivHeadWear, headWear, headWearType);
}
} else if (!TextUtils.isEmpty(nobleHeadWear)) {
// 头饰
@@ -500,10 +502,10 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
//控制最高最低头饰
Observer<Integer> headWearObserver = headWearValue -> {
if (ivCharmLevelTag == null) return;
ivCharmLevelTag.setVisibility(View.GONE);
if (headWearValue == 1) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
ivCharmLevelTag.setVisibility(View.GONE);
// ivCharmLevelTag.setVisibility(View.VISIBLE);
// ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
} else if (headWearValue == 2) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_max));
@@ -586,6 +588,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
protected void setDefalutText(int index) {
//重新覆盖掉用户名的逻辑
tvNick.setText("");
tvNick.setVisibility(View.GONE);
tvNick.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
ivTag.setVisibility(View.GONE);
}
@@ -593,6 +596,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
@Override
protected void setSelectText(int index, String nick, int gender) {
super.setSelectText(index, nick, gender);
tvNick.setVisibility(View.VISIBLE);
if (UserModel.get().getCacheLoginUserInfo() != null &&
UserModel.get().getCacheLoginUserInfo().getUserInfoSkillVo() != null) {
if (AvRoomDataManager.get().isRoomOwner() && !TextUtils.isEmpty(UserModel.get().getCacheLoginUserInfo().getUserInfoSkillVo().getSkillTag())) {

View File

@@ -27,6 +27,11 @@ public class CpMicroViewAdapter extends BaseMicroViewAdapter {
return BaseMicroViewAdapter.MICRO_TYPE_CP;
}
@Override
protected int getMicPositionNameOffset() {
return 1;
}
@Override
public void bindToRecyclerView(RecyclerView recyclerView) {
GridLayoutManager layoutManager = new GridLayoutManager(context, 3);

View File

@@ -27,6 +27,9 @@ import com.chwl.library.utils.ResUtil
* @date 2017/12/18
*/
class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) {
override fun getMicPositionNameOffset(): Int {
return 1
}
/**
* Set LayoutManager and bind this to RecyclerView
@@ -146,6 +149,7 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
if (info.mChatRoomMember == null) {
tvNick.alpha = 1f
tvNick.text = "主持人"
tvNick.isVisible = true
ivVipWear.isVisible = false
} else {
if (info.mChatRoomMember.isVipMic) {
@@ -222,7 +226,6 @@ class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context)
super.bind(info, position)
ivVipWear.isVisible = true
ivHeadWear?.isVisible = false
tvNumber?.isVisible = false
}
}

View File

@@ -54,7 +54,7 @@ class GameMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) {
width = when (itemCount) {
6 -> ScreenUtil.screenWidth / 6
7 -> ScreenUtil.screenWidth / 7
else -> (ScreenUtil.screenWidth / 7.5f).toInt()
else -> (ScreenUtil.screenWidth / 6f).toInt()
}
}
super.bind(info, position)

View File

@@ -2,7 +2,6 @@ package com.chwl.app.avroom.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -13,8 +12,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.library.utils.ResUtil;
/**
* @author xiaoyu
@@ -27,6 +24,11 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
super(context);
}
@Override
protected int getMicPositionNameOffset() {
return 1;
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@@ -62,15 +64,6 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
if (roomQueueInfo == null) {
return;
}
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
holder.bind(roomQueueInfo, position - 1);
}
@Override
public String microType() {
@@ -91,27 +84,27 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
if (position == 7) {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro_vip);
} else {
// if (position == 7) {
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro_vip);
// } else {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
// }
}
@SuppressLint("SetTextI18n")
@Override
public void setDefalutText(int index) {
if (index == 7) {
tvNick.setTextColor(Color.WHITE);
tvNick.setText(ResUtil.getString(R.string.avroom_adapter_microviewadapter_01));
if (tvNumber != null) {
tvNumber.setBackgroundResource(R.drawable.shape_micro_vip);
tvNumber.setTextColor(Color.WHITE);
tvNumber.setText(String.valueOf((index + 1)));
}
} else {
// if (index == 7) {
// tvNick.setTextColor(Color.WHITE);
// tvNick.setText(ResUtil.getString(R.string.avroom_adapter_microviewadapter_01));
// if (tvNumber != null) {
// tvNumber.setBackgroundResource(R.drawable.shape_micro_vip);
// tvNumber.setTextColor(Color.WHITE);
// tvNumber.setText(String.valueOf((index + 1)));
// }
// } else {
super.setDefalutText(index);
}
// }
}
}
}

View File

@@ -0,0 +1,79 @@
package com.chwl.app.avroom.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
/**
* @author xiaoyu
* @date 2017/12/18
*/
public class PartyMicroViewAdapter extends BaseMicroViewAdapter {
public PartyMicroViewAdapter(Context context) {
super(context);
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@Override
public void bindToRecyclerView(RecyclerView recyclerView) {
GridLayoutManager layoutManager = new GridLayoutManager(context, 5);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(this);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View item;
item = LayoutInflater.from(parent.getContext()).
inflate(R.layout.list_item_micro, parent, false);
return new MicroViewHolder(item);
}
@Override
public String microType() {
return BaseMicroViewAdapter.MICRO_TYPE_PARTY;
}
@Override
public int getItemViewType(int position) {
return TYPE_NORMAL;
}
@Override
public int getItemCount() {
return 10;
}
class MicroViewHolder extends GiftValueViewHolder {
MicroViewHolder(View itemView) {
super(itemView);
}
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
@SuppressLint("SetTextI18n")
@Override
public void setDefalutText(int index) {
super.setDefalutText(index);
}
}
}

View File

@@ -0,0 +1,79 @@
package com.chwl.app.avroom.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
/**
* @author xiaoyu
* @date 2017/12/18
*/
public class RevelryMicroViewAdapter extends BaseMicroViewAdapter {
public RevelryMicroViewAdapter(Context context) {
super(context);
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@Override
public void bindToRecyclerView(RecyclerView recyclerView) {
GridLayoutManager layoutManager = new GridLayoutManager(context, 5);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(this);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View item;
item = LayoutInflater.from(parent.getContext()).
inflate(R.layout.list_item_micro, parent, false);
return new MicroViewHolder(item);
}
@Override
public String microType() {
return BaseMicroViewAdapter.MICRO_TYPE_REVELRY;
}
@Override
public int getItemViewType(int position) {
return TYPE_NORMAL;
}
@Override
public int getItemCount() {
return 15;
}
class MicroViewHolder extends GiftValueViewHolder {
MicroViewHolder(View itemView) {
super(itemView);
}
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
@SuppressLint("SetTextI18n")
@Override
public void setDefalutText(int index) {
super.setDefalutText(index);
}
}
}

View File

@@ -0,0 +1,45 @@
package com.chwl.app.avroom.adapter
import android.graphics.drawable.Drawable
import android.view.View
import android.widget.ImageView
import androidx.core.view.isVisible
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
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
class RoomBgAdapter : BaseQuickAdapter<String, BaseViewHolder>(R.layout.room_bg_setting_item) {
private var selectItem: String? = null
override fun convertPayloads(
helper: BaseViewHolder,
item: String?,
payloads: MutableList<Any>
) {
super.convertPayloads(helper, item, payloads)
convertStatus(helper, item)
}
override fun convert(helper: BaseViewHolder, item: String?) {
val imageView = helper.getView<ImageView>(R.id.iv_image)
imageView.load(item)
convertStatus(helper, item)
}
private fun convertStatus(helper: BaseViewHolder, item: String?) {
val statusView = helper.getView<View>(R.id.tv_status)
statusView.isVisible = item == selectItem
}
fun getSelectItem() = selectItem
fun selectItem(url: String?) {
selectItem = url
notifyItemRangeChanged(0, itemCount, true)
}
}

View File

@@ -0,0 +1,18 @@
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
import com.chwl.core.room.game.bean.GameInfo
class RoomGameListAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.room_gameplay_item2) {
override fun convert(helper: BaseViewHolder, item: GameInfo?) {
helper.setText(R.id.tv_name, item?.name)
val iconView = helper.getView<ImageView>(R.id.iv_icon)
iconView.load(item?.pic2)
}
}

View File

@@ -0,0 +1,23 @@
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.avroom.bean.RoomGameplayItem
import com.chwl.app.ui.utils.load
class RoomGameplayAdapter :
BaseQuickAdapter<RoomGameplayItem, BaseViewHolder>(R.layout.room_gameplay_item2) {
override fun convert(helper: BaseViewHolder, item: RoomGameplayItem?) {
helper.setText(R.id.tv_name, item?.getName())
val iconView = helper.getView<ImageView>(R.id.iv_icon)
val iconRes = item?.getIconRes()
if (iconRes != null) {
iconView.setImageResource(iconRes)
} else {
val iconUrl = item?.getIconUrl()
iconView.load(iconUrl ?: "")
}
}
}

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

@@ -1,15 +0,0 @@
package com.chwl.app.avroom.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.core.room.game.bean.GameInfo
class SelectGameAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_select_game) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
helper.setText(R.id.tv_name,item.name)
}
}

View File

@@ -72,14 +72,10 @@ class SingleAnchorMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(con
}
}
super.bind(info, position)
tvNumber?.background = null
tvNumber?.text = ""
}
override fun setDefalutText(index: Int) {
tvNick.text = ""
tvNumber?.background = null
tvNumber?.text = ""
}
}

View File

@@ -8,17 +8,18 @@ import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.PopupWindow
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import androidx.core.view.marginBottom
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.Observer
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nim.uikit.common.util.sys.TimeUtil
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.widget.DragLayout
import com.chwl.app.databinding.LayoutRoomPkBoardViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.im.custom.bean.RoomPkBean
@@ -29,6 +30,9 @@ import com.chwl.core.utils.CurrentTimeUtils
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.rxbus.RxBus
import com.chwl.library.utils.CommonUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.widget.drag.ViewDragLayout
import com.example.lib_utils.UiUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -36,7 +40,7 @@ import java.util.concurrent.TimeUnit
class RoomPKBoardView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : DragLayout(context, attrs, defStyleAttr) {
) : ViewDragLayout(context, attrs, defStyleAttr) {
private val binding = LayoutRoomPkBoardViewBinding.inflate(LayoutInflater.from(context))
private val observer = Observer<RoomPkBean?> { updateView(it) }
@@ -45,25 +49,34 @@ class RoomPKBoardView @JvmOverloads constructor(
private var roomPkBean: RoomPkBean? = null
init {
addView(binding.root, LayoutParams(ScreenUtil.dip2px(339f), ScreenUtil.dip2px(233f)))
addView(
binding.root,
FrameLayout.LayoutParams(
context.resources.getDimensionPixelOffset(R.dimen.dp_309),
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
this.gravity = Gravity.CENTER
this.setMargins(0, 0, 0, UiUtils.dip2px(50f))
}
)
//注意这里需要先改变Style,再订阅数据
binding.viewRankListCharmLeft.showCharmStyle()
binding.viewRankListCharmRight.showCharmStyle()
AvRoomDataManager.get().roomPkLiveData.observeForever(observer)
binding.ivDetails.setOnClickListener {
if (CommonUtils.isFastDoubleClick(1000)) return@setOnClickListener
if (CommonUtils.isFastDoubleClick(500)) return@setOnClickListener
binding.groupRank.isVisible = !binding.groupRank.isVisible
if (binding.groupRank.isVisible) {
binding.clRoot.setBackgroundResource(R.drawable.bg_room_pk_board)
binding.clRoot.updateLayoutParams<FrameLayout.LayoutParams> {
width = ScreenUtil.dip2px(339f)
height = ScreenUtil.dip2px(233f)
binding.ivBg.setImageResource(R.drawable.room_pk_bg_full)
binding.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
width = ViewGroup.LayoutParams.MATCH_PARENT
height = context.resources.getDimensionPixelOffset(R.dimen.dp_285)
}
} else {
binding.clRoot.setBackgroundResource(R.drawable.bg_room_pk_board_small)
binding.clRoot.updateLayoutParams<FrameLayout.LayoutParams> {
width = ScreenUtil.dip2px(339f)
height = ScreenUtil.dip2px(137f)
binding.ivBg.setImageResource(R.drawable.room_pk_bg_small)
binding.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
width = ViewGroup.LayoutParams.MATCH_PARENT
height = context.resources.getDimensionPixelOffset(R.dimen.dp_130)
}
}
binding.ivDetails.animate().rotationBy(180f).start()
@@ -122,11 +135,17 @@ class RoomPKBoardView @JvmOverloads constructor(
)
binding.viewRankListCharmRight.updateData(roomPkBean?.arRank)
binding.viewRankListContributeRight.updateData(roomPkBean?.asRank)
binding.pbScore.progress = ((roomPkBean?.cPercent ?: 0.5f) * 100).toInt()
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
layoutParams.horizontalBias = roomPkBean?.cPercent ?: 0.5f
binding.svgaHot.layoutParams = layoutParams
binding.pbScore.post {
val progress = binding.pbScore.width * (roomPkBean?.cPercent ?: 0.5f)
var bias =
(progress - binding.svgaHot.width / 2f) / (binding.pbScore.width - binding.svgaHot.width)
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
bias = 1f.coerceAtMost(bias)
bias = 0f.coerceAtLeast(bias)
layoutParams.horizontalBias = bias
binding.svgaHot.layoutParams = layoutParams
}
binding.tvScoreLeft.text = "${roomPkBean?.cAmount ?: 0}"
binding.tvScoreRight.text = "${roomPkBean?.aAmount ?: 0}"
@@ -134,13 +153,18 @@ class RoomPKBoardView @JvmOverloads constructor(
disposable = Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { _ ->
binding.tvTime.text = roomPkBean?.endTime?.let {
roomPkBean?.endTime?.let {
val remainTime = (it - CurrentTimeUtils.getCurrentTime()).toInt() / 1000
binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#ff87a1" else "#fff600"))
binding.tvTime.isVisible = remainTime > 0
binding.tvEndHint.isVisible = remainTime <= 0
TimeUtil.secToTime(remainTime)
} ?: "00:00"
binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#FFF17D" else "#ffffff"))
if (remainTime > 0) {
binding.tvTime.text = TimeUtil.secToTime(remainTime)
} else {
binding.tvTime.text =
ResUtil.getString(R.string.layout_layout_room_pk_board_view_02)
}
} ?: let {
binding.tvTime.text = "00:00"
}
}
}
@@ -150,7 +174,11 @@ class RoomPKBoardView @JvmOverloads constructor(
contentView =
LayoutInflater.from(context).inflate(R.layout.layout_room_pk_help_view, null)
helpPopupWindow =
PopupWindow(contentView, ScreenUtil.dip2px(244f), ScreenUtil.dip2px(177f))
PopupWindow(
contentView,
resources.getDimensionPixelOffset(R.dimen.dp_209),
ViewGroup.LayoutParams.WRAP_CONTENT
)
helpPopupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
helpPopupWindow.isOutsideTouchable = true
helpPopupWindow.isFocusable = true
@@ -158,10 +186,10 @@ class RoomPKBoardView @JvmOverloads constructor(
try {
helpPopupWindow.showAsDropDown(
binding.viewHelpAnchor,
binding.ivHelp,
0,
0,
Gravity.START or Gravity.BOTTOM
ScreenUtil.dip2px(7f),
Gravity.END or Gravity.BOTTOM
)
} catch (e: Exception) {
e.printStackTrace()

View File

@@ -5,6 +5,8 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.databinding.LayoutRoomPkRankListViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
@@ -19,7 +21,6 @@ class RoomPKRankListView @JvmOverloads constructor(
private val binding = LayoutRoomPkRankListViewBinding.inflate(LayoutInflater.from(context))
private val tvValues = arrayOf(binding.tvValue1, binding.tvValue2, binding.tvValue3)
private val ivAvatars = arrayOf(binding.ivAvatar1, binding.ivAvatar2, binding.ivAvatar3)
private var defaultAvatarRes = R.drawable.bg_room_pk_rank_contribute_default
init {
addView(binding.root)
@@ -36,13 +37,9 @@ class RoomPKRankListView @JvmOverloads constructor(
binding.tvValue1.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.tvValue2.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.tvValue3.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.viewBg1.setBackgroundResource(R.drawable.bg_room_pk_rank_charm1)
binding.viewBg2.setBackgroundResource(R.drawable.bg_room_pk_rank_charm2)
binding.viewBg3.setBackgroundResource(R.drawable.bg_room_pk_rank_charm2)
binding.ivAvatar1.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
binding.ivAvatar2.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
binding.ivAvatar3.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
defaultAvatarRes = R.drawable.bg_room_pk_rank_charm_default
binding.ivAvatarSeat1.setImageResource(R.drawable.room_pk_ic_seat_charm)
binding.ivAvatarSeat2.setImageResource(R.drawable.room_pk_ic_seat_charm)
binding.ivAvatarSeat3.setImageResource(R.drawable.room_pk_ic_seat_charm)
}
fun updateData(data: List<RoomPkBean.RankBean>?) {
@@ -50,12 +47,16 @@ class RoomPKRankListView @JvmOverloads constructor(
val rankBean = data?.getOrNull(i)
tvValues[i].text = rankBean?.amount ?: "0"
tvValues[i].isGone = "0" == tvValues[i].text
ImageLoadUtils.loadImage(
context,
rankBean?.avatar,
ivAvatars[i],
if (rankBean?.avatar.isNullOrEmpty()) defaultAvatarRes else R.drawable.default_avatar
)
if (rankBean?.avatar.isNullOrEmpty()) {
ivAvatars[i].isInvisible = true
} else {
ivAvatars[i].isVisible = true
ImageLoadUtils.loadImage(
context,
rankBean?.avatar,
ivAvatars[i], R.drawable.default_avatar
)
}
ivAvatars[i].tag = rankBean?.uid
}
}

View File

@@ -3,15 +3,14 @@ package com.chwl.app.avroom.anotherroompk
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.WindowManager
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomPkFinishBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.utils.extension.subAndReplaceDot
class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
class RoomPkFinishDialog : BaseDialogFragment<DialogRoomPkFinishBinding>() {
companion object {
@JvmStatic
@@ -30,10 +29,8 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
@SuppressLint("CheckResult", "SetTextI18n")
override fun init() {
binding?.ivClose?.setOnClickListener { dismissAllowingStateLoss() }
binding?.tvTitleRed?.text = roomPkBean.cTitle.subAndReplaceDot(7)
binding?.tvValueRed?.text = "${roomPkBean.cAmount}"
binding?.ivRedWin?.isVisible = roomPkBean.cUid == roomPkBean.winUid && roomPkBean.winUid != 0L
ImageLoadUtils.loadImage(
context,
roomPkBean.cAvatar,
@@ -43,8 +40,6 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
binding?.tvTitleBlue?.text = roomPkBean.aTitle.subAndReplaceDot(7)
binding?.tvValueBlue?.text = "${roomPkBean.aAmount}"
binding?.ivBlueWin?.isVisible =
roomPkBean.cUid != roomPkBean.winUid && roomPkBean.winUid != 0L
ImageLoadUtils.loadImage(
context,
roomPkBean.aAvatar,
@@ -53,8 +48,10 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
)
roomPkBean.csRank.getOrNull(0)?.let {
binding?.tvNickContribute?.text = it.nick.subAndReplaceDot(7)
binding?.tvValueContribute?.text = "神豪值:${it.amount}"
binding?.tvNickContribute?.text = it.nick
binding?.tvValueContribute?.text =
context?.getString(R.string.layout_dialog_room_pk_finish_07, it.amount.toString())
?: ""
ImageLoadUtils.loadImage(
context,
it.avatar,
@@ -64,8 +61,9 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
}
roomPkBean.crRank.getOrNull(0)?.let {
binding?.tvNickCharm?.text = it.nick.subAndReplaceDot(7)
binding?.tvValueCharm?.text = "魅力值:${it.amount}"
binding?.tvNickCharm?.text = it.nick
binding?.tvValueCharm?.text =
context?.getString(R.string.layout_activity_jewel_09, it.amount?.toString()) ?: ""
ImageLoadUtils.loadImage(
context,
it.avatar,
@@ -76,25 +74,13 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
when (roomPkBean.winUid) {
0L -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_719cea_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_deuce)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_deuce)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_deuce)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_deuce)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_draw)
}
roomPkBean.cUid -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_edbf89_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_win)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_win)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_win)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_win)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_win)
}
else -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_bfabf6_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_failed)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_failed)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_failed)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_failed)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_fail)
}
}

View File

@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.WindowManager
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomPkForceFinishBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.utils.extension.subAndReplaceDot
class RoomPkForceFinishDialog : BaseDialog<DialogRoomPkForceFinishBinding>() {
class RoomPkForceFinishDialog : BaseDialogFragment<DialogRoomPkForceFinishBinding>() {
companion object {
@JvmStatic

View File

@@ -3,12 +3,12 @@ package com.chwl.app.avroom.anotherroompk
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.core.view.isVisible
import com.chwl.app.base.BaseDialog
import com.chwl.app.R
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.anotherroompk.RoomPKModel
import com.chwl.core.utils.extension.ifNotNullOrEmpty
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.core.utils.extension.toast
import io.reactivex.Observable
@@ -16,7 +16,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class RoomPkReceivedDialog : BaseDialog<DialogRoomPkReceivedBinding>() {
class RoomPkReceivedDialog : BaseDialogFragment<DialogRoomPkReceivedBinding>() {
companion object {
@@ -36,12 +36,20 @@ class RoomPkReceivedDialog : BaseDialog<DialogRoomPkReceivedBinding>() {
@SuppressLint("CheckResult")
override fun init() {
binding?.tvNick?.text = pkBean.inviteRoomTitle.subAndReplaceDot(7)
binding?.tvTime?.text = "${pkBean.pkDuration}分鐘"
pkBean.pkDesc.ifNotNullOrEmpty {
binding?.tvDescTitle?.isVisible = true
binding?.tvDesc?.isVisible = true
binding?.tvDesc?.text = it
binding?.tvNick?.text = pkBean.inviteRoomTitle
binding?.tvTime?.text = "${pkBean.pkDuration}${getString(R.string.layout_activity_room_pk_create_010)}"
val height: Int
if (pkBean.pkDesc.isNullOrEmpty()) {
binding?.groupDesc?.isVisible = false
height = resources.getDimensionPixelOffset(R.dimen.dp_192)
} else {
binding?.tvDesc?.text = pkBean.pkDesc
binding?.groupDesc?.isVisible = true
height = resources.getDimensionPixelOffset(R.dimen.dp_211)
}
binding?.layoutContent?.let {
it.layoutParams.height = height
it.requestLayout()
}
disposable = Observable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS)
.compose(bindToLifecycle())

View File

@@ -1,9 +1,9 @@
package com.chwl.app.avroom.anotherroompk
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomPkRuleBinding
class RoomPkRuleDialog : BaseDialog<DialogRoomPkRuleBinding>() {
class RoomPkRuleDialog : BaseDialogFragment<DialogRoomPkRuleBinding>() {
companion object {

View File

@@ -0,0 +1,63 @@
package com.chwl.app.avroom.bean
import androidx.annotation.Keep
import com.chwl.app.avroom.dialog.RoomGameplayDialog
import com.chwl.core.room.bean.RoomIcon
import java.io.Serializable
@Keep
interface RoomGameplayItem : Serializable {
fun getName(): String?
fun getIconUrl(): String?
fun getIconRes(): Int?
fun onItemClick(dialog: RoomGameplayDialog)
@Keep
class RoomIconItem(
private val roomIcon: RoomIcon,
private val onClick: (RoomGameplayDialog, RoomIcon) -> Unit
) : RoomGameplayItem {
override fun getName(): String? {
return roomIcon.name
}
override fun getIconUrl(): String? {
return roomIcon.icon
}
override fun getIconRes(): Int? {
return null
}
override fun onItemClick(dialog: RoomGameplayDialog) {
onClick.invoke(dialog, roomIcon)
}
}
@Keep
class CustomItem(
private val name: String,
private val iconRes: Int,
private val onClick: (RoomGameplayDialog, CustomItem) -> Unit
) : RoomGameplayItem {
override fun getName(): String {
return name
}
override fun getIconUrl(): String? {
return null
}
override fun getIconRes(): Int {
return iconRes
}
override fun onItemClick(dialog: RoomGameplayDialog) {
onClick.invoke(dialog, this)
}
}
}

View File

@@ -1,16 +0,0 @@
package com.chwl.app.avroom.core
import com.chwl.core.support.room.RoomAbility
import com.chwl.core.support.room.RoomContext
/**
* Created by Max on 2023/10/26 15:41
* Desc:语音房
* @param roomId roomUid
**/
class AudioRoomContext(roomId: Long) : RoomContext(roomId) {
override fun loadAbility(list: MutableMap<String, RoomAbility>) {
super.loadAbility(list)
}
}

View File

@@ -0,0 +1,149 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import androidx.annotation.StyleRes
import androidx.viewbinding.ViewBinding
import com.chwl.app.R
import com.chwl.app.avroom.widget.VDHLayout
import com.chwl.app.ui.widget.dialog.BaseDialog
abstract class BaseRoomNotifyDialog<VB : ViewBinding>(context: Context, theme: Int = 0) : BaseDialog(context, theme) {
protected val handle = Handler(Looper.getMainLooper())
protected lateinit var mBinding: VB
abstract fun createBinding(inflater: LayoutInflater): VB
abstract fun init()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = createBinding(LayoutInflater.from(context))
setContentView(mBinding.root)
setCancelable(true)
setCanceledOnTouchOutside(false)
window?.let {
initWindow(it)
}
init()
if (useAutoDismiss()) {
handle.postDelayed({
dismissDialog()
}, (getStaySecond()*1000).toLong())
}
}
override fun onDetachedFromWindow() {
handle.removeCallbacksAndMessages(null)
super.onDetachedFromWindow()
}
protected open fun initWindow(window: Window) {
window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
val windowParams = window.attributes
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT
windowParams.dimAmount = 0.0f
windowParams.gravity = Gravity.TOP
windowParams.x = 0
windowParams.y = getTopOffset()
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
window.attributes = windowParams
window.setWindowAnimations(getAnimations())
}
protected open fun getStaySecond():Float{
return 5f
}
protected open fun getTopOffset():Int{
return 0
}
@StyleRes
protected open fun getAnimations():Int{
return R.style.anim_left
}
override fun setContentView(view: View) {
if (useSlipSlip()) {
val vdhLayout = VDHLayout(context, null)
vdhLayout.addView(view)
vdhLayout.setListener { dismissDialog() }
super.setContentView(vdhLayout)
return
}
super.setContentView(view)
}
override fun setContentView(layoutResID: Int) {
if (useSlipSlip()) {
val vdhLayout = VDHLayout(context, null)
LayoutInflater.from(context).inflate(layoutResID, vdhLayout)
vdhLayout.setListener { dismissDialog() }
super.setContentView(vdhLayout)
return
}
super.setContentView(layoutResID)
}
override fun setContentView(view: View, params: ViewGroup.LayoutParams?) {
if (useSlipSlip()) {
val vdhLayout = VDHLayout(context, null)
vdhLayout.addView(view)
vdhLayout.setListener { dismissDialog() }
super.setContentView(vdhLayout, params)
return
}
super.setContentView(view, params)
}
/**
* 是否启动侧滑,左滑:删除,右滑:回到原位置
*/
protected open fun useSlipSlip(): Boolean {
return true
}
protected open fun useAutoDismiss(): Boolean {
return true
}
var mCallBack : CallBack? = null
interface CallBack{
fun onHide();
}
open fun dismissDialog() {
try {
dismiss()
} catch (e: Exception) {
}
mCallBack?.onHide()
}
open fun clearDialog() {
try {
dismiss()
} catch (e: Exception) {
}
}
open fun showDialog(){
show()
}
}

View File

@@ -6,7 +6,7 @@ import android.view.WindowManager
import androidx.recyclerview.widget.GridLayoutManager
import com.chwl.app.avroom.adapter.CreateRoomGameGuideAdapter
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogCreateGameRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.RVDelegate
@@ -14,7 +14,7 @@ import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.game.bean.GameInfo
import com.chwl.core.room.game.GameModel
class CreateGameRoomDialog : BaseDialog<DialogCreateGameRoomBinding>() {
class CreateGameRoomDialog : BaseDialogFragment<DialogCreateGameRoomBinding>() {
private lateinit var rvDelegate: RVDelegate<GameInfo>
private val gameAdapter = CreateRoomGameGuideAdapter()
@@ -44,7 +44,7 @@ class CreateGameRoomDialog : BaseDialog<DialogCreateGameRoomBinding>() {
dismissAllowingStateLoss()
}
GameModel.getGameList()
GameModel.getGameList(null)
.compose(bindToLifecycle())
.subscribe(
{

View File

@@ -4,10 +4,12 @@ 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
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogCreateRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.RVDelegate
@@ -17,7 +19,7 @@ import com.chwl.core.room.game.GameModel
import com.chwl.core.utils.extension.toast
import com.chwl.library.utils.ResUtil
class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {
class CreateRoomDialog : BaseDialogFragment<DialogCreateRoomBinding>() {
private lateinit var rvDelegate: RVDelegate<GameInfo>
private val gameAdapter = CreateRoomGameAdapter()
@@ -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()
@@ -86,7 +88,7 @@ class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {
dismissAllowingStateLoss()
}
GameModel.getGameList()
GameModel.getGameList(null)
.compose(bindToLifecycle())
.subscribe(
{

View File

@@ -1,12 +1,12 @@
package com.chwl.app.avroom.dialog
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogNewUserGiftBinding
import com.chwl.app.ui.utils.load
import com.chwl.core.gift.bean.GiftInfo
class NewUserGiftDialog(val giftInfo: GiftInfo) :
BaseDialog<DialogNewUserGiftBinding>() {
BaseDialogFragment<DialogNewUserGiftBinding>() {
override fun init() {
binding?.ivClose?.setOnClickListener {

View File

@@ -1,297 +0,0 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.app.ui.widget.dialog.CommonTipDialog;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.room.pk.bean.PKMemberInfo;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.PKTeamMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.pk.event.PKTimeFinishEvent;
import com.chwl.core.room.pk.event.PKTimeTickEvent;
import com.chwl.core.room.pk.model.PkModel;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.library.utils.FormatUtils;
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.SingleObserver;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
/**
* @author jack
* @Description
* @Date 2019/1/3
*/
public class PKScoreBoardDialog extends BaseDialog {
private TextView tvPkVoteMode;
private View tvClose;
private ProgressBar pbScore;
private TextView tvRedTeamScore;
private TextView tvBlueTeamScore;
private TextView tvPkTimer;
private CircleImageView ivRedAvatar1;
private CircleImageView ivRedAvatar2;
private CircleImageView ivRedAvatar3;
private CircleImageView ivRedAvatar4;
private CircleImageView ivBlueAvatar1;
private CircleImageView ivBlueAvatar2;
private CircleImageView ivBlueAvatar3;
private CircleImageView ivBlueAvatar4;
private TextView tvRestart;
private final List<CircleImageView> redTeamAvatars = new ArrayList<>();
private final List<CircleImageView> blueTeamAvatars = new ArrayList<>();
private RoomPkData roomPkData;
private CompositeDisposable compositeDisposable;
public PKScoreBoardDialog(Context context) {
super(context, R.style.easy_dialog_style);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_pk_score_board);
tvPkVoteMode = (TextView) findViewById(R.id.tv_pk_vote_mode);
tvClose = findViewById(R.id.tv_close);
pbScore = (ProgressBar) findViewById(R.id.pb_score);
tvRedTeamScore = (TextView) findViewById(R.id.tv_red_team_score);
tvBlueTeamScore = (TextView) findViewById(R.id.tv_blue_team_score);
tvPkTimer = (TextView) findViewById(R.id.tv_pk_timer);
tvRestart = (TextView) findViewById(R.id.tv_restart);
ivRedAvatar1 = (CircleImageView) findViewById(R.id.iv_red_avatar_1);
ivRedAvatar2 = (CircleImageView) findViewById(R.id.iv_red_avatar_2);
ivRedAvatar3 = (CircleImageView) findViewById(R.id.iv_red_avatar_3);
ivRedAvatar4 = (CircleImageView) findViewById(R.id.iv_red_avatar_4);
ivBlueAvatar1 = (CircleImageView) findViewById(R.id.iv_blue_avatar_1);
ivBlueAvatar2 = (CircleImageView) findViewById(R.id.iv_blue_avatar_2);
ivBlueAvatar3 = (CircleImageView) findViewById(R.id.iv_blue_avatar_3);
ivBlueAvatar4 = (CircleImageView) findViewById(R.id.iv_blue_avatar_4);
redTeamAvatars.add(ivRedAvatar1);
redTeamAvatars.add(ivRedAvatar2);
redTeamAvatars.add(ivRedAvatar3);
redTeamAvatars.add(ivRedAvatar4);
blueTeamAvatars.add(ivBlueAvatar1);
blueTeamAvatars.add(ivBlueAvatar2);
blueTeamAvatars.add(ivBlueAvatar3);
blueTeamAvatars.add(ivBlueAvatar4);
init();
}
private void init() {
tvClose.setOnClickListener(v -> dismiss());
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData == null) {
return;
}
if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_GIFT) {
tvPkVoteMode.setText(getContext().getResources().getString(R.string.vote_type_gift_value));
} else if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_PERSON) {
tvPkVoteMode.setText(getContext().getResources().getString(R.string.vote_type_gift_member));
}
PKTeamInfo redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
for (int i = 0; i < redTeamAvatars.size(); i++) {
if (i < redTeam.getTeamMembers().size()) {
redTeamAvatars.get(i).setVisibility(View.VISIBLE);
PKTeamMember pkTeamMember = redTeam.getTeamMembers().get(i);
PKMemberInfo pkMemberInfo = findPKMemberInfo(pkTeamMember.getUid());
if (pkMemberInfo == null || pkMemberInfo.getUserInfo() == null) {
continue;
}
GlideApp.with(redTeamAvatars.get(i))
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(redTeamAvatars.get(i));
} else {
redTeamAvatars.get(i).setVisibility(View.GONE);
}
}
PKTeamInfo blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
for (int i = 0; i < blueTeamAvatars.size(); i++) {
if (i < blueTeam.getTeamMembers().size()) {
blueTeamAvatars.get(i).setVisibility(View.VISIBLE);
PKTeamMember pkTeamMember = blueTeam.getTeamMembers().get(i);
PKMemberInfo pkMemberInfo = findPKMemberInfo(pkTeamMember.getUid());
if (pkMemberInfo == null || pkMemberInfo.getUserInfo() == null) {
continue;
}
GlideApp.with(blueTeamAvatars.get(i))
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(blueTeamAvatars.get(i));
} else {
blueTeamAvatars.get(i).setVisibility(View.GONE);
}
}
if (AvRoomDataManager.get().isManager() && !SuperAdminUtil.isSuperAdmin()) {
tvRestart.setVisibility(View.VISIBLE);
tvRestart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (PkModel.get().getCurPkInfo() == null) {
toast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_01));
dismiss();
return;
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
toast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_02));
dismiss();
return;
}
CommonTipDialog tipDialog = new CommonTipDialog(getContext());
tipDialog.setTipMsg(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_03) +
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_04));
tipDialog.setOnActionListener(
new CommonTipDialog.OnActionListener() {
@Override
public void onOk() {
PkModel.get().toPKAgain().subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(String s) {
dismiss();
}
@Override
public void onError(Throwable e) {
toast(e.getMessage());
}
});
}
}
);
tipDialog.show();
}
});
} else {
tvRestart.setVisibility(View.GONE);
tvRestart.setOnClickListener(null);
}
updateTime();
onPKDataUpdateEvent(null);
}
private PKMemberInfo findPKMemberInfo(String account) {
for (PKMemberInfo pkMemberInfo : PkModel.get().getPkMemberInfoList()) {
if (String.valueOf(pkMemberInfo.getUserInfo().getUid()).equals(account)) {
return pkMemberInfo;
}
}
return null;
}
private void updateTime() {
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData == null) {
return;
}
long pkTimeUntilEnd = roomPkData.getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format("%1$02d:%2$02d", pkTimeUntilEnd / 60, pkTimeUntilEnd % 60));
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
compositeDisposable = new CompositeDisposable();
compositeDisposable.add(IMNetEaseManager.get().getChatRoomEventObservable()
.subscribe(this::onReceiveRoomEvent));
}
private void onReceiveRoomEvent(RoomEvent roomEvent) {
int event = roomEvent.getEvent();
switch (event) {
case RoomEvent.PK_INFO_UPDATE:
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData != null && (roomPkData.getPkStatus() == RoomPkData.PK_STATUS_BEFORE_PK ||
roomPkData.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK)) {
dismiss();
}
break;
}
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
compositeDisposable.dispose();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
if (PkModel.get().getCurPkInfo() == null
|| PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
dismiss();
return;
}
PKTeamInfo redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
PKTeamInfo blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (redTeam == null || blueTeam == null) {
return;
}
long totalScore = redTeam.getScore() + blueTeam.getScore();
if (totalScore > 0) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeam.getScore()));
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeam.getScore()));
int percent = (int) ((float) redTeam.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeTickEvent(PKTimeTickEvent event) {
updateTime();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeFinishEvent(PKTimeFinishEvent event) {
tvPkTimer.setText("00:00");
}
}

View File

@@ -95,7 +95,10 @@ public class PKSelectPeopleDialog extends BaseDialog implements View.OnClickList
keys[i] = micQueue.keyAt(i);
}
Arrays.sort(keys);
for (int i = 0; i < keys.length; i++) {
for (int i = 0; i < micEntityList.size(); i++) {
if (i >= micQueue.size()) {
continue;
}
RoomQueueInfo roomQueueInfo = micQueue.get(keys[i]);
MicMemberInfo chatRoomMember = roomQueueInfo.mChatRoomMember;
if (chatRoomMember != null) {

View File

@@ -0,0 +1,302 @@
package com.chwl.app.avroom.dialog
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.adapter.RoomGameListAdapter
import com.chwl.app.base.BaseActivity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.RoomGameplayDialogBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.bean.RoomModeType
import com.chwl.core.room.core.RoomDataService
import com.chwl.core.room.game.GameModel
import com.chwl.core.room.game.GameModel.getGameList
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.core.room.game.bean.GameInfo
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.support.room.AudioRoomContext
import com.chwl.core.utils.LogUtils
import com.chwl.library.utils.JavaUtil
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import com.example.lib_utils.ktx.asLifecycle
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.gson.Gson
import com.unity3d.splash.services.core.lifecycle.LifecycleEvent
import io.reactivex.Single
import io.reactivex.disposables.CompositeDisposable
class RoomGameListDialog :
BottomSheetDialogFragment(), LifecycleObserver {
private var binding: RoomGameplayDialogBinding? = null
private var compositeDisposable: CompositeDisposable? = null
private val adapter = RoomGameListAdapter()
private var dialogManager: DialogManager? = null
private lateinit var recycleView: RecyclerView
val cacheKey = "game_list#${parentFragment.hashCode()}"
private var mStatus = -1
private var mGameData = arrayListOf<GameInfo>()
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()
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
recycleView = recyclerView
switchStatus(0)
requestData()
}
override fun onAttach(context: Context) {
super.onAttach(context)
val lifecycleObserver = object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
if (event == Lifecycle.Event.ON_DESTROY) {
context.asLifecycle()?.removeObserver(this)
try {
this@RoomGameListDialog.dismissAllowingStateLoss()
} catch (e: Exception) {
}
}
}
}
context.asLifecycle()?.addObserver(lifecycleObserver)
}
private fun initView() {
adapter.setOnItemClickListener { _, view, position ->
val item = adapter.getItem(position) as GameInfo
switchGame(item)
}
binding?.recyclerView?.adapter = adapter
}
private fun updateDialogHeight(count: Int) {
if (count > 10) {
val layoutParams = recycleView.layoutParams
layoutParams.height = 600
recycleView.layoutParams = layoutParams
}
}
private fun requestData() {
val dataService = AudioRoomContext.get()?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
// val cacheKey = "game_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<GameInfo>
if (!list.isNullOrEmpty()) {
updateDialogHeight(list.size)
loadData(list)
return
}
val getGameList = getGameList(AvRoomDataManager.get().roomUid)
.doOnError {
SingleToastUtil.showToast(it.message)
if (mStatus != 1)switchStatus(-2)
}
.subscribe { it: List<GameInfo> ->
LogUtils.d(" gamegame getGameList GameInfo = $it")
mGameData.addAll(0,it)
dataService?.putData(cacheKey, it)
updateDialogHeight(mGameData.size)
loadData(mGameData)
}
val roomGamePlayList = AvRoomModel.get().roomGamePlayList
.doOnError {
SingleToastUtil.showToast(it.message)
if (mStatus != 1)switchStatus(-2)
}
.subscribe { it: List<RoomIcon> ->
LogUtils.d(" gamegame roomGamePlayList RoomIcon = $it")
it.forEachIndexed { index, roomIcon ->
if (roomIcon.isBaiShunGame()) {
mGameData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
}
}
dataService?.putData(cacheKey, mGameData)
updateDialogHeight(mGameData.size)
loadData(mGameData)
}
getCompositeDisposable().add(getGameList)
getCompositeDisposable().add(roomGamePlayList)
}
private fun loadData(list: List<GameInfo>?) {
if (list.isNullOrEmpty()) {
switchStatus(-1)
} else {
adapter.setNewData(list)
switchStatus(1)
}
}
private fun switchStatus(status: Int) {
mStatus = status
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 switchGame(gameInfo: GameInfo) {
if (AvRoomDataManager.get().isGamePlaying) {
SingleToastUtil.showToast(ResUtil.getString(R.string.room_switch_game_failed_in_game))
return
}
if (!isShowChangeGame()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_04))
return
}
if (dialogManager == null) {
dialogManager = DialogManager(context)
}
dialogManager?.showOkCancelDialog(
getString(R.string.room_switch_game_tips)
) {
if (gameInfo.mgId.isNotEmpty()) {
if (gameInfo.isStandardRoom()) {
OpenRoomHelper.updateRoomInfo(
activity as BaseActivity,
AvRoomDataManager.get().mCurrentRoomInfo,
RoomInfo.ROOMTYPE_HOME_PARTY,
0,
false
)
} else {
OpenRoomHelper.updateRoomInfo(
activity as BaseActivity,
AvRoomDataManager.get().mCurrentRoomInfo,
RoomInfo.ROOMTYPE_GAME,
JavaUtil.str2long(gameInfo.mgId),
false
)
}
}else if(!gameInfo.skipContent.isNullOrEmpty() || !gameInfo.ruleValue.isNullOrEmpty()){
jumpBaiShunGame(gameInfo)
}
dismissAllowingStateLoss()
}
}
private fun jumpBaiShunGame(data: GameInfo) {
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)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onDestroy() {
super.onDestroy()
onUnbindContext()
dialogManager?.dismissDialog()
dialogManager = null
}
private fun getCompositeDisposable(): CompositeDisposable {
var disposable = compositeDisposable
if (disposable == null) {
disposable = CompositeDisposable()
compositeDisposable = disposable
}
return disposable
}
private fun onUnbindContext() {
compositeDisposable?.dispose()
compositeDisposable = null
}
//这里的2和4是服务端定义的错误状态 关闭排麦模式和关闭PK模式!
private fun isShowChangeGame(): Boolean {
val currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo
return currentRoomInfo != null && currentRoomInfo.type != RoomInfo.ROOM_TYPE_SINGLE &&
(currentRoomInfo.roomModeType == RoomModeType.NORMAL_MODE || currentRoomInfo.roomModeType == 2 || currentRoomInfo.roomModeType == 4)
}
interface GameplayDialogListener {
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
}
}

View File

@@ -0,0 +1,421 @@
package com.chwl.app.avroom.dialog
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.activity.CreatePKActivity
import com.chwl.app.avroom.adapter.RoomGameplayAdapter
import com.chwl.app.avroom.anotherroompk.RoomPKCreateActivity
import com.chwl.app.avroom.bean.RoomGameplayItem
import com.chwl.app.avroom.singleroompk.SingleRoomPKCreateActivity
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.room_banner.RoomWebDialogActivity
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.auth.AuthModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.anotherroompk.SingleRoomPKModel
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
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.super_admin.util.SuperAdminUtil
import com.chwl.core.support.room.AudioRoomContext
import com.chwl.core.utils.CurrentTimeUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import com.example.lib_utils.ktx.asLifecycle
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.gson.Gson
import io.reactivex.disposables.CompositeDisposable
class RoomGameplayDialog : BottomSheetDialogFragment() {
var isOnlyPK = false
private lateinit var recycleView: RecyclerView
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()
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
recycleView = recyclerView
switchStatus(0)
requestData()
}
private fun initView() {
adapter.setOnItemClickListener { _, view, position ->
adapter.getItem(position)?.onItemClick(this)
}
binding?.recyclerView?.adapter = adapter
}
override fun onAttach(context: Context) {
super.onAttach(context)
val lifecycleObserver = object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
if (event == Lifecycle.Event.ON_DESTROY) {
context.asLifecycle()?.removeObserver(this)
try {
this@RoomGameplayDialog.dismissAllowingStateLoss()
} catch (e: Exception) {
}
}
}
}
context.asLifecycle()?.addObserver(lifecycleObserver)
}
private fun requestData() {
if (isOnlyPK) {
loadSuccess(arrayListOf())
} else {
val dataService =
AudioRoomContext.get()
?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
val cacheKey = "gameplay_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<RoomIcon>
if (!list.isNullOrEmpty()) {
updateDialogHeight(list.size)
loadSuccess(list)
return
}
val disposable = AvRoomModel.get().roomGamePlayList
.doOnError {
loadFail(it)
}
.subscribe { it: List<RoomIcon> ->
dataService?.putData(cacheKey, it)
updateDialogHeight(it.size)
loadSuccess(it)
}
getCompositeDisposable().add(disposable)
}
}
private fun updateDialogHeight(count: Int) {
if (count > 10) {
val layoutParams = recycleView.layoutParams
layoutParams.height = 600
recycleView.layoutParams = layoutParams
}
}
private fun loadSuccess(list: List<RoomIcon>?) {
var finalList = mutableListOf<RoomGameplayItem>()
if (isOnlyPK) {
finalList = getLocalList()
}
list?.let {
finalList.addAll(list.map {
RoomGameplayItem.RoomIconItem(it) { dialog, item ->
jump(item)
}
})
}
if (finalList.isEmpty()) {
switchStatus(-1)
} else {
adapter.setNewData(finalList)
switchStatus(1)
}
}
private fun loadFail(throwable: Throwable) {
SingleToastUtil.showToast(throwable.message)
val finalList = getLocalList()
if (finalList.isEmpty()) {
switchStatus(-2)
} else {
adapter.setNewData(finalList)
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()
}
}
private fun getLocalList(): MutableList<RoomGameplayItem> {
val list = ArrayList<RoomGameplayItem>()
getPkItem()?.let {
list.add(it)
}
getRoomPkItem()?.let {
list.add(it)
}
// getSingleRoomPkItem()?.let {
// list.add(it)
// }
return list
}
private fun getPkItem(): RoomGameplayItem? {
val context = context ?: return null
if (SuperAdminUtil.isSuperAdmin()) {
return null
}
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
return null
}
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
if (roomInfo == null) {
return null
}
if (AvRoomDataManager.get().isManager && !AvRoomDataManager.get().isCpRoom) {
val str =
if (AvRoomDataManager.get().isOpenPKMode) context.resources.getString(R.string.room_was_in_PK) else context.resources.getString(
R.string.room_PK_mode
)
val icon =
if (AvRoomDataManager.get().isOpenPKMode) R.drawable.room_gameplay_ic_team_pk else R.drawable.room_gameplay_ic_team_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01))
return@CustomItem
}
if (AvRoomDataManager.get().isOpenAnotherPKMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_02))
return@CustomItem
}
dialog.dismissAllowingStateLoss()
CreatePKActivity.start(context)
}
}
return null
}
private fun getRoomPkItem(): RoomGameplayItem? {
val context = context ?: return null
if (SuperAdminUtil.isSuperAdmin()) {
return null
}
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
return null
}
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
if (roomInfo == null) {
return null
}
if ((AvRoomDataManager.get().isRoomOwner || AvRoomDataManager.get().isSuperAdmin) &&
!AvRoomDataManager.get().isCpRoom
) {
val str =
if (AvRoomDataManager.get().isOpenAnotherPKMode) ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_03) else ResUtil.getString(
R.string.avroom_dialog_roomoperationdialog_04
)
val icon =
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.room_gameplay_ic_room_pk else R.drawable.room_gameplay_ic_room_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05))
return@CustomItem
}
if (AvRoomDataManager.get().isOpenPKMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_06))
return@CustomItem
}
if (AvRoomDataManager.get().isOpenAnotherPKMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_07))
return@CustomItem
}
dismissAllowingStateLoss()
RoomPKCreateActivity.start(context)
}
}
return null
}
private fun getSingleRoomPkItem(): RoomGameplayItem? {
val context = context ?: return null
if (SuperAdminUtil.isSuperAdmin()) {
return null
}
if (AvRoomDataManager.get().isOpenGame) {
return null
}
if (!AvRoomDataManager.get().isSingleRoom) {
return null
}
val pkBean = AvRoomDataManager.get().roomPkLiveData.value
if (AvRoomDataManager.get().isRoomOwner && !AvRoomDataManager.get().isCpRoom) {
var str =
if (AvRoomDataManager.get().isOpenAnotherPKMode) ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_08) else ResUtil.getString(
R.string.avroom_dialog_roomoperationdialog_09
)
if (pkBean != null) {
if (pkBean.pkState == 2 &&
(pkBean.winUid == 0L || pkBean.winUid == AuthModel.get().currentUid || pkBean.penaltyEndTime < CurrentTimeUtils.getCurrentTime())
) {
str = ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_010)
}
}
val icon =
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.ic_room_opt_single_pk_open else R.drawable.ic_room_opt_single_pk_in
val finalStr = str
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011) == finalStr) {
SingleRoomPKModel.endSingleRoomPk(pkBean.roundId)
.doOnSuccess { s: String? ->
SingleToastUtil.showToast(
ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_012)
)
}
.doOnError { throwable: Throwable ->
SingleToastUtil.showToast(
throwable.message
)
}
.subscribe()
dismissAllowingStateLoss()
return@CustomItem
}
if (AvRoomDataManager.get().isOpenAnotherPKMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_013))
return@CustomItem
}
dismissAllowingStateLoss()
SingleRoomPKCreateActivity.start(context)
}
}
return null
}
interface GameplayDialogListener {
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
}
}

View File

@@ -0,0 +1,87 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.graphics.Bitmap
import android.view.LayoutInflater
import com.chwl.app.databinding.RoomNotifyCpBindBinding
import com.chwl.app.ui.utils.CpUtils
import com.chwl.core.gift.bean.CpMsgBean
import com.chwl.core.utils.LogUtils
import com.tencent.qgame.animplayer.inter.IFetchResource
import com.tencent.qgame.animplayer.mix.Resource
import com.tencent.qgame.animplayer.util.ScaleType
class RoomNotifyCpBindDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpBindBinding>(context) {
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpBindBinding {
return RoomNotifyCpBindBinding.inflate(inflater)
}
var cpMsgBean : CpMsgBean? = null
var senderAvatar : Bitmap? = null
var receiverAvatar : Bitmap? = null
var index = 0
override fun init() {
cpMsgBean?.let { data->
mBinding.anim.setScaleType(ScaleType.CENTER_CROP)
mBinding.anim.setFetchResource(object : IFetchResource {
override fun fetchImage(resource: Resource, result: (Bitmap?) -> Unit) {
result(if (resource.tag == "avatar1") senderAvatar else receiverAvatar)
}
override fun fetchText(resource: Resource, result: (String?) -> Unit) {
var name = ""
try {
name = if (resource.tag == "name1") data.senderNick else data.receiverNick
} catch (e: Exception) {
}
result(name)
}
override fun releaseResource(resources: List<Resource>) {
resources?.forEach {
it?.bitmap?.recycle()
}
}
})
mBinding.anim.startPlay(context.assets,"mp4/cp_bind.mp4")
}
}
override fun useSlipSlip() = false
override fun useAutoDismiss() = true
override fun showDialog() {
index = 0
cpMsgBean?.let {
CpUtils.downLoadAvatar(it.senderAvatar) { resource ->
index += 1
senderAvatar = resource
checkImg()
}
CpUtils.downLoadAvatar(it.receiverAvatar) { resource ->
index += 1
receiverAvatar = resource
checkImg()
}
}
}
fun checkImg() {
if (index == 2){
show()
}
}
}

View File

@@ -0,0 +1,31 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.LayoutInflater
import com.chwl.app.databinding.RoomNotifyCpGiftBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.gift.bean.CpMsgBean
import kotlin.math.truncate
/**
* cp 飘屏
*/
class RoomNotifyCpGiftDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpGiftBinding>(context) {
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpGiftBinding {
return RoomNotifyCpGiftBinding.inflate(inflater)
}
var cpMsgBean : CpMsgBean? = null
override fun init() {
cpMsgBean?.let {
ImageLoadUtils.loadImage(mBinding.sendAvatar,it.senderAvatar)
ImageLoadUtils.loadImage(mBinding.receiverAvatar,it.receiverAvatar)
ImageLoadUtils.loadImage(mBinding.gift,it.giftUrl)
}
}
override fun useSlipSlip() = true
}

View File

@@ -0,0 +1,101 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.graphics.Color
import android.text.Layout
import android.text.StaticLayout
import android.text.TextPaint
import android.view.LayoutInflater
import com.chwl.app.R
import com.chwl.app.avroom.helper.AnimHelper
import com.chwl.app.databinding.RoomNotifyCpLevelUpBinding
import com.chwl.app.ui.utils.CpUtils
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.app.utils.SpannableBuilder
import com.chwl.core.gift.bean.CpMsgBean
import com.chwl.core.utils.SpanUtils
import com.example.lib_utils.ktx.getColor
import com.example.lib_utils.ktx.getString
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGADynamicEntity
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAParser.Companion.shareParser
import com.opensource.svgaplayer.SVGAVideoEntity
class RoomNotifyLevelUpDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpLevelUpBinding>(context) {
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpLevelUpBinding {
return RoomNotifyCpLevelUpBinding.inflate(inflater)
}
var cpMsgBean : CpMsgBean ? = null
override fun init() {
cpMsgBean?.let {
SpanUtils.with(mBinding.text)
.append(" ${it.senderNick} ").setForegroundColor(R.color.white.getColor())
.append(" ${R.string.avroom_widget_roomeffectview_02.getString()} ").setForegroundColor(R.color.color_fff664.getColor())
.append(" ${it.receiverNick} ").setForegroundColor(R.color.white.getColor())
.append(" ${R.string.Become.getString()} ").setForegroundColor(R.color.color_fff664.getColor())
.append(" ${CpUtils.getCpLevelUpStr(it.cpLevel)} ").setForegroundColor(R.color.white.getColor())
.create()
mBinding.text.setBackgroundResource(CpUtils.getCpLevelUpTextBg(it.cpLevel))
if (it.cpLevel < 1) return
val svga = "svga/cp_level_up_${it.cpLevel}.svga"
try {
shareParser().decodeFromAssets(svga, object : SVGAParser.ParseCompletion {
override fun onComplete(svgaVideoEntity: SVGAVideoEntity) {
val dynamicEntity = SVGADynamicEntity()
// val textPaint = TextPaint()
// textPaint.color = Color.WHITE //字体颜色
// textPaint.textSize = 24f //字体大小
// dynamicEntity.setDynamicText(
// StaticLayout(
// text.build(),
// 0,
// text.build().length,
// textPaint,
// 0,
// Layout.Alignment.ALIGN_CENTER,
// 1.0f,
// 0.0f,
// false
// ), "bg"
// )
AnimHelper.addDynamicImage(
mBinding.svga,
dynamicEntity,
it.senderAvatar,
"user_img1"
)
AnimHelper.addDynamicImage(
mBinding.svga,
dynamicEntity,
it.receiverAvatar,
"user_img2"
)
val drawable = SVGADrawable(svgaVideoEntity, dynamicEntity)
mBinding.svga.setImageDrawable(drawable)
mBinding.svga.stepToFrame(0, true)
// mBinding.svga.startAnimation()
}
override fun onError() {
}
}, null)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
override fun useSlipSlip() = false
}

View File

@@ -0,0 +1,64 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.LayoutInflater
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.chwl.app.databinding.RoomNotifyLuckGiftDlgBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.utils.NumberUtils
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.UiUtils
/**
* @Author Vance
* 幸运礼物的飘屏,全服但是展示的时候限制只有房间才展示
*/
class RoomNotifyLuckGiftDialog(private val context: Context) : BaseRoomNotifyDialog<RoomNotifyLuckGiftDlgBinding>(context) {
override fun createBinding(inflater: LayoutInflater): RoomNotifyLuckGiftDlgBinding {
return RoomNotifyLuckGiftDlgBinding.inflate(inflater)
}
private var mDialogManager: DialogManager? = null
var luckyGiftMsgBean: LuckyGiftMsgAllBean ? = null
override fun init() {
if (UiUtils.isRtl(context)) {
mBinding.bg.scaleX = -1f
}
ImageLoadUtils.loadImage(mBinding.avatar,luckyGiftMsgBean?.sender?.avatar?:"")
mBinding.giftName.text = luckyGiftMsgBean?.giftNameMap?.getFirstText()
mBinding.winNum.text = luckyGiftMsgBean?.times.toString()
val coinNum = NumberUtils.format(luckyGiftMsgBean?.coins?:0)
mBinding.coinNum.text = coinNum
mBinding.clickArea.setOnClickListener {
mDialogManager = DialogManager(context)
mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.changeRoomTips), true, object : OkCancelDialogListener {
override fun onCancel() {
mDialogManager?.dismissDialog()
}
override fun onOk() {
mDialogManager?.dismissDialog()
luckyGiftMsgBean?.roomUid?.let {
if (AvRoomDataManager.get().roomUid != it) {
AVRoomActivity.start(context, it)
}
}
}
})
}
}
}

View File

@@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.coorchice.library.utils.LogUtils;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.hjq.toast.ToastUtils;
@@ -76,6 +77,14 @@ public class RoomOperationDialog extends BottomSheetDialog {
private Context context;
private OptAdapter optAdapter;
private OnActionListener onActionListener;
private CallBack callBack;
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
public interface CallBack{
void onCLick(int Type);
}
public RoomOperationDialog(@NonNull Context context) {
super(context, R.style.ErbanBottomSheetDialogDimFalse);
@@ -113,29 +122,30 @@ public class RoomOperationDialog extends BottomSheetDialog {
true));
rvOPtList.setLayoutManager(new FullyGridLayoutManager(getContext(), 5));
optAdapter = new OptAdapter(context, null);
addRoomAlbum(optAdapter);
addDatingAction(optAdapter);
addPKAction(optAdapter);
addRoomPKAction(optAdapter);
addSingleRoomPKAction(optAdapter);
addSendBroadcastAction(optAdapter);
// addInviteFansOptAdapter();
addVipSendBroadcastAction(optAdapter);
addRedPacketAction(optAdapter);
addRoomSettingAction(optAdapter);
addGiftEffectAction(optAdapter);
addOpenOrClosePublicScreenAction(optAdapter);
// addRedPackageSwitch();
addCleanScreenAction(optAdapter);
// addRoomLimit(optAdapter);
addGiftValueAction(optAdapter);
addSuperAdminAction(optAdapter);
addShieldReportAction(optAdapter);
addRoomAlbum(optAdapter); //房间相册
addDatingAction(optAdapter); // 相亲 模式
addPKAction(optAdapter); //pk PK 模式-同房间
addRoomPKAction(optAdapter); //跨房PK
addSingleRoomPKAction(optAdapter); //个播PK
// addSendBroadcastAction(optAdapter); //发布广播
// addInviteFansOptAdapter(); //邀请粉丝
addVipSendBroadcastAction(optAdapter); //小喇叭
// addRedPacketAction(optAdapter); //红包
addRoomSettingAction(optAdapter); //房间设置
addGiftEffectAction(optAdapter); //礼物特效
// addOpenOrClosePublicScreenAction(optAdapter); //公屏开关
// addRedPackageSwitch(); // 开关红包
addCleanScreenAction(optAdapter); //清空公屏
// addRoomLimit(optAdapter); //添加房间限制
// addGiftValueAction(optAdapter); //礼物值
addSuperAdminAction(optAdapter); //超管管理
addShieldReportAction(optAdapter); //举报屏蔽
addRoomTypeSwitchAction(optAdapter); //房间类型切换
rvOPtList.setAdapter(optAdapter);
}
/**
* PK 模式
* PK 模式-同房间
*
* @param optAdapter
*/
@@ -160,6 +170,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
int icon = AvRoomDataManager.get().isOpenPKMode() ?
R.drawable.ic_room_opt_op_pk :
R.drawable.ic_room_opt_in_pk;
optAdapter.addData(new OptAction(icon, str, () -> {
if (AvRoomDataManager.get().isDatingMode()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01));
@@ -176,7 +189,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 跨房PK
* 跨房PK
*
* @param optAdapter
*/
@@ -191,7 +204,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
return;
}
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null || roomInfo.getIsPermitRoom() != 1) {
if (roomInfo == null) {
return;
}
if ((AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isSuperAdmin()) &&
@@ -200,6 +213,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
int icon = AvRoomDataManager.get().isOpenAnotherPKMode() ?
R.drawable.ic_room_opt_another_pk_in :
R.drawable.ic_room_opt_another_pk_open;
optAdapter.addData(new OptAction(icon, str, () -> {
if (AvRoomDataManager.get().isDatingMode()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05));
@@ -220,7 +236,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 跨房PK
* 个播PK
*
* @param optAdapter
*/
@@ -250,6 +266,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
R.drawable.ic_room_opt_single_pk_open :
R.drawable.ic_room_opt_single_pk_in;
String finalStr = str;
optAdapter.addData(new OptAction(icon, str, () -> {
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
SingleRoomPKModel.INSTANCE
@@ -269,6 +288,8 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
}
//房间相册
private void addRoomAlbum(OptAdapter optAdapter) {
if (AvRoomDataManager.get().isHasRoomAlbum()) {
optAdapter.addData(new OptAction(R.drawable.ic_room_operation_album, ResUtil.getString(R.string.room_album), () -> {
@@ -286,10 +307,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
if (SuperAdminUtil.isSuperAdmin()) {
return;
}
if (AvRoomDataManager.get().isOpenGame()) {
return;
}
if (AvRoomDataManager.get().isSingleRoom()) {
if (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_HOME_PARTY) {
return;
}
if (AvRoomDataManager.get().isManager() && !AvRoomDataManager.get().isCpRoom()) {
@@ -336,7 +354,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 相亲 模式
* 红包
*
* @param optAdapter
*/
@@ -556,6 +574,18 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
}
/**
* 房间类型切换
*
* @param optAdapter
*/
private void addRoomTypeSwitchAction(OptAdapter optAdapter) {
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
optAdapter.addData(new OptAction(R.drawable.icon_room_type_switch,
getContext().getResources().getString(R.string.room_type), () -> RoomTypeSwitchActivity.Companion.start(getContext())));
}
}
/**
* 超管管理
*/
@@ -573,7 +603,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 超管管理
* 发布广播
*/
private void addSendBroadcastAction(OptAdapter optAdapter) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
@@ -598,7 +628,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 超管管理
* 小喇叭
*/
private void addVipSendBroadcastAction(OptAdapter optAdapter) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;

View File

@@ -1,14 +1,13 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
@@ -17,18 +16,16 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.databinding.RoomTeamPkResultDialogBinding;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.library.common.util.Utils;
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.PKTeamMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.library.utils.FormatUtils;
import com.chwl.library.utils.ResUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import java.util.ArrayList;
import java.util.List;
@@ -40,19 +37,14 @@ import lombok.Data;
* @Description
* @Date 2019/1/4
*/
public class PKResultDialog extends BaseDialog {
public class RoomTeamPKResultDialog extends BaseDialog {
private final static int TEAM_RED = PKTeamInfo.TEAM_RED;
private final static int TEAM_BLUE = PKTeamInfo.TEAM_BLUE;
private final static int PK_RESULT_VICTORY = 1;
private final static int PK_RESULT_FAIL = -1;
private final static int PK_RESULT_TIE = 0;
private LinearLayout llGuardianName;
private LinearLayout llGuardianValue;
private LinearLayout llPkMember;
private LinearLayout llScore;
private ImageView ivResultBottom;
private RoomTeamPkResultDialogBinding binding;
private ImageView ivResultTop;
private RecyclerView rvList;
private TextView tvScore;
@@ -60,9 +52,6 @@ public class PKResultDialog extends BaseDialog {
private TextView tvGuardianValue;
private TextView tvTeamStatus;
private TextView tvSeeOtherTeam;
private TextView tvTeamLose;
private LinearLayout llResultTie;
private TextView tvTieScore;
private int pkResult = PK_RESULT_TIE;
private boolean isShowOpponent = false;//是否在显示对手
@@ -70,8 +59,9 @@ public class PKResultDialog extends BaseDialog {
private RoomPkData roomPkData;
private PKTeamInfo teamInfo;
public PKResultDialog(Context context, RoomPkData roomPkData) {
public RoomTeamPKResultDialog(Context context, RoomPkData roomPkData) {
super(context, R.style.full_screen_dialog);
binding = RoomTeamPkResultDialogBinding.inflate(LayoutInflater.from(getContext()));
Window window = getWindow();
if (window != null) {
WindowManager.LayoutParams lps = window.getAttributes();
@@ -87,31 +77,20 @@ public class PKResultDialog extends BaseDialog {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_pk_result);
setContentView(binding.getRoot());
llPkMember = (LinearLayout) findViewById(R.id.ll_pk_member);
llScore = (LinearLayout) findViewById(R.id.ll_score);
ivResultBottom = (ImageView) findViewById(R.id.iv_result_bottom);
ivResultTop = (ImageView) findViewById(R.id.iv_result_top);
rvList = (RecyclerView) findViewById(R.id.rv_list);
rvList = (RecyclerView) findViewById(R.id.recycler_view);
tvScore = (TextView) findViewById(R.id.tv_score);
llGuardianName = (LinearLayout) findViewById(R.id.ll_guardian_name);
llGuardianValue = (LinearLayout) findViewById(R.id.ll_guardian_value);
tvGuardianName = (TextView) findViewById(R.id.tv_guardian_name);
tvGuardianValue = (TextView) findViewById(R.id.tv_guardian_value);
tvTeamStatus = (TextView) findViewById(R.id.tv_team_status);
tvSeeOtherTeam = (TextView) findViewById(R.id.tv_see_other_team);
tvTeamLose = (TextView) findViewById(R.id.tv_team_lose);
llResultTie = (LinearLayout) findViewById(R.id.ll_result_tie);
tvTieScore = (TextView) findViewById(R.id.tv_tie_score);
adapter = new PkResultMemberAdapter(null);
rvList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
rvList.addItemDecoration(new ColorDecoration(Color.TRANSPARENT, Utils.dip2px(getContext(), 10), 0, true));
rvList.setAdapter(adapter);
tvSeeOtherTeam.setOnClickListener(v -> {
@@ -130,28 +109,29 @@ public class PKResultDialog extends BaseDialog {
return;
}
if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_PERSON) {
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
}
int result = roomPkData.getResult();
int teamId = findTeamIdByAccount(String.valueOf(AuthModel.get().getCurrentUid()));
if (teamId == PKTeamInfo.TEAM_NONE) {
//观众
if (result == RoomPkData.PK_RESULT_DRAW) {
teamInfo = findTeamByTeamId(PKTeamInfo.TEAM_RED);
pkResult = PK_RESULT_TIE;
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_01));
llPkMember.setVisibility(View.GONE);
llScore.setVisibility(View.GONE);
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
llResultTie.setVisibility(View.VISIBLE);
tvTieScore.setText(FormatUtils.formatPKValue(roomPkData.getTeams().get(0).getScore()));
refreshBgByStatus();
if (teamInfo != null) {
tvScore.setText(teamInfo.getScore() + "");
} else {
tvScore.setText("0");
}
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
refreshView(pkResult, teamInfo);
} else {
pkResult = PK_RESULT_VICTORY;
teamInfo = findTeamByTeamId(result);
refreshView(pkResult, teamInfo);
}
} else {
@@ -161,10 +141,13 @@ public class PKResultDialog extends BaseDialog {
if (result == RoomPkData.PK_RESULT_DRAW) {
pkResult = PK_RESULT_TIE;
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_02));
tvScore.setText(teamInfo.getScore() + "");
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
tvTeamLose.setVisibility(View.GONE);
if (teamInfo != null) {
tvScore.setText(teamInfo.getScore() + "");
} else {
tvScore.setText("0");
}
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
refreshView(pkResult, teamInfo);
} else {
@@ -175,7 +158,7 @@ public class PKResultDialog extends BaseDialog {
}
private void showTeamMembers(PKTeamInfo teamInfo) {
private void showTeamMembers(int pkResult, PKTeamInfo teamInfo) {
List<PkResultMember> pkResultMembers = new ArrayList<>();
for (PKTeamMember pkTeamMember : teamInfo.getTeamMembers()) {
PkResultMember resultMember = new PkResultMember();
@@ -184,22 +167,29 @@ public class PKResultDialog extends BaseDialog {
resultMember.isMVP = pkTeamMember.getUid().equals(teamInfo.getMvp());
pkResultMembers.add(resultMember);
}
if (pkResult == PK_RESULT_VICTORY) {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_win);
} else if (pkResult == PK_RESULT_FAIL) {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_fail);
} else {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_draw);
}
adapter.setNewData(pkResultMembers);
}
private void showColorByTeam(PKTeamInfo pkTeamInfo) {
if (pkTeamInfo.getTeam() == PKTeamInfo.TEAM_RED) {
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_FF4B81));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
} else if (pkTeamInfo.getTeam() == PKTeamInfo.TEAM_BLUE) {
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_FF4B81));
} else {
//未知
}
@@ -207,14 +197,11 @@ public class PKResultDialog extends BaseDialog {
private void refreshBgByStatus() {
if (pkResult == PK_RESULT_VICTORY) {
ivResultTop.setImageResource(R.mipmap.pk_result_victory_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_victory_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_win);
} else if (pkResult == PK_RESULT_FAIL) {
ivResultTop.setImageResource(R.mipmap.pk_result_fail_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_fail_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_fail);
} else if (pkResult == PK_RESULT_TIE) {
ivResultTop.setImageResource(R.mipmap.pk_result_tie_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_tie_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_draw);
}
}
@@ -268,7 +255,7 @@ public class PKResultDialog extends BaseDialog {
private void refreshView(int pkResult, PKTeamInfo teamInfo) {
refreshBgByStatus();
showTeamMembers(teamInfo);
showTeamMembers(pkResult, teamInfo);
showColorByTeam(teamInfo);
tvScore.setText(FormatUtils.formatPKValue(teamInfo.getScore()));
@@ -291,7 +278,6 @@ public class PKResultDialog extends BaseDialog {
if (pkResult == PK_RESULT_VICTORY) {
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_06));
} else if (pkResult == PK_RESULT_FAIL) {
tvTeamLose.setVisibility(View.VISIBLE);
}
tvSeeOtherTeam.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_07));
} else {
@@ -305,7 +291,6 @@ public class PKResultDialog extends BaseDialog {
if (pkResult == PK_RESULT_VICTORY) {
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_011));
} else if (pkResult == PK_RESULT_FAIL) {
tvTeamLose.setVisibility(View.VISIBLE);
}
tvSeeOtherTeam.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_012));
} else {
@@ -327,20 +312,26 @@ public class PKResultDialog extends BaseDialog {
class PkResultMemberAdapter extends BaseQuickAdapter<PkResultMember, BaseViewHolder> {
private int avatarBgResId = R.drawable.room_team_pk_result_avatar_bg_win;
public void setAvatarBg(int redId) {
this.avatarBgResId = redId;
}
public PkResultMemberAdapter(@Nullable List<PkResultMember> data) {
super(R.layout.item_pk_result_member_rv, data);
super(R.layout.room_team_pk_result_item, data);
}
@Override
protected void convert(BaseViewHolder helper, PkResultMember item) {
CircleImageView avatar = helper.getView(R.id.civ_avatar);
ImageView avatarBg = helper.getView(R.id.iv_avatar_bg);
avatarBg.setImageResource(avatarBgResId);
ImageView avatar = helper.getView(R.id.iv_avatar);
GlideApp.with(avatar)
.load(item.avatar)
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(avatar);
helper.setVisible(R.id.iv_mvp_mark, item.isMVP);
}
}

View File

@@ -0,0 +1,325 @@
package com.chwl.app.avroom.dialog
import android.text.TextUtils
import android.view.WindowManager
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.RoomTeamPkDialogBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.widget.dialog.CommonTipDialog
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.pk.bean.PKTeamInfo
import com.chwl.core.room.pk.bean.RoomPKInvitedUpMicMember
import com.chwl.core.room.pk.bean.RoomPkData
import com.chwl.core.room.pk.event.PKDataUpdateEvent
import com.chwl.core.room.pk.event.PKTimeFinishEvent
import com.chwl.core.room.pk.event.PKTimeTickEvent
import com.chwl.core.room.pk.model.PkModel
import com.chwl.library.utils.FormatUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import io.reactivex.SingleObserver
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.Locale
class RoomTeamPkDialog : BaseDialogFragment<RoomTeamPkDialogBinding>() {
private var compositeDisposable: CompositeDisposable? = null
private var onActionListener: OnActionListener? = null
override var width = WindowManager.LayoutParams.MATCH_PARENT
override fun init() {
binding.layoutRoot.setOnClickListener {
dismissAllowingStateLoss()
}
binding.userListBlue.showBlueStyle()
binding.ivClose.setOnClickListener {
dismissAllowingStateLoss()
}
binding.tvNext.setOnClickListener {
if (PkModel.get().isFighting) {
onRestartClick()
} else {
onStartClick()
}
}
binding.ivAvatarRed.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_RED)
}
}
binding.ivAvatarBlue.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_BLUE)
}
}
binding.userListRed.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_RED)
}
}
binding.userListBlue.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_BLUE)
}
}
updateView()
}
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
compositeDisposable = CompositeDisposable()
}
override fun onStop() {
super.onStop()
EventBus.getDefault().unregister(this)
compositeDisposable?.dispose()
}
fun setOnActionListener(onActionListener: OnActionListener?) {
this.onActionListener = onActionListener
}
fun updateView() {
if (_binding == null) {
return
}
updateTeamUserList()
updateTime()
updateProgress()
if (PkModel.get().isFighting) {
binding.tvNext.setText(R.string.pk_restart)
} else {
binding.tvNext.setText(R.string.start_pk)
}
updateManageButtonVisible(AvRoomDataManager.get().isManager)
}
private fun updateTeamUserList() {
val pkMemberInfoList = PkModel.get().pkMemberInfoList
val redList =
pkMemberInfoList.filter { it.teamId == PKTeamInfo.TEAM_RED }.take(4).mapNotNull {
it.userInfo
}
val blueList =
pkMemberInfoList.filter { it.teamId == PKTeamInfo.TEAM_BLUE }.take(4).mapNotNull {
it.userInfo
}
binding.userListRed.updateData(redList.drop(1).map {
it.avatar
})
binding.userListBlue.updateData(blueList.drop(1).map {
it.avatar
})
binding.ivAvatarRed.loadAvatar(redList.firstOrNull()?.avatar)
binding.ivAvatarBlue.loadAvatar(blueList.firstOrNull()?.avatar)
}
private fun updateManageButtonVisible(isVisible: Boolean) {
val dimensionRatio: String
if (isVisible) {
binding.ivBg.setImageResource(R.drawable.room_team_pk_bg)
binding.tvNext.isVisible = true
dimensionRatio = "309:379"
} else {
binding.ivBg.setImageResource(R.drawable.room_team_pk_bg_no_manage)
binding.tvNext.isVisible = false
dimensionRatio = "309:324"
}
val params = binding.layoutContent.layoutParams as ConstraintLayout.LayoutParams
params.dimensionRatio = dimensionRatio
binding.layoutContent.layoutParams = params
}
private fun updateTime() {
if (_binding == null) {
return
}
val roomPkData = PkModel.get().curPkInfo
val pkTimeUntilEnd: Long
if (roomPkData?.pkStatus != RoomPkData.PK_STATUS_IN_PK) {
pkTimeUntilEnd = roomPkData?.duration ?: 0
} else {
pkTimeUntilEnd = roomPkData.curPkTimeUntilEnd
}
binding.tvTime.text =
String.format(Locale.ENGLISH, "%1$02d:%2$02d", pkTimeUntilEnd / 60, pkTimeUntilEnd % 60)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKDataUpdateEvent(event: PKDataUpdateEvent) {
updateProgress()
if (event.type == PKDataUpdateEvent.TYPE_RESULT) {
safeDismiss()
}
}
private fun updateProgress() {
if (_binding == null) {
return
}
val roomPkData = PkModel.get().curPkInfo
if (roomPkData?.pkStatus != RoomPkData.PK_STATUS_IN_PK) {
updateProgress(0, 0)
return
}
val redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED)
val blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE)
if (redTeam == null || blueTeam == null) {
updateProgress(0, 0)
return
}
updateProgress(redTeam.score, blueTeam.score)
}
private fun updateProgress(redScore: Long, blueScore: Long) {
val totalScore = redScore + blueScore
if (totalScore > 0) {
binding.tvScoreRed.text = FormatUtils.formatPKValue(redScore)
binding.tvScoreBlue.text = FormatUtils.formatPKValue(blueScore)
updateProgress(redScore.toFloat() / totalScore.toFloat())
} else {
updateProgress(0.5f)
}
}
private fun updateProgress(percent: Float) {
binding.pbScore.post {
binding.pbScore.progress = (percent * 100).toInt()
val progress = binding.pbScore.width * (percent)
var bias =
(progress - binding.svgaHot.width / 2f) / (binding.pbScore.width - binding.svgaHot.width)
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
bias = 1f.coerceAtMost(bias)
bias = 0f.coerceAtLeast(bias)
layoutParams.horizontalBias = bias
binding.svgaHot.layoutParams = layoutParams
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKTimeTickEvent(event: PKTimeTickEvent?) {
updateTime()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKTimeFinishEvent(event: PKTimeFinishEvent?) {
updateView()
}
private fun onSeatClick(teamType: Int) {
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager) {
//已经排麦不操作
if (!PkModel.get().pkMemberInfoList.isNullOrEmpty() && AvRoomDataManager.get().myIsInQueue) {
SingleToastUtil.showToastShort(ResUtil.getString(R.string.avroom_widget_pkboardview_03))
return
}
onActionListener?.onShowPKMicQueueDialog()
return
}
//添加红队人员
val selectDialog =
PKSelectPeopleDialog(context, teamType, PkModel.get().pkMemberInfoList)
selectDialog.setOnSelectPeopleListener { micEntityList -> //更新队伍,麦序,显示头像
val upMicMemberList: MutableList<RoomPKInvitedUpMicMember> =
ArrayList()
for (micEntity in micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue
}
val roomPKInvitedUpMicMember = RoomPKInvitedUpMicMember()
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.groupType = teamType
} else {
if (TextUtils.isEmpty(micEntity.uid)) {
roomPKInvitedUpMicMember.groupType = PKTeamInfo.TEAM_NONE
} else {
val teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid)
roomPKInvitedUpMicMember.groupType =
if (teamId == teamType) PKTeamInfo.TEAM_NONE else teamId
}
}
roomPKInvitedUpMicMember.uid = micEntity.uid
roomPKInvitedUpMicMember.nick = micEntity.nick
val micQueue = AvRoomDataManager.get().mMicQueueMemberMap
//设置坑位的位置
for (i in 0 until micQueue.size()) {
val key = micQueue.keyAt(i)
val roomQueueInfo = micQueue[key]
if (roomQueueInfo.mChatRoomMember != null && roomQueueInfo.mChatRoomMember.account == micEntity.uid
) {
roomPKInvitedUpMicMember.position = key
}
}
upMicMemberList.add(roomPKInvitedUpMicMember)
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError { throwable: Throwable ->
SingleToastUtil.showToastShort(
throwable.message
)
}
.subscribe()
}
selectDialog.show()
}
private fun onStartClick() {
onActionListener?.onBeginPK()
}
private fun onRestartClick() {
if (PkModel.get().curPkInfo == null) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_01))
dismissAllowingStateLoss()
return
}
if (PkModel.get().curPkInfo?.pkStatus == RoomPkData.PK_STATUS_AFTER_PK) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_02))
dismissAllowingStateLoss()
return
}
val tipDialog = CommonTipDialog(context)
tipDialog.setTipMsg(
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_03) +
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_04)
)
tipDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
PkModel.get().toPKAgain().subscribe(object : SingleObserver<String?> {
override fun onSubscribe(d: Disposable) {
compositeDisposable?.add(d)
}
override fun onSuccess(t: String) {
dismissAllowingStateLoss()
}
override fun onError(e: Throwable) {
SingleToastUtil.showToast(e.message)
}
})
}
}
)
tipDialog.show()
}
interface OnActionListener {
fun onBeginPK()
fun onShowPKMicQueueDialog()
}
}

View File

@@ -9,7 +9,7 @@ import android.view.WindowManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.avroom.adapter.SendBroadcastAdapter
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSendBroadcastBinding
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.app.utils.SpannableBuilder
@@ -24,7 +24,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class SendBroadcastDialog : BaseDialog<DialogSendBroadcastBinding>() {
class SendBroadcastDialog : BaseDialogFragment<DialogSendBroadcastBinding>() {
private lateinit var rvDelegate: RVDelegate<String>
private lateinit var adapter: SendBroadcastAdapter

View File

@@ -2,11 +2,11 @@ package com.chwl.app.avroom.dialog
import android.annotation.SuppressLint
import android.view.WindowManager
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomTipBinding
class SingleRoomTipDialog :
BaseDialog<DialogSingleRoomTipBinding>() {
BaseDialogFragment<DialogSingleRoomTipBinding>() {
@SuppressLint("ClickableViewAccessibility")
override fun init() {
binding?.root?.setOnClickListener {

View File

@@ -14,32 +14,36 @@ 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
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.annotation.CallSuper
import androidx.core.content.ContextCompat
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.withResumed
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 androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.chad.library.adapter.base.BaseViewHolder
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.RoomGameListDialog
import com.chwl.app.avroom.dialog.RoomGameplayDialog
import com.chwl.app.avroom.dialog.RoomOperationDialog
import com.chwl.app.avroom.presenter.BaseRoomPresenter
import com.chwl.app.avroom.room_album.RoomAlbumModel
@@ -52,25 +56,31 @@ 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.music.widget.MusicPlayerView
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
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.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.core.Constants
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.RoomMicInfo
import com.chwl.core.gift.GiftModel
import com.chwl.core.gift.bean.GiftInfo
import com.chwl.core.gift.bean.GiftType
import com.chwl.core.gift.event.GiftComboEvent
import com.chwl.core.gift.event.RoomFreeGiftEvent
import com.chwl.core.helper.AtProxy
import com.chwl.core.home.bean.BannerInfo
@@ -84,26 +94,46 @@ 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.RightBottomIconConfig
import com.chwl.core.room.bean.RoomIcon
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
import com.chwl.core.super_admin.SaConstant
import com.chwl.core.super_admin.model.SuperAdminModel
import com.chwl.core.super_admin.util.SuperAdminUtil
import com.chwl.core.support.room.AudioRoomContext
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.user.UserModel
import com.chwl.core.user.bean.BaseInfo
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.utils.LogUtils
import com.chwl.core.utils.net.VipLevelNotEnoughException
import com.chwl.library.common.util.LimitClickUtils
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
import com.chwl.library.rxbus.RxBus
import com.chwl.library.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.UIUtils
import com.example.lib_utils.ktx.getString
import com.google.gson.Gson
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.launch
@@ -119,11 +149,12 @@ 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 lateinit var bottomView: BottomView
protected lateinit var inputLayout: RelativeLayout
@@ -172,7 +203,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
@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)
@@ -204,6 +235,70 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
})
}
protected open fun initMessageView() {
messagePager = mView.findViewById<ViewPager2>(R.id.message_pager)
messageView = MessageView(context)
val tabList: MutableList<String> = java.util.ArrayList(2)
tabList.add(getString(R.string.room))
// tabList.add(getString(R.string.public_chat))
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 = messageView
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)
@@ -215,7 +310,6 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
false
}
messageView.setOnLongClickListener { _, account, name ->
showInputLayout()
if (atProxy == null) atProxy = AtProxy(inputEdit)
@@ -509,6 +603,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
open fun updateView() {
// 更新底欄
showBottomViewForDifRole()
bottomView.notifyStateChanged()
}
/**
@@ -523,6 +618,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
bottomView.showHomePartyDownMicBottom()
}
bottomView.showInputOrIcon(isOnMic)
bottomView.updateGameEntrance()
// 更新聽筒消息
bottomView.setRemoteMuteOpen(!AudioEngineManager.get().isRemoteMute)
if (isOnMic) {
@@ -552,14 +648,14 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
@CallSuper
open fun updateMicBtn() {
//todo do 关麦开麦
val currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo
if (currentRoomInfo != null) {
if (AudioEngineManager.get().isAudienceRole) {
bottomView.setMicBtnEnable(false)
bottomView.setMicBtnOpen(false)
} else {
val roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByAccount(myUid.toString())
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(myUid.toString())
if (roomQueueInfo?.mChatRoomMember != null
&& myUid.toString() == roomQueueInfo.mChatRoomMember.account
&& roomQueueInfo.mRoomMicInfo?.isMicMute == true
@@ -642,18 +738,80 @@ 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
when (v.id) {
R.id.iv_config_entrance -> {
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo ?: return
val configInfo = AvRoomDataManager.get().rightBottomIconConfig ?: return
if (configInfo.skipType == 1) {
playConfigWeb(configInfo.skipUrl)
} else if (configInfo.skipType == 2) {
playConfigBaishunGame(configInfo)
}
}
R.id.iv_game -> {
val dialog = RoomGameListDialog();
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
dialog.show(childFragmentManager, "GAME_LIST")
}
R.id.input_send -> {
sendMsg()
}
R.id.layout_room_rank -> {
DialogWebViewActivity.start(mContext, UriProvider.getRoomRanking())
}
}
}
private fun playConfigWeb(url: String) {
CommonWebViewActivity.start(mContext, url)
}
private fun playConfigBaishunGame(configInfo: RightBottomIconConfig) {
val roomIcon: RoomIcon = RoomIcon(
skipContent = configInfo.skipUrl,
skipType = 3,
showType = 1,
code = "BAISHUN",
ruleValue = configInfo.reserve)
try {
val url = roomIcon.skipContent
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
roomIcon.ruleValue,
RoomIcon.RuleValueBean::class.java
)
val config = Gson().fromJson<BaiShunGameConfig>(
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun sendMsg() {
sendMsg(inputEdit.text.toString())
val message = inputEdit.text.toString().trim()
if (isPublicMessageTab()) {
sendPublicChatMessage(message)
} else {
sendMsg(message)
}
}
@SuppressLint("CheckResult")
@@ -676,6 +834,19 @@ 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)
inputEdit.setText("")
}
/**
* 軟鍵盤顯示與隱藏的監聽
*/
@@ -698,6 +869,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
for (i in micMemberInfos.indices) {
targetUids.add(micMemberInfos[i].account.toLong())
}
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_BEGIN))
GiftModel.get()
.sendRoomGift(
giftInfo.giftId,
@@ -719,11 +893,18 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
dialogManager.showOkDialog(message)
}
}
.subscribe { _, throwable ->
.subscribe { gift, throwable ->
if (throwable != null) {
toast(throwable.message)
callback.onFail()
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_CANCEL))
} else {
if (giftInfo.giftType == GiftType.GIFT_TYPE_NORMAL || giftInfo.giftType == GiftType.GIFT_TYPE_SUPER_LUCKY || giftInfo.giftType == GiftType.GIFT_TYPE_LUCKY_24) {
giftDialog?.hide()
val giftComboEvent = GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_END)
giftComboEvent.giftNumber = gift.data.giftNum
EventBus.getDefault().post(giftComboEvent)
}
callback.onSuccess()
}
}
@@ -815,7 +996,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
}
})
val buttonItem4 =
ButtonItem(ResUtil.getString(R.string.up_mic)) { toUpMicroPhone(micPosition, currentUid.toString() + "", false) }
ButtonItem(ResUtil.getString(R.string.up_mic)) {
toUpMicroPhone(
micPosition,
currentUid.toString() + "",
false
)
}
//別問為什麽ui調整了順序
//禁用超管的上麥和抱TA上麥
if (!SuperAdminUtil.isSuperAdmin()) {
@@ -981,6 +1168,11 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
}
override fun onSendPublicChatMsgSuccess(msg: ChatRoomMessage) {
inputEdit.setText("")
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
}
/**
* 顯示資料卡片
*/
@@ -1001,7 +1193,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
@@ -1010,9 +1202,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)
})
}
/**
@@ -1076,7 +1272,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
}
override fun onFollowFail(msg: String?) {
toast("關註失敗,請稍後重試")
msg?.let {
toast(msg)
}
}
override fun updateMicView() {
@@ -1091,6 +1289,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
giftDialog?.setOnDismissListener { giftDialog = null }
}
if (giftDialog?.isShowing != true && !requireActivity().isFinishing) {
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_POINT))
giftDialog?.show()
}
}
@@ -1101,8 +1300,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)
}
}
@@ -1139,8 +1338,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
open inner class BaseRoomBottomViewWrapper : BottomViewListenerWrapper() {
@SuppressLint("CheckResult")
override fun onOpenMicBtnClick() {
val roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
//todo do 关麦开麦
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
if (roomQueueInfo?.mRoomMicInfo == null) return
//先判斷麥上是否是開麥的
if (!roomQueueInfo.mRoomMicInfo.isMicMute && !AudioEngineManager.get().isAudienceRole) {
@@ -1206,6 +1405,21 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
override fun onRoomMessageClick() {
RoomMsgActivity.start(mContext)
}
override fun onRoomGameplayClick(isOnlyPK: Boolean) {
if (isOnlyPK) {
val dialog = RoomGameplayDialog()
dialog.isOnlyPK = isOnlyPK
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
} else {
RoomGameListDialog().show(childFragmentManager, "GAME_LIST")
}
}
}
/**
@@ -1230,12 +1444,23 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
return this
}
override fun getViewFragmentManager(): FragmentManager {
return activity?.supportFragmentManager ?: childFragmentManager
}
override fun findWidget(name: String): RoomWidget? {
return widgets[name]
}
open fun initWidget() {
override fun getRoomContext(): RoomContext? {
return AudioRoomContext.get()
}
override fun getRoomContextLiveData(): LiveData<out RoomContext?> {
return AudioRoomContext.contextLiveData
}
open fun initWidget() {
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -1270,4 +1495,24 @@ open class BaseRoomFragment<V : IBaseRoomView?, P : BaseRoomPresenter<V>?> :
protected open fun onInitMusicPlayerView(view: MusicPlayerView) {
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onGiftComboEvent(event: GiftComboEvent) {
when (event.action) {
GiftComboEvent.Action.ACT_GIFT_START-> {
giftDialog?.sendGift()
}
GiftComboEvent.Action.ACT_GIFT_SHOW-> {
giftDialog?.show()
}
else -> {}
}
}
}

View File

@@ -0,0 +1,278 @@
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.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.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.GameRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.view.IGameRoomView
import com.chwl.app.databinding.FragmentGameRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.ui.widget.GiftDialog.OnGiftDialogBtnClickListener
import com.chwl.core.UriProvider
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.music.model.PlayerModel
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.event.FinishAvRoomEvent
import com.chwl.core.sud.model.GameViewInfoModel
import com.chwl.library.base.factory.CreatePresenter
import com.chwl.library.utils.SingleToastUtil
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)
}
@SuppressLint("CheckResult")
override fun initiate() {
gameBinding.microView.bindAdapter(GameMicroViewAdapter(context))
resetGameViewRect()
super.initiate()
//游戏模式暂时不需要这个
PlayerModel.get().stop()
gameBinding.roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
gameBinding.tvShowMiniMic.setOnClickListener { showMiniMic() }
gameBinding.ivShowMic.setOnClickListener { showMic() }
gameBinding.headlineWidget.setOnClickListener {
switchMessageLayoutHeight()
}
}
@SuppressLint("ClickableViewAccessibility")
override fun initMessageView() {
super.initMessageView()
messageView.messageListView?.let {
setMessagePagerAutoHeight(it)
}
}
override fun onClick(v: View) {
super.onClick(v)
when (v.id) {
R.id.iv_back_room -> {
if (AvRoomDataManager.get().isGamePlaying) {
SingleToastUtil.showToast(getString(R.string.avroom_fragment_homepartyfragment_03))
return
}
dialogManager.showOkCancelDialog(
getString(R.string.room_switch_standard_room_tips)
) {
var type = AvRoomDataManager.get().mCurrentRoomInfo?.oldType
if (type == null || type <= 0) {
type = RoomInfo.ROOMTYPE_HOME_PARTY
}
OpenRoomHelper.updateRoomInfo(
baseActivity,
AvRoomDataManager.get().mCurrentRoomInfo,
type,
0,
false
)
}
}
R.id.layout_hour_rank -> {
DialogWebViewActivity.start(
mContext,
UriProvider.getRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
}
}
}
@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
) {
switchMessageLayoutHeight()
}
false
})
}
private fun switchMessageLayoutHeight() {
val view = gameBinding.layoutMessage
val layoutParams: ViewGroup.LayoutParams = view.layoutParams
val bigHeight = ScreenUtil.dip2px(200f)
val littleHeight = ScreenUtil.dip2px(80f)
layoutParams.height =
if (layoutParams.height == littleHeight) bigHeight else littleHeight
view.layoutParams = layoutParams
}
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()
if (AvRoomDataManager.get().mCurrentRoomInfo?.isPermitRoom == 1) {
gameBinding.layoutHourRank.visibility = View.VISIBLE
} else {
gameBinding.layoutHourRank.visibility = View.GONE
}
}
private fun resetGameViewRect(){
gameBinding.vGameRect.post {
gameDelegate.gameViewRect = GameViewInfoModel.GameViewRectModel().apply {
top = gameBinding.vGameRect.top
bottom = gameBinding.layoutRoot.height - gameBinding.vGameRect.bottom
}
}
}
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(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
}

View File

@@ -6,7 +6,10 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewStub;
@@ -15,10 +18,30 @@ import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.chwl.app.avroom.activity.RoomTitleEditActivity;
import com.chwl.app.avroom.dialog.RoomNotifyLuckGiftDialog;
import com.chwl.app.databinding.LayoutRoomNotifyLuckyGiftTipBinding;
import com.chwl.app.utils.GiftAnimUtil;
import com.chwl.app.utils.NumberUtils;
import com.chwl.app.utils.RoomNotifyManager;
import com.chwl.app.utils.WeakPool;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.gift.bean.CpMsgBean;
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean;
import com.chwl.core.gift.bean.LuckyGiftMsgSelfBean;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.gift.bean.RoomNotifyDialogBean;
import com.chwl.core.utils.ComboUtil;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.app.ui.widget.BonsellaJoinAttackButtonView;
import com.chwl.app.ui.widget.GiftDialog;
import com.chwl.app.ui.widget.UserInfoDialog;
import com.chwl.core.gift.event.GiftComboEvent;
import com.chwl.core.gift.toolbox.GiftToolbox;
import com.chwl.core.utils.LogUtils;
import com.chwl.library.utils.JavaUtil;
import com.example.lib_utils.UiUtils;
import com.netease.nim.uikit.common.util.string.StringUtil;
@@ -29,7 +52,6 @@ import com.opensource.svgaplayer.SVGAImageView;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.activity.RoomOnlineUserActivity;
import com.chwl.app.avroom.dialog.ExitRoomPopupWindow;
import com.chwl.app.avroom.widget.GiftV2View;
import com.chwl.app.avroom.widget.RoomEffectView;
@@ -64,6 +86,7 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Field;
import java.util.ArrayList;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -99,6 +122,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
//收藏房间
private String FOLLOW_ROOM_TYPE = "";
public static HomePartyFragment newInstance() {
HomePartyFragment homePartyFragment = new HomePartyFragment();
Bundle bundle = new Bundle();
@@ -111,12 +135,12 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
super.onNewIntent(intent);
// clear views
roomTitle.setText("");
gameMainBinding.ivRoomCover.setImageResource(R.drawable.default_cover);
setRoomId(0, 0);
updateOnlineNumberView(0);
if (roomFragment instanceof HomePartyRoomFragment) {
((HomePartyRoomFragment) roomFragment).onNewIntent(intent);
}
}
@Override
@@ -192,10 +216,10 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onSetListener() {
gameMainBinding.ivRoomNotice.setOnClickListener(this);
roomMore.setOnClickListener(this);
ivFollowRoom.setOnClickListener(this);
// ivRoomShare.setOnClickListener(this);
gameMainBinding.llRoomInfo.setOnClickListener(this);
gameMainBinding.ivBack.setOnClickListener(this);
mRoomEffectView.setOnPlayAnimCallback(new Function0<Boolean>() {
@@ -218,7 +242,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
public void setRoomBg(RoomInfo roomInfo) {
if (svgaRoomBg == null) return;
updateView(roomInfo);
AVRoomActivity.setBackBg(mContext, roomInfo, svgaRoomBg, bgPicture);
}
@@ -241,9 +264,8 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
addTipMsg();
case RoomEvent.ROOM_INFO_UPDATE:
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
setRoomBg(AvRoomDataManager.get().mCurrentRoomInfo);
break;
case RoomEvent.RECEIVE_NORMALE_GIFT:
case RoomEvent.RECEIVE_NORMALE_GIFT://普通
onReceiveGiftMsg(roomEvent.getGiftReceiveInfo());
break;
case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人
@@ -267,12 +289,20 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
case RoomEvent.FANS_TEAM_JOIN:
onReceiveFansTeamJoinMsg(roomEvent.getChatRoomMessage());
break;
case RoomEvent.MSG_SUPER_LUCKY_GIFT:
onLuckyGiftMsg(roomEvent);
break;
case RoomEvent.MSG_CP_ABOUT:
onCpAboutMsg(roomEvent);
break;
default:
break;
}
});
}
/**
* 获取礼物飘屏是否展示
*
@@ -351,18 +381,28 @@ 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();
}
break;
case RoomInfo.ROOMTYPE_PARTY:
if (!(tempFragment instanceof PartyRoomFragment)) {
tempFragment = PartyRoomFragment.Companion.newInstance();
}
break;
case RoomInfo.ROOMTYPE_REVELRY:
if (!(tempFragment instanceof RevelryRoomFragment)) {
tempFragment = RevelryRoomFragment.Companion.newInstance();
}
break;
default:
if (!(tempFragment instanceof HomePartyRoomFragment)) {
if (tempFragment == null || !(tempFragment.getClass().getSimpleName().equals(HomePartyRoomFragment.class.getSimpleName()))) {
tempFragment = HomePartyRoomFragment.newInstance();
}
break;
@@ -374,10 +414,11 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
.replace(R.id.container, roomFragment)
.commitAllowingStateLoss();
}
setRoomBg(currentRoomInfo);
gameMainBinding.setRoomInfo(currentRoomInfo);
updateHasAnimationEffect();
roomTitle.setText(RegexUtil.getPrintableString(currentRoomInfo.getTitle()));
ImageLoadUtilsV2.loadImage(gameMainBinding.ivRoomCover, currentRoomInfo.getAvatar());
if (!StringUtil.isEmpty(currentRoomInfo.getRoomPwd())) {
roomTitle.setCompoundDrawablesWithIntrinsicBounds(null, null,
getResources().getDrawable(R.drawable.icon_room_lock), null);
@@ -391,6 +432,12 @@ 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 (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_GAME) {
gameMainBinding.ivRoomNotice.setVisibility(View.VISIBLE);
} else {
gameMainBinding.ivRoomNotice.setVisibility(View.GONE);
}
}
}
@@ -412,6 +459,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_room_notice:
showRoomIntroduction(AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin());
break;
case R.id.room_more:
int gravity = Gravity.END;
if(UiUtils.INSTANCE.isRtl(requireContext())){
@@ -420,9 +470,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
ExitRoomPopupWindow.newInstance((AVRoomActivity) requireActivity())
.showAtLocation(gameMainBinding.getRoot(), gravity, 0, 0);
break;
case R.id.ll_room_info:
RoomOnlineUserActivity.start(getActivity());
break;
case R.id.iv_follow_room:
followRoom();
break;
@@ -474,10 +521,16 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onDestroy() {
luckyGiftTipPool.clear();
handler.removeCallbacksAndMessages(null);
RoomNotifyManager.INSTANCE.clear();
if (giftView != null) {
giftView.release();
}
EventBus.getDefault().unregister(this);
gameMainBinding.giftComboBtn.cancel();
super.onDestroy();
}
@@ -491,10 +544,10 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
updateOnlineNumberView(onlineNumber);
}
/**
* 普通多人
*
* @param giftMultiReceiverInfo
*/
private void onReceiveMultiGiftMsg(GiftMultiReceiverInfo giftMultiReceiverInfo) {
if (giftMultiReceiverInfo == null || !isResumed()) return;
@@ -502,12 +555,12 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftToMultiMsg(giftMultiReceiverInfo);
giftMultiReceiverInfo.isMulti = true;
gameMainBinding.giftComboLayout.onRoomCustomMsg(giftMultiReceiverInfo);
}
/**
* 普通全麦
*
* @param multiGiftReceiveInfo
*/
private void onReceiveAllMicGiftMsg(MultiGiftReceiveInfo multiGiftReceiveInfo) {
if (multiGiftReceiveInfo == null || !isResumed()) return;
@@ -515,14 +568,20 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveMultiGiftMsg(multiGiftReceiveInfo);
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(multiGiftReceiveInfo));
}
/**
* 普通
*/
private void onReceiveGiftMsg(GiftReceiveInfo giftReceiveInfo) {
if (giftReceiveInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftMsg(giftReceiveInfo);
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(giftReceiveInfo));
}
private void onReceiveMagicMsg(MagicReceivedInfo magicReceivedInfo) {
@@ -557,7 +616,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
onlineNumber = 1;
}
}
gameMainBinding.roomNums.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_013) + onlineNumber);
// gameMainBinding.roomNums.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_013) + onlineNumber);
}
public void showUserCardDialog(String uid){
@@ -576,4 +635,161 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
}
private void showRoomIntroduction(Boolean modify) {
var isModify = modify;
RoomInfo info = AvRoomDataManager.get().mCurrentRoomInfo;
if (info == null) {
return;
}
if (SuperAdminUtil.isSuperAdmin()) {
isModify = false;
}
if (isModify) {
RoomTitleEditActivity.startForResult(getActivity(), info.getRoomDesc(), info.getIntroduction());
} else {
DialogFragment dialogFragment =
RoomTitleDialogFragment.getInstance(info.getRoomDesc(), info.getIntroduction());
dialogFragment.show(requireActivity().getSupportFragmentManager(), "roomTitle");
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftComboEvent(GiftComboEvent event) {
if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_BEGIN) {
if (gameMainBinding.giftComboBtn.isInCombo()){
gameMainBinding.giftComboBtn.waitStart();
}
} else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_END) {
showComboBtn(event.getGiftNumber());
}else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_CANCEL) {
if (gameMainBinding.giftComboBtn.isInCombo()) {
gameMainBinding.giftComboBtn.cancel();
}
}else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_POINT) {
ComboUtil.INSTANCE.setPoint(gameMainBinding.giftComboBtn);
}
}
private void showComboBtn(int number) {
if (gameMainBinding.giftComboBtn.getOnGiftComboEndListener() == null) {
gameMainBinding.giftComboBtn.setOnClickListener(v -> {
ComboUtil.INSTANCE.setPoint(gameMainBinding.giftComboBtn);
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_START));
gameMainBinding.giftComboBtn.onBtnDown();
});
gameMainBinding.giftComboBtn.setOnGiftComboEndListener(new BonsellaJoinAttackButtonView.OnGiftComboEndListener() {
@Override
public void onGiftComboEnd() {
gameMainBinding.giftComboBtn.showView(false);
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_SHOW));
}
});
}
gameMainBinding.giftComboBtn.showView(true);
gameMainBinding.giftComboBtn.start();
gameMainBinding.giftComboBtn.updateNumber(number);
}
/**
* 幸运礼物 飘屏 跟 圆球提示
*/
private void onLuckyGiftMsg(RoomEvent roomEvent) {
MsgSuperLuckyGift msgSuperLuckyGift = roomEvent.getMsgSuperLuckyGift();
if (msgSuperLuckyGift != null) {
if (msgSuperLuckyGift.luckyGiftMsgAllBean != null) {
showLuckyGiftDlg(msgSuperLuckyGift.luckyGiftMsgAllBean);
}
if (msgSuperLuckyGift.luckyGiftMsgSelfBean != null) {
showLuckyGiftDlgNotify(msgSuperLuckyGift.luckyGiftMsgSelfBean);
}
}
}
private Handler handler = new Handler(Looper.getMainLooper());
private WeakPool<View> luckyGiftTipPool = new WeakPool<>(3);
private void showLuckyGiftDlgNotify(LuckyGiftMsgSelfBean luckyGiftMsgBean) {
if (luckyGiftMsgBean == null) return;
if (luckyGiftMsgBean.getUid() != AuthModel.get().getCurrentUid()) return;
if (luckyGiftMsgBean.getRoomId() != AvRoomDataManager.get().getRoomId()) return;
if (luckyGiftMsgBean.getRoomUid() != AvRoomDataManager.get().getRoomUid()) return;
LogUtils.i(" showLuckyGiftDlgNotify = start");
View root = luckyGiftTipPool.acquire(() -> {
return LayoutInflater.from(gameMainBinding.flLuckyGiftNotifyLayout.getContext()).inflate(R.layout.layout_room_notify_lucky_gift_tip, gameMainBinding.flLuckyGiftNotifyLayout, false);
});
LayoutRoomNotifyLuckyGiftTipBinding binding = LayoutRoomNotifyLuckyGiftTipBinding.bind(root);
binding.coinNum.setText(NumberUtils.format(luckyGiftMsgBean.getCoins()));
binding.winNum.setText(java.lang.String.valueOf(luckyGiftMsgBean.getTimes()));
if (luckyGiftMsgBean.getLevel() > 1) {
binding.rootView.setBackgroundResource(R.drawable.bg_lucky_gift_tip_2);
}
root.setAlpha(0f);
root.setScaleX(0f);
root.setScaleY(0f);
gameMainBinding.flLuckyGiftNotifyLayout.addView(root);
GiftAnimUtil.showAnimation(root);
// GiftAnimUtil.expandAnimation(root);
handler.postDelayed(() -> {
try {
root.animate()
.alpha(0f)
.setDuration(500)
.withEndAction(() -> {
gameMainBinding.flLuckyGiftNotifyLayout.post(new Runnable() {
@Override
public void run() {
root.clearAnimation();
gameMainBinding.flLuckyGiftNotifyLayout.removeView(root);
luckyGiftTipPool.release(root);
}
});
})
.start();
} catch (Exception e) {
}
}, 2300);
}
private void showLuckyGiftDlg(LuckyGiftMsgAllBean data) {
//todo do 校验数据是否异常
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE,
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM,
data
));
}
/**
* cp 礼物
*/
private void onCpAboutMsg(RoomEvent roomEvent) {
//todo do 校验数据是否异常
CpMsgBean cpMsgBean = roomEvent.getCpMsgBean();
if (cpMsgBean != null) {
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CP_FIRST,
cpMsgBean.getSecond(),
cpMsgBean
));
}
}
}

View File

@@ -4,13 +4,26 @@ import android.annotation.SuppressLint;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
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.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPkDialog;
import com.chwl.app.avroom.headline.RoomHeadlineWidget;
import com.chwl.app.avroom.online.RoomOnlineWidget;
import com.chwl.app.avroom.rank.RoomRankNumberWidget;
import com.chwl.app.music.widget.MusicPlayerView;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.core.room.bean.RightBottomIconConfig;
import com.chwl.core.room.bean.RoomIcon;
import com.chwl.core.room.core.RoomDataService;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.support.room.AudioRoomContext;
import com.chwl.core.support.room.RoomAbility;
import com.chwl.core.support.room.RoomContext;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
@@ -24,12 +37,9 @@ import com.chwl.app.avroom.anotherroompk.RoomPkForceFinishDialog;
import com.chwl.app.avroom.anotherroompk.RoomPkReceivedDialog;
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.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.avroom.widget.PKBoardView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.FragmentAvRoomGameBinding;
@@ -77,6 +87,7 @@ import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
* 轰趴房间
@@ -86,10 +97,10 @@ import io.reactivex.disposables.Disposable;
*/
@CreatePresenter(HomePartyPresenter.class)
public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, HomePartyPresenter> implements
IHomePartyView, PKBoardView.OnActionListener {
IHomePartyView, RoomTeamPkDialog.OnActionListener {
private long myUid;
private PKBoardView pkBoardView;
private RoomTeamPkDialog teamPkDialog;
private Disposable mDisposable;
private FragmentAvRoomGameBinding gameBinding;
/**
@@ -99,6 +110,8 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private PKMicQueueDialog pkMicQueueDialog;
private Disposable roomPkOrderDisposable;
private boolean hasBaishunGames;
public static HomePartyRoomFragment newInstance() {
HomePartyRoomFragment roomFragment = new HomePartyRoomFragment();
Bundle bundle = new Bundle();
@@ -120,8 +133,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setKtvModel(false);
gameBinding.playTogether.setVisibility(View.GONE);
microView = mView.findViewById(R.id.micro_view);
pkBoardView = mView.findViewById(R.id.layout_pk_board);
pkBoardView.setOnActionListener(this);
gameBinding.ivTeamPk.setOnClickListener(this);
}
@Override
@@ -133,8 +145,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
@Override
public void initWidget() {
super.initWidget();
registerWidget(RoomGameplayListWidget.class.getSimpleName(), gameBinding.gameplayListWidget);
registerWidget(RoomGameplayWidget.class.getSimpleName(), gameBinding.gameplayWidget);
registerWidget(RoomOnlineWidget.class.getSimpleName(), gameBinding.onlineWidget);
registerWidget(RoomHeadlineWidget.class.getSimpleName(), gameBinding.headlineWidget);
registerWidget(RoomRankNumberWidget.class.getSimpleName(), gameBinding.rankNumberWidget);
}
@SuppressLint("CheckResult")
@@ -147,6 +160,34 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
updateQueuingMicBtn();
updatePkScoreBoard();
initRoomPkOrder(AvRoomDataManager.get().showPkBeginTime, AvRoomDataManager.get().pkBeginTime);
requestData();
}
private void requestData() {
RoomContext roomContext = AudioRoomContext.Companion.get();
if (roomContext != null) {
RoomDataService dataService = roomContext.findAbility(RoomDataService.class.getSimpleName());
if (dataService != null) {
String cacheKey = "gameplay_list#" + hashCode();
Disposable disposable = AvRoomModel.get().getRoomGamePlayList().doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
hasBaishunGames = false;
updateConfigButtonArea();
}
}).subscribe(new Consumer<List<RoomIcon>>() {
@Override
public void accept(List<RoomIcon> roomIcons) throws Exception {
if (dataService != null) {
dataService.putData(cacheKey, roomIcons);
}
hasBaishunGames = roomIcons.size() > 0;
updateConfigButtonArea();
}
});
}
}
}
@Override
@@ -195,6 +236,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setRoomInfo(AvRoomDataManager.get().mCurrentRoomInfo);
updateQueuingMicBtn();
updatePkScoreBoard();
updateConfigButtonArea();
getMvpPresenter().updateLeaveMode();
break;
case RoomEvent.ENTER_ROOM:
@@ -256,8 +298,12 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
//PK 开始弹出大记分板
if (PkModel.get().getCurPkInfo() != null
&& PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_IN_PK) {
PKScoreBoardDialog pkScoreBoardDialog = new PKScoreBoardDialog(getContext());
pkScoreBoardDialog.show();
showTeamPkDialog();
}
break;
case RoomEvent.PK_CREATE:
if (PkModel.get().getCurPkInfo() != null) {
showTeamPkDialog();
}
break;
case RoomEvent.ROOM_PK_INVITE:
@@ -344,14 +390,14 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private void updatePkScoreBoard() {
if (AvRoomDataManager.get().isOpenPKMode()) {
if (pkBoardView.getVisibility() == View.GONE) {
if (gameBinding.ivTeamPk.getVisibility() == View.GONE) {
// 通知更新背景
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(true);
EventBus.getDefault().post(pkStateEvent);
showTeamPkDialog();
}
pkBoardView.setVisibility(View.VISIBLE);
gameBinding.ivTeamPk.setVisibility(View.VISIBLE);
//这里通过接口获取PK 详情 更新pk 记分板
if (PkModel.get().getCurPkInfo() == null) {
PkModel.get().loadPKDataByRoomId(
@@ -365,7 +411,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
@Override
public void onSuccess(RoomPkData roomPkData) {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
@Override
@@ -374,7 +422,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
});
} else {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
//取消掉正在进行的龙珠
if (AvRoomDataManager.get().haveStartDragon) {
@@ -386,23 +436,41 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
} else {
if (pkBoardView.getVisibility() == View.VISIBLE) {
if (gameBinding.ivTeamPk.getVisibility() == View.VISIBLE) {
// 通知更新bg
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(false);
EventBus.getDefault().post(pkStateEvent);
}
pkBoardView.setVisibility(View.GONE);
}
if (SuperAdminUtil.isSuperAdmin()) {
pkBoardView.setVisibility(View.GONE);
gameBinding.ivTeamPk.setVisibility(View.GONE);
dismissTeamPkDialog();
}
//龙珠相关界面设置
setDragonView();
}
private void showTeamPkDialog() {
if (getActivity() == null) {
return;
}
if (teamPkDialog != null) {
if (teamPkDialog.isResumed()) {
return;
}
dismissTeamPkDialog();
}
teamPkDialog = new RoomTeamPkDialog();
teamPkDialog.setOnActionListener(this);
teamPkDialog.safeShow(requireActivity().getSupportFragmentManager(), this, null);
}
private void dismissTeamPkDialog() {
if (teamPkDialog != null) {
teamPkDialog.safeDismiss();
teamPkDialog = null;
}
}
private void cleanDragonBar() {
LogUtil.e("cleanDragonBar");
@@ -439,6 +507,13 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.ivQueuingMicro.setVisibility(View.GONE);
gameBinding.bottomView.updateQueuingMicButton();
}
updateMicroView();
changeModelShowView();
refreshDatingNextStatus();
// updateConfigButtonArea();
}
protected void updateMicroView(){
String microType = microView.getAdapter() == null ? BaseMicroViewAdapter.MICRO_TYPE_NULL : microView.getAdapter().microType();
if (AvRoomDataManager.get().isCpRoom()) {
if (!microType.equals(BaseMicroViewAdapter.MICRO_TYPE_CP)) {
@@ -456,16 +531,37 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
if (microView.getAdapter() != null) {
microView.getAdapter().notifyDataSetChanged();
}
changeModelShowView();
refreshDatingNextStatus();
}
public void updateMicBtn() {
super.updateMicBtn();
refreshDatingNextStatus();
}
public void updateConfigButtonArea() {
RightBottomIconConfig configModel = AvRoomDataManager.get().rightBottomIconConfig;
if (configModel == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
if (configModel.getIcon1Url() == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
ImageLoadUtils.loadAvatar(configModel.getIcon1Url(), gameBinding.ivConfigEntrance);
gameBinding.ivConfigEntrance.setVisibility(View.VISIBLE);
}
if (configModel.getIcon2Url() != null) {
ImageLoadUtils.loadAvatar(configModel.getIcon2Url(), gameBinding.ivGame);
}
}
if (hasBaishunGames) {
gameBinding.ivGame.setVisibility(View.VISIBLE);
}else {
gameBinding.ivGame.setVisibility(View.GONE);
}
}
private void updateQueuingMicBtn() {
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
bottomView.updateQueuingMicButton();
@@ -524,10 +620,10 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
mDisposable.dispose();
mDisposable = null;
}
dismissTeamPkDialog();
super.onDestroy();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDatingSelectUserEvent(DatingSelectUserEvent event) {
if (getMvpPresenter() != null) {
@@ -559,6 +655,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.iv_team_pk:
showTeamPkDialog();
break;
case R.id.play_together:
if (!DynamicFaceModel.get().isShowingFace()) {
FaceInfo faceInfo = DynamicFaceModel.get().getPlayTogetherFace();
@@ -588,6 +687,12 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
getMvpPresenter().cancelDragon();
});
break;
case R.id.layout_hour_rank:
DialogWebViewActivity.start(
mContext,
UriProvider.getRoomHourRankUrl(AvRoomDataManager.get().getRoomUid())
);
break;
default:
break;
}
@@ -678,12 +783,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
@Override
public void onEndPK() {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), PkModel.get().getCurPkInfo());
pkResultDialog.show();
}
@Override
public void onShowPKMicQueueDialog() {
if (PkModel.get().isFighting()) {
@@ -776,6 +875,11 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
if (AvRoomDataManager.get().mCurrentRoomInfo == null) {
return;
}
if (AvRoomDataManager.get().mCurrentRoomInfo.getIsPermitRoom() == 1) {
gameBinding.layoutHourRank.setVisibility(View.VISIBLE);
} else {
gameBinding.layoutHourRank.setVisibility(View.GONE);
}
setDragonView();
}
@@ -1007,4 +1111,16 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
super.onInitMusicPlayerView(view);
view.linkIconView(gameBinding.ivMusic, gameBinding.ivMusic);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
RoomPkData data = PkModel.get().getCurPkInfo();
if (data == null) {
return;
}
if (event.getType() == PKDataUpdateEvent.TYPE_RESULT && data.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
RoomTeamPKResultDialog teamPkResultDialog = new RoomTeamPKResultDialog(getContext(), PkModel.get().getCurPkInfo());
teamPkResultDialog.show();
}
}
}

View File

@@ -0,0 +1,34 @@
package com.chwl.app.avroom.fragment
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter
import com.chwl.app.avroom.adapter.PartyMicroViewAdapter
import com.example.lib_utils.UiUtils
import com.example.lib_utils.ktx.setMargin
/**
* 聚会房
*/
class PartyRoomFragment : HomePartyRoomFragment() {
companion object {
fun newInstance(): PartyRoomFragment {
return PartyRoomFragment()
}
}
override fun onFindViews() {
super.onFindViews()
microView.setMargin(0,UiUtils.dip2px(30f),0,0)
}
override fun updateMicroView() {
val microType =
if (microView.adapter == null) BaseMicroViewAdapter.MICRO_TYPE_NULL else microView.adapter.microType()
if (microType != BaseMicroViewAdapter.MICRO_TYPE_PARTY) {
microView.bindAdapter(PartyMicroViewAdapter(mContext))
}
if (microView.adapter != null) {
microView.adapter.notifyDataSetChanged()
}
}
}

View File

@@ -0,0 +1,34 @@
package com.chwl.app.avroom.fragment
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter
import com.chwl.app.avroom.adapter.RevelryMicroViewAdapter
import com.example.lib_utils.UiUtils
import com.example.lib_utils.ktx.setMargin
/**
* 狂欢房
*/
class RevelryRoomFragment : HomePartyRoomFragment() {
companion object {
fun newInstance(): RevelryRoomFragment {
return RevelryRoomFragment()
}
}
override fun onFindViews() {
super.onFindViews()
microView.setMargin(0, UiUtils.dip2px(30f),0,0)
}
override fun updateMicroView() {
val microType =
if (microView.adapter == null) BaseMicroViewAdapter.MICRO_TYPE_NULL else microView.adapter.microType()
if (microType != BaseMicroViewAdapter.MICRO_TYPE_REVELRY) {
microView.bindAdapter(RevelryMicroViewAdapter(mContext))
}
if (microView.adapter != null) {
microView.adapter.notifyDataSetChanged()
}
}
}

View File

@@ -2,28 +2,45 @@ package com.chwl.app.avroom.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.viewModels
import com.chwl.app.R
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.gameplay.RoomGameplayListWidget
import com.chwl.app.avroom.gameplay.RoomGameplayWidget
import com.chwl.app.avroom.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.SingleRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.singleroompk.SingleRoomPkFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkReceivedDialog
import com.chwl.app.avroom.view.ISingleRoomView
import com.chwl.app.databinding.FragmentSingleRoomBinding
import com.chwl.app.fansteam.FansTeamJoinActivity
import com.chwl.app.fansteam.FansTeamJoinedActivity
import com.chwl.app.fansteam.FansTeamViewModel
import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.webview.CommonWebViewActivity
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.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.room.core.RoomDataService
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.support.room.AudioRoomContext.Companion.get
import com.chwl.core.support.room.RoomAbility
import com.chwl.core.user.bean.UserInfo
import com.chwl.library.base.factory.CreatePresenter
import com.netease.nim.uikit.common.util.sys.ScreenUtil
@@ -51,6 +68,9 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
private lateinit var gameBinding: FragmentSingleRoomBinding
private lateinit var upMicDialog: RequestUpMicDialog
private var hasBaishunGames = false
private val fansTeamViewModel: FansTeamViewModel by viewModels()
override fun getRootLayoutId(): Int {
return R.layout.fragment_single_room
}
@@ -66,6 +86,19 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
@SuppressLint("CheckResult")
override fun initiate() {
super.initiate()
gameBinding.layoutHourRank.setOnClickListener {
DialogWebViewActivity.start(
mContext,
UriProvider.getSingleRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
}
fansTeamViewModel.loadFansTeamInitInfo()
fansTeamViewModel.fansTeamInitInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
updateFansTeamInfo(it)
}
}
}
override fun onReceiveRoomEvent(roomEvent: RoomEvent?) {
@@ -91,9 +124,84 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
gameBinding.microView.adapter?.notifyDataSetChanged()
}
RoomEvent.FANS_TEAM_OPEN_SUCCESS,
RoomEvent.FANS_TEAM_OPEN_FAILED,
RoomEvent.FANS_TEAM_JOIN,
RoomEvent.FANS_TEAM_EXIT -> {
(roomEvent.chatRoomMessage?.attachment as? FansTeamMsgAttachment)?.fansTeamMsgInfo?.let {
val currFansTeamInitInfo = fansTeamViewModel.fansTeamInitInfoLiveData.value
updateFansTeamInfo(
FansTeamInitInfo(
it.count,
currFansTeamInitInfo?.fansLevelSeq ?: 1,
roomEvent.event != RoomEvent.FANS_TEAM_OPEN_FAILED,
if (AuthModel.get().currentUid == it.uid) {
roomEvent.event == RoomEvent.FANS_TEAM_JOIN
} else {
currFansTeamInitInfo?.isAnchorFans ?: false
},
AvRoomDataManager.get().isRoomOwner,
roomEvent.event == RoomEvent.FANS_TEAM_OPEN_FAILED
)
)
}
}
}
}
@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) {
@@ -112,6 +220,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
override fun onEnterRoom() {
super.onEnterRoom()
fansTeamViewModel.loadFansTeamInitInfo()
}
override fun updateView() {
@@ -135,11 +244,9 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
override fun initWidget() {
super.initWidget()
registerWidget(
RoomGameplayListWidget::class.java.simpleName,
gameBinding.gameplayListWidget
)
registerWidget(RoomGameplayWidget::class.java.simpleName, gameBinding.gameplayWidget)
registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
override fun onInitMusicPlayerView(view: MusicPlayerView) {

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 {
public static final String APP_ID = "1578948593831571457";
public static final String APP_KEY = "J9lHOXvFWkAZiTfl4SK7IGt0wDnW3fWd";
public static boolean isTestEnv = BuildConfig.DEBUG;
}

View File

@@ -0,0 +1,715 @@
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.sud.model.GameViewInfoModel.GameViewRectModel
import com.chwl.core.sud.state.SudMGPAPPState
import com.chwl.core.sud.state.SudMGPMGState
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.ResUtil
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
var gameViewRect: GameViewRectModel? = 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()
val viewRect = gameViewRect
if (viewRect != null) {
Log.d(TAG,"notifyGameViewInfo top:${viewRect.top} viewRect:${viewRect.bottom}")
viewGameRect.put("left", viewRect.left)
viewGameRect.put("top", viewRect.top)
viewGameRect.put("right", viewRect.right)
viewGameRect.put("bottom", viewRect.bottom)
} else {
viewGameRect.put("left", 0)
viewGameRect.put(
"top",
container.context.resources.getDimensionPixelOffset(R.dimen.dp_185)
)
viewGameRect.put("right", 0)
viewGameRect.put(
"bottom",
container.context.resources.getDimensionPixelOffset(R.dimen.dp_180)
)
}
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.MG_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.MG_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(ResUtil.getString(R.string.room_game_number_full))
} 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,113 @@
package com.chwl.app.avroom.headline
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
import com.chwl.app.R
import com.chwl.app.databinding.RoomHeadlineWidgetBinding
import com.chwl.app.public_chat.core.ChatRoomClient
import com.chwl.app.public_chat.core.ChatRoomClientManager
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment
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.example.lib_utils.AppUtils
import com.example.lib_utils.UiUtils
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum
class RoomHeadlineWidget : FrameLayoutRoomWidget {
private val binding: RoomHeadlineWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_headline_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)
init {
if (UiUtils.isRtl(AppUtils.getApp())) {
binding.tvHeadlineContent.gravity = Gravity.RIGHT
}
}
override fun onStart(roomView: RoomView) {
super.onStart(roomView)
if (!isInEditMode) {
updateHeadline(null)
}
chatRoomClient = ChatRoomClientManager.getPublicChatClient()
chatRoomClient?.let {
initChatRoom(it)
}
requestCurrentHeadline()
}
private fun onReceiveMessage(message: ChatRoomMessage) {
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) {
// 登录流程在PublicChatRoomMessageWidget中已经执行了
getCompositeDisposable().add(chatRoomClient.messageObservable.subscribe {
it.forEach { message ->
onReceiveMessage(message)
}
})
}
private fun requestCurrentHeadline() {
safeLaunch {
// val data = PublicChatModel.getCurrentHeadline()
// updateHeadline(data)
}
}
private fun updateHeadline(data: HeadlineBean?) {
binding.tvHeadlineContent.text = data?.content ?: ""
binding.ivAvatar.loadAvatar(data?.avatar)
binding.tvName.text = "${data?.nick ?: ""} :"
binding.tvMoney.text = data?.payMoneyNum?.toString() ?: "0"
this.isVisible = data?.isValid() == true && !data.content.isNullOrEmpty()
}
override fun onStop() {
super.onStop()
chatRoomClient = null
}
}

View File

@@ -0,0 +1,39 @@
package com.chwl.app.avroom.online
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chad.library.adapter.base.diff.BaseQuickDiffCallback
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
class RoomOnlineAvatarAdapter :
BaseQuickAdapter<Pair<String, String?>, BaseViewHolder>(R.layout.room_online_widget_item_avatar) {
override fun convert(helper: BaseViewHolder, item: Pair<String, String?>?) {
val avatarView = helper.getView<ImageView>(R.id.iv_avatar)
avatarView.loadAvatar(item?.second)
}
fun updateData(list: List<Pair<String, String?>>?) {
val newList = ArrayList<Pair<String, String?>>()
if (list != null) {
newList.addAll(list)
}
setNewDiffData(object : BaseQuickDiffCallback<Pair<String, String?>>(newList) {
override fun areItemsTheSame(
oldItem: Pair<String, String?>,
newItem: Pair<String, String?>
): Boolean {
return newItem.first == oldItem.first
}
override fun areContentsTheSame(
oldItem: Pair<String, String?>,
newItem: Pair<String, String?>
): Boolean {
return newItem.second == oldItem.second
}
}, true)
}
}

View File

@@ -0,0 +1,220 @@
package com.chwl.app.avroom.online
import android.content.Context
import android.graphics.Outline
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewOutlineProvider
import androidx.databinding.DataBindingUtil
import com.chwl.app.R
import com.chwl.app.avroom.activity.RoomOnlineUserActivity
import com.chwl.app.databinding.RoomOnlineWidgetBinding
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.recyclerview.decoration.VerticalDecoration
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.room.core.RoomDataService
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.chwl.core.support.room.RoomWidget
import com.example.lib_utils.UiUtils
import com.example.lib_utils.ktx.singleClick
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension
import io.reactivex.Observable
import java.util.concurrent.TimeUnit
class RoomOnlineWidget : FrameLayoutRoomWidget, RoomWidget {
companion object {
const val MAX_DISPLAY_COUNT = 3
private const val ONLINE_DISPLAY_LIST = "online_display_list"
private const val ONLINE_NUMBER = "online_number"
}
private val binding: RoomOnlineWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_online_widget, this, true
)
private val adapter = RoomOnlineAvatarAdapter()
private var dataList: MutableList<Pair<String, String?>>? = null
private val dataService: RoomDataService?
get() = roomContext?.findAbility<RoomDataService>(
RoomDataService::class.java.simpleName
)
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 {
if (!isInEditMode) {
this.singleClick {
RoomOnlineUserActivity.start(context)
}
adapter.setOnItemClickListener { adapter, view, position ->
RoomOnlineUserActivity.start(context)
}
binding.recyclerView.adapter = adapter
binding.recyclerView.addItemDecoration(
VerticalDecoration(
UIUtil.dip2px(context, 4.5),
false,
false
)
)
val isRTL = UiUtils.isRtl(context)
binding.recyclerView.outlineProvider = object : ViewOutlineProvider() {
override fun getOutline(view: View?, outline: Outline?) {
if (isRTL) {
outline?.setRect(
UiUtils.dip2px(9f),
0,
(view?.width ?: 0),
(view?.height ?: 0),
)
} else {
outline?.setRect(
0,
0,
(view?.width ?: 0) - UiUtils.dip2px(9f),
(view?.height ?: 0),
)
}
}
}
binding.recyclerView.clipToOutline = true
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
(dataService?.getData(ONLINE_NUMBER) as? Int)?.let {
updateCount(it)
}
(dataService?.getData(ONLINE_DISPLAY_LIST) as? MutableList<Pair<String, String?>>)?.let {
updateList(it)
}
startUpdateOnlineTask()
registerMemberChangedListener()
}
override fun onUnbindContext() {
super.onUnbindContext()
updateList(null)
updateCount(0)
}
private fun refreshData() {
val disposable = AvRoomModel.get()
.getRoomOnlineList(AvRoomDataManager.get().roomUid)
.subscribe({
updateList(it.take(MAX_DISPLAY_COUNT).map {
Pair<String, String?>(it.uid.toString(), it.avatar)
}.toMutableList())
updateCount(it.size)
}, {
it.printStackTrace()
})
getCompositeDisposable().add(disposable)
}
private fun updateCount(count: Int) {
dataService?.putData(ONLINE_NUMBER, count)
binding.tvNumber.text = count.toString()
}
private fun updateList(list: MutableList<Pair<String, String?>>?) {
dataService?.putData(ONLINE_DISPLAY_LIST, list)
this.dataList = list
adapter.updateData(list)
}
private fun startUpdateOnlineTask() {
getCompositeDisposable().add(Observable.interval(
0, 30, TimeUnit.SECONDS
).subscribe {
refreshData()
})
}
private fun registerMemberChangedListener() {
getCompositeDisposable().add(IMNetEaseManager.get().chatRoomEventObservable.subscribe {
when (it.event) {
RoomEvent.ROOM_MEMBER_IN -> {
updateOnlineCount(1)
toItem(it.account, it.chatRoomMessage)?.let {
tryUpdateList(it, true)
}
}
RoomEvent.ROOM_MEMBER_EXIT -> {
updateOnlineCount(-1)
toItem(it.account, it.chatRoomMessage)?.let {
tryUpdateList(it, false)
}
}
}
})
}
private fun toItem(account: String?, message: ChatRoomMessage?): Pair<String, String?>? {
if (account == null) {
return null
}
if (message == null) {
return Pair(account, null)
}
val messageExtension: ChatRoomMessageExtension = message.chatRoomMessageExtension
var avatar = messageExtension.senderAvatar
val extensionData = messageExtension.senderExtension.get(account) as? Map<String, Any>
avatar = (extensionData?.getOrElse("avatar") {
avatar
} as? String) ?: avatar
return Pair(account, avatar)
}
private fun tryUpdateList(item: Pair<String, String?>, enterOrExit: Boolean) {
val index = dataList?.indexOfFirst {
it.first == item.first
} ?: -1
if (enterOrExit) {
if (index < 0 && (dataList?.size ?: 0) < MAX_DISPLAY_COUNT) {
dataList?.add(item)
updateList(dataList)
}
} else {
if (index >= 0) {
dataList?.removeAt(index)
updateList(dataList)
}
}
}
private fun updateOnlineCount(addCount: Int) {
val number = binding.tvNumber.text.toString().toIntOrNull()
if (number != null) {
binding.tvNumber.text = (number + addCount).toString()
}
}
}

View File

@@ -9,6 +9,8 @@ import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.core.manager.RoomMicQueueModel;
import com.chwl.core.support.room.AudioRoomContext;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -20,8 +22,6 @@ import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomResultData;
import com.netease.nimlib.sdk.util.Entry;
import com.chwl.app.R;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.core.AudioRoomContext;
import com.chwl.core.support.room.RoomContext;
import com.chwl.app.avroom.view.IAvRoomView;
import com.chwl.app.base.BaseMvpPresenter;
import com.chwl.core.Constants;
@@ -122,11 +122,11 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
AvRoomDataManager.get().updateServiceRoomInfo(roomInfo);
mAvRoomModel.enterRoom(roomInfo.getRoomId(), 3, fromType, fromNick, fromUid)
.flatMap(this::dealServerMicInfo)
.map(this::dealMicMemberFromIMNet)
.flatMap(this::dealMicChatRoomMemberFromIMNet)
.flatMap((Function<SparseArray<RoomQueueInfo>, ObservableSource<SparseArray<RoomQueueInfo>>>) roomQueue -> RoomMicQueueModel.INSTANCE.queueMicQueue(roomInfo.getRoomId(),roomQueue))
.compose(bindUntilEvent(PresenterEvent.DESTROY))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(roomQueueInfoSparseArray -> {
AvRoomDataManager.get().replaceMicQueue(roomQueueInfoSparseArray);
long uid = AuthModel.get().getCurrentUid();
AudioEngineManager.get().startRtcEngine(uid, roomInfo.getAudioSdkType());
// TODO 临时方案后续逐步完善整个房间的RoomContext替换计划
@@ -221,52 +221,12 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
IMNetEaseManager.get().getChatRoomEventObservable().onNext(new RoomEvent().setEvent(RoomEvent.ROOM_EXIT));
}
/**
* 处理网易云信队列上人员的信息
*/
private Observable<SparseArray<RoomQueueInfo>> dealMicChatRoomMemberFromIMNet(List<String> accounts) {
if (ListUtils.isListEmpty(accounts))
return Observable.just(AvRoomDataManager.get().mMicQueueMemberMap);
return IMNetEaseManager.get().fetchRoomMembersByIds(accounts).observeOn(AndroidSchedulers.mainThread())
.flatMap(chatRoomMembers -> {
for (ChatRoomMember chatRoomMember : chatRoomMembers) {
AvRoomDataManager.get().updateQueueChatRoomMemberExtension(chatRoomMember);
}
return Single.just(AvRoomDataManager.get().mMicQueueMemberMap);
}).toObservable();
}
/**
* 处理网易云信坑位信息
*/
private List<String> dealMicMemberFromIMNet(List<Entry<String, String>> entries) {
List<String> accounts = new ArrayList<>();
if (!ListUtils.isListEmpty(entries)) {
JsonParser jsonParser = new JsonParser();
MicMemberInfo chatRoomMember;
for (Entry<String, String> entry : entries) {
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().mMicQueueMemberMap.get(Integer.parseInt(entry.key));
if (roomQueueInfo != null) {
JsonObject valueJsonObj = jsonParser.parse(entry.value).getAsJsonObject();
if (valueJsonObj != null) {
chatRoomMember = mGson.fromJson(valueJsonObj, MicMemberInfo.class);
accounts.add(chatRoomMember.getAccount());
roomQueueInfo.mChatRoomMember = chatRoomMember;
}
AvRoomDataManager.get().mMicQueueMemberMap.put(Integer.valueOf(entry.key), roomQueueInfo);
}
}
}
return accounts;
}
/**
* 处理服务端坑位信息
*/
@Nullable
private ObservableSource<List<Entry<String, String>>> dealServerMicInfo(EnterChatRoomResultData enterChatRoomResultData) {
private ObservableSource<SparseArray<RoomQueueInfo>> dealServerMicInfo(EnterChatRoomResultData enterChatRoomResultData) {
AvRoomDataManager.get().mEnterChatRoomResultData = enterChatRoomResultData;
if (enterChatRoomResultData == null)
return Observable.error(new Throwable(GET_ROOM_FROM_IMNET_ERROR));
@@ -296,11 +256,12 @@ public class AvRoomPresenter extends BaseMvpPresenter<IAvRoomView> {
//初始化所有坑位
Map<String, String> micMapStr = mGson.fromJson(roomMicStr, new TypeToken<Map<String, String>>() {
}.getType());
SparseArray<RoomQueueInfo> queue = new SparseArray<>();
for (Map.Entry<String, String> entry : micMapStr.entrySet()) {
AvRoomDataManager.get().mMicQueueMemberMap.put(Integer.valueOf(entry.getKey()),
queue.put(Integer.valueOf(entry.getKey()),
new RoomQueueInfo(mGson.fromJson(entry.getValue(), RoomMicInfo.class), null));
}
return mAvRoomModel.queryRoomMicInfo(roomInfo.getRoomId());
return Observable.just(queue);
}
}
return Observable.error(new Throwable(GET_ROOM_FROM_IMNET_ERROR));

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;
@@ -562,4 +562,24 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
.subscribe();
}
@SuppressLint("CheckResult")
public void sendPublicChatTextMessage(String message) {
if (TextUtils.isEmpty(message)) return;
ChatRoomClient client = ChatRoomClientManager.INSTANCE.getPublicChatClient();
if (client == null) {
SingleToastUtil.showToast(R.string.public_chat_not_found);
return;
}
ChatRoomMessage textMessage = ChatRoomMessageBuilder.createChatRoomTextMessage(client.getSessionId(), 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

@@ -4,7 +4,7 @@ import android.annotation.SuppressLint;
import com.chwl.app.avroom.view.IHomePartyUserListView;
import com.chwl.app.base.BaseMvpPresenter;
import com.chwl.core.room.model.HomePartyUserListModel;
import com.chwl.core.room.model.AvRoomModel;
/**
* <p> </p>
@@ -14,15 +14,12 @@ import com.chwl.core.room.model.HomePartyUserListModel;
*/
public class HomePartyUserListPresenter extends BaseMvpPresenter<IHomePartyUserListView> {
private final HomePartyUserListModel mHomePartyUserListMode;
public HomePartyUserListPresenter() {
mHomePartyUserListMode = new HomePartyUserListModel();
}
@SuppressLint("CheckResult")
public void requestRoomOnlineList(long roomUid){
mHomePartyUserListMode.getRoomOnlineList(roomUid).compose(bindToLifecycle()).subscribe((data, throwable) -> {
AvRoomModel.get().getRoomOnlineList(roomUid).compose(bindToLifecycle()).subscribe((data, throwable) -> {
if (getMvpView() != null) {
if (data != null) {
getMvpView().onRequestRoomOnlineListSuccess(data);

View File

@@ -0,0 +1,92 @@
package com.chwl.app.avroom.rank
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
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.RoomRankNumberWidgetBinding
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.im.custom.bean.RoomSerialValueChangedAttachment
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.library.utils.FormatUtils
import com.example.lib_utils.ktx.singleClick
/**
* 房间榜单入口
*/
class RoomRankNumberWidget : FrameLayoutRoomWidget, RoomWidget {
private val binding: RoomRankNumberWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_rank_number_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.singleClick {
DialogWebViewActivity.start(context, UriProvider.getRoomRanking())
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
refreshData()
registerMemberChangedListener()
}
override fun onUnbindContext() {
super.onUnbindContext()
updateView(null)
}
private fun registerMemberChangedListener() {
getCompositeDisposable().add(IMNetEaseManager.get().chatRoomEventObservable.subscribe {
when (it.event) {
RoomEvent.SERIAL_VALUE_CHANGED -> {
val attachment =
it.chatRoomMessage.attachment as? RoomSerialValueChangedAttachment
attachment?.serialValue?.let {
updateView(attachment.serialValue)
}
}
}
})
}
private fun refreshData() {
val value = AvRoomDataManager.get().serialValue
updateView(value)
}
private fun updateView(value: Double?) {
if (value == null || value <= 0) {
binding.tvNumber.text = "0"
} else {
binding.tvNumber.text = FormatUtils.formatToShortKMHalfUp(value)
}
}
}

View File

@@ -0,0 +1,94 @@
package com.chwl.app.avroom.rank
import android.content.Context
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
import com.chwl.app.ui.webview.DialogWebViewActivity
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.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.core.utils.net.RxHelper
import com.example.lib_utils.ktx.singleClick
/**
* 房间榜单入口
*/
class RoomRankWidget : FrameLayoutRoomWidget, RoomWidget {
private val binding: RoomRankWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_rank_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.singleClick {
DialogWebViewActivity.start(context, UriProvider.getRoomRanking())
refreshData()
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
refreshData()
}
override fun onUnbindContext() {
super.onUnbindContext()
updateView(null)
}
private fun refreshData() {
val disposable = RoomContributeListModel.get()
.getSingleRoomRanking(1, RoomContributeDataInfo.TYPE_ROOM_DAY_RANKING)
.compose(RxHelper.handleBeanData())
.subscribe { roomContributeDataInfo: RoomContributeDataInfo ->
updateView(roomContributeDataInfo.rankings)
}
getCompositeDisposable().add(disposable)
}
private fun updateView(list: List<RoomContributeUserInfo>?) {
arrayListOf(
binding.ivRank0, binding.ivRank1, binding.ivRank2
).forEachIndexed { index, imageView ->
val url = list?.getOrNull(index)?.avatar
if (url.isNullOrEmpty()) {
imageView.isVisible = false
} else {
imageView.loadAvatar(url)
imageView.isVisible = true
}
}
}
fun setContentBackgroundResource(resId: Int) {
binding.layoutRoot.setBackgroundResource(resId)
}
}

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

@@ -3,13 +3,13 @@ package com.chwl.app.avroom.room_album
import android.annotation.SuppressLint
import android.os.Bundle
import com.hjq.toast.ToastUtils
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogLockRoomAlbumPhotoBinding
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.core.gift.bean.GiftReceiveInfo
import com.chwl.core.manager.AvRoomDataManager
class UnlockRoomAlbumPhotoDialog : BaseDialog<DialogLockRoomAlbumPhotoBinding>(){
class UnlockRoomAlbumPhotoDialog : BaseDialogFragment<DialogLockRoomAlbumPhotoBinding>(){
var onUnlockRoomPhotoListener: OnUnlockRoomPhotoListener? = null

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.room_album
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.app.Dialog
import android.content.Intent
import android.os.Build
@@ -11,6 +12,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
@@ -25,12 +29,17 @@ import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
import com.chwl.core.Constants
import com.chwl.core.gift.bean.GiftInfo
import com.chwl.core.utils.DialogUtil
import com.chwl.core.utils.MyUriUtils
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.photo.PhotoProvider.photoProvider
import com.chwl.library.common.util.PhotoCompressUtil.compress
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
import com.chwl.library.common.util.PhotosCompressCallback
import com.chwl.library.common.util.SPUtils
import com.chwl.library.constants.ConstantsLib
import com.chwl.library.easypermisssion.EasyPermissions
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
import kotlinx.coroutines.Job
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
@@ -45,7 +54,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
private var unlockedGift: GiftInfo? = null
private var compressJob: Job? = null
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
val dialogManager by lazy {
DialogManager(context)
}
@@ -55,6 +64,17 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog)
if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(requireContext())) {
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
uri?.let {
val file = MyUriUtils.copyFile(requireContext(),uri)
if (file != null) {
compressPhotos(mutableListOf(file.path))
}
}
}
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@@ -194,7 +214,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
return@setOnClickListener
}
dialogManager.showProgressDialog(context)
// dialogManager.showProgressDialog(context)
viewModel.upload(
list,
type,
@@ -204,7 +224,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
viewModel.uploadLiveData.observe(this) {
it?.getContentIfNotHandled()?.let { success ->
dialogManager.hideProgressDialog()
// dialogManager.hideProgressDialog()
if (success) {
dismiss()
@@ -219,28 +239,37 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
}
private fun checkStoragePermission() {
if (!EasyPermissions.hasPermissions(
requireContext(),
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
else Manifest.permission.READ_EXTERNAL_STORAGE
)
) {
EasyPermissions.requestPermissions(
this,
getString(R.string.permission_storage_rationale),
100,
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
else Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
photoProvider(
this,
7 - photoAdapter.data.size,
true,
200,
true
)
if (Build.VERSION.SDK_INT >= 33){
DialogUtil.getDialog(requireActivity(),object : EasyAlertDialogHelper.OnDialogActionListener {
override fun doCancelAction() {
}
override fun doOkAction() {
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
})
}else{
if (!EasyPermissions.hasPermissions(requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE)) {
EasyPermissions.requestPermissions(
this,
getString(R.string.permission_storage_rationale),
100,
Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
photoProvider(
this,
7 - photoAdapter.data.size,
true,
200,
true
)
}
}
}
@Deprecated("Deprecated in Java")

View File

@@ -5,7 +5,7 @@ import android.os.Bundle
import android.view.WindowManager
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomPkFinishBinding
import com.chwl.app.ui.utils.load
import com.chwl.core.im.custom.bean.RoomPkBean
@@ -14,7 +14,7 @@ import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import java.util.concurrent.TimeUnit
class SingleRoomPkFinishDialog : BaseDialog<DialogSingleRoomPkFinishBinding>() {
class SingleRoomPkFinishDialog : BaseDialogFragment<DialogSingleRoomPkFinishBinding>() {
companion object {
@JvmStatic

View File

@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.WindowManager
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomPkForceFinishBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.utils.extension.subAndReplaceDot
class SingleRoomPkForceFinishDialog : BaseDialog<DialogSingleRoomPkForceFinishBinding>() {
class SingleRoomPkForceFinishDialog : BaseDialogFragment<DialogSingleRoomPkForceFinishBinding>() {
companion object {
@JvmStatic

View File

@@ -4,7 +4,7 @@ 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.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.manager.AvRoomDataManager
@@ -17,7 +17,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class SingleRoomPkReceivedDialog : BaseDialog<DialogSingleRoomPkReceivedBinding>() {
class SingleRoomPkReceivedDialog : BaseDialogFragment<DialogSingleRoomPkReceivedBinding>() {
companion object {

View File

@@ -1,12 +1,12 @@
package com.chwl.app.avroom.singleroompk
import android.text.method.ScrollingMovementMethod
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomPkRuleBinding
import com.chwl.core.room.anotherroompk.SingleRoomPKModel
import com.chwl.core.utils.extension.toast
class SingleRoomPkRuleDialog : BaseDialog<DialogSingleRoomPkRuleBinding>() {
class SingleRoomPkRuleDialog : BaseDialogFragment<DialogSingleRoomPkRuleBinding>() {
companion object {

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.view
import com.chwl.core.bean.RoomMicInfo
import com.chwl.core.room.bean.RoomContributeUserInfo
import com.chwl.library.base.IMvpBaseView
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
/**
*
@@ -32,6 +33,7 @@ interface IBaseRoomView : IMvpBaseView {
fun chatRoomReConnectView()
fun showToast(msg: String?)
fun onSendMsgSuccess(msg: String?)
fun onSendPublicChatMsgSuccess(msg: ChatRoomMessage)
/**
* 上麦请求

View File

@@ -12,16 +12,17 @@ import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.chwl.core.manager.AvRoomDataManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.chwl.library.utils.SizeUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nimlib.sdk.msg.model.RecentContact;
@@ -29,7 +30,6 @@ import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.chwl.app.R;
import com.chwl.app.avroom.BottomViewListenerWrapper;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.vip.VipMainActivity;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.core.helper.ImHelperUtils;
import com.chwl.core.manager.AvRoomDataManager;
@@ -38,9 +38,7 @@ import com.chwl.core.pay.event.FirstChargeEvent;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.bean.RoomModeType;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.user.UserModel;
import com.chwl.core.utils.SharedPreferenceUtils;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.utils.ListUtils;
import org.greenrobot.eventbus.EventBus;
@@ -54,13 +52,14 @@ import java.util.List;
* @date 2017/7/26
*/
public class BottomView extends FrameLayout implements View.OnClickListener {
public class BottomView extends LinearLayout implements View.OnClickListener {
/**
* 有新功能加1
*/
private static final int NEW_OPTION = 1;
private static final String SH_NEW_OPTION = "sh_new_option";
private static final String NEW_OPTION_ROOM_TYPE = "new_option_room_type";
private BottomViewListenerWrapper wrapper;
private ImageView openMic;
@@ -74,10 +73,11 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
private LinearLayout micLayout;
private ImageView iconMicQueue;
private ImageView iconRoomMsg;
private ImageView iconVip;
@Nullable
private PopupWindow msgTipPopupWindow;
private PopupWindow micSetPopupWindow;
@NonNull
private final Runnable msgRunnable = this::dismissMsgPopupWindow;
@@ -111,7 +111,6 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
iconMicQueue = (ImageView) findViewById(R.id.icon_mic_queue);
iconRoomMsg = findViewById(R.id.iv_room_message);
iconVip = findViewById(R.id.icon_room_vip);
openMic.setOnClickListener(this);
sendMsgInput.setOnClickListener(this);
sendFace.setOnClickListener(this);
@@ -120,7 +119,6 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
sendMagic.setOnClickListener(this);
iconMicQueue.setOnClickListener(this);
iconRoomMsg.setOnClickListener(this);
iconVip.setOnClickListener(this);
setMicBtnEnable(false);
setMicBtnOpen(false);
@@ -158,9 +156,12 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
int newOption = (int) SharedPreferenceUtils.get(SH_NEW_OPTION, 0);
if (newOption == NEW_OPTION) {
sendMagic.setImageResource(R.drawable.icon_send_magic);
sendMagic.setImageResource(R.drawable.room_menu_ic_more);
if (isRemindOptionForRoomType()) {
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
}
} else {
sendMagic.setImageResource(R.drawable.icon_send_magic);
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
}
sendMagic.setClickable(true);
sendMagic.setOnClickListener(this);
@@ -171,6 +172,29 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
}
}
private boolean isRemindOptionForRoomType() {
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
if (isReminded) {
return false;
}
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
return true;
}
return false;
}
private boolean updateOptionForRoomType() {
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
if (isReminded) {
return false;
}
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
SharedPreferenceUtils.put(NEW_OPTION_ROOM_TYPE, true);
return true;
}
return false;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveRecentContactChanged(List<RecentContact> imMessages) {
setRoomMessageUnread(IMMessageManager.get().queryUnreadMsg());
@@ -181,11 +205,11 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFirstRechargeEvent(FirstChargeEvent event) {
sendGift.setImageResource(R.drawable.icon_room_send_gift);
// sendGift.setImageResource(R.drawable.icon_room_send_gift);
}
public void setRoomMessageUnread(int count) {
iconRoomMsg.setImageResource(count > 0 ? R.drawable.icon_room_send_msg_point : R.drawable.icon_room_send_msg);
iconRoomMsg.setImageResource(count > 0 ? R.drawable.room_menu_ic_message_new : R.drawable.room_menu_ic_message);
}
public void setBottomViewListener(BottomViewListenerWrapper wrapper) {
@@ -204,25 +228,47 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
public void setMicBtnOpen(boolean isOpen) {
if (isOpen) {
openMic.setImageResource(R.drawable.icon_room_open_mic);
openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
} else {
openMic.setImageResource(R.drawable.icon_room_close_mic);
openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
}
}
public void setRemoteMuteOpen(boolean isOpen) {
if (isOpen) {
remoteMute.setImageResource(R.drawable.icon_remote_mute_close);
remoteMute.setImageResource(R.drawable.room_menu_ic_vocality_open);
} else {
remoteMute.setImageResource(R.drawable.icon_remote_mute_open);
remoteMute.setImageResource(R.drawable.room_menu_ic_vocality_close);
}
}
public void notifyStateChanged() {
setMagicBtnEnable(true);
}
public void showHomePartyUpMicBottom() {
faceLayout.setVisibility(VISIBLE);
micLayout.setVisibility(VISIBLE);
}
public void updateGameEntrance() {
// game btn pk按钮游戏按钮 显示控制
// if (AvRoomDataManager.get().isManager() || SuperAdminUtil.isSuperAdmin()) {
// if (!AvRoomDataManager.get().isCpRoom()) {
// pkGameView.setVisibility(VISIBLE);
// iconRoomBaiShunGame.setVisibility(VISIBLE);
// }
// } else {
// pkGameView.setVisibility(GONE);
// iconRoomBaiShunGame.setVisibility(GONE);
// }
// if (AvRoomDataManager.get().isSingleRoom() || AvRoomDataManager.get().isDatingMode()) {
// pkGameView.setVisibility(GONE);
// }
}
public void showHomePartyDownMicBottom() {
faceLayout.setVisibility(GONE);
micLayout.setVisibility(GONE);
@@ -257,8 +303,8 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
}
public void setQueuingMicButtonBackground(boolean isEmpty) {
iconMicQueue.setImageResource(isEmpty ? R.drawable.icon_room_mic_queue :
R.drawable.icon_room_mic_queue_not_empty);
iconMicQueue.setImageResource(isEmpty ? R.drawable.room_menu_ic_mic_queue :
R.drawable.room_menu_ic_mic_queue_new);
}
@@ -274,6 +320,7 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
if (wrapper != null) {
wrapper.onOpenMicBtnClick();
}
// showMicSetDialog(openMic);
break;
case R.id.tv_room_send_msg_input:
@@ -298,12 +345,14 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
}
break;
case R.id.icon_room_send_magic:
int newOption = (int) SharedPreferenceUtils.get(SH_NEW_OPTION, 0);
if (newOption != NEW_OPTION) {
SharedPreferenceUtils.put(SH_NEW_OPTION, NEW_OPTION);
setMagicBtnEnable(true);
}
if (updateOptionForRoomType()) {
setMagicBtnEnable(true);
}
if (wrapper != null) {
wrapper.onMoreBtnClick();
@@ -320,9 +369,16 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
wrapper.onRoomMessageClick();
}
break;
case R.id.icon_room_vip:
VipMainActivity.start(getContext());
break;
// case R.id.icon_room_PK_game:
// if (wrapper != null) {
// wrapper.onRoomGameplayClick(true);
// }
// break;
// case R.id.icon_room_baishun_game:
// if (wrapper != null) {
// wrapper.onRoomGameplayClick(false);
// }
// break;
default:
break;
}
@@ -404,4 +460,40 @@ public class BottomView extends FrameLayout implements View.OnClickListener {
parent.postDelayed(msgRunnable, 3000);
}
private void showMicSetDialog(View parent){
//todo do 关麦开麦
View contentView;
if (micSetPopupWindow == null) {
contentView = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null);
micSetPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
micSetPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// micSetPopupWindow.setAnimationStyle(R.style.style_anim_mic_set);
} else {
contentView = micSetPopupWindow.getContentView();
}
ImageView micOff = contentView.findViewById(R.id.micOff);
ImageView micMusic = contentView.findViewById(R.id.micMusic);
ImageView micOn = contentView.findViewById(R.id.micOn);
micOff.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micMusic.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micOn.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
int[] vLoc = new int[2];
parent.getLocationInWindow(vLoc);
try {
micSetPopupWindow.showAsDropDown(parent,0, -ScreenUtil.dip2px(180),Gravity.CENTER_HORIZONTAL);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -109,7 +109,7 @@ public class EditRoomTitleDialog extends AppCompatDialog {
tvTitle.setText(ResUtil.getString(R.string.avroom_widget_editroomtitledialog_03));
tvLimit.setVisibility(View.VISIBLE);
etContent.setHint(ResUtil.getString(R.string.avroom_widget_editroomtitledialog_04));
maxLength = 15;
maxLength = 25;
etContent.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
setLimtText();
} else if (dialogType == TYPE_EDIT_DESC) {

View File

@@ -1,7 +1,5 @@
package com.chwl.app.avroom.widget;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.os.Handler;
@@ -11,20 +9,26 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.chwl.library.utils.PathHelper;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
import com.chwl.library.download.DownloadTask;
import com.chwl.library.download.FileDownloadListener;
import com.example.lib_utils.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.tencent.qgame.animplayer.AnimConfig;
import com.tencent.qgame.animplayer.AnimView;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.ui.utils.ImageLoadKt;
import com.chwl.core.gift.GiftModel;
import com.chwl.core.gift.bean.GiftEffectInfo;
import com.chwl.core.gift.bean.GiftInfo;
@@ -33,39 +37,33 @@ import com.chwl.core.initial.bean.InitInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.library.utils.ResolutionUtils;
import com.tencent.qgame.animplayer.inter.IAnimListener;
import com.tencent.qgame.animplayer.util.ScaleType;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import javax.annotation.Nullable;
/**
* @author chenran
* @date 2017/10/8
*/
public class GiftEffectView extends RelativeLayout implements SVGACallback {
private RelativeLayout container;
public class GiftEffectView extends RelativeLayout {
private SVGAImageView svgaImageView;
private AnimView vapAnimView;
private View svgaBg;
private ImageView giftLightBg;
private CircleImageView giftImg;
private ImageView imgBg;
private CircleImageView benefactorAvatar;
private CircleImageView receiverAvatar;
private TextView benefactorNick;
private TextView receiverNick;
private TextView giftNumber;
private TextView giftName;
private GiftEffectListener giftEffectListener;
private EffectHandler effectHandler;
private boolean isAnim;
private boolean isPlayAnim;
private boolean isHideCarEffect;
private String DOWNLOAD_TAG = "gift_effect_download";
private SVGAParser.ParseCompletion parseCompletion;
public GiftEffectView(Context context) {
super(context);
init();
@@ -96,22 +94,85 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
private void init() {
LayoutInflater.from(getContext()).inflate(R.layout.layout_gift_effect, this, true);
effectHandler = new EffectHandler(this);
container = findViewById(R.id.container);
imgBg = findViewById(R.id.img_bg);
giftLightBg = findViewById(R.id.gift_light_bg);
giftImg = findViewById(R.id.gift_img);
benefactorAvatar = findViewById(R.id.benefactor_avatar);
receiverAvatar = findViewById(R.id.receiver_avatar);
benefactorNick = findViewById(R.id.benefactor_nick);
receiverNick = findViewById(R.id.receiver_nick);
giftNumber = findViewById(R.id.gift_number);
giftName = findViewById(R.id.gift_name);
svgaImageView = findViewById(R.id.svga_imageview);
svgaImageView.setCallback(this);
svgaImageView.setClearsAfterStop(true);
svgaImageView.setLoops(1);
svgaBg = findViewById(R.id.svga_imageview_bg);
vapAnimView = findViewById(R.id.vap_anim_view);
parseCompletion = new SVGAParser.ParseCompletion() {
@Override
public void onError() {
log("onError");
effectHandler.sendEmptyMessage(0);
}
@Override
public void onComplete(@NonNull SVGAVideoEntity svgaVideoEntity) {
log("onComplete");
SVGADrawable drawable = new SVGADrawable(svgaVideoEntity);
svgaImageView.setImageDrawable(drawable);
svgaImageView.startAnimation();
svgaBg.setVisibility(VISIBLE);
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(svgaBg, "alpha", 0.0F, 2.0F).setDuration(1250);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1.start();
}
};
svgaImageView.setCallback(new SVGACallback() {
@Override
public void onPause() {
log("onPause");
}
@Override
public void onFinished() {
log("onFinished");
effectHandler.sendEmptyMessage(0);
}
@Override
public void onRepeat() {
log("onRepeat");
}
@Override
public void onStep(int i, double v) {
}
});
vapAnimView.setScaleType(ScaleType.CENTER_CROP);
vapAnimView.setAnimListener(new IAnimListener() {
@Override
public boolean onVideoConfigReady(@NonNull AnimConfig animConfig) {
return true;
}
@Override
public void onVideoStart() {
log("onVideoStart");
}
@Override
public void onVideoRender(int i, @androidx.annotation.Nullable AnimConfig animConfig) {
}
@Override
public void onVideoComplete() {
log("onVideoComplete");
effectHandler.sendEmptyMessage(0);
}
@Override
public void onVideoDestroy() {
log("onVideoDestroy");
}
@Override
public void onFailed(int i, @androidx.annotation.Nullable String s) {
log("onFailed i:" + i + " s:" + s);
}
});
}
public void startGiftEffect(GiftEffectInfo giftEffectInfo) {
@@ -121,107 +182,98 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
giftInfo = giftEffectInfo.getGift();
}
if (giftInfo != null) {
isPlayAnim = false;
container.setVisibility(INVISIBLE);
effectHandler.sendEmptyMessageDelayed(0, 4000);
if (giftInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(giftInfo.getViewUrl())) {
drawVAPEffect(giftInfo.getViewUrl());
} else if (giftInfo.isHasVggPic() && !StringUtil.isEmpty(giftInfo.getVggUrl())) {
try {
drawSvgaEffect(giftInfo.getVggUrl());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
InitInfo initInfo = InitialModel.get().getCacheInitInfo();
if (!isHideCarEffect && initInfo != null && giftInfo.getGoldPrice() >= initInfo.getHideCarEffectGiftPrice()) {
isHideCarEffect = true;
IMNetEaseManager.get().noticeRoomEvent(null, RoomEvent.ROOM_CAR_EFFECT_HIDE);
}
if (!AvRoomDataManager.get().mIsNeedGiftEffect || AvRoomDataManager.get().isSelfGamePlaying()) {
effectHandler.sendEmptyMessage(0);
return;
}
if (giftInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(giftInfo.getViewUrl())) {
drawVAPEffect(giftInfo.getViewUrl());
} else if (giftInfo.isHasVggPic() && !StringUtil.isEmpty(giftInfo.getVggUrl())) {
drawSvgaEffect(giftInfo.getVggUrl());
} else {
effectHandler.sendEmptyMessage(0);
}
} else {
effectHandler.sendEmptyMessage(0);
}
}
private void drawSvgaEffect(String url) throws MalformedURLException {
if (!AvRoomDataManager.get().mIsNeedGiftEffect ||
AvRoomDataManager.get().isSelfGamePlaying()) {
return;
private void drawSvgaEffect(String url) {
log("drawSvgaEffect url:" + url);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
drawSvgaEffectFile(path);
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
log("drawSvgaEffect onDownloadError url:" + url);
effectHandler.sendEmptyMessage(0);
}
});
}
private void drawSvgaEffectFile(String path) {
try {
log("drawSvgaEffectFile path:" + path);
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(path));
SVGAParser.Companion.shareParser().decodeFromInputStream(inputStream, path, parseCompletion, true, null, null);
} catch (Exception e) {
e.printStackTrace();
effectHandler.sendEmptyMessage(0);
}
SVGAParser.Companion.shareParser().decodeFromURL(new URL(url), new SVGAParser.ParseCompletion() {
@Override
public void onComplete(@Nullable SVGAVideoEntity videoItem) {
SVGADrawable drawable = new SVGADrawable(videoItem);
svgaImageView.setImageDrawable(drawable);
svgaImageView.startAnimation();
svgaBg.setVisibility(VISIBLE);
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(svgaBg, "alpha", 0.0F, 2.0F).setDuration(1250);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1.start();
}
@Override
public void onError() {
}
}, null);
}
private void drawVAPEffect(String url) {
if (!AvRoomDataManager.get().mIsNeedGiftEffect || AvRoomDataManager.get().isSelfGamePlaying()) {
return;
}
ImageLoadKt.loadAnim(vapAnimView, url);
log("drawVAPEffect url:" + url);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + path);
vapAnimView.startPlay(new File(path));
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
log("drawVAPEffect onDownloadError url:" + url);
exception.printStackTrace();
effectHandler.sendEmptyMessageDelayed(0, 4000);
}
});
}
private void deleteAnim() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(container, "translationX", container.getX(), ResolutionUtils.getScreenWidth(getContext())).setDuration(1250);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(container, "alpha", 1.0F, 0.0F).setDuration(1250);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (isHideCarEffect) {
isHideCarEffect = false;
IMNetEaseManager.get().noticeRoomEvent(null, RoomEvent.ROOM_CAR_EFFECT_SHOW);
}
if (giftEffectListener != null) {
isAnim = false;
isPlayAnim = false;
giftEffectListener.onGiftEffectEnd();
}
}
});
objectAnimator1.start();
if (isHideCarEffect) {
isHideCarEffect = false;
IMNetEaseManager.get().noticeRoomEvent(null, RoomEvent.ROOM_CAR_EFFECT_SHOW);
}
svgaBg.setVisibility(GONE);
isAnim = false;
isPlayAnim = false;
if (giftEffectListener != null) {
giftEffectListener.onGiftEffectEnd();
}
}
public void release() {
log("release");
DownloadManager.INSTANCE.stopTag(DOWNLOAD_TAG);
effectHandler.removeMessages(0);
}
@Override
public void onPause() {
}
@Override
public void onFinished() {
svgaBg.setVisibility(GONE);
}
@Override
public void onRepeat() {
}
@Override
public void onStep(int i, double v) {
}
public interface GiftEffectListener {
void onGiftEffectEnd();
}
@@ -246,4 +298,8 @@ public class GiftEffectView extends RelativeLayout implements SVGACallback {
}
}
}
private void log(String message) {
LogUtil.INSTANCE.d("GiftEffectView", message, false);
}
}

View File

@@ -23,6 +23,8 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.chwl.core.utils.ComboUtil;
import com.chwl.core.auth.AuthModel;
import com.example.lib_utils.UiUtils;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
@@ -89,6 +91,7 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
private int mScreenWidth;
private int mScreenHeight;
private Keyframe[] keyScale;
private Keyframe[] keyScaleCombo;
private Keyframe[] keyTrans;
private SvgaObjectPool mMagicViewPool;
@@ -126,6 +129,13 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
keyScale[4] = (Keyframe.ofFloat(0.5f, 2f));
keyScale[5] = (Keyframe.ofFloat(0.8f, 2f));
keyScale[6] = (Keyframe.ofFloat(1f, 1f));
keyScaleCombo = new Keyframe[4];
keyScaleCombo[0] = (Keyframe.ofFloat(0f, 0.25f));
keyScaleCombo[1] = (Keyframe.ofFloat(0.25f, 0.5f));
keyScaleCombo[2] = (Keyframe.ofFloat(0.5f, 0.75f));
keyScaleCombo[3] = (Keyframe.ofFloat(1f, 1f));
keyTrans = new Keyframe[3];
keyTrans[0] = (Keyframe.ofFloat(0f, 0));
keyTrans[1] = (Keyframe.ofFloat(0.2f, 0));
@@ -255,6 +265,14 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
}
Point senderPoint = micViewPoint.get(senderPosition);
Point receivePoint = micViewPoint.get(receivePosition);
// 连击 特殊动画
if (giftReceiveInfo.getUid() == AuthModel.get().getCurrentUid()){
if (ComboUtil.INSTANCE.isChangePoint()) {
senderPoint = ComboUtil.INSTANCE.getPoint();
}
}
//设置动画结束的位置
if (receivePoint == null || isGameRoomMoreThan6People()) { //这种情况就是接收者已经不在麦上
//礼物送到中间的位置
@@ -275,7 +293,7 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
}
GiftReceiveInfo giftReceiveInfo = giftReceiveInfos.get(0);
GiftInfo giftInfo = giftReceiveInfo.getGift();
if (totalCoin >= 520 || (giftInfo != null && giftInfo.isHasEffect())) {
if (giftInfo != null && giftInfo.isEffectGift()) {
Message msg = Message.obtain();
msg.what = 0;
GiftEffectInfo giftEffectInfo = new GiftEffectInfo();
@@ -364,7 +382,7 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
targetUsers.add(giftReceiver);
if (!isShowAnimation) return;
giftInfo = giftReceiveInfo.getDisplayGift().get(pos);
if (giftInfo != null && giftInfo.isHasEffect()) {
if (giftInfo != null && giftInfo.isEffectGift()) {
Message msg = Message.obtain();
msg.what = 0;
GiftEffectInfo giftEffectInfo = new GiftEffectInfo();
@@ -627,6 +645,7 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
return;
}
GiftInfo giftInfo = giftReceiveInfo.getGift();
giftInfo.uid = giftReceiveInfo.getUid();
if (giftInfo == null) {
return;
}
@@ -668,8 +687,24 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect
PropertyValuesHolder p1 = PropertyValuesHolder.ofKeyframe("translationY", keyTrans[0], keyTrans[1], keyTrans[2], keyTransY3, keyTransY4, keyTransY5);
PropertyValuesHolder p2 = PropertyValuesHolder.ofKeyframe("scaleX", keyScale);
PropertyValuesHolder p3 = PropertyValuesHolder.ofKeyframe("scaleY", keyScale);
ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, p2, p3, p1, p0);
objectAnimator.setDuration(4000);
PropertyValuesHolder p0c = PropertyValuesHolder.ofKeyframe("translationX", keyTrans[0], keyTransX5);
PropertyValuesHolder p1c = PropertyValuesHolder.ofKeyframe("translationY", keyTrans[0], keyTransY5);
PropertyValuesHolder p2c = PropertyValuesHolder.ofKeyframe("scaleX", keyScaleCombo);
PropertyValuesHolder p3c = PropertyValuesHolder.ofKeyframe("scaleY", keyScaleCombo);
long time;
ObjectAnimator objectAnimator;
// 连击 特殊动画
if (ComboUtil.INSTANCE.isChangePoint() && giftInfo.uid == AuthModel.get().getCurrentUid()){
objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, p2c, p3c, p1c, p0c);
time = 600;
}else {
objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, p2, p3, p1, p0);
time = 2000;
}
objectAnimator.setDuration(time);
objectAnimator.start();
objectAnimator.addListener(new AnimatorListenerAdapter() {
@Override

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