Compare commits

...

145 Commits

Author SHA1 Message Date
edwinQQQ
c64c541a56 Bug fix 2025-03-06 14:24:33 +08:00
eggmanQQQ
964980c714 fix: fixbug 2025-03-04 16:35:11 +08:00
eggmanQQQ
2d417a258a bugfix 2025-03-04 14:16:44 +08:00
eggmanQQQ
288aaebc3b fix: bugfix 2025-03-03 18:43:44 +08:00
eggmanQQQ
47aa4a078b fix: bugfix 2025-03-03 15:26:59 +08:00
eggmanQQQ
201c12d381 feat : UI走查 2025-02-27 18:58:31 +08:00
eggmanQQQ
fe4a576b17 feat: bugFIx , 代理 翻译 2025-02-27 15:47:51 +08:00
eggmanQQQ
9f6f785dbb fix: 尝试修复 同个人上多个麦位的异常问题 2025-02-26 18:14:06 +08:00
eggmanQQQ
bb31162bb9 fix: 代理UI问题fix 2025-02-26 18:13:45 +08:00
eggmanQQQ
b25ad423d0 fix: bugfix 2025-02-26 14:08:27 +08:00
eggmanQQQ
c15b8581be fix ; bug fix 2025-02-26 14:05:00 +08:00
eggmanQQQ
368caf9392 feat : 登录页面修改 , fix 金币红包 金币统计 2025-02-26 10:42:23 +08:00
eggmanQQQ
769232137d feat : 代理 接口调整 2025-02-26 10:41:58 +08:00
eggmanQQQ
d3f866dc88 feat : 红包界面修改 2025-02-25 17:33:54 +08:00
eggmanQQQ
3cbbd6fb42 feat : 代理相关功能 接入 接口 2025-02-25 15:58:50 +08:00
eggmanQQQ
f1fdf6fb3f feat : 代理 UI , 确认自定消息 UI 2025-02-24 16:43:27 +08:00
eggmanQQQ
e7d206317f feat : 去掉公聊大厅代码 2025-02-21 14:45:39 +08:00
eggmanQQQ
07c02daae9 feat : 转赠主页 UI 2025-02-21 14:40:04 +08:00
eggmanQQQ
c73ebf5ae9 feat : 确认取消 自定义消息 2025-02-20 17:00:08 +08:00
eggmanQQQ
70475fc84e feat : 礼物数量 选择初步 提交 2025-02-19 11:13:13 +08:00
eggmanQQQ
96c9479203 fix: bugfix 2025-02-18 17:00:55 +08:00
eggmanQQQ
bad7564d67 feat : 优化首页 banner 加载 2025-02-18 10:41:03 +08:00
eggmanQQQ
3ceea1fae6 feat: 福袋 提测 2025-02-17 16:14:23 +08:00
eggmanQQQ
bb80b3ebb9 feat : 幸运礼包 初步可提测 2025-02-11 18:05:06 +08:00
eggmanQQQ
8931d17528 feat : 幸运礼包 UI图片 2025-02-08 17:09:13 +08:00
eggmanQQQ
a542955da2 feat: 幸运礼包 UI 2025-02-07 17:00:39 +08:00
eggmanQQQ
db2194fe02 fix: 尝试优化 banner + svga 的内存占用, 添加资源回收逻辑 2025-02-05 15:58:43 +08:00
eggmanQQQ
ef3810a0d5 fix 2025-01-21 15:41:39 +08:00
eggmanQQQ
1d569d4832 礼物弹窗优化, 超管逻辑 bugfix 2025-01-21 14:27:19 +08:00
eggmanQQQ
dff86396e4 feat : 飘屏调整 初次提交 2025-01-15 15:41:44 +08:00
eggmanQQQ
5c47f96b72 feat : 附带礼物 UI 初次提交 2025-01-14 18:21:23 +08:00
eggmanQQQ
ef86be9708 eat : 管理员 设置 吐司提示 - 代码补充 2025-01-14 18:19:56 +08:00
eggmanQQQ
e173b41c63 feat : 管理员 设置 吐司提示 2025-01-14 18:19:05 +08:00
eggmanQQQ
78960dd758 fix: bug fix 2025-01-14 18:15:58 +08:00
eggmanQQQ
5f6db6285e feat : 修复bug 2025-01-08 17:48:01 +08:00
eggmanQQQ
2e305164e8 地区增加也门 2025-01-08 16:46:25 +08:00
eggmanQQQ
4089cd2d4e fix : 修复bug 2025-01-08 16:32:21 +08:00
eggmanQQQ
8fa3310236 feat: UI 走查 2025-01-08 14:08:47 +08:00
eggmanQQQ
3764603c43 fix : 翻译问题 2025-01-07 17:59:31 +08:00
eggmanQQQ
a6ed7b8cfb feat : 注释 2025-01-07 16:57:57 +08:00
eggmanQQQ
d788783caa feat:翻译 2025-01-07 16:01:16 +08:00
eggmanQQQ
47d61f9063 fix: 修复bug 2025-01-06 18:01:38 +08:00
eggmanQQQ
b3ada5fd36 feat : fix 修复bug 2025-01-06 14:36:33 +08:00
eggmanQQQ
a4ea7027d4 fix : 隐藏显示后 房间悬浮按钮 不可点击 修复 2025-01-03 17:24:59 +08:00
eggmanQQQ
4a84f9f74a feat : 转赠 金币UI 2025-01-03 16:30:02 +08:00
eggmanQQQ
27f488b66c fix : 替换资源 2025-01-02 11:11:52 +08:00
eggmanQQQ
9e4646c28a fix : 悬浮按钮点击事件 2024-12-31 18:45:17 +08:00
eggmanQQQ
42ae9cb8c6 feat : 图片资源 压缩 2024-12-31 14:01:35 +08:00
eggmanQQQ
5b2fc450d3 fix : 中文图片修复 2024-12-31 11:37:39 +08:00
eggmanQQQ
fde366eaaa fix : 修复 兑换金币后砖石不刷新, 中文图片问题 2024-12-31 11:29:33 +08:00
eggmanQQQ
498837ea0d feat : 新增 banner 跳转 2024-12-31 10:50:18 +08:00
eggmanQQQ
b45eac2580 feat: 周星 闪屏 优化 2024-12-31 10:37:14 +08:00
eggmanQQQ
a5fd7bfd8d feat : 周星礼物 自动化 2024-12-30 17:30:16 +08:00
eggmanQQQ
c185808d60 feat : 房间右下角 悬浮按钮 折叠功能 2024-12-30 11:52:27 +08:00
eggmanQQQ
c90f3b648f feat : bug修复, 幸运礼物 数字改为 自动化大小 2024-12-27 17:56:54 +08:00
eggmanQQQ
2f9263f3c9 feat ; 预加载 麦位资源 2024-12-27 14:31:03 +08:00
eggmanQQQ
e5147ba8b1 feat : 排麦模式 兼容 10 15 19 20 麦房, 接入 设置管理员前的检查接口 2024-12-27 14:13:30 +08:00
eggmanQQQ
fed0acbd61 feat : 麦位上麦 检测判断接口 2024-12-26 19:42:30 +08:00
eggmanQQQ
ce706bf90f feat : 麦位皮肤 提交 2024-12-26 16:38:46 +08:00
eggmanQQQ
ef052fff6c feat : 修复麦位UI异常, 信誉等级 提交 2024-12-25 15:01:50 +08:00
eggmanQQQ
c9e43aff77 feat: 代充信誉值 初次提交 , 消息界面UI提交 2024-12-25 11:51:50 +08:00
eggmanQQQ
73cf388e17 feat : 19 麦位 初次提交 2024-12-24 15:51:18 +08:00
eggmanQQQ
db5044ee5d fix : 撤回 富文本泄露 修改 2024-12-19 18:46:31 +08:00
eggmanQQQ
712087dfaa fix : 修復 註冊也崩潰, 添加默認值 2024-12-18 21:31:27 +08:00
eggmanQQQ
3586905e9c fix: 修復 國家選項 文字問題 2024-12-18 21:13:58 +08:00
eggmanQQQ
b2dab994f3 fix ; bug fix 2024-12-18 21:05:28 +08:00
eggmanQQQ
52ee9fdfac fix: bugfix 2024-12-18 17:40:22 +08:00
eggmanQQQ
9c480c14df feat: 翻譯文本 2024-12-18 14:20:31 +08:00
eggmanQQQ
cabb123783 fix : 刷新不请求排行榜的问题 2024-12-18 11:07:55 +08:00
eggmanQQQ
ff1378339d feat : 房间内 推荐房间列表 去掉 人数显示 2024-12-18 10:52:16 +08:00
eggmanQQQ
359fc232e2 feat : 首页tab Layout ,阿拉伯适配 2024-12-18 10:44:11 +08:00
eggmanQQQ
82b9d931c7 feat: 第一次UI 走查 2024-12-17 19:17:42 +08:00
eggmanQQQ
2dd35ac0ce feat: 版本提测 2024-12-17 14:31:46 +08:00
eggmanQQQ
a1e908183d 1.feat : 房间用户资料卡片 , 初次提交 2024-12-12 19:05:38 +08:00
eggmanQQQ
52dd32c138 fix: 修复可能因为 网络问题拿不到钱包信息 导致的崩溃 2024-12-09 11:15:25 +08:00
eggmanQQQ
cc1a494102 feat : 压缩图片, 修复 viewbinding 反射崩溃, 富文本内存泄漏 2024-12-06 19:10:25 +08:00
eggmanQQQ
30e4765ad4 fix: 修复 可能存在的问题 2024-12-06 11:15:04 +08:00
eggmanQQQ
6b9b1bc8ca fix : 修复遗留bug 2024-12-05 17:38:24 +08:00
eggmanQQQ
521a0b0662 fix : fixbug 2024-12-04 20:08:31 +08:00
eggmanQQQ
5f72425b85 fix: bugfix 2024-12-04 18:55:01 +08:00
eggmanQQQ
257e40cb32 fix: bug fix 2024-12-04 14:40:44 +08:00
eggmanQQQ
b9dfb3e5ea fix : 修复bug 2024-12-03 19:32:51 +08:00
eggmanQQQ
f6db0c96ab fix : bugfix 2024-12-03 17:37:53 +08:00
eggmanQQQ
78dfe9c78b feat : 注册页面 加 年龄提示 2024-12-02 17:39:45 +08:00
eggmanQQQ
2666e98295 feat : bugfix , 封禁 初次提交 2024-12-02 16:18:15 +08:00
eggmanQQQ
c18b00c2eb feat : 礼物弹窗 送礼按钮 加大 2024-11-29 11:54:50 +08:00
eggmanQQQ
d07a550ef2 feat : bugfix , 连击时展示金币 , 音乐操作弹窗 更改 2024-11-29 11:41:28 +08:00
eggmanQQQ
f92d82486d feat : bug fix , 准备验收 2024-11-26 16:41:14 +08:00
eggmanQQQ
b5cbe0e146 feat: 翻译 2024-11-25 15:00:07 +08:00
eggmanQQQ
1123b26e88 feat : 提测 2024-11-22 19:40:15 +08:00
eggmanQQQ
cc591c4c3b feat : 首页 房间列表 改版 2024-11-20 16:06:36 +08:00
eggmanQQQ
e0b348f92a feat : 重写 装扮商城 , 我的装扮 , 装扮赠送 页面 2024-11-20 15:06:13 +08:00
eggmanQQQ
a48f768434 fix: 修复bug 2024-11-13 17:20:42 +08:00
eggmanQQQ
463855cf92 fix: 修复bug 2024-11-13 17:11:20 +08:00
eggmanQQQ
f5aa8ec8f1 fix: bug fix 2024-11-13 15:45:38 +08:00
eggmanQQQ
245dee330e fix : bugfix 2024-11-13 10:45:08 +08:00
eggmanQQQ
e2375029f0 fix: UI走查 2024-11-12 14:00:37 +08:00
eggmanQQQ
f1b92a291c fix: UI走查 2024-11-12 10:29:18 +08:00
eggmanQQQ
83fb1dc632 feat: bug fix 2024-11-11 17:01:10 +08:00
eggmanQQQ
f0a245f4cb feat: 铭牌, 翻译,图片资源 2024-11-08 19:08:03 +08:00
eggmanQQQ
2a3d716332 feat : 首页 第二banner 2024-11-07 18:36:33 +08:00
eggmanQQQ
e5794630c7 feat : 首页UI配置 接入 接口 2024-11-07 16:12:06 +08:00
eggmanQQQ
4dbba76ead feat: vip送礼飘屏,待联调 2024-11-07 11:05:10 +08:00
eggmanQQQ
47f3a05fd2 feat : vip 特權更改 2024-11-06 18:00:57 +08:00
eggmanQQQ
07dcede0ad fix : 房間背景 預覽播放問題 2024-11-06 17:48:31 +08:00
eggmanQQQ
7764add459 feat : 勿打擾 功能 2024-11-06 16:58:41 +08:00
eggmanQQQ
156c5aa52a fix: 修復 購買bug 2024-11-06 16:00:58 +08:00
eggmanQQQ
6df69e6e57 feat : 房間背景定制功能 2024-11-06 15:26:48 +08:00
eggmanQQQ
32359831b5 feat: 防打扰 功能预留 2024-11-04 16:30:26 +08:00
eggmanQQQ
117d1148fa feat: 首页UI配置 ,功能预留 2024-11-04 16:30:15 +08:00
eggmanQQQ
5d427d04a2 feat: 网络请求明文传输配置 2024-11-04 16:28:50 +08:00
eggmanQQQ
626d4885ac fix: 修复谷歌上报的崩溃 2024-11-04 16:27:53 +08:00
eggmanQQQ
8cb8734b3f feat : 私聊限制功能, 私聊消息发送前的拦截预留 2024-11-01 18:35:57 +08:00
eggmanQQQ
00bd56cf96 feat : 首页UI 自定义 工具类 2024-11-01 18:35:57 +08:00
eggmanQQQ
a60d48ec10 feat : 修改房间背景 弹窗, 首页 房间列表 banner item 2024-11-01 18:35:52 +08:00
eggmanQQQ
fd8844f9e7 fix : 聊天发送图片时的 权限申请文案 2024-11-01 10:54:52 +08:00
eggmanQQQ
a8c62182c3 feat : 房间外不飘屏 , MyUriUtil try carsh 处理 2024-11-01 10:16:30 +08:00
eggmanQQQ
4d56026d03 feat : 安卓10-12 音乐扫描兼容 2024-10-31 19:18:38 +08:00
eggmanQQQ
499f1af011 feat : 去掉 项目内 相册,图片选择,拍照 有关的 第三方库跟代码 2024-10-30 16:32:15 +08:00
eggmanQQQ
871c9a2b79 feat : 將 圖片選擇功能, 不用第三方,純用 系統自帶的 資源選擇器來實現, 並統一到一個入口 (IM模塊 單獨 處理) 2024-10-29 18:03:34 +08:00
eggmanQQQ
f465e6ad1a feat : 去掉 相机权限 2024-10-25 20:45:23 +08:00
eggmanQQQ
a889270e40 feat : 去掉 photoPick 可行判断 2024-10-25 18:43:56 +08:00
eggmanQQQ
b9d11dd276 fix 2024-10-25 17:57:18 +08:00
eggmanQQQ
610a1c4074 fix : bug fix 2024-10-25 17:19:07 +08:00
eggmanQQQ
d67458dac6 feat : 我的房間 國家 icon 2024-10-25 14:20:57 +08:00
eggmanQQQ
6916a96e4e feat : 刪除 提現相關內容 2024-10-25 13:44:21 +08:00
eggmanQQQ
6fde178c79 feat ; UI 走查問題 2024-10-25 13:43:48 +08:00
eggmanQQQ
ef38916fa1 fix: VIp 返回 null 时的处理 2024-10-25 10:32:31 +08:00
eggmanQQQ
e48bc137b8 feat : 优化 Vip中心 , 土耳其语言, 新版翻译 2024-10-24 17:29:14 +08:00
eggmanQQQ
a571555198 feat : 新增 用户地区接口 2024-10-24 14:16:10 +08:00
eggmanQQQ
b6dceb99bc fix : 增加修改头像成功的提示 , 区分 非vip9的头像选项 2024-10-23 18:00:17 +08:00
eggmanQQQ
0404d203b3 feat : 新增 土耳其语 ; bugfix 2024-10-23 17:11:50 +08:00
eggmanQQQ
9e590ada9e feat : 接入新H5 小游戏, 砸蛋换新图 , h5 弹窗打开游戏 逻辑优化 2024-10-23 15:26:27 +08:00
eggmanQQQ
1c0956d4b1 Merge branch 'dev/app_remove_liulishuo' into dev/app_vip_liulishuo
# Conflicts:
#	app/src/main/java/com/chwl/app/home/fragment/MeFragment.kt

feat ;  合并 去除liulishuo分支 到 vip分支
2024-10-22 17:22:37 +08:00
eggmanQQQ
19e820eae0 feat : 补全修改头像的弹窗 , 修复游戏房 boom图标异常 , 去掉开启游戏的模式限制 2024-10-22 17:11:28 +08:00
eggmanQQQ
71ce6ee37e feat : 补全 vip功能设置接口 及 相关功能 2024-10-22 15:35:30 +08:00
eggmanQQQ
e725a918e2 feat : 首页 国旗图标 预留 2024-10-22 14:32:13 +08:00
eggmanQQQ
55fe32db6e feat: vip 功能开关页面 2024-10-22 13:55:00 +08:00
eggmanQQQ
17a470e847 feat : 1.给自己送礼, 优化连击相关event 发送接收,修复资料弹窗唤起的礼物弹窗连击问题 2.工会头像,房间头像,用户头像区分 3.去掉小游戏 排麦模式等限制 4. vip 相关: 1.gif头像显示处理完毕 2024-10-21 17:17:33 +08:00
eggmanQQQ
b382d98839 feat: 优化 boomInfo 的 请求方式 2024-10-17 16:18:01 +08:00
eggmanQQQ
95fde27710 fix: 混淆后 632 解析问题, boom进度更新问题 2024-10-16 20:59:19 +08:00
eggmanQQQ
c84cfa3e4f update version & add ad_id 2024-10-15 21:30:20 +08:00
eggmanQQQ
e0f55ef03c update version 2024-10-15 20:04:40 +08:00
eggmanQQQ
a5725b32fd fix : boom 飘屏 房间标题修改 2024-10-15 20:00:30 +08:00
eggmanQQQ
c73c7425a7 feat : 麦位最小化时 回来异常 fix 2024-10-15 19:19:38 +08:00
1981 changed files with 46238 additions and 35082 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -370,9 +370,18 @@
-keep class com.chwl.app.ui.widget.AppBarLayoutBehavior {*;}
#ViewBinding使用的反射生成的对应Binding
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
public static ** inflate(***);
-keep class * implements androidx.viewbinding.ViewBinding {
*;
}
-keep class * extends androidx.viewbinding.ViewBinding {
*;
}
#-keep class * implements androidx.databinding.ViewDataBinding {
# *;
#}
#-keep class * extends androidx.databinding.ViewDataBinding {
# *;
#}
#Flutter Wrapper
-dontwarn io.flutter.**

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="#000000"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="#ffffff"/>
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="#ffffff"/>
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:radius="17dp"
/>
<solid
android:color="@color/black_transparent_20"
/>
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -19,13 +19,12 @@
android:protectionLevel="signature" />
<queries>
<!-- <package android:name="com.facebook.katana" />-->
<!-- <package android:name="jp.naver.line.android" />-->
<!-- <package android:name="com.facebook.katana" />-->
<!-- <package android:name="jp.naver.line.android" />-->
<package android:name="com.android.vending" />
</queries>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
@@ -51,16 +50,22 @@
tools:node="remove" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission tools:node="remove" 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 tools:node="remove" 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" />
android:maxSdkVersion="28" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.CAMERA" />
android:maxSdkVersion="28" />
<uses-permission
android:name="android.permission.CAMERA"
tools:node="remove" />
<uses-permission android:name="android.permission.BLUETOOTH" /> <!-- 如果需要实时音视频通话模块,下面的权限也是必须的。否则,可以不加 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- SDK 权限申明, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<!-- 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 -->
@@ -78,12 +83,13 @@
<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<!-- AppsFlyer需要参考https://dev.appsflyer.com/hc/docs/install-android-sdk#setting-required-permissions -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<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"
@@ -114,18 +120,18 @@
则需要考虑发起的intent会出现相同应用图标的选择对话框的情况
参考集成文档:https://www.linkedme.cc/docs/page4.html#link1
-->
<!-- <intent-filter>-->
<!-- <intent-filter>-->
<!-- &lt;!&ndash; 此处scheme值需要替换为后台设置中的scheme值 &ndash;&gt;-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- &lt;!&ndash; 此处scheme值需要替换为后台设置中的scheme值 &ndash;&gt;-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- <data-->
<!-- android:host="main"-->
<!-- android:scheme="pikoapp" />-->
<!-- </intent-filter>-->
<!-- <data-->
<!-- android:host="main"-->
<!-- android:scheme="pikoapp" />-->
<!-- </intent-filter>-->
</activity>
<activity
@@ -146,56 +152,40 @@
</intent-filter>
</activity>
<!-- <meta-data-->
<!-- android:name="firebase_crashlytics_collection_enabled"-->
<!-- android:value="${CRASHLYTICS_COLLECTION_ENABLED}" /> &lt;!&ndash; 刘海屏适配 begin &ndash;&gt;-->
<!-- <meta-data-->
<!-- android:name="firebase_crashlytics_collection_enabled"-->
<!-- android:value="${CRASHLYTICS_COLLECTION_ENABLED}" /> &lt;!&ndash; 刘海屏适配 begin &ndash;&gt;-->
<!-- 小米 -->
<activity
android:name="com.soundcloud.crop.CropImageActivity"
android:screenOrientation="portrait" /> <!-- 华为 -->
<activity
android:name="com.darsh.multipleimageselect.activities.AlbumSelectActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:theme="@style/MultipleImageSelectTheme">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.darsh.multipleimageselect.activities.ImageSelectActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:theme="@style/MultipleImageSelectTheme">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity> <!-- 刘海屏适配 end -->
<!-- <activity-->
<!-- android:name="com.mob.tools.MobUIShell"-->
<!-- android:configChanges="keyboardHidden|orientation|screenSize"-->
<!-- android:theme="@android:style/Theme.Translucent.NoTitleBar"-->
<!-- android:windowSoftInputMode="stateHidden|adjustResize" /> &lt;!&ndash; 云信配置 begin ##################################################### &ndash;&gt;-->
<!-- 刘海屏适配 end -->
<!-- <activity-->
<!-- android:name="com.mob.tools.MobUIShell"-->
<!-- android:configChanges="keyboardHidden|orientation|screenSize"-->
<!-- android:theme="@android:style/Theme.Translucent.NoTitleBar"-->
<!-- android:windowSoftInputMode="stateHidden|adjustResize" /> &lt;!&ndash; 云信配置 begin ##################################################### &ndash;&gt;-->
<!--
APP key, 可以在这里设置,也可以在 SDKOptions 中提供。
如果 SDKOptions 中提供了,取 SDKOptions 中的值。
-->
<!-- <activity-->
<!-- android:name="app.molistar.fun.lineapi.LineAuthenticationCallbackActivity"-->
<!-- android:exported="true"-->
<!-- android:launchMode="singleTask"-->
<!-- android:noHistory="true">-->
<!-- <activity-->
<!-- android:name="app.molistar.fun.lineapi.LineAuthenticationCallbackActivity"-->
<!-- android:exported="true"-->
<!-- android:launchMode="singleTask"-->
<!-- android:noHistory="true">-->
<!-- &lt;!&ndash; 集成line客户端登录授权需要添如下格式的过滤器 &ndash;&gt;-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- &lt;!&ndash; 集成line客户端登录授权需要添如下格式的过滤器 &ndash;&gt;-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <category android:name="android.intent.category.BROWSABLE" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <data android:scheme="lineauth" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!-- <data android:scheme="lineauth" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<!--
声明云信后台服务,如需保持后台推送,使用独立进程效果会更好。
ca46478c438dda51d25306f52fe7506b
@@ -269,6 +259,9 @@
<activity
android:name=".avroom.activity.RoomTypeSwitchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".DemoActivity"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomBgSettingActivity"
android:screenOrientation="portrait" />
@@ -289,6 +282,11 @@
android:label="@string/main_androidmanifest_010"
android:screenOrientation="portrait"
android:theme="@style/AVRoomTheme" />
<activity
android:name="com.chwl.app.music.activity.AddLocalMusicListSpecialActivity"
android:label="@string/main_androidmanifest_010"
android:screenOrientation="portrait"
android:theme="@style/AVRoomTheme" />
<activity
android:name="com.chwl.app.music.activity.MusicListActivity"
android:label="@string/main_androidmanifest_011"
@@ -319,6 +317,15 @@
<activity
android:name=".ui.user.activity.UserCpListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.user.activity.UserForbidActivity"
android:screenOrientation="portrait" />
<activity
android:name=".decoration.ui.activity.DressUpTabActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.search.SearchUserActivity"
android:screenOrientation="portrait" />
<activity
android:name=".audio.AudioRecordActivity"
android:label="@string/main_androidmanifest_017"
@@ -337,6 +344,9 @@
<activity
android:name=".ui.setting.SettingActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.setting.VipSetActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.relation.AttentionListActivity"
android:screenOrientation="portrait" />
@@ -352,9 +362,6 @@
<activity
android:name=".bills.activities.TotalBillsActivity"
android:screenOrientation="portrait" />
<activity
android:name=".bills.activities.WithdrawBillsActivity"
android:screenOrientation="portrait" />
<activity
android:name=".bills.activities.ChargeBillsActivity"
android:screenOrientation="portrait" />
@@ -494,6 +501,10 @@
android:name=".ui.widget.LevelUpDialog"
android:launchMode="singleTop"
android:theme="@style/dialogactivity" />
<activity
android:name=".base.PhotoPickActivity"
android:launchMode="singleTop"
android:theme="@style/dialogactivity" />
<activity android:name=".home.activity.NewUserListActivity" />
<activity
android:name=".ui.widget.RecallDialog"
@@ -551,10 +562,6 @@
<activity
android:name=".module_hall.team.activity.SelectTeamMemberActivity"
android:screenOrientation="portrait" />
<activity
android:name=".module_hall.team.activity.TeamInfoShowActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".module_hall.team.activity.TeamEditActivity"
android:screenOrientation="portrait"
@@ -695,7 +702,7 @@
<activity
android:name=".ui.webview.room_banner.RoomBannerWebDialogActivity"
android:theme="@style/dialog_web_view_activity"
android:windowSoftInputMode="adjustPan" />
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.webview.TarotPayWebViewActivity"
android:theme="@style/dialog_web_view_activity" />
@@ -787,11 +794,6 @@
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".earn.activity.BindWithdrawMsgActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name=".earn.activity.GoldDetailActivity"
android:configChanges="screenSize|orientation|keyboardHidden|mcc|mnc|locale|touchscreen|screenLayout|keyboard|navigation|fontScale|uiMode|smallestScreenSize|layoutDirection"
@@ -846,9 +848,9 @@
android:name="flutterEmbedding"
android:value="2" />
<!-- <meta-data-->
<!-- android:name="Mob-Https"-->
<!-- android:value="yes" />-->
<!-- <meta-data-->
<!-- android:name="Mob-Https"-->
<!-- android:value="yes" />-->
<provider
android:name="com.netease.nimlib.ipc.NIMContentProvider"
@@ -891,8 +893,9 @@
android:foregroundServiceType="remoteMessaging"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":core" />
<service android:name="com.netease.nimlib.service.ResponseService"
android:foregroundServiceType="remoteMessaging"/>
<service
android:name="com.netease.nimlib.service.ResponseService"
android:foregroundServiceType="remoteMessaging" />
<service
android:name=".service.DaemonService"
android:foregroundServiceType="mediaPlayback"
@@ -902,7 +905,8 @@
<activity android:name=".ui.language.LanguageActivity" />
<activity android:name=".public_chat.ui.message.PublicChatRoomMessageActivity"
<activity
android:name=".public_chat.ui.message.PublicChatRoomMessageActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
@@ -925,6 +929,14 @@
android:name=".pay.activity.GiveGoldActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldAgentsActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldBiliActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".pay.activity.GiveGoldDetailActivity"
android:screenOrientation="portrait"
@@ -956,10 +968,12 @@
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"/>
<activity
android:name=".ui.debug.DebugActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.game_team.record.GameTeamRecordActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

View File

@@ -1 +1,32 @@
[{"name":"Taiwan","abbr":"TW","mcc":"466","code":"886"},{"name":"Hong Kong","abbr":"HK","mcc":"454","code":"852"},{"name":"Singapore","abbr":"SG","mcc":"525","code":"65"},{"name":"Malaysia","abbr":"MY","mcc":"502","code":"60"},{"name":"China","abbr":"CN","mcc":"460","code":"86"}]
[
{
"name": "Taiwan",
"abbr": "TW",
"mcc": "466",
"code": "886"
},
{
"name": "Hong Kong",
"abbr": "HK",
"mcc": "454",
"code": "852"
},
{
"name": "Singapore",
"abbr": "SG",
"mcc": "525",
"code": "65"
},
{
"name": "Malaysia",
"abbr": "MY",
"mcc": "502",
"code": "60"
},
{
"name": "China",
"abbr": "CN",
"mcc": "460",
"code": "86"
}
]

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,55 @@
package com.chwl.app
import android.content.Context
import android.content.Intent
import android.view.ViewGroup
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.bindadapter.BaseBindingViewHolder
import com.chwl.app.databinding.ActivityDemoBinding
import com.chwl.app.databinding.ListItemMicroBinding
import com.chwl.core.widget.layoutmanager.pagergridlayoutmanager.PagerGridLayoutManager.LayoutParams
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
class DemoActivity : BaseViewBindingActivity<ActivityDemoBinding>() {
companion object{
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, DemoActivity::class.java)
context.startActivity(starter)
}
}
override fun init() {
var isOpen = false
binding.b1.click {
binding.btnLayout.setViewWH(height = if (!isOpen) ViewGroup.LayoutParams.WRAP_CONTENT else 1 , isDP = false)
isOpen = !isOpen
}
}
class DemoAdapter : BaseBindingAdapter<ListItemMicroBinding,Int>() {
override fun convert(helper: BaseBindingViewHolder<ListItemMicroBinding>, item: Int) {
val bindingAdapterPosition = helper.bindingAdapterPosition
helper.binding.root.setViewWH(width = LayoutParams.MATCH_PARENT, height = LayoutParams.MATCH_PARENT , false)
helper.binding.avatar.setVis(true)
helper.binding.avatar.setImageResource(R.drawable.user_info_ic_id)
helper.binding.llCharmClick.setVis(true)
helper.binding.tvCharmValue.setVis(true)
helper.binding.tvCharmValue.text = "${ bindingAdapterPosition + 1}"
}
}
}

View File

@@ -1,173 +0,0 @@
package com.chwl.app;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import com.jph.takephoto.app.TakePhotoActivity;
import com.jph.takephoto.compress.CompressConfig;
import com.jph.takephoto.model.CropOptions;
import com.jph.takephoto.model.TResult;
import com.chwl.app.common.permission.PermissionActivity;
import com.chwl.library.utils.file.JXFileUtils;
import java.io.File;
public class ErbanTakePhotoActivity extends TakePhotoActivity {
private static final String CAMERA_PREFIX = "picture_";
private static final int REQ_CODE = 1000;
private static TakePhotoCallBack takePhotoCallBack;
public final static String OPERATION_TYPE = "OPERATION_TYPE";
public final static int SELECT_PHOTO = 1;
public final static int TAKE_PHOTO = 2;
public final static int SELECT_MULTIPLE_PHOTO = 3;
public final static String MULTIPLE_SELECT_PHOTO_LIMIT = "MULTIPLE_SELECT_PHOTO_LIMIT";
/**
* 选择一张图片
* @param context
*/
public static void startToSelectPhoto(Context context, TakePhotoCallBack callBack) {
Bundle bundle = new Bundle();
bundle.putInt(OPERATION_TYPE, SELECT_PHOTO);
start(context, bundle, callBack);
}
/**
* 选择多张图片
* @param context
* @param limit
*/
public static void startToMultipleSelectPhoto(Context context, TakePhotoCallBack callBack, int limit){
Bundle bundle = new Bundle();
bundle.putInt(OPERATION_TYPE, SELECT_MULTIPLE_PHOTO);
bundle.putInt(MULTIPLE_SELECT_PHOTO_LIMIT, limit);
start(context, bundle, callBack);
}
/**
* 照相
* @param context
*/
public static void startToTakePhoto(Context context, TakePhotoCallBack callBack){
Bundle bundle = new Bundle();
bundle.putInt(OPERATION_TYPE,TAKE_PHOTO);
start(context, bundle, callBack);
}
private static void start(Context context, Bundle bundle, TakePhotoCallBack callBack){
takePhotoCallBack = callBack;
Intent intent = new Intent(context, ErbanTakePhotoActivity.class);
intent.putExtras(bundle);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int operationType = getIntent().getIntExtra(OPERATION_TYPE, SELECT_PHOTO);
int limit = getIntent().getIntExtra(MULTIPLE_SELECT_PHOTO_LIMIT,1);
if (operationType == SELECT_PHOTO){
selectPhoto();
} else if (operationType == TAKE_PHOTO){
checkPermissionAndStartCamera();
} else if (operationType == SELECT_MULTIPLE_PHOTO){
multipleSelectPhoto(limit);
}
}
@Override
protected void onDestroy() {
takePhotoCallBack = null;
super.onDestroy();
}
@Override
public void takeSuccess(TResult result) {
if (takePhotoCallBack != null){
takePhotoCallBack.takeSuccess(result);
}
finish();
}
@Override
public void takeFail(TResult result, String msg) {
if (takePhotoCallBack != null){
takePhotoCallBack.takeFail(result,msg);
}
finish();
}
@Override
public void takeCancel() {
if (takePhotoCallBack != null){
takePhotoCallBack.takeCancel();
}
finish();
}
private void selectPhoto(){
String mCameraCapturingName = CAMERA_PREFIX + System.currentTimeMillis() + ".jpg";
File cameraOutFile = JXFileUtils.getTempFile(ErbanTakePhotoActivity.this, mCameraCapturingName);
if (!cameraOutFile.getParentFile().exists()) {
cameraOutFile.getParentFile().mkdirs();
}
Uri uri = Uri.fromFile(cameraOutFile);
CompressConfig compressConfig = new CompressConfig.Builder().create();
getTakePhoto().onEnableCompress(compressConfig, true);
CropOptions options = new CropOptions.Builder().setWithOwnCrop(true).create();
getTakePhoto().onPickFromGalleryWithCrop(uri, options);
}
private void multipleSelectPhoto(int limit){
String mCameraCapturingName = CAMERA_PREFIX + System.currentTimeMillis() + ".jpg";
File cameraOutFile = JXFileUtils.getTempFile(ErbanTakePhotoActivity.this, mCameraCapturingName);
if (!cameraOutFile.getParentFile().exists()) {
cameraOutFile.getParentFile().mkdirs();
}
Uri uri = Uri.fromFile(cameraOutFile);
CompressConfig compressConfig = new CompressConfig.Builder().create();
getTakePhoto().onEnableCompress(compressConfig, true);
CropOptions options = new CropOptions.Builder().setWithOwnCrop(true).create();
getTakePhoto().onPickMultipleWithCrop(limit, options);
}
private void checkPermissionAndStartCamera() {
//低版本授权检查
checkPermission(checkPermissionListener, R.string.ask_camera, android.Manifest.permission.CAMERA);
}
PermissionActivity.CheckPermListener checkPermissionListener = new PermissionActivity.CheckPermListener() {
@Override
public void superPermission() {
takePhoto();
}
};
private void takePhoto() {
String mCameraCapturingName = CAMERA_PREFIX + System.currentTimeMillis() + ".jpg";
File cameraOutFile = JXFileUtils.getTempFile(ErbanTakePhotoActivity.this, mCameraCapturingName);
if (!cameraOutFile.getParentFile().exists()) {
cameraOutFile.getParentFile().mkdirs();
}
Uri uri = Uri.fromFile(cameraOutFile);
CompressConfig compressConfig = new CompressConfig.Builder().create();
getTakePhoto().onEnableCompress(compressConfig, false);
CropOptions options = new CropOptions.Builder().setWithOwnCrop(true).create();
getTakePhoto().onPickFromCaptureWithCrop(uri, options);
}
public interface TakePhotoCallBack{
public void takeSuccess(TResult result);
public void takeFail(TResult result, String msg);
public void takeCancel();
}
}

View File

@@ -11,7 +11,6 @@ import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -23,7 +22,13 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import com.chwl.app.application.App;
import com.chwl.app.application.IReportConstants;
import com.chwl.app.application.ReportManager;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.base.GlobalViewModelOwner;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.community.square.SquareFragment;
import com.chwl.app.game.core.GameStateAbility;
@@ -31,32 +36,6 @@ 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.manager.AudioEngineManager;
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.nimlib.sdk.NIMClient;
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.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.application.IReportConstants;
import com.chwl.app.application.ReportManager;
import com.chwl.app.application.App;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.common.widget.DragLayout;
import com.chwl.app.home.HomeViewModel;
import com.chwl.app.home.dialog.NewUserHelloDialog;
import com.chwl.app.home.dialog.ProtocolUpdateDialog;
@@ -69,9 +48,11 @@ import com.chwl.app.home.widget.AnchorCardView;
import com.chwl.app.module.Extras;
import com.chwl.app.module_hall.secretcode.PwdCodeMgr;
import com.chwl.app.service.DaemonService;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.im.ImInitHelper;
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
import com.chwl.app.ui.login.BindPhoneActivity;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.app.ui.login.fragment.AddUserInfoFragment;
import com.chwl.app.ui.patriarch.help.LimitEnterRoomHelper;
import com.chwl.app.ui.patriarch.help.PmDialogShowMrg;
@@ -81,7 +62,9 @@ import com.chwl.app.ui.webview.CommonWebViewActivity;
import com.chwl.app.ui.widget.LivingIconView;
import com.chwl.app.ui.widget.MainTabLayout;
import com.chwl.app.utils.CleanLeakUtils;
import com.chwl.app.utils.HomeUIManager;
import com.chwl.app.utils.PushMessageHandler;
import com.chwl.app.utils.ResourceManager;
import com.chwl.core.Constants;
import com.chwl.core.DemoCache;
import com.chwl.core.UriProvider;
@@ -92,6 +75,8 @@ import com.chwl.core.auth.event.LogoutEvent;
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.BannerInfo;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.home.bean.MainTabType;
import com.chwl.core.home.event.VisitorUnreadCountEvent;
import com.chwl.core.home.model.GameHomeModel;
@@ -99,6 +84,7 @@ import com.chwl.core.home.model.HomeModel;
import com.chwl.core.initial.InitialModel;
import com.chwl.core.linked.LinkedModel;
import com.chwl.core.linked.bean.LinkedInfo;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMBroadcastManager;
import com.chwl.core.manager.IMMessageManager;
@@ -107,17 +93,34 @@ import com.chwl.core.patriarch.event.CloseMinRoomEvent;
import com.chwl.core.patriarch.event.ImPushMsgPmLimitTimeEvent;
import com.chwl.core.patriarch.event.PmDismissAllLimitDialogEvent;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.settings.SettingsModel;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.core.user.event.LoadLoginUserInfoEvent;
import com.chwl.core.user.event.LoginUserInfoUpdateEvent;
import com.chwl.core.user.event.NeedBindPhoneEvent;
import com.chwl.core.user.event.NeedCompleteInfoEvent;
import com.chwl.core.utils.myutil.MyUtil;
import com.chwl.core.utils.SharedPreferenceUtils;
import com.chwl.core.utils.StringFormatUtils;
import com.chwl.core.utils.WLog;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.common.util.OtherExtKt;
import com.chwl.library.threadmgr.ThreadPoolManager;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ResUtil;
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.nimlib.sdk.NIMClient;
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.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -160,6 +163,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private Fragment tempFragment = null;
private DialogManager resumeGameDialogManager;
private PreloadResourceViewModel mPreLoadViewModel;
@Nullable
private Runnable touchRunnable;
@@ -237,10 +242,17 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
.doOnError(throwable -> onNeedLogin())
.subscribe();
initView();
List<MainTabInfo> mainTabInfo = InitialModel.get().getMainTabInfosLiveData().getValue();
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
List<MainTabInfo> homeTabIcons = HomeUIManager.INSTANCE.getHomeTabIcons();
if (homeTabIcons != null && !homeTabIcons.isEmpty()) {
mMainTabLayout.setMainTabInfoList(homeTabIcons);
} else {
List<MainTabInfo> mainTabInfo = InitialModel.get().getMainTabInfosLiveData().getValue();
if (mainTabInfo != null) {
mMainTabLayout.setMainTabInfoList(mainTabInfo);
}
}
initMaterialView();
onParseIntent();
updateDatas();
@@ -256,6 +268,11 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
});
checkResumeGame();
WLog.INSTANCE.init(context,"logFile.txt");
HomeUIManager.INSTANCE.setHomeTabBg(findViewById(R.id.main_tab_layout_bg));
ResourceManager.INSTANCE.initResource();
}
private void otherModelInit() {
@@ -270,43 +287,45 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@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 -> {
});
GameModel2.INSTANCE.getResumeGameRoomInfo().compose(bindToLifecycle())
.doOnSuccess(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 -> {
});
}
}).doOnError(e->{
}).subscribe();
}
private void initPreloadResource() {
PreloadResourceViewModel viewModel = new ViewModelProvider(
mPreLoadViewModel = new ViewModelProvider(
GlobalViewModelOwner.Companion.getInstance()
).get(PreloadResourceViewModel.class);
viewModel.start(context);
mPreLoadViewModel.start(context);
}
@Override
@@ -392,6 +411,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
mMainTabLayout.setOnTabClickListener(this);
anchorCardView = findViewById(R.id.vs_anchor_card);
mMainTabLayout.setDefaultTabType(mCurrentTabType);
MyUtil.INSTANCE.initAppWidth(findViewById(R.id.rootWidth));
}
private void updateDatas() {
@@ -438,6 +458,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
protected void onDestroy() {
CleanLeakUtils.fixInputMethodManagerLeak(MainActivity.this);
if (mPreLoadViewModel != null) {
mPreLoadViewModel.stopPreLoad();
}
super.onDestroy();
if (resumeGameDialogManager != null) {
resumeGameDialogManager.dismissDialog();
@@ -491,6 +514,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLoginEvent(LoginEvent event) {
onLogin(AuthModel.get().getCurrentUid());
// UserModel.get().getUserInfoDetailCache(AuthModel.get().getCurrentUid()).subscribe();
}
/**
@@ -508,9 +532,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@SuppressLint("CheckResult")
public void onLogin(long uid) {
Logger.e(TAG, "onLogin Success ~~~~");
Log.i("checkLostUser", "onLogin");
OtherExtKt.doLogW("onLogin Success ~~~~");
OtherExtKt.doLogW("onLogin");
int unreadCount = IMMessageManager.get().queryUnreadMsg();
mMainTabLayout.setMsgNum(unreadCount);
@@ -519,6 +542,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) {
OtherExtKt.doLog("消息时间 接收到 LoadLoginUserInfoEvent 消息");
firstLoadedUserInfo();
InitialModel.get().regionCheck();
}
@@ -787,16 +811,17 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
* @return true 如果处理了跳转
*/
private boolean handleSplashJump() {
OtherExtKt.doLog("闪屏页 -> handleSplashJump 处理 闪屏页跳转");
if (getIntent().hasExtra("url") && getIntent().hasExtra("type")) {
LogUtil.print(getString(R.string.clicked_the_splash_screen));
//如果没有渠道页,就按原来的逻辑即可
int type = getIntent().getIntExtra("type", 0);
String url = getIntent().getStringExtra("url");
if (type == 3) {
if (type == BannerInfo.SKIP_TYP_H5 || type == BannerInfo.SKIP_TYP_H5_CP || type == BannerInfo.SKIP_TYP_H5_WEE_STAR || type == BannerInfo.SKIP_TYP_H5_CUSTOM) {
Intent intent = new Intent(context, CommonWebViewActivity.class);
intent.putExtra("url", url);
startActivity(intent);
} else if (type == 2) {
} else if (type == BannerInfo.SKIP_TYP_CHAT_ROOM) {
AVRoomActivity.start(context, Long.parseLong(url));
} else {
return false;

View File

@@ -15,35 +15,10 @@ import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.util.Supplier;
import androidx.multidex.MultiDex;
import com.alibaba.android.arouter.launcher.ARouter;
import com.bumptech.glide.request.target.ViewTarget;
import com.chwl.app.support.IMUserInfoProvider;
import com.chwl.library.language.LanguageHelper;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.NotificationFoldStyle;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.mixpush.MixPushConfig;
import com.netease.nimlib.sdk.mixpush.NIMPushClient;
import com.netease.nimlib.sdk.msg.MessageNotifierCustomization;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.opensource.svgaplayer.SVGAParser;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import com.chwl.app.BuildConfig;
import com.chwl.app.NimMiddleActivity;
import com.chwl.app.R;
@@ -51,11 +26,12 @@ import com.chwl.app.common.app.ActivityStack;
import com.chwl.app.common.util.AppLifeCycleHelper;
import com.chwl.app.module_hall.HallDataManager;
import com.chwl.app.radish.wallet.RadishWalletManager;
import com.chwl.app.support.IMUserInfoProvider;
import com.chwl.app.utils.PushMessageHandler;
import com.chwl.core.XConstants;
import com.chwl.core.Constants;
import com.chwl.core.DemoCache;
import com.chwl.core.UriProvider;
import com.chwl.core.XConstants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.response.ServiceResult;
import com.chwl.core.channel.ChannelModel;
@@ -81,6 +57,8 @@ import com.chwl.core.utils.net.ServerException;
import com.chwl.library.common.application.BaseApp;
import com.chwl.library.common.application.Env;
import com.chwl.library.common.file.FileHelper;
import com.chwl.library.error.CrashCat;
import com.chwl.library.language.LanguageHelper;
import com.chwl.library.net.rxnet.RxNet;
import com.chwl.library.net.rxnet.converter.GsonConverterPlugins;
import com.chwl.library.utils.AppMetaDataUtil;
@@ -91,6 +69,28 @@ import com.chwl.library.utils.SystemUtils;
import com.chwl.library.utils.VersionUtil;
import com.chwl.library.utils.codec.MD5Utils;
import com.chwl.library.utils.config.BasicConfig;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.NotificationFoldStyle;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
import com.netease.nimlib.sdk.mixpush.MixPushConfig;
import com.netease.nimlib.sdk.mixpush.NIMPushClient;
import com.netease.nimlib.sdk.msg.MessageNotifierCustomization;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.opensource.svgaplayer.SVGAParser;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.header.MaterialHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import com.tencent.vasdolly.helper.ChannelReaderUtil;
import org.greenrobot.eventbus.EventBus;
@@ -261,6 +261,8 @@ public class App extends BaseApp {
AuthModel.get().cleanLogInfo();
}
throw new ServerException(serviceResult.getMessage(), serviceResult.getCode());
}else if (serviceResult.getCode() == ServiceResult.CODE_ROOM_MANAGER_LIMIT) {
throw new ServerException(serviceResult.getMessage(), serviceResult.getCode());
}
}
return null;
@@ -534,6 +536,11 @@ public class App extends BaseApp {
HashMap<String, Object> map = new HashMap<>(2);
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_ACTIVATE);
ReportManager.get().reportEvent(IReportConstants.ACTIVATE_FIRST, map);
//todo do 崩溃日志拦截
if (BuildConfig.DEBUG) {
CrashCat.getInstance(getApplicationContext(), Environment.getExternalStorageDirectory().getPath()+ "/Log","log.txt").start();
}
}
/**

View File

@@ -4,23 +4,20 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import com.netease.nim.uikit.business.uinfo.UserInfoHelper;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.orhanobut.logger.Logger;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.widget.ViewItem;
import com.chwl.app.common.util.DialogCommonUtil;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.app.ui.im.avtivity.NimFriendModel;
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
import com.chwl.app.ui.widget.ButtonItem;
import com.chwl.app.ui.widget.GiftDialog;
import com.chwl.app.vip.util.VipHelper;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.bean.response.ServiceResult;
import com.chwl.core.initial.InitialModel;
import com.chwl.core.initial.bean.InitInfo;
import com.chwl.core.kick.KickModel;
@@ -35,10 +32,19 @@ import com.chwl.core.super_admin.util.SAdminOptUtil;
import com.chwl.core.super_admin.util.SaAttachmentFactory;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.common.util.OtherExtKt;
import com.chwl.library.net.rxnet.callback.CallBack;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.config.BasicConfig;
import com.example.lib_utils.ktx.ResourcesKtxKt;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.business.uinfo.UserInfoHelper;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.orhanobut.logger.Logger;
import java.util.ArrayList;
import java.util.HashMap;
@@ -100,6 +106,7 @@ public class ButtonItemFactory {
if (isMySelf) {
return null;
}
String nick = getNick(chatRoomMember, account);
List<ViewItem> buttonItems = new ArrayList<>();
//ture则表示需要传入此类型button
boolean gift = false;
@@ -149,18 +156,18 @@ public class ButtonItemFactory {
}
}
if (gift) {
if (!SuperAdminUtil.isSuperAdmin()) {
buttonItems.add(createSendGiftItem(context, uid, isInRoom, listener));
}
}
// if (gift) {
// if (!SuperAdminUtil.isSuperAdmin()) {
// buttonItems.add(createSendGiftItem(context, uid, isInRoom, listener));
// }
// }
// 私聊
buttonItems.add(createPrivateChatItem(context, account, isInRoom));
// buttonItems.add(createPrivateChatItem(context, account, isInRoom));
//关注
buttonItems.add(createAttentItem());
//关注
buttonItems.add(createAtItem());
// buttonItems.add(createAttentItem());
//aite @
// buttonItems.add(createAtItem());
final RoomInfo currentRoom = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoom == null) return buttonItems;
@@ -173,13 +180,13 @@ public class ButtonItemFactory {
if (kickOutRoom) {
buttonItems.add(createKickOutRoomItem(context, userInfo, String.valueOf(currentRoom.getRoomId()),
account, getNick(chatRoomMember, account)));
account, nick));
}
if (mark_manager) {
buttonItems.add(createMarkManagerListItem(String.valueOf(currentRoom.getRoomId()), account, true));
buttonItems.add(createMarkManagerListItem(context,String.valueOf(currentRoom.getRoomId()), account, nick,true));
}
if (no_mark_manager) {
buttonItems.add(createMarkManagerListItem(String.valueOf(currentRoom.getRoomId()), account, false));
buttonItems.add(createMarkManagerListItem(context,String.valueOf(currentRoom.getRoomId()), account, nick,false));
}
if (mart_black) {
buttonItems.add(createMarkBlackListItem(
@@ -187,22 +194,14 @@ public class ButtonItemFactory {
userInfo,
String.valueOf(currentRoom.getRoomId()),
account,
getNick(chatRoomMember, account))
nick)
);
}
return buttonItems;
}
/**
* 踩TA当该人再房间中的时候进入他所在的房间
*
* @return
*/
private static ViewItem createFindMeItem() {
ViewItem viewItem = new ViewItem(ResUtil.getString(R.string.erban_avroom_buttonitemfactory_01), R.drawable.icon_dialog_find_ta, null);
viewItem.isFindTa = true;
return viewItem;
}
/**
* 根据account获取昵称
@@ -221,6 +220,19 @@ public class ButtonItemFactory {
}
/**
* 踩TA当该人再房间中的时候进入他所在的房间
*
* @return
*/
private static ViewItem createFindMeItem() {
ViewItem viewItem = new ViewItem(ResUtil.getString(R.string.erban_avroom_buttonitemfactory_01), R.drawable.icon_dialog_find_ta, null);
viewItem.isFindTa = true;
return viewItem;
}
/**
* 私聊
*/
@@ -254,7 +266,7 @@ public class ButtonItemFactory {
}
/**
* 踢出房间: 先强制下麦,再踢出房间
* 踢出房间: 先强制下麦,再踢出房间 todo do
*/
public static ViewItem createKickOutRoomItem(Context context, UserInfo userInfo, final String roomId,
final String account, String nick) {
@@ -262,6 +274,11 @@ public class ButtonItemFactory {
@Override
public void onClick() {
if (VipHelper.notKick(userInfo)) {
ToastUtils.show(ResUtil.getString(R.string.vipPower,userInfo.getUserVipInfoVO().getVipLevel()));
return;
}
String tips = (AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? ResUtil.getString(R.string.erban_avroom_buttonitemfactory_07) : "") + ResUtil.getString(R.string.erban_avroom_buttonitemfactory_08);
if (VipHelper.notKick(userInfo)) {
if (AvRoomDataManager.get().isRoomOwner()) {
@@ -330,26 +347,48 @@ public class ButtonItemFactory {
}
//设置管理员
public static ViewItem createMarkManagerListItem(final String roomId, final String account, final boolean mark) {
public static ViewItem createMarkManagerListItem(final Context context,final String roomId, final String account, final String nick, final boolean mark) {
String title = BasicConfig.INSTANCE.getAppContext().getString(mark ? R.string.set_manager : R.string.remove_manager);
int icon = mark ? R.drawable.icon_dialog_set_manager_ture : R.drawable.icon_dialog_set_manager_false;
return new ViewItem(title, icon, () -> {
//todo do 设置管理员
if (AvRoomDataManager.get().isSuperAdmin()) {
AvRoomModel.get().markManager(Long.parseLong(account), mark).subscribe();
} else {
IMNetEaseManager.get().markManagerListBySdk(roomId, account, mark, null);
IMNetEaseManager.get().markManagerListBySdk(roomId, account, mark, new CallBack<ChatRoomMember>() {
@Override
public void onSuccess(ChatRoomMember data) {
if (mark) {
OtherExtKt.doToast(ResourcesKtxKt.getString(R.string._ver_23_setManagerAddSuccess, nick));
} else {
OtherExtKt.doToast(ResourcesKtxKt.getString(R.string._ver_23_setManagerRemoveSuccess, nick));
}
}
@Override
public void onFail(int code, String error) {
if (code == ServiceResult.CODE_ROOM_MANAGER_LIMIT) {
DialogCommonUtil.showManagerLimit(context);
} else {
OtherExtKt.doToast(error);
}
}
});
}
});
}
//加入黑名单
//加入黑名单 todo do
public static ViewItem createMarkBlackListItem(final Context context,
UserInfo userInfo,
final String roomId,
final String account,
String nick) {
return new ViewItem(ResUtil.getString(R.string.erban_avroom_buttonitemfactory_015), R.drawable.icon_dialog_mark_black_list, () -> {
if (VipHelper.notKick(userInfo)) {
ToastUtils.show(ResUtil.getString(R.string.vipPower,userInfo.getUserVipInfoVO().getVipLevel()));
return;
}
int roomBlackListSize = 200;
InitInfo initInfo = InitialModel.get().getCacheInitInfo();
if (initInfo != null && initInfo.getRoomBlackListSize() != 0) {
@@ -436,7 +475,7 @@ public class ButtonItemFactory {
}
/**
* 拉黑
* 拉黑 todo do
*/
public static ButtonItem createAddToBlackListItem(DialogManager dialogManager, String account) {
return new ButtonItem(ResUtil.getString(R.string.me_block), () -> {
@@ -446,9 +485,6 @@ public class ButtonItemFactory {
public void onOk() {
NimFriendModel.get().addToBlackList(account)
.subscribe((aBoolean, throwable) -> {
// Toast.makeText(BasicConfig.INSTANCE.getAppContext(),
// (throwable == null) ? ResUtil.getString(R.string.erban_avroom_buttonitemfactory_032) : ResUtil.getString(R.string.erban_avroom_buttonitemfactory_033),
// Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort((throwable == null) ? ResUtil.getString(R.string.erban_avroom_buttonitemfactory_034) : ResUtil.getString(R.string.erban_avroom_buttonitemfactory_035));
});
}
@@ -463,28 +499,28 @@ public class ButtonItemFactory {
return new ButtonItem(ResUtil.getString(R.string.erban_avroom_buttonitemfactory_036), () -> UIHelper.showReportPage(context, uid, reportType));
}
public static List<ViewItem> createMiniWorldGroupButtonItems(
Context context,
long uid,
boolean isInRoom,
GiftDialog.OnGiftDialogBtnClickListener listener) {
if (uid <= 0) return null;
String currentUid = String.valueOf(AuthModel.get().getCurrentUid());
String account = String.valueOf(uid);
//account和chatRoomMember 不会同时为空,如果同时为空,则是前面传参出错
boolean isMySelf = Objects.equals(currentUid, account);
if (isMySelf) {
return null;
}
List<ViewItem> buttonItems = new ArrayList<>();
//不在房间内,也不需要魔法
buttonItems.add(createSendGiftItem(context, uid, true, true, listener));
// 私聊
buttonItems.add(createPrivateChatItem(context, account, isInRoom));
//装扮和关注目前是都有的操作
// buttonItems.add(createSendDecorationItem(context, uid));
buttonItems.add(createAttentItem());
buttonItems.add(createFindMeItem());
return buttonItems;
}
// public static List<ViewItem> createMiniWorldGroupButtonItems(
// Context context,
// long uid,
// boolean isInRoom,
// GiftDialog.OnGiftDialogBtnClickListener listener) {
// if (uid <= 0) return null;
// String currentUid = String.valueOf(AuthModel.get().getCurrentUid());
// String account = String.valueOf(uid);
// //account和chatRoomMember 不会同时为空,如果同时为空,则是前面传参出错
// boolean isMySelf = Objects.equals(currentUid, account);
// if (isMySelf) {
// return null;
// }
// List<ViewItem> buttonItems = new ArrayList<>();
// //不在房间内,也不需要魔法
// buttonItems.add(createSendGiftItem(context, uid, true, true, listener));
// // 私聊
// buttonItems.add(createPrivateChatItem(context, account, isInRoom));
// //装扮和关注目前是都有的操作
// // buttonItems.add(createSendDecorationItem(context, uid));
// buttonItems.add(createAttentItem());
// buttonItems.add(createFindMeItem());
// return buttonItems;
// }
}

View File

@@ -39,27 +39,6 @@ import androidx.viewpager2.widget.ViewPager2;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.core.manager.AudioEngineManager;
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;
import com.netease.nimlib.sdk.Observer;
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.netease.nimlib.sdk.msg.model.BroadcastMessage;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.orhanobut.logger.Logger;
import com.chwl.app.R;
import com.chwl.app.avroom.dialog.NewUserGiftDialog;
import com.chwl.app.avroom.dialog.SingleRoomTipDialog;
@@ -72,18 +51,23 @@ import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.view.IAvRoomView;
import com.chwl.app.avroom.widget.VerticalViewPagerAdapter;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.library.common.util.Utils;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.common.widget.CustomImageSpan;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.home.dialog.HelloMessageDialog;
import com.chwl.app.notify.GlobalNotifyManager;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.patriarch.help.LimitEnterRoomHelper;
import com.chwl.app.ui.user.activity.UserInfoActivity;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.CommonWebViewActivity;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.app.ui.webview.baishun.LeaderccGameWebFragment;
import com.chwl.app.ui.widget.NobleOpenNoticeView;
import com.chwl.app.ui.widget.dialog.AllServiceGiftLevelDialog;
import com.chwl.app.ui.widget.dialog.MonsterDialog;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.app.utils.UserUtils;
import com.chwl.core.Constants;
import com.chwl.core.DemoCache;
@@ -104,18 +88,20 @@ import com.chwl.core.im.custom.bean.RoomPkBean;
import com.chwl.core.im.custom.bean.TarotAttachment;
import com.chwl.core.im.custom.bean.TarotMsgBean;
import com.chwl.core.initial.InitialModel;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.module_hall.hall.HallModel;
import com.chwl.core.module_hall.hall.bean.SuperAdminInfo;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.monsterhunting.bean.MonsterHuntingResult;
import com.chwl.core.monsterhunting.bean.MonsterInfo;
import com.chwl.core.monsterhunting.manager.MonsterDataManager;
import com.chwl.core.noble.bean.AllServiceGiftProtocol;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.noble.NobleResourceType;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.noble.bean.AllServiceGiftProtocol;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.patriarch.event.CloseMinRoomEvent;
import com.chwl.core.patriarch.event.ImPushMsgPmLimitTimeEvent;
import com.chwl.core.patriarch.event.PmDismissAllLimitDialogEvent;
@@ -128,21 +114,40 @@ import com.chwl.core.room.dragonball.DragonBallModel;
import com.chwl.core.room.event.FinishAvRoomEvent;
import com.chwl.core.room.event.RoomExitEvent;
import com.chwl.core.room.event.RoomTaskTipsEvent;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
import com.chwl.core.room.pk.event.PKStateEvent;
import com.chwl.core.super_admin.util.SAdminOptUtil;
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.treasurefairy.bean.FairyMsgInfoBean;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.StringFormatUtils;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.common.util.OtherExtKt;
import com.chwl.library.common.util.Utils;
import com.chwl.library.language.LanguageHelper;
import com.chwl.library.rxbus.RxBus;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.UIUtils;
import com.chwl.library.widget.SVGAView;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.NIMSDK;
import com.netease.nimlib.sdk.Observer;
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.netease.nimlib.sdk.msg.model.BroadcastMessage;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.orhanobut.logger.Logger;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -232,6 +237,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private RoomNotifyManager roomNotify;
private BaiShunGameWebFragment baiShunGameFragment;
private LeaderccGameWebFragment leaderccGameFragment;
public static void start(Context context, long roomUid) {
startForFromType(context, roomUid, FROM_TYPE_NORMAL, null, null);
@@ -302,6 +308,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
context.startActivity(intent);
}
public static void setBackBg(Context context, RoomInfo roomInfo, SVGAImageView svgaRoomBg, String[] bgPicture) {
if (roomInfo != null && svgaRoomBg != null) {
if (!StringFormatUtils.isBlank(roomInfo.getBackPic())) {
@@ -428,6 +435,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
} else {
roomUid = intent.getLongExtra(Constants.ROOM_UID, 0);
}
OtherExtKt.doLog("initIntentExtra 进房 fromType = "+fromType);
}
@SuppressLint("CheckResult")
@@ -508,6 +516,9 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (UserUtils.getUserInfo().isFirstCharge()) {
getMvpPresenter().checkFirstCharge();
}
LogUtils.d("roomLog RoomBoomManager 第二次进 ");
RoomBoomManager.INSTANCE.setMRoomUid(AvRoomDataManager.get().getRoomUid());
IMNetEaseManager.get().getChatRoomEventObservable().onNext(new RoomEvent().setEvent(RoomEvent.MSG_SELF_ENTER_ROOM));
}
});
@@ -522,6 +533,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
}
});
roomNotify.start();
AvRoomDataManager.get().hasAvRoomAct = true;
}
@Override
@@ -752,7 +764,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (avatarBg == null || avatar == null || nick == null) return;
if (userInfo != null) {
ImageLoadUtils.loadImageWithBlurTransformation(this, userInfo.getAvatar(), avatarBg);
ImageLoadUtils.loadBigAvatar(this, userInfo.getAvatar(), avatar, false);
ImageLoadUtils.loadAvatarBig(userInfo.getAvatar(), avatar);
Drawable badgeDrawable = null;
if (userInfo.getNobleInfo() != null) {
// 勋章
@@ -815,7 +827,6 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
public void exitRoom(RoomInfo currentRoomInfo) {
if (currentRoomInfo != null && currentRoomInfo.getUid() == roomUid) {
finish();
AudioEngineManager.get().setNotRecord(false);
}
}
@@ -859,6 +870,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
if (!justClosePage) {
getMvpPresenter().exitRoom();
}
AudioEngineManager.get().setNotRecord(false);
finish();
}
@@ -875,6 +887,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
@Override
protected void onDestroy() {
AvRoomDataManager.get().hasAvRoomAct = false;
//关闭这么多弹窗,鬼知道哪个出问题了,简单的try catch下
try {
// 确保关闭 dialog避免出现 leak window 异常
@@ -915,6 +928,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
svgaCache.clear();
}
svgaCache = null;
GlobalNotifyManager.INSTANCE.clearQueue();
super.onDestroy();
}
@@ -1074,6 +1088,11 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
DemoCache.saveNewUserChargeGift(1);
}
dismissLoadingDialog();
LogUtils.d("roomLog RoomBoomManager 第一次进 ");
RoomBoomManager.INSTANCE.setMRoomUid(AvRoomDataManager.get().getRoomUid());
IMNetEaseManager.get().getChatRoomEventObservable().onNext(new RoomEvent().setEvent(RoomEvent.MSG_SELF_ENTER_ROOM));
}
@Override
@@ -1494,6 +1513,24 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, baiShunGameFragment).commitAllowingStateLoss();
}
public void showLeaderccGame(String url, BaiShunGameConfig config) {
closeBaiShunGame();
StringBuffer newUrl = new StringBuffer(url);
newUrl.append("&uid="+AuthModel.get().getCurrentUid());
newUrl.append("&token="+config.getCode());
newUrl.append("&lang=").append(LanguageHelper.INSTANCE.getH5GameLeaderccLan());
newUrl.append("&roomid=").append(AvRoomDataManager.get().getRoomId());
leaderccGameFragment = LeaderccGameWebFragment.Companion.newInstance(newUrl.toString(), config);
leaderccGameFragment.setListener(new IBaiShunGameListener() {
@Override
public void onGameClose() {
closeBaiShunGame();
}
});
findViewById(R.id.layout_baishun_game).setVisibility(VISIBLE);
getSupportFragmentManager().beginTransaction().add(R.id.layout_baishun_game, leaderccGameFragment).commitAllowingStateLoss();
}
private boolean closeBaiShunGame() {
boolean isClose = false;
if (baiShunGameFragment != null) {
@@ -1502,8 +1539,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
isClose = true;
}
}
if (leaderccGameFragment != null) {
if (leaderccGameFragment.isAdded()) {
getSupportFragmentManager().beginTransaction().remove(leaderccGameFragment).commitAllowingStateLoss();
isClose = true;
}
}
findViewById(R.id.layout_baishun_game).setVisibility(View.GONE);
baiShunGameFragment = null;
leaderccGameFragment = null;
return isClose;
}
}

View File

@@ -8,9 +8,6 @@ import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.RoomNormalListAdapter;
import com.chwl.app.avroom.presenter.RoomBlackPresenter;
@@ -30,6 +27,9 @@ import com.chwl.library.coremanager.CoreEvent;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ListUtils;
import com.chwl.library.utils.ResUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.trello.rxlifecycle3.android.ActivityEvent;
import java.util.List;
import java.util.ListIterator;
@@ -99,7 +99,7 @@ public class RoomBlackListActivity extends BaseMvpActivity<IRoomBlackView, RoomB
public void accept(String s, String error) {
super.accept(s, error);
if (error == null) {
toast(ResUtil.getString(R.string.avroom_activity_roomblacklistactivity_04));
toast(ResUtil.getString(R.string.doSuccess));
loadData();
} else {
toast(error);

View File

@@ -7,13 +7,6 @@ import android.text.TextUtils;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.RoomInviteAdapter;
import com.chwl.app.avroom.presenter.RoomInvitePresenter;
@@ -21,11 +14,18 @@ import com.chwl.app.avroom.view.IRoomInviteView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.core.Constants;
import com.chwl.core.noble.NobleResourceType;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.utils.ListUtils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;
import java.util.List;
import java.util.Map;
@@ -130,11 +130,20 @@ public class RoomInviteActivity extends BaseMvpActivity<IRoomInviteView, RoomInv
@Override
public void onRequestMemberByPageSuccess(List<ChatRoomMember> memberList, int page) {
// Iterator<ChatRoomMember> iterator = memberList.iterator();
// while (iterator.hasNext()) {
// RoomOnlineUserBean next = iterator.next();
// if (next.isSuperAdmin()) {
// iterator.remove();
// }
// }
mPage = page;
if (mPage == Constants.PAGE_START) {
List<ChatRoomMember> chatRoomMemberList = mRoomInviteAdapter.getChatRoomMemberList();
if (!ListUtils.isListEmpty(chatRoomMemberList))
chatRoomMemberList.clear();
if (!ListUtils.isListEmpty(chatRoomMemberList)) chatRoomMemberList.clear();
mRefreshLayout.finishRefresh(0);
if (ListUtils.isListEmpty(memberList)) {
showNoData(ResUtil.getString(R.string.avroom_activity_roominviteactivity_02));

View File

@@ -8,19 +8,21 @@ import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.RoomNormalListAdapter;
import com.chwl.app.avroom.presenter.RoomManagerPresenter;
import com.chwl.app.avroom.view.IRoomManagerView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.util.DialogCommonUtil;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.core.bean.response.ServiceResult;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.utils.ListUtils;
import com.chwl.library.utils.ResUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import java.util.List;
import java.util.ListIterator;
@@ -140,7 +142,9 @@ public class RoomManagerListActivity extends BaseMvpActivity<IRoomManagerView, R
@Override
public void markManagerListFail(int code, String error) {
if (code == ServiceResult.CODE_ROOM_MANAGER_LIMIT) {
DialogCommonUtil.showManagerLimit(context);
}
}
@Override

View File

@@ -1,8 +1,11 @@
package com.chwl.app.avroom.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.TextUtils;
@@ -11,23 +14,21 @@ import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
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;
import com.chwl.app.R;
import com.chwl.app.application.App;
import com.chwl.app.avroom.dialog.SelectLabelDialog;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.presenter.RoomSettingPresenter;
import com.chwl.app.avroom.view.IRoomSettingView;
import com.chwl.app.avroom.widget.EditRoomTitleDialog;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.base.PhotoPickActivity;
import com.chwl.app.common.util.BitmapUtil;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.ActivityRoomSettingBinding;
import com.chwl.app.ui.webview.CommonWebViewActivity;
@@ -36,6 +37,7 @@ import com.chwl.core.UriProvider;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.auth.event.KickOutEvent;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.file.FileModel;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.RoomNoticeAttachment;
import com.chwl.core.kick.KickModel;
@@ -51,14 +53,28 @@ import com.chwl.core.room.giftvalue.helper.GiftValueMrg;
import com.chwl.core.room.model.AvRoomModel;
import com.chwl.core.room.model.RoomSettingModel;
import com.chwl.core.room.queue.bean.MicMemberInfo;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.myutil.MyUriUtils;
import com.chwl.core.utils.net.BeanObserver;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.common.file.FileHelper;
import com.chwl.library.common.util.PhotoCompressCallback;
import com.chwl.library.common.util.PhotoCompressUtil;
import com.chwl.library.net.rxnet.callback.CallBack;
import com.chwl.library.utils.CommonUtils;
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.codec.DESUtils;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.yalantis.ucrop.UCrop;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -71,14 +87,14 @@ import java.util.Objects;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import kotlinx.coroutines.Job;
/**
* @author chenran
* @date 2017/9/26
*/
@CreatePresenter(RoomSettingPresenter.class)
public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomSettingPresenter>
implements View.OnClickListener, IRoomSettingView {
public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomSettingPresenter> implements View.OnClickListener, IRoomSettingView {
private RelativeLayout managerLayout;
private RelativeLayout blackLayout;
@@ -98,6 +114,13 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
private ActivityRoomSettingBinding binding;
private Uri mUri;
private Job mJob;
private final int PERMISSION_CODE_STORAGE = 12;
private final int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择
private final int REQUEST_CODE_STORAGE = 42;
private final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 剪切的图片最大为100 MB
public static void start(Context context) {
Intent intent = new Intent(context, RoomSettingActivity.class);
context.startActivity(intent);
@@ -135,17 +158,22 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
binding.layoutSingleRoomSort.setVisibility(
AvRoomDataManager.get().isRoomOwner() && AvRoomDataManager.get().isSingleRoom()
? View.VISIBLE : View.GONE);
binding.setRoomAvatar.setVisibility((AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin()) ? View.VISIBLE : View.GONE);
//调用更改房间信息接口后会发消息ROOM_INFO_UPDATE在此处接收ui改动
IMNetEaseManager.get().getChatRoomEventObservable()
.compose(bindToLifecycle())
.filter(roomEvent -> roomEvent.getEvent() == RoomEvent.ROOM_INFO_UPDATE)
.subscribe(roomEvent -> updateRoomInfoView());
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
if (mJob != null) {
mJob.cancel(null);
}
}
private void initView() {
@@ -198,7 +226,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
}
}
private void loadGiftValueState(){
private void loadGiftValueState() {
if (SuperAdminUtil.isSuperAdmin()) {
binding.layoutGiftValue.setVisibility(View.GONE);
return;
@@ -260,8 +288,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
}
private void save(final String name, final String pwd, String label) {
save(name, pwd, label, false,
roomInfo.isHasAnimationEffect());
save(name, null, pwd, label, false, roomInfo.isHasAnimationEffect());
}
/**
@@ -273,7 +300,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
* @param isUpdateGiftEffect 是否改动了礼物特效
* @param giftEffect 是否开启礼物特效
*/
private void save(final String name, final String pwd, String label, boolean isUpdateGiftEffect,
private void save(final String name, final String avatar, final String pwd, String label, boolean isUpdateGiftEffect,
boolean giftEffect) {
String desc = null;
getDialogManager().showProgressDialog(this, ResUtil.getString(R.string.avroom_activity_roomsettingactivity_06));
@@ -293,13 +320,14 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
@Override
public void onSuccess(RoomInfo info) {
getDialogManager().dismissDialog();
ToastUtils.show(R.string.avroom_activity_roommanagerlistactivity_013);
if (isUpdateGiftEffect && !giftEffect) {
getMvpPresenter().updateGiftEffect(info);
}
}
};
if (AvRoomDataManager.get().isRoomOwner()) {
model.updateRoomInfo(name, desc, roomInfo.getIntroduction(), pwd, label, id,
model.updateRoomInfo(name, avatar, desc, roomInfo.getIntroduction(), pwd, label, id,
AuthModel.get().getCurrentUid(),
AuthModel.get().getTicket(),
giftEffect,
@@ -311,7 +339,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
.compose(bindToLifecycle())
.subscribe(observer);
} else if (AvRoomDataManager.get().isRoomAdmin()) {
model.updateByAdmin(roomInfo.getUid(), name, desc, roomInfo.getIntroduction(), pwd, label, id,
model.updateByAdmin(roomInfo.getUid(), name, avatar, desc, roomInfo.getIntroduction(), pwd, label, id,
AuthModel.get().getCurrentUid(),
AuthModel.get().getTicket(),
giftEffect,
@@ -404,13 +432,13 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
@Override
public void onOk() {
save(null, null, null, true, false);
save(null, null, null, null, true, false);
}
});
return;
}
//开启礼物特效
save(null, null, null, true, true);
save(null, null, null, null, true, true);
break;
case R.id.switch_screen:
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
@@ -552,11 +580,19 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
case R.id.switch_gift_value:
switchGiftValue();
break;
case R.id.setRoomAvatar:
checkStoragePermission();
break;
default:
}
}
private void switchGiftValue(){
private void checkStoragePermission() {
PhotoPickActivity.start(this, PhotoPickActivity.IMG);
}
private void switchGiftValue() {
if (AvRoomDataManager.get().isCpRoom()) {
return;
}
@@ -894,4 +930,104 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
imageView.setImageResource(isSelected ?
R.drawable.icon_room_set_lock_true : R.drawable.icon_room_set_lock_false);
}
@SuppressLint("CheckResult")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PhotoPickActivity.PICK_ACT_RESULT:
if (data != null) {
Uri uri = data.getData();
mUri = Uri.parse("file://" + FileHelper.getRootCacheDir().getPath() + "/" + System.nanoTime() + ".jpg");
if (uri != null && mUri != null) {
boolean isCopy = MyUriUtils.INSTANCE.copyFileToUrl(this, uri, mUri);
if (isCopy) {
crop(mUri, 1, mUri);
} else {
ToastUtils.show(R.string.exception_try_again);
}
}
}
break;
case UCrop.REQUEST_CROP:
if (mUri != null && mUri.getPath() != null) {
try {
if (mJob != null) {
mJob.cancel(null);
}
mJob = PhotoCompressUtil.compress(
this,
mUri.getPath(),
PhotoCompressUtil.getCompressCachePath("roomAvatar"), new PhotoCompressCallback() {
@Override
public void onSuccess(@NonNull String compressedImg) {
getDialogManager().showProgressDialog(RoomSettingActivity.this, ResUtil.getString(R.string.ui_user_userinfomodifyactivity_09));
FileModel.get()
.uploadFile(compressedImg)
.compose(bindToLifecycle())
.subscribe((url, throwable) -> {
if (throwable != null) {
onUploadFail(throwable);
} else {
onUpload(url);
}
});
}
@Override
public void onFail(@NonNull Throwable e) {
toast(e.getMessage());
}
});
mJob.start();
} catch (Exception e) {
}
}
break;
}
}
}
/**
* 第三方图片裁剪框架Ucrop
*/
private void crop(Uri sourceUri, long sourceSize, Uri destinationUri) {
if (sourceUri == null || destinationUri == null) {
return;
} //防止too large导致oom大于100m不处理内存大小
if (BitmapUtil.getSdBitmapSize(sourceUri) >= MAX_BITMAP_SIZE) {
toast(R.string.text_bitmap_too_large);
return;
}
UCrop.Options options = new UCrop.Options();
options.setCompressionQuality(100);
options.setShowCropGrid(false);
options.setToolbarColor(ContextCompat.getColor(App.gContext, android.R.color.black));
options.setStatusBarColor(ContextCompat.getColor(App.gContext, android.R.color.black));
options.setHideBottomControls(true);
options.setCompressionFormat(Bitmap.CompressFormat.JPEG);
options.setToolbarCancelDrawable(R.drawable.user_ucrop_ic_closs);
options.setToolbarCropDrawable(R.drawable.user_ucrop_ic_sure);
options.setToolbarWidgetColor(ContextCompat.getColor(App.gContext, R.color.color_white));
UCrop.of(sourceUri, destinationUri).withOptions(options).withAspectRatio(1f, 1f).withMaxResultSize(800, 800).start(this);
}
private void onUpload(String url) {
LogUtils.d(" 请求接口 更新房间封面 url = " + url);
save(null, url, null, null, false, roomInfo.isHasAnimationEffect());
}
private void onUploadFail(Throwable throwable) {
toast(ResUtil.getString(R.string.ui_user_userinfomodifyactivity_08) + ":" + throwable.getMessage());
getDialogManager().dismissDialog();
}
}

View File

@@ -119,7 +119,7 @@ public class RoomTitleEditActivity extends BaseBindingActivity<ActivityRoomTitle
String ticket = AuthModel.get().getTicket();
if (AvRoomDataManager.get().isRoomOwner()) {
mDialogManager.showProgressDialog(this);
Disposable disposable = roomSettingModel.updateRoomInfo(info.title, desc, introduction, info.roomPwd, info.getRoomTag(), info.tagId, currentUid,
Disposable disposable = roomSettingModel.updateRoomInfo(info.title,null,desc, introduction, info.roomPwd, info.getRoomTag(), info.tagId, currentUid,
ticket, info.isHasAnimationEffect(), info.getAudioQuality(), info.getLimitType(),info.isPureMode(), info.getType(),
info.getMgId())
.subscribe(this);
@@ -128,7 +128,7 @@ public class RoomTitleEditActivity extends BaseBindingActivity<ActivityRoomTitle
} else if (AvRoomDataManager.get().isRoomAdmin()) {
mDialogManager.showProgressDialog(this);
Disposable disposable = roomSettingModel.updateByAdmin(info.getUid(), info.title, desc, introduction, info.roomPwd, info.getRoomTag(), info.tagId, currentUid,
Disposable disposable = roomSettingModel.updateByAdmin(info.getUid(), info.title,null, desc, introduction, info.roomPwd, info.getRoomTag(), info.tagId, currentUid,
ticket, info.isHasAnimationEffect(), info.getAudioQuality(),info.isPureMode())
.subscribe(this);

View File

@@ -1,43 +1,70 @@
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 androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.bindadapter.BaseBindingViewHolder
import com.chwl.app.databinding.ItemRoomModeBinding
import com.chwl.app.databinding.RoomTypeSwitchActivityBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromUrl
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.utils.NumberUtils
import com.chwl.core.UriProvider
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.gift.bean.RoomLevelInfo
import com.chwl.core.gift.bean.RoomMicDress
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.super_admin.util.SuperAdminUtil
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.doToast
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setVis
import com.chwl.library.common.util.toColor
import com.chwl.library.net.rxnet.RxNet
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
import com.example.lib_utils.ktx.getString
import io.reactivex.Single
import retrofit2.http.GET
import retrofit2.http.Query
//切换麦位页面
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) {
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY
&& AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY
&& AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY
&& AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_19_ROOM
&& AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_20_ROOM
) {
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
}
@@ -46,97 +73,324 @@ class RoomTypeSwitchActivity : BaseViewBindingActivity<RoomTypeSwitchActivityBin
}
}
private var mCurrentMicType: Int? = null
private var mCurrentMicSkins: Int? = null
private var mCurrentMicEffects: Int? = null
private var mCurrentLevel = 0
private val mMicTypeAdapter = RoomModeAdapter()
private val mMicSkinsAdapter = RoomModeAdapter()
private val mMicEffectsAdapter = RoomModeAdapter()
private var mTypeSet = true
private var micSkinsEffectsSet = true
override fun init() {
initWhiteTitleBar(ResUtil.getString(R.string.room_type))
initEvent()
this.currentType = AvRoomDataManager.get().mCurrentRoomInfo?.type
updateSelectView(currentType)
initView()
initListener()
initData()
}
private fun initEvent() {
binding.tvSubmit.singleClick {
selectType?.let {
if (currentType != it) {
trySwitchRoomType(it)
private fun initView() {
initDarkTitleBar(R.string.Room_Mode.getString())
setListView(binding.rvListType, mMicTypeAdapter)
setListView(binding.rvListSkins, mMicSkinsAdapter)
setListView(binding.rvListEffects, mMicEffectsAdapter)
}
private fun initListener() {
binding.btnConfirm.click {
switchRoomMicType()
}
binding.btnMore.click {
CommonWebViewActivity.start(this, UriProvider.getRoomLevelRule())
}
}
private fun initData() {
val mCurrentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo
mCurrentMicType = mCurrentRoomInfo?.type
getBoomLevelInfo(AvRoomDataManager.get().roomUid).compose(bindToLifecycle())
.doOnSuccess {
if (it != null) {
val levelExp = it.nextLevelExp - it.currentLevelExp
val proExp = it.roomVal - it.currentLevelExp
val nexExp = levelExp - proExp
binding.proExp.max = levelExp.toInt()
binding.proExp.progress = proExp.toInt()
binding.avatar.load(mCurrentRoomInfo?.avatar)
binding.nick.text = mCurrentRoomInfo?.title
binding.levelIcon.load(it.getCurrentLevelIcon())
binding.roomValue.text = R.string.Room_Value_s.getString(it.roomVal.toLong().toString())
binding.roomAdmin.text = R.string.Room_Admin_s.getString(it.currentManagerNum,it.managerLimitNum)
binding.currentLevel.text = R.string.LV_s.getString(it.currentLevel)
binding.nextLevel.text = R.string.LV_s.getString(it.nextLevel)
binding.nextExp.text = R.string.Next_LV_EXP_s.getString(NumberUtils.format(nexExp))
if (it.nextLevel == 0) {
binding.nextExp.setVis(false,true)
binding.proExp.max = 1
binding.proExp.progress = 1
binding.nextLevel.text = R.string.LV_s.getString(it.currentLevel)
binding.currentLevel.text = R.string.LV_s.getString(it.currentLevel-1)
}
mCurrentMicSkins = it.usedMicSkinId
mCurrentMicEffects = it.usedMicEffectId
mCurrentLevel = it.currentLevel
val typeArr = mutableListOf(
RoomInfo.ROOMTYPE_HOME_PARTY,
RoomInfo.ROOMTYPE_PARTY,
RoomInfo.ROOMTYPE_REVELRY,
RoomInfo.ROOMTYPE_20_ROOM,
RoomInfo.ROOMTYPE_19_ROOM,
)
val typeNArr = arrayOf(
R.drawable.ic_room_mic_type_9_n,
R.drawable.ic_room_mic_type_10_n,
R.drawable.ic_room_mic_type_15_n,
R.drawable.ic_room_mic_type_20_n,
R.drawable.ic_room_mic_type_19_n,
)
val typeSArr = arrayOf(
R.drawable.ic_room_mic_type_9_s,
R.drawable.ic_room_mic_type_10_s,
R.drawable.ic_room_mic_type_15_s,
R.drawable.ic_room_mic_type_20_s,
R.drawable.ic_room_mic_type_19_s,
)
val nameArr = arrayOf(
R.string.Classic,
R.string.Party,
R.string.Carnival,
R.string.Celebration,
R.string.Unique,
)
if (!it.isHasUnique) {
typeArr.remove(RoomInfo.ROOMTYPE_19_ROOM)
typeArr.remove(RoomInfo.ROOMTYPE_20_ROOM)
}
val typeData = mutableListOf<RoomMicDress>()
typeArr.filterIndexed { index, micType ->
typeData.add(RoomMicDress().apply {
id = micType
dressType = RoomMicDress.RoomDressType.T_Type
isSelect = micType == mCurrentMicType
normalRes = typeNArr[index]
selectRes = typeSArr[index]
name = nameArr[index].getString()
})
}
mMicTypeAdapter.setNewData(typeData as List<RoomMicDress>?)
if (it.getMicSkins().isVerify()) {
val micSkins = it.getMicSkins()
micSkins.add(0, RoomMicDress().apply {
id = 0
normalRes = R.drawable.icon_room_up_micro
})
micSkins.forEach { it.isSelect = (it.id == mCurrentMicSkins) }
mMicSkinsAdapter.setNewData(micSkins)
}
if (it.getMicEffects().isVerify()) {
val micEffects = it.getMicEffects()
micEffects.add(0, RoomMicDress().apply {
id = 0
normalRes = R.drawable.shape_463a26_circle
})
micEffects.forEach { it.isSelect = (it.id == mCurrentMicEffects) }
mMicEffectsAdapter.setNewData(it.getMicEffects())
}
}
}.doOnError { it?.message?.doToast() }.subscribe()
}
private fun setListView(rvList: RecyclerView, adapter: RoomModeAdapter) {
adapter.setOnItemClickListener { adapter, view, position ->
val clickData = adapter?.data?.get(position)
if (clickData != null && clickData is RoomMicDress){
if (mCurrentLevel < clickData.reachLevel) {
R.string.roomLevelErrorTips.doToast()
return@setOnItemClickListener
}
}
adapter?.data?.forEachIndexed { index, feData ->
if (feData is RoomMicDress) {
feData.isSelect = index == position
}
}
adapter?.notifyDataSetChanged()
}
rvList.layoutManager = GridLayoutManager(context, 3, RecyclerView.VERTICAL, false)
rvList.adapter = adapter
}
private fun switchRoomMicType() {
var typeId = -1
var skinsId = -1
var effectId = -1
var isLevelError = false
mMicTypeAdapter.data?.forEach {
if (it.isSelect) {
typeId = it.id
}
}
mMicSkinsAdapter.data?.forEach {
if (it.isSelect) {
if (it.id > 0) {
skinsId = it.id
}
if (mCurrentLevel < it.reachLevel) {
isLevelError = true
}
}
}
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)
mMicEffectsAdapter.data?.forEach {
if (it.isSelect) {
if (it.id > 0) {
effectId = it.id
}
if (mCurrentLevel < it.reachLevel) {
isLevelError = true
}
}
} 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()
})
if (isLevelError) {
R.string.roomLevelErrorTips.doToast()
} else {
if ((typeId != -1 && typeId != mCurrentMicType) || (effectId != mCurrentMicEffects) || (skinsId != mCurrentMicSkins)) {
dialogManager.showOkCancelDialog(
ResUtil.getString(R.string.switch_room_type_tips),
ResUtil.getString(R.string.login_fragment_adduserinfofragment_04)
) {
binding.btnConfirm.post {
mTypeSet = false
dialogManager.showProgressDialog(context)
val newRoomInfo = RoomInfo()
newRoomInfo.uid = AvRoomDataManager.get().roomUid
newRoomInfo.type = typeId
newRoomInfo.usedMicSkinId = skinsId
newRoomInfo.usedMicEffectId = effectId
OpenRoomHelper.updateRoomInfoEx(newRoomInfo)
.compose(bindToLifecycle())
.doOnSuccess {
mTypeSet = true
dialogManager.dismissDialog()
// val mCurrentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo
// mCurrentRoomInfo?.type = typeId
// mCurrentRoomInfo?.usedMicSkinId = skinsId
// mCurrentRoomInfo?.usedMicEffectId = effectId
finish()
}
.doOnError {
SingleToastUtil.showToast(it.message)
dialogManager.dismissDialog()
}
.subscribe()
}
}
} else {
finish()
}
}
}
override fun needSteepStateBar(): Boolean {
return true
}
override fun setStatusBar() {
super.setStatusBar()
StatusBarUtil.transparencyBar(this)
StatusBarUtil.StatusBarLightMode(this)
override fun transparencyBar() = true
class RoomModeAdapter : BaseBindingAdapter<ItemRoomModeBinding, RoomMicDress>() {
override fun convert(
helper: BaseBindingViewHolder<ItemRoomModeBinding>,
item: RoomMicDress
) {
helper?.binding?.let { binding ->
binding.bg.changeStrikeColor(if (item.isSelect) "#ff8c03".toColor() else "#1b1b1d".toColor())
binding.bg.changeSoildColor(if (item.isSelect) "#261800".toColor() else "#1b1b1d".toColor())
binding.tvName.alpha = (if (item.isSelect) 1f else 0.5f)
binding.tvName.setVis(item.dressType == RoomMicDress.RoomDressType.T_Type)
binding.tvName.text = item.name
binding.ivType.setVis(false)
binding.ivSkins.setVis(false)
binding.ivEffect.setVis(false)
if (item.id == 0) {
binding.ivSkins.setImageResource(item.normalRes)
binding.ivSkins.setVis(true)
} else {
if (item.dressType == RoomMicDress.RoomDressType.T_Type) {
binding.ivType.setImageResource(if (item.isSelect) item.selectRes else item.normalRes)
binding.ivType.setVis(true)
} else if (item.dressType == RoomMicDress.RoomDressType.T_Skin) {
binding.ivSkins.load(item.normalMicUrl)
binding.ivSkins.setVis(true)
} else if (item.dressType == RoomMicDress.RoomDressType.T_Effects) {
binding.ivEffect.setVis(true)
binding.ivEffect.loadFromUrl(item.normalMicUrl)
}
}
}
}
}
private fun getBoomLevelInfo(roomUid: Long): Single<RoomLevelInfo> {
return api.getBoomLevelInfo(roomUid)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
//房间 等级信息
@GET("/room/level/info")
fun getBoomLevelInfo(@Query("roomUid") roomUid: Long): Single<ServiceResult<RoomLevelInfo>>
}
}

View File

@@ -7,32 +7,31 @@ import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
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;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.ui.utils.ImageLoadKt;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.app.utils.RegexUtil;
import com.chwl.app.utils.ResourceManager;
import com.chwl.core.UriProvider;
import com.chwl.core.bean.RoomMicInfo;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.gift.bean.RoomMicDress;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.noble.NobleResourceType;
import com.chwl.core.noble.NobleUtil;
@@ -43,8 +42,14 @@ import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.queue.bean.MicMemberInfo;
import com.chwl.core.user.UserModel;
import com.chwl.core.utils.ActivityUtil;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.config.BasicConfig;
import com.chwl.library.widget.SVGAView;
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;
/**
* @author xiaoyu
@@ -61,6 +66,8 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
public static final String MICRO_TYPE_SINGLE = "single";
public static final String MICRO_TYPE_PARTY = "party";
public static final String MICRO_TYPE_REVELRY = "revelry";
public static final String MICRO_TYPE_REVELRY_19 = "revelry_19";
public static final String MICRO_TYPE_REVELRY_20 = "revelry_20";
protected static final int TYPE_KING = 2;
protected static final int TYPE_BOSS = 1;
@@ -140,12 +147,15 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
public class NormalMicroViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
View rootView;
LinearLayout llNick;
View microLayout;
TextView tvNick;
ImageView ivUpImage;
ImageView ivLockImage;
ImageView ivMuteImage;
CircleImageView ivAvatar;
ImageView ivAvatar;
SVGAImageView ivHalo;
@Nullable
@@ -160,8 +170,12 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
int position = TYPE_INVALID;
int micPositionNameOffset = 2;
int micType = 0; //特殊麦位type , 麦位图片特殊处理
NormalMicroViewHolder(View itemView) {
super(itemView);
rootView = itemView.findViewById(R.id.rootView);
microLayout = itemView.findViewById(R.id.micro_layout);
ivHalo = itemView.findViewById(R.id.iv_halo);
ivUpImage = itemView.findViewById(R.id.up_image);
ivLockImage = itemView.findViewById(R.id.lock_image);
@@ -169,6 +183,7 @@ 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);
llNick = itemView.findViewById(R.id.ll_nick);
ivCharmLevelTag = itemView.findViewById(R.id.iv_charm_level_tag);
ivKickGuard = itemView.findViewById(R.id.iv_kick_guard);
@@ -197,7 +212,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
}
void bind(RoomQueueInfo info, int position) {
void bind(@NonNull RoomQueueInfo info, int position) {
this.info = info;
this.position = position;
RoomMicInfo roomMicInfo = info.mRoomMicInfo;
@@ -206,6 +221,20 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivCharmLevelTag.setVisibility(View.GONE);
}
if (micType == 0) {
// 麦位皮肤
// ivUpImage = up_image = icon_room_up_micro - 可上麦
// ivLockImage = lock_image = icon_room_lock_micro - 锁麦
RoomMicDress roomMicSkins = ResourceManager.INSTANCE.getRoomMicSkins();
if (roomMicSkins != null) {
ImageLoadKt.loadImage(ivUpImage,roomMicSkins.normalMicUrl);
ImageLoadKt.loadImage(ivLockImage,roomMicSkins.normalMicLockUrl);
}else {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
ivLockImage.setImageResource(R.drawable.icon_room_lock_micro);
}
}
if (roomMicInfo == null) {
ivUpImage.setVisibility(View.VISIBLE);
ivLockImage.setVisibility(View.GONE);
@@ -230,7 +259,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivUpImage.setVisibility(View.GONE);
ivAvatar.setVisibility(View.VISIBLE);
setSelectText(position, chatRoomMember.getNick(), chatRoomMember.getGender());
ImageLoadUtils.loadAvatar(BasicConfig.INSTANCE.getAppContext(), chatRoomMember.getAvatar(), ivAvatar);
ImageLoadUtils.loadAvatar(chatRoomMember.getAvatar(), ivAvatar);
// 加载贵族
updateNobleView(chatRoomMember);
//增加贵族昵称颜色

View File

@@ -11,7 +11,7 @@ class CreateRoomGameAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
helper.getView<ImageView>(R.id.iv_cover).load(item.pic,12f)
helper.getView<ImageView>(R.id.iv_cover).load(item.pic?:"",12f)
helper.itemView.isSelected = item.isSelect
}

View File

@@ -10,7 +10,7 @@ class CreateRoomGameGuideAdapter :
BaseQuickAdapter<GameInfo, BaseViewHolder>(R.layout.item_room_create_game_guide) {
override fun convert(helper: BaseViewHolder, item: GameInfo) {
GlideUtils.instance().load(item.pic,R.drawable.default_cover,helper.getView(R.id.iv_cover))
GlideUtils.instance().load(item.pic?:"",R.drawable.default_cover,helper.getView(R.id.iv_cover))
}
}

View File

@@ -6,6 +6,7 @@ import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.common.util.isVerify
class ExitRoomAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_exit_room) {
@@ -16,5 +17,6 @@ class ExitRoomAdapter :
ImageLoadUtils.loadImage(mContext, item.tagPict, helper.getView(R.id.iv_tag))
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
.setText(R.id.tv_title, item.title.subAndReplaceDot(8))
helper.setVisible(R.id.iv_tag, item.tagPict.isVerify())
}
}

View File

@@ -0,0 +1,144 @@
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.RecyclerView;
import com.chwl.app.R;
import com.chwl.app.ui.utils.ImageLoadKt;
import com.chwl.app.ui.widget.recyclerview.layoutmanager.BoosRoomLayoutManager;
import com.chwl.app.utils.ResourceManager;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.gift.bean.RoomMicDress;
import com.chwl.library.common.util.OtherExtKt;
import com.chwl.library.widget.SVGAView;
import com.example.lib_utils.ktx.ResourcesKtxKt;
import com.opensource.svgaplayer.SVGAImageView;
public class Mic19ViewAdapter extends BaseMicroViewAdapter {
//麦位 从-1 开始的 , 所以 8好麦的pos是6
int BossPos = 7;
public Mic19ViewAdapter(Context context) {
super(context);
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@Override
public void bindToRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new BoosRoomLayoutManager(5));
recyclerView.setAdapter(this);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
OtherExtKt.doLog(" Mic19ViewAdapter onCreateViewHolder ");
View item ;
item = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_micro,parent,false);
MicroViewHolder microViewHolder = new MicroViewHolder(item);
return microViewHolder;
}
private void setViewDiff(View[] views , boolean isDiff) {
for (int i = 0; i <views.length; i++) {
int width = 0;
View view = views[i];
//头像,锁头,上麦图 宽度
if (isDiff) {
width = ResourcesKtxKt.getDimensionToInt(R.dimen.dp_62);
} else {
width = ResourcesKtxKt.getDimensionToInt(R.dimen.dp_50);
}
if (view instanceof SVGAView){
// 头饰
width = (int) (width / 0.7575);
}else if (view instanceof SVGAImageView){
//光圈
width = (int) (width / 0.5555);
}else if (view.getId() == R.id.micro_layout){
//头像布局 , 特殊更改
width = ResourcesKtxKt.getDimensionToInt(R.dimen.dp_66);
if (isDiff) {
width = (int) (ResourcesKtxKt.getDimensionToInt(R.dimen.dp_66) / 0.7575);
}
}
OtherExtKt.setViewWH(view, width, width,false);
}
}
@Override
public String microType() {
return BaseMicroViewAdapter.MICRO_TYPE_REVELRY_19;
}
@Override
public int getItemViewType(int position) {
return position != BossPos ? TYPE_NORMAL : TYPE_BOSS;
}
@Override
public int getItemCount() {
return 19;
}
class MicroViewHolder extends GiftValueViewHolder {
MicroViewHolder(View itemView) {
super(itemView);
micType = -1;
}
@Override
public void bind(RoomQueueInfo info, int position) {
// int width = MyUtil.INSTANCE.getMAppWidth() / 5;
OtherExtKt.setViewWH(rootView,ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,false);
setViewDiff(new View[]{ivHalo,ivHeadWear, ivAvatar, ivLockImage, ivUpImage,microLayout}, position == 6);
super.bind(info, position);
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
// 麦位皮肤
// ivUpImage = up_image = icon_room_up_micro - 可上麦
// ivLockImage = lock_image = icon_room_lock_micro - 锁麦
RoomMicDress roomMicSkins = ResourceManager.INSTANCE.getRoomMicSkins();
if (roomMicSkins != null) {
if (getItemViewType() == TYPE_BOSS) {
OtherExtKt.doLog("麦位 加载 麦位 图 boss position = "+position+" = "+roomMicSkins.bossMicUrl);
ImageLoadKt.loadImage(ivUpImage,roomMicSkins.bossMicUrl);
ImageLoadKt.loadImage(ivLockImage,roomMicSkins.bossMicLockUrl);
} else {
OtherExtKt.doLog("麦位 加载 麦位 图 normal position = "+position+" = "+roomMicSkins.bossMicUrl);
ImageLoadKt.loadImage(ivUpImage,roomMicSkins.normalMicUrl);
ImageLoadKt.loadImage(ivLockImage,roomMicSkins.normalMicLockUrl);
}
}else {
OtherExtKt.doLog("麦位 加载 麦位 图 def position = "+position);
if (getItemViewType() == TYPE_BOSS) {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro_boss);
ivLockImage.setImageResource(R.drawable.icon_room_lock_micro);
} else {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
ivLockImage.setImageResource(R.drawable.icon_room_lock_micro);
}
}
}
@SuppressLint("SetTextI18n")
@Override
public void setDefalutText(int index) {
super.setDefalutText(index);
}
}
}

View File

@@ -0,0 +1,70 @@
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.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
public class Mic20ViewAdapter extends BaseMicroViewAdapter {
public Mic20ViewAdapter(Context context) {
super(context);
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@Override
public void bindToRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new GridLayoutManager(context,5,RecyclerView.VERTICAL,false));
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 Mic20ViewAdapter.MicroViewHolder(item);
}
@Override
public String microType() {
return BaseMicroViewAdapter.MICRO_TYPE_REVELRY_20;
}
@Override
public int getItemViewType(int position) {
return TYPE_NORMAL;
}
@Override
public int getItemCount() {
return 20;
}
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

@@ -87,7 +87,7 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
// if (position == 7) {
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro_vip);
// } else {
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
// }
}

View File

@@ -12,7 +12,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
/**
* @author xiaoyu
@@ -67,7 +66,7 @@ public class PartyMicroViewAdapter extends BaseMicroViewAdapter {
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
@SuppressLint("SetTextI18n")

View File

@@ -12,7 +12,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
/**
* @author xiaoyu
@@ -67,7 +66,7 @@ public class RevelryMicroViewAdapter extends BaseMicroViewAdapter {
@Override
public void bind(RoomQueueInfo info, int position) {
super.bind(info, position);
ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
// ivUpImage.setImageResource(R.drawable.icon_room_up_micro);
}
@SuppressLint("SetTextI18n")

View File

@@ -109,9 +109,9 @@ public class RoomConsumeListAdapter extends BaseMultiItemQuickAdapter<RoomContri
}
ivAvatar.setVisibility(View.VISIBLE);
if (roomConsumeInfo.isHide()) {
ImageLoadUtils.loadBigAvatar(mContext, context.getResources().getString(R.string.url_mystery_man), ivAvatar, true);
ImageLoadUtils.loadAvatarBig(context.getResources().getString(R.string.url_mystery_man), ivAvatar);
} else {
ImageLoadUtils.loadBigAvatar(mContext, roomConsumeInfo.getAvatar(), ivAvatar, true);
ImageLoadUtils.loadAvatarBig(roomConsumeInfo.getAvatar(), ivAvatar);
}
ivRankIcon.setImageResource(emptyPic);

View File

@@ -90,7 +90,7 @@ public class RoomConsumerListAdapterTemp extends BaseMultiItemQuickAdapter<RoomR
if (i == 0) {
if (!TextUtils.isEmpty(userInfo.getAvatar()))
ImageLoadUtils.loadBigAvatar(mContext, userInfo.getAvatar(), ciTopOne, true);
ImageLoadUtils.loadAvatarBig(userInfo.getAvatar(), ciTopOne);
ivGenderOne.setVisibility(isEmptyBean ? View.GONE : View.VISIBLE);
@@ -113,7 +113,7 @@ public class RoomConsumerListAdapterTemp extends BaseMultiItemQuickAdapter<RoomR
} else if (i == 1) {
if (!TextUtils.isEmpty(userInfo.getAvatar()))
ImageLoadUtils.loadBigAvatar(mContext, userInfo.getAvatar(), ciTopTwo, true);
ImageLoadUtils.loadAvatarBig(userInfo.getAvatar(), ciTopTwo);
ivGenderTwo.setVisibility(isEmptyBean ? View.GONE : View.VISIBLE);
ivGenderTwo.setImageResource(userInfo.getGender() == 1 ? R.drawable.ic_gender_male : R.drawable.ic_gender_female);
@@ -135,7 +135,7 @@ public class RoomConsumerListAdapterTemp extends BaseMultiItemQuickAdapter<RoomR
} else if (i == 2) {
if (!TextUtils.isEmpty(userInfo.getAvatar()))
ImageLoadUtils.loadBigAvatar(mContext, userInfo.getAvatar(), ciTopThree, true);
ImageLoadUtils.loadAvatarBig(userInfo.getAvatar(), ciTopThree);
ivGenderThree.setVisibility(isEmptyBean ? View.GONE : View.VISIBLE);
ivGenderThree.setImageResource(userInfo.getGender() == 1 ? R.drawable.ic_gender_male : R.drawable.ic_gender_female);
@@ -170,7 +170,7 @@ public class RoomConsumerListAdapterTemp extends BaseMultiItemQuickAdapter<RoomR
RoomContributeUserInfo roomContributeUserInfo = (RoomContributeUserInfo) roomConsumeInfo.getData();
CircleImageView avatarView = baseViewHolder.getView(R.id.avatar_view);
ImageLoadUtils.loadAvatar(mContext, roomContributeUserInfo.getAvatar(), avatarView, true);
ImageLoadUtils.loadAvatar(mContext, roomContributeUserInfo.getAvatar(), avatarView);
AppCompatImageView ivNobleLevel = baseViewHolder.getView(R.id.iv_noble_level);
ivNobleLevel.setVisibility(View.GONE);

View File

@@ -11,8 +11,8 @@ 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)
helper.setText(R.id.tv_name, item?.name?:"")
val iconView = helper.getView<ImageView>(R.id.iv_icon)
iconView.load(item?.pic2)
iconView.load(item?.pic2?:"")
}
}

View File

@@ -1,6 +1,7 @@
package com.chwl.app.avroom.adapter;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -10,22 +11,25 @@ import android.widget.TextView;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.chwl.app.R;
import com.chwl.app.avroom.ChatMemberDiffUtilCallback;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.library.common.util.OtherExtKt;
import com.chwl.library.utils.ListUtils;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.uinfo.constant.GenderEnum;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Objects;
import io.reactivex.disposables.Disposable;
@@ -163,10 +167,37 @@ public class RoomInviteAdapter extends RecyclerView.Adapter<RoomInviteAdapter.Ro
sexImage.setVisibility(View.GONE);
}
}
holder.mViewLine.setVisibility(position == getItemCount() - 1 ? View.GONE : View.VISIBLE);
ImageLoadUtils.loadAvatar(mContext, chatRoomMember.getAvatar(), holder.mIvAvatar);
holder.mTvMemberName.setText(chatRoomMember.getNick());
try {
Map<String, Object> map = (Map<String, Object>) chatRoomMember.getExtension().get(chatRoomMember.getAccount());
String nick = map.get(UserInfo.NICK).toString();
String avatar = map.get(UserInfo.AVATAR).toString();
boolean enterHide = (boolean) map.get(UserInfo.ENTER_HIDE);
if (enterHide) {
holder.mIvAvatar.setImageResource(R.drawable.ic_mystery);
} else {
if (chatRoomMember.getAvatar() == null || TextUtils.isEmpty(chatRoomMember.getAvatar())) {
ImageLoadUtils.loadAvatar(mContext, avatar, holder.mIvAvatar);
}
CharSequence nickText = holder.mTvMemberName.getText();
if (!OtherExtKt.isVerify(nickText)){
if (OtherExtKt.isVerify(nick)) {
holder.mTvMemberName.setText(nick);
}
}
}
}catch (Exception e){
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

View File

@@ -8,10 +8,12 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.user.UserModel;
import com.chwl.library.common.util.OtherExtKt;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import java.util.List;
@@ -54,6 +56,13 @@ public class RoomNormalListAdapter extends RecyclerView.Adapter<RoomNormalListAd
holder.operationImg.setTag(chatRoomMember);
holder.operationImg.setOnClickListener(this);
ImageLoadUtils.loadAvatar(context, chatRoomMember.getAvatar(), holder.avatar);
if (UserModel.get().getCacheLoginUserInfo() != null && UserModel.get().getCacheLoginUserInfo().isSuperAdmin()) {
OtherExtKt.setVis(holder.operationImg, false, false);
} else {
OtherExtKt.setVis(holder.operationImg,true,false);
}
}
@Override

View File

@@ -57,7 +57,7 @@ public class RoomRankHalfHourListAdapter extends BaseMultiItemQuickAdapter<RoomR
baseViewHolder.setText(R.id.tv_room_rank_title, roomRankHalfHourRankInfo.getRoomTitle());
// 头像
CircleImageView avatarView = baseViewHolder.getView(R.id.iv_room_rank_avatar);
ImageLoadUtils.loadAvatar(mContext, roomRankHalfHourRankInfo.getAvatar(), avatarView, true);
ImageLoadUtils.loadAvatar(roomRankHalfHourRankInfo.getAvatar(),avatarView);
baseViewHolder.setText(R.id.tv_room_rank_id, "ID:" + roomRankHalfHourRankInfo.getErbanNo());
}
}

View File

@@ -15,6 +15,7 @@ import com.chwl.library.utils.ResUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import io.reactivex.Single;
import io.reactivex.functions.Consumer;
@@ -39,15 +40,24 @@ public class UpMicAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
this.upUid = upUid;
List<String> list = new ArrayList<>();
int size;
if (AvRoomDataManager.get().isCpRoom()) {
size = 2;
} else if (AvRoomDataManager.get().isSingleRoom()) {
size = 4;
} else if (AvRoomDataManager.get().isOpenGame()) {
size = 6;
} else {
size = 9;
}
size = AvRoomDataManager.get().getMicSize();
// if (AvRoomDataManager.get().isCpRoom()) {
// size = 2;
// } else if (AvRoomDataManager.get().isSingleRoom()) {
// size = 4;
// } else if (AvRoomDataManager.get().isHomeParty()) {
// size = 9;
// }else if (AvRoomDataManager.get().isPartyRoom()) {
// size = 10;
// } else if (AvRoomDataManager.get().isRevelryRoom()) {
// size = 15;
// }else if (AvRoomDataManager.get().is19Room()) {
// size = 19;
// } else if (AvRoomDataManager.get().is20Room()) {
// size = 20;
// } else {
// size = 9;
// }
for (int i = 0; i < size; i++) {
list.add("");
}
@@ -62,26 +72,33 @@ public class UpMicAdapter extends BaseQuickAdapter<String, BaseViewHolder> {
if (roomQueueInfo == null) return;
ImageView imageView = helper.getView(R.id.iv_mic);
//todo do 19麦房间时 老板麦位特殊特殊图标 待更换
//麦上没人,且不是离开模式房主位,相亲模式的管理才能上房主位
if (roomQueueInfo.mChatRoomMember == null &&
(!AvRoomDataManager.get().isLeaveMode() || position != 0) &&
(!AvRoomDataManager.get().isDatingMode() || AvRoomDataManager.get().isManager(String.valueOf(upUid)) || position != 0)) {
imageView.setImageResource(position == 0 ? R.drawable.icon_up_mic_true_preside : R.drawable.icon_up_mic_ture);
if (roomQueueInfo.mChatRoomMember == null
&& (!AvRoomDataManager.get().isLeaveMode() || position != 0)
&& (!AvRoomDataManager.get().isDatingMode() || AvRoomDataManager.get().isManager(String.valueOf(upUid)) || position != 0)) {
imageView.setImageResource((position == AvRoomDataManager.ITEM_POS_19_ROOM_BOSS && AvRoomDataManager.get().is19Room()) ? R.drawable.icon_room_up_micro_king : R.drawable.icon_up_mic_ture);
helper.itemView.setClickable(true);
helper.itemView.setOnClickListener(v -> Single.just(position).subscribe(consumer));
} else {
imageView.setImageResource(position == 0 ? R.drawable.icon_up_mic_false_preside : R.drawable.icon_up_mic_false);
imageView.setImageResource(R.drawable.icon_up_mic_false);
helper.itemView.setClickable(false);
}
TextView textView = helper.getView(R.id.tv_pos);
if (position == 0) {
textView.setText(AvRoomDataManager.get().isDatingMode() ? ResUtil.getString(R.string.avroom_adapter_upmicadapter_01) : ResUtil.getString(R.string.avroom_adapter_upmicadapter_02));
if (AvRoomDataManager.get().isHomeParty()) {
textView.setText(ResUtil.getString(R.string.avroom_adapter_upmicadapter_02));
} else if (AvRoomDataManager.get().isDatingMode()) {
textView.setText(ResUtil.getString(R.string.avroom_adapter_upmicadapter_01));
} else {
textView.setText(String.format(Locale.US,context.getResources().getString(R.string.which_mic_position), position+1));
}
} else {
if (AvRoomDataManager.get().isDatingMode()) {
textView.setText(position + (Constants.maleIndex.contains(position - 1) ? ResUtil.getString(R.string.avroom_adapter_upmicadapter_03) : ResUtil.getString(R.string.avroom_adapter_upmicadapter_04)));
} else {
textView.setText(String.format(context.getResources().getString(R.string.which_mic_position), position));
textView.setText(String.format(Locale.US,context.getResources().getString(R.string.which_mic_position), position+1));
}
}
}

View File

@@ -0,0 +1,13 @@
package com.chwl.app.avroom.bean;
import java.util.List;
import lombok.Data;
@Data
public class LuckyBagConfig {
public int expireSeconds;
public List<Integer> goldItems;
public List<Integer> numItems;
public List<Integer> timeItems;
}

View File

@@ -0,0 +1,22 @@
package com.chwl.app.avroom.bean;
import lombok.Data;
@Data
public class LuckyBagDetailEntity {
public String avatar;
public String nick;
public long createTime;
public String createTimeStr;
public int num = 1;
public int originalAmount;
public String type;
public String giftName;
public @interface BiliType{
public int SENT = 1;
public int RECEIVED = 2;
}
}

View File

@@ -0,0 +1,28 @@
package com.chwl.app.avroom.bean;
import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.GIFT;
import lombok.Data;
@Data
public class LuckyBagEntity {
public long id;
public long roomUid;
public long userId;
public String avatar;
public String nick;
public int status;
public String type;
public long beginTime; // 倒计时结束时间, 表时可以开抢了, (东八区)
public int countDownSecond; // 倒计时多少秒
public long countDownTime; //接收到倒计时秒数 记录下本地时间
public @interface Type{
public String GIFT = "GIFT";
public String DIAMOND = "DIAMOND";
}
public boolean isGift() {
return type.equals(GIFT);
}
}

View File

@@ -0,0 +1,27 @@
package com.chwl.app.avroom.bean;
import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.GIFT;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
@Data
public class LuckyBagGiftBody {
public long roomUid;
public long uid;
public int countDownSecond;
public String type = GIFT;
// public int num;
public List<LuckyBagGiftItemBody> giftItems;
public void addLuckyBagGift(LuckyBagGiftItemBody index) {
if (giftItems == null) {
giftItems = new ArrayList<>();
}
giftItems.add(index);
}
}

View File

@@ -0,0 +1,9 @@
package com.chwl.app.avroom.bean;
import lombok.Data;
@Data
public class LuckyBagGiftItemBody {
public long giftId;
public int giftNum;
}

View File

@@ -0,0 +1,18 @@
package com.chwl.app.avroom.bean;
import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.DIAMOND;
import lombok.Data;
@Data
public class LuckyBagGoldBody {
public long roomUid;
public long uid;
public String type = DIAMOND;
public int goldNum;
public int num;
public int countDownSecond;
}

View File

@@ -0,0 +1,14 @@
package com.chwl.app.avroom.bean;
import java.util.List;
import lombok.Data;
@Data
public class LuckyBagOpenBiliEntity {
public int amount;
public long createTime;
public String createTimeStr;
public List<LuckyBagOpenGiftEntity> redEnvelopeGiftItemVOs;
public LuckyBagOpenUserBean userVO;
}

View File

@@ -0,0 +1,11 @@
package com.chwl.app.avroom.bean;
import java.util.List;
import lombok.Data;
@Data
public class LuckyBagOpenEntity {
public int currentUserAmount;
public List<LuckyBagOpenGiftEntity> currentUserGifts;
}

View File

@@ -0,0 +1,10 @@
package com.chwl.app.avroom.bean;
import lombok.Data;
@Data
public class LuckyBagOpenGiftBean {
public String giftUrl;
public String giftName;
public int goldPrice;
}

View File

@@ -0,0 +1,9 @@
package com.chwl.app.avroom.bean;
import lombok.Data;
@Data
public class LuckyBagOpenGiftEntity {
public int giftNum;
public LuckyBagOpenGiftBean giftVo;
}

View File

@@ -0,0 +1,10 @@
package com.chwl.app.avroom.bean;
import lombok.Data;
@Data
public class LuckyBagOpenUserBean {
public String avatar;
public String nick;
public long uid;
}

View File

@@ -0,0 +1,13 @@
package com.chwl.app.avroom.bean;
import java.util.List;
import lombok.Data;
@Data
public class RoomLuckyBagInfo {
public List<LuckyBagEntity> redEnvelopeListVoList;
public LuckyBagConfig redEnvelopeV2Config;
}

View File

@@ -41,7 +41,7 @@ public class AttentionHintDialog extends BaseBsDialog {
ivAvatar = findViewById(R.id.iv_avatar);
tvNickname = findViewById(R.id.tv_nickname);
tvAttention = findViewById(R.id.tv_attention);
ImageLoadUtils.laodUsrInfoAvatar(getContext(), AvRoomDataManager.get().avatar, ivAvatar);
ImageLoadUtils.loadAvatar(getContext(), AvRoomDataManager.get().avatar, ivAvatar);
tvNickname.setText(AvRoomDataManager.get().nick);
tvAttention.setOnClickListener(v ->
disposable = PraiseModel.get().praise(AvRoomDataManager.get().getRoomUid(), true)

View File

@@ -40,12 +40,16 @@ abstract class BaseRoomNotifyDialog<VB : ViewBinding>(context: Context, theme: I
init()
if (useAutoDismiss()) {
handle.postDelayed({
dismissDialog()
}, (getStaySecond()*1000).toLong())
startAutoDismiss()
}
}
protected open fun startAutoDismiss() {
handle.postDelayed({
dismissDialog()
}, (getStaySecond()*1000).toLong())
}
override fun onDetachedFromWindow() {
handle.removeCallbacksAndMessages(null)
super.onDetachedFromWindow()

View File

@@ -33,11 +33,15 @@ class CreateGameRoomDialog : BaseDialogFragment<DialogCreateGameRoomBinding>() {
.build()
gameAdapter.setOnItemClickListener { _, _, position ->
dismissAllowingStateLoss()
OpenRoomHelper.openRoom(
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
gameAdapter.data[position].mgId.toLong()
)
try {
dismissAllowingStateLoss()
OpenRoomHelper.openRoom(
requireActivity() as BaseActivity, RoomInfo.ROOMTYPE_GAME,
gameAdapter.data[position].mgId.toLong()
)
}catch (e:Exception){
}
}
binding?.ivClose?.setOnClickListener {

View File

@@ -20,10 +20,8 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.MicQueueAdapter;
import com.chwl.library.common.util.Utils;
import com.chwl.app.home.helper.LoadPageDataHelper;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
@@ -40,12 +38,14 @@ import com.chwl.core.room.queuing_mic.bean.QueuingMicMemeberInfo;
import com.chwl.core.room.queuing_mic.bean.RespQueuingMicListInfo;
import com.chwl.core.user.bean.BaseInfo;
import com.chwl.core.utils.net.BeanObserver;
import com.chwl.library.common.util.Utils;
import com.chwl.library.net.rxnet.callback.CallBack;
import com.chwl.library.utils.CommonUtils;
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.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import java.util.ArrayList;
import java.util.List;
@@ -231,6 +231,11 @@ public class MicQueueDialog extends BaseDialog implements
if (member.getGroupType() == GroupType.FEMALE && Constants.maleIndex.contains(key))
continue;
}
//19麦的情况下 老板麦跳过 , 19麦房间的 boss ViewItemPos是7 , 云信上麦位是6 , 展示时是8号麦
if (AvRoomDataManager.get().is19Room()) {
if (AvRoomDataManager.get().is19RoomBoosMicPos(key)) continue;
}
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().mMicQueueMemberMap.get(key);
//排麦模式下,选择被锁的坑,即是排麦坑才能上
if (roomQueueInfo != null
@@ -241,8 +246,22 @@ public class MicQueueDialog extends BaseDialog implements
break;
}
}
//房主的坑位key是-1 ,剩下的 8个坑的key从0 - 7
if (micPosition != -1 && micPosition < 8) {
//房主的坑位key是-1 ,剩下的 坑位 按房间类型填
int maxMicPos = 8;
if (AvRoomDataManager.get().isPartyRoom()){
maxMicPos = 10;
}else if (AvRoomDataManager.get().isRevelryRoom()){
maxMicPos = 15;
}else if (AvRoomDataManager.get().is19Room()){
maxMicPos = 19;
}else if (AvRoomDataManager.get().is20Room()){
maxMicPos = 20;
}
if (micPosition != -1 && micPosition < maxMicPos) {
//跳过 19 麦的 老板麦
if (AvRoomDataManager.get().is19Room() && AvRoomDataManager.get().is19RoomBoosMicPos(micPosition)) return;
if (itemPos < adapter.getItemCount()) {
dataList.remove(itemPos);
adapter.notifyDataSetChanged();

View File

@@ -0,0 +1,155 @@
package com.chwl.app.avroom.dialog
import android.view.Gravity
import android.view.WindowManager
import com.chwl.app.R
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.DialogRoomBgPreviewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.file.FileModel
import com.chwl.core.gift.bean.RoomBgInfoItem
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.isVerify
import com.chwl.library.net.rxnet.RxNet
import com.example.lib_utils.ktx.getString
import com.google.gson.JsonElement
import com.hjq.toast.ToastUtils
import io.reactivex.Single
import retrofit2.http.POST
import retrofit2.http.Query
import java.io.File
class RoomBgPreviewDialog : BaseDialogFragment<DialogRoomBgPreviewBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.MATCH_PARENT
override var dimAmount = 0.3f
override var gravity = Gravity.BOTTOM
var isBuy = false
var mFile : File?=null
var mRoomBgInfoItem : RoomBgInfoItem?=null
var mDialog : DialogManager?=null
var mCallBack : CallBack?=null
override fun init() {
mDialog = DialogManager(requireActivity())
binding.btnBack.setOnClickListener {
dismiss()
}
binding.close.setOnClickListener {
dismiss()
}
mRoomBgInfoItem?.let { data->
binding.btnConfirm.setOnClickListener {
if (isBuy) {
buyBg()
} else {
mFile?.let { it1 -> upLoadImage(it1) }
}
}
if (isBuy) {
binding.bg.loops
binding.bg.loadUrl(data.url)
binding.btnConfirm.text = R.string.buy.getString()
binding.hint.text = R.string.Purchases_hint.getString()
} else {
binding.btnConfirm.text = R.string.layout_activity_modify_pwd_07.getString()
binding.hint.text = R.string.Purchases_hint2.getString()
ImageLoadUtils.loadImage(context,mFile,binding.bg)
}
binding.price.text = R.string.s_sDays.getString(data.goldPrice,(data.buyHour/24).toInt())
}
}
private fun buyBg() {
mRoomBgInfoItem?.let { data->
postBuy(data.id)
.compose(bindToLifecycle())
.doOnSuccess {
ToastUtils.show(R.string.doSuccess)
mCallBack?.onSuccess()
dismiss()
}
.doOnError {
it?.message?.let { msg->
ToastUtils.show(msg)
}
dismiss()
}
.subscribe()
}
}
private fun upLoadImage(file: File) {
mDialog?.showProgressDialog(requireActivity())
FileModel.get()
.uploadFile(file.path)
.compose<String>(bindToLifecycle<String>())
.doOnSuccess {
if (it.isVerify()) {
postCustom(it)
.compose(bindToLifecycle())
.doOnSuccess {
ToastUtils.show(R.string.doSuccess)
mCallBack?.onSuccess()
dismiss()
}
.doOnError { er->
er?.message?.let { msg ->
ToastUtils.show(msg)
}
dismiss()
}
.subscribe()
}
mDialog?.dismissDialog()
}
.doOnError {
it?.message?.let { msg->
ToastUtils.show(msg)
}
mDialog?.dismissDialog()
}
.subscribe()
}
private fun postCustom(url: String): Single<String> {
return api.postCustom(AvRoomDataManager.get().roomUid,url)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private fun postBuy(id: Long): Single<String> {
return api.postBuy(AvRoomDataManager.get().roomUid,id)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
@POST("/room/background/custom")
fun postCustom(@Query("roomUid") roomUid: Long,@Query("url") url: String): Single<ServiceResult<JsonElement>>
@POST("/room/background/buy")
fun postBuy(@Query("roomUid") roomUid: Long,@Query("id") id: Long): Single<ServiceResult<JsonElement>>
}
public interface CallBack{
fun onSuccess()
}
}

View File

@@ -0,0 +1,541 @@
package com.chwl.app.avroom.dialog
import android.app.Activity.RESULT_OK
import android.content.Intent
import android.graphics.Color
import android.view.Gravity
import android.view.WindowManager
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.base.PhotoPickActivity
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.bindadapter.BaseBindingViewHolder
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.DialogRoomBgSetBinding
import com.chwl.app.databinding.ItemRoomBgSetBinding
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.gift.bean.RoomBgInfo
import com.chwl.core.gift.bean.RoomBgInfoItem
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.myutil.MyUriUtils
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.setVis
import com.chwl.library.net.rxnet.RxNet
import com.example.lib_utils.ktx.dp
import com.example.lib_utils.ktx.getColor
import com.example.lib_utils.ktx.getDimension
import com.example.lib_utils.ktx.getString
import com.google.gson.JsonElement
import com.hjq.toast.ToastUtils
import io.reactivex.Single
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
import java.io.File
class RoomBgSetDialog : BaseDialogFragment<DialogRoomBgSetBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = R.dimen.dp_323.getDimension().toInt()
override var dimAmount = 0f
override var gravity = Gravity.BOTTOM
lateinit var mAdapter: RoomBgAdapter
private var mDataFree = mutableListOf<RoomBgInfoItem>()
private var mDataPay = mutableListOf<RoomBgInfoItem>()
private var mDataCustom = mutableListOf<RoomBgInfoItem>()
private var mCustomGoldPrice = 0
private var mCustomHour = 0
private var mSelectType = RoomBgInfo.Type.T_FREE
override fun init() {
mAdapter = RoomBgAdapter()
mAdapter.setNewData(mutableListOf())
mAdapter.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, R.string.empty_data.getString()))
binding.rvList.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
binding.rvList.adapter = mAdapter
mAdapter.setOnItemChildClickListener { adapter, view, position ->
val data = mAdapter.data.getOrNull(position)
when (view.id) {
R.id.statusPlay, R.id.statusBuy -> {
data?.let {
if (it.type == RoomBgInfo.Type.T_CUSTOM) {
if (it.status != RoomBgInfo.Status.S_REJECT && it.status != RoomBgInfo.Status.S_REVIEW) {
showPreViewDialog(null, data, true)
}
} else {
showPreViewDialog(null, data, true)
}
}
}
R.id.statusDel -> {
data?.let {
del(data)
}
}
R.id.bg -> {
data?.let {
select(data)
}
}
else -> {}
}
}
binding.btnFree.click {
setViewSelect(RoomBgInfo.Type.T_FREE)
}
binding.btnPay.click {
setViewSelect(RoomBgInfo.Type.T_PAY)
}
binding.btnCustom.click {
setViewSelect(RoomBgInfo.Type.T_CUSTOM)
}
binding.btnCreate.click {
PhotoPickActivity.startImg(requireActivity())
}
binding.btnMore.click {
val dialogManager = DialogManager(context)
dialogManager.showOkCancelDialog(R.string.tip_tips.getString(),R.string.Purchases_hint_info.getString(),R.string.ok.getString(),null,true,null)
val window = dialogManager?.dialog?.window
val tip = window?.findViewById<TextView>(R.id.message)
tip?.gravity = Gravity.START
}
getData()
}
private fun getData() {
getBoomInfo(AvRoomDataManager.get().roomUid)
.compose(bindToLifecycle())
.doOnSuccess { data ->
if (data != null) {
mCustomHour = data.customHour
mCustomGoldPrice = data.customGoldPrice
mDataFree.clear()
mDataPay.clear()
mDataCustom.clear()
data.itemList.let {
val map = it.groupBy { it.type }
if (map.containsKey(RoomBgInfo.Type.T_FREE)){
mDataFree = map[RoomBgInfo.Type.T_FREE] as MutableList<RoomBgInfoItem>
}
if (map.containsKey(RoomBgInfo.Type.T_PAY)) {
val newData = mutableListOf<RoomBgInfoItem>()
val pays = map[RoomBgInfo.Type.T_PAY] as MutableList<RoomBgInfoItem>
val groupBy = pays.groupBy { it.status }
if (groupBy.containsKey(RoomBgInfo.Status.S_SUCCESS)) {
val paySuccess = groupBy[RoomBgInfo.Status.S_SUCCESS] as MutableList<RoomBgInfoItem>
paySuccess.sortByDescending { pay-> pay.remainHour }
newData.addAll(paySuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_EXPIRED)) {
val paySuccess = groupBy[RoomBgInfo.Status.S_EXPIRED] as MutableList<RoomBgInfoItem>
newData.addAll(paySuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_REVIEW)) {
val paySuccess = groupBy[RoomBgInfo.Status.S_REVIEW] as MutableList<RoomBgInfoItem>
newData.addAll(paySuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_REJECT)) {
val paySuccess = groupBy[RoomBgInfo.Status.S_REJECT] as MutableList<RoomBgInfoItem>
newData.addAll(paySuccess)
}
mDataPay = newData
}
if (map.containsKey(RoomBgInfo.Type.T_CUSTOM)) {
val newData = mutableListOf<RoomBgInfoItem>()
val customs = map[RoomBgInfo.Type.T_CUSTOM] as MutableList<RoomBgInfoItem>
val groupBy = customs.groupBy { it.status }
if (groupBy.containsKey(RoomBgInfo.Status.S_SUCCESS)) {
val customsSuccess = groupBy[RoomBgInfo.Status.S_SUCCESS] as MutableList<RoomBgInfoItem>
customsSuccess.sortByDescending { customs-> customs.remainHour }
newData.addAll(customsSuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_EXPIRED)) {
val customsSuccess = groupBy[RoomBgInfo.Status.S_EXPIRED] as MutableList<RoomBgInfoItem>
newData.addAll(customsSuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_REVIEW)) {
val customsSuccess = groupBy[RoomBgInfo.Status.S_REVIEW] as MutableList<RoomBgInfoItem>
newData.addAll(customsSuccess)
}
if (groupBy.containsKey(RoomBgInfo.Status.S_REJECT)) {
val customsSuccess = groupBy[RoomBgInfo.Status.S_REJECT] as MutableList<RoomBgInfoItem>
newData.addAll(customsSuccess)
}
mDataCustom = newData
}
}
setViewSelect(mSelectType)
}
}
.doOnError {
it?.message?.let { msg ->
ToastUtils.show(msg)
}
}
.subscribe()
}
private fun del(data: RoomBgInfoItem) {
if (data.type != RoomBgInfo.Type.T_CUSTOM) return
val dialog = DialogManager(requireActivity())
dialog.showOkCancelDialog(R.string.community_photo_bigphotoactivity_08.getString(),object : DialogManager.AbsOkDialogListener() {
override fun onOk() {
postDel(data.id)
.compose(bindToLifecycle())
.doOnSuccess {
ToastUtils.show(R.string.doSuccess)
getData()
}
.doOnError {
it?.message?.let { msg ->
ToastUtils.show(msg)
}
}
.subscribe()
}
})
}
private fun select(data: RoomBgInfoItem) {
if (data.remainHour != -1 || data.type == RoomBgInfo.Type.T_FREE) {
if (data.status == RoomBgInfo.Status.S_SUCCESS) {
postSelect(data.id)
.compose(bindToLifecycle())
.doOnSuccess {
ToastUtils.show(R.string.doSuccess)
dismiss()
}
.doOnError {
dismiss()
}
.subscribe()
}
} else {
if (data.status == RoomBgInfo.Status.S_REJECT || data.status == RoomBgInfo.Status.S_REVIEW) return // 拒審只能刪除
showPreViewDialog(null, data, true)
}
}
private fun setViewSelect(type: Int) {
binding.btnMore.setVis(false)
binding.btnCreate.setVis(false)
binding.btnFree.setTextColor(if (type == RoomBgInfo.Type.T_FREE) R.color.white.getColor() else R.color.white_tran_60.getColor())
binding.btnPay.setTextColor(if (type == RoomBgInfo.Type.T_PAY) R.color.white.getColor() else R.color.white_tran_60.getColor())
binding.btnCustom.setTextColor(if (type == RoomBgInfo.Type.T_CUSTOM) R.color.white.getColor() else R.color.white_tran_60.getColor())
val text = mAdapter.emptyView?.findViewById<TextView>(R.id.tv_hint)
text?.text = R.string.empty_data.getString()
mSelectType = type
when (type) {
RoomBgInfo.Type.T_FREE -> {
mAdapter.setNewData(mDataFree)
}
RoomBgInfo.Type.T_PAY -> {
mAdapter.setNewData(mDataPay)
}
RoomBgInfo.Type.T_CUSTOM -> {
mAdapter.setNewData(mDataCustom)
text?.text = R.string.empty_customize_bg.getString()
binding.btnMore.setVis(true)
binding.btnCreate.setVis(true)
}
}
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
if (requestCode == PhotoPickActivity.PICK_ACT_RESULT) {
val uri = data?.data
if (uri != null) {
if (MyUriUtils.isGif(requireActivity(), uri)) {
ToastUtils.show(R.string.error_file_type)
return
}
val file = MyUriUtils.copyFile(requireActivity(), uri)
if (file != null) {
showPreViewDialog(file, RoomBgInfoItem().apply {
goldPrice = mCustomGoldPrice
buyHour = mCustomHour
}, false)
} else {
ToastUtils.show(R.string.exception_try_again)
}
}
}
}
}
private fun showPreViewDialog(file: File?, data:RoomBgInfoItem, buy: Boolean) {
context?.let {
RoomBgPreviewDialog().apply {
mFile = file
mRoomBgInfoItem = data
isBuy = buy
mCallBack = object : RoomBgPreviewDialog.CallBack {
override fun onSuccess() {
getData()
}
}
}.show(it)
}
}
class RoomBgAdapter() : BaseBindingAdapter<ItemRoomBgSetBinding, RoomBgInfoItem>() {
override fun convert(
helper: BaseBindingViewHolder<ItemRoomBgSetBinding>,
data: RoomBgInfoItem
) {
val binding = helper.binding
defViewStatus(binding)
data?.let { data ->
binding.bg.loadUrl(data.url ?: "")
binding.select.setVis(data.isCur)
binding.statusPlay.setVis(data.url?.endsWith(".svga") == true)
binding.statusGif.setVis(data.url?.endsWith(".svga") == true)
if (data.type == RoomBgInfo.Type.T_FREE) {
val bindingAdapterPosition = helper.bindingAdapterPosition
if (bindingAdapterPosition == 0) {
binding.statusLimit.text = R.string.Original.getString()
binding.statusLimit.changeSoildColor(R.color.black_transparent_50.getColor())
}
binding.statusLimit.setVis(bindingAdapterPosition == 0)
} else if (data.type == RoomBgInfo.Type.T_PAY) {
//有时长显示 左上角剩余时间
binding.statusLimit.setVis(data.remainHour != -1)
binding.statusLimit.text = getTimeText(data.remainHour)
binding.statusLimit.changeSoildColor(R.color.black_transparent_50.getColor())
binding.price.text = getPriceText(data.goldPrice,data.buyHour)
binding.price.setVis(true)
binding.statusBuy.setVis(true)
if (data.remainHour != -1) { //有剩余时长是 renew
binding.statusBuy.text = R.string.Renew.getString()
binding.statusBuy.setTextColor(R.color.white.getColor())
binding.statusBuy.setGradientDrawable(
Color.parseColor("#373639"),
-1,
Color.parseColor("#373639"),
-1,
-1f
)
binding.statusBuy.changeStrikeColor(R.color.white.getColor(), 1.dp)
} else { // 没有是buy
binding.statusBuy.text = R.string.buy.getString()
binding.statusBuy.setTextColor(R.color.white.getColor())
binding.statusBuy.setGradientDrawable(
Color.parseColor("#E29030"),
-1,
Color.parseColor("#FCC074"),
-1,
-1f
)
binding.statusBuy.changeStrikeColor(R.color.transparent.getColor(), 0)
}
} else if (data.type == RoomBgInfo.Type.T_CUSTOM) {
binding.statusLimit.setVis(true)
if (data.status == RoomBgInfo.Status.S_EXPIRED) { //过期 就展示 左上角 过期图标
binding.statusLimit.text = R.string.Expired.getString()
binding.statusLimit.changeSoildColor(R.color.color_696969.getColor())
} else {
if (data.remainHour != -1) { //非过期,有时长就展示 没有就隐藏
binding.statusLimit.text = getTimeText(data.remainHour)
binding.statusLimit.changeSoildColor(R.color.black_transparent_50.getColor())
} else {
binding.statusLimit.setVis(false)
}
}
binding.statusDel.setVis(data.status != RoomBgInfo.Status.S_REVIEW)
binding.price.text = getPriceText(data.goldPrice,data.buyHour)
binding.price.setVis(true)
binding.statusBuy.setVis(true)
if (data.status == RoomBgInfo.Status.S_REVIEW) { // 审核中
binding.statusBuy.text = R.string.in_review.getString()
binding.statusBuy.setTextColor(R.color.color_ff9741.getColor())
binding.statusBuy.setGradientDrawable(
Color.parseColor("#00000000"),
-1,
Color.parseColor("#00000000"),
-1,
-1f
)
binding.statusBuy.changeStrikeColor(R.color.color_ff9741.getColor(), 1.dp)
} else if (data.status == RoomBgInfo.Status.S_EXPIRED || data.status == RoomBgInfo.Status.S_SUCCESS) { //过期和通过审核 显示 renew
binding.statusBuy.text = R.string.Renew.getString()
binding.statusBuy.setTextColor(R.color.white.getColor())
binding.statusBuy.setGradientDrawable(
Color.parseColor("#00000000"),
-1,
Color.parseColor("#00000000"),
-1,
-1f
)
binding.statusBuy.changeStrikeColor(R.color.white.getColor(), 1.dp)
} else if (data.status == RoomBgInfo.Status.S_REJECT) { //不过审
binding.statusBuy.text = R.string.Reject.getString()
binding.statusBuy.setTextColor(R.color.color_ff5656.getColor())
binding.statusBuy.setGradientDrawable(
Color.parseColor("#00000000"),
-1,
Color.parseColor("#00000000"),
-1,
-1f
)
binding.statusBuy.changeStrikeColor(R.color.color_ff5656.getColor(), 1.dp)
}
}
}
helper.addOnClickListener(R.id.statusPlay)
helper.addOnClickListener(R.id.statusBuy)
helper.addOnClickListener(R.id.statusDel)
helper.addOnClickListener(R.id.bg)
}
private fun defViewStatus(binding: ItemRoomBgSetBinding) {
binding.statusLimit.isVisible = false
binding.statusGif.isVisible = false
binding.statusPlay.isVisible = false
binding.statusDel.isVisible = false
binding.price.isVisible = false
binding.statusBuy.isVisible = false
}
private fun getTimeText( hour:Int): String {
var text = ""
if (hour >= 24) {
text = R.string.sDays.getString((hour / 24).toInt())
} else {
text = R.string.unDay.getString()
}
return text
}
private fun getPriceText( price :Int,hour:Int): String {
return R.string.s_sDays.getString(price,(hour / 24).toInt())
}
}
private fun getBoomInfo(roomUid: Long): Single<RoomBgInfo> {
return api.getBoomInfo(roomUid)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private fun postDel(id: Long): Single<String> {
return api.postDel(AvRoomDataManager.get().roomUid, id)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private fun postSelect(id: Long): Single<String> {
return api.postSelect(AvRoomDataManager.get().roomUid, id)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
@GET("/room/background/list")
fun getBoomInfo(@Query("roomUid") roomUid: Long): Single<ServiceResult<RoomBgInfo>>
@POST("/room/background/del")
fun postDel(
@Query("roomUid") roomUid: Long,
@Query("id") id: Long
): Single<ServiceResult<JsonElement>>
@POST("/room/background/select")
fun postSelect(
@Query("roomUid") roomUid: Long,
@Query("id") id: Long
): Single<ServiceResult<JsonElement>>
}
}

View File

@@ -111,7 +111,7 @@ class RoomBoomInfoDialog : BaseDialogFragment<DialogRoomBoomInfoBinding>() {
private fun setInfo(indexData: BoomInfo?) {
indexData?.let {
reSetView()
if (it.rank && it.roomBoomRankVos.isVerify()) {
binding.avatarLayout.setVis(true)
binding.rewardLayout.visibility = View.INVISIBLE
@@ -152,7 +152,7 @@ class RoomBoomInfoDialog : BaseDialogFragment<DialogRoomBoomInfoBinding>() {
animView.setLoop(Int.MAX_VALUE)
animView.loadAnim2(it.vapUrl)
if (UserModel.get().partitionId == 2L) {
if (UserModel.get().isArUser) {
binding.avatarTime.text = R.string.roomBoomInfoRankHint2.getString()
} else {
binding.avatarTime.text = R.string.roomBoomInfoRankHint.getString()
@@ -161,6 +161,15 @@ class RoomBoomInfoDialog : BaseDialogFragment<DialogRoomBoomInfoBinding>() {
}
}
private fun reSetView() {
binding.avatar1.setImageResource(R.drawable.default_avatar)
binding.avatar2.setImageResource(R.drawable.default_avatar)
binding.avatar3.setImageResource(R.drawable.default_avatar)
binding.nick1.text = ""
binding.nick2.text = ""
binding.nick3.text = ""
}
fun setPro(speed: Int, level: Int) {
if (level != indexLevel) return

View File

@@ -24,7 +24,6 @@ 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
@@ -38,9 +37,8 @@ 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
@@ -55,7 +53,7 @@ class RoomGameListDialog :
private var mStatus = -1
private var mGameData = arrayListOf<GameInfo>()
var listener: RoomGameplayDialog.GameplayDialogListener? = null
var listener: GameplayDialogListener? = null
override fun getTheme(): Int {
return R.style.ErbanBottomSheetDialogDimFalse
}
@@ -102,8 +100,10 @@ class RoomGameListDialog :
private fun initView() {
adapter.setOnItemClickListener { _, view, position ->
val item = adapter.getItem(position) as GameInfo
switchGame(item)
val item = adapter.data.getOrNull(position)
if (item != null) {
switchGame(item)
}
}
binding?.recyclerView?.adapter = adapter
}
@@ -176,11 +176,23 @@ class RoomGameListDialog :
private fun roomIconToGameInfo(list : List<RoomIcon>): ArrayList<GameInfo> {
val newData = arrayListOf<GameInfo>()
list.forEachIndexed { index, roomIcon ->
if (roomIcon.isBaiShunGame()) {
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
}else if(roomIcon.isFindLove()){
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", isFindLove = true))
// if (roomIcon.isBaiShunGame()) {
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"",code = roomIcon.code))
// }else if(roomIcon.isFindLove()){
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
// }else if(roomIcon.isLeadercc()){
// newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", code = roomIcon.code))
// }
val gameInfo = GameInfo().apply {
name = roomIcon.name ?: ""
pic = roomIcon.icon ?: ""
pic2 = roomIcon.icon ?: ""
skipContent = roomIcon.skipContent ?: ""
ruleValue = roomIcon.ruleValue ?: ""
code = roomIcon.code ?: ""
showType = roomIcon.showType ?: 0
}
newData.add(gameInfo)
}
return newData
}
@@ -236,45 +248,80 @@ class RoomGameListDialog :
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
}
//todo do 开启小游戏时的模式限制
// 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()){
if (gameInfo.isFindLove) {
if (gameInfo.isLuckyBag()) {
listener?.onShowLuckyBag()
dismissAllowingStateLoss()
} else {
dialogManager?.showOkCancelDialog(
getString(R.string.room_switch_game_tips)
) {
//todo do 游戏弹窗列表 点击事件 ,code 优先判断
if (gameInfo.isFindLove()) {
jumpFindLove()
} else {
}else if (gameInfo.isLeadercc()) {
jumpLeaderccGame(gameInfo)
} else if (gameInfo.mgId?.isNotEmpty() == true) {
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 {
jumpBaiShunGame(gameInfo)
}
dismissAllowingStateLoss()
}
}
}
private fun jumpLeaderccGame(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()
config.showType = data.showType
listener?.onShowLeaderccGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
dismissAllowingStateLoss()
} catch (e: Exception) {
e.printStackTrace()
}
}
@@ -303,7 +350,9 @@ class RoomGameListDialog :
}
private fun jumpFindLove() {
GoldBoxHelper.handleBoxClick(requireContext())
context?.let {
GoldBoxHelper.handleBoxClick(it)
}
}
override fun onDestroy() {
@@ -329,12 +378,16 @@ class RoomGameListDialog :
//这里的2和4是服务端定义的错误状态 关闭排麦模式和关闭PK模式!
private fun isShowChangeGame(): Boolean {
//todo do 游戏模式限制判断
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)
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)
fun onShowLeaderccGame(url: String, config: BaiShunGameConfig)
fun onShowLuckyBag()
}
}

View File

@@ -10,7 +10,6 @@ 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
@@ -218,7 +217,7 @@ class RoomGameplayDialog : BottomSheetDialogFragment() {
val url = data.skipContent
if (data.skipType == 3 && !url.isNullOrEmpty()) {
if (data.showType == 2) {
RoomWebDialogActivity.start(requireContext(), url, false)
RoomWebDialogActivity.start(context, url, false)
} else {
CommonWebViewActivity.start(context, url)
}

View File

@@ -0,0 +1,215 @@
package com.chwl.app.avroom.dialog
import android.content.DialogInterface
import android.view.Gravity
import android.view.WindowManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.bean.LuckyBagDetailEntity
import com.chwl.app.avroom.bean.LuckyBagDetailEntity.BiliType.RECEIVED
import com.chwl.app.avroom.bean.LuckyBagDetailEntity.BiliType.SENT
import com.chwl.app.avroom.bean.LuckyBagEntity
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.DialogRoomLuckyBagBiliBinding
import com.chwl.app.databinding.ItemRoomLuckyBagBiliBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.user.UserModel
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.doToast
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.toColor
import com.chwl.library.common.util.toDP
import com.chwl.library.net.rxnet.RxNet
import com.chwl.library.widget.text.DrawableTextView
import com.example.lib_utils.ktx.getColor
import com.example.lib_utils.ktx.getDrawable
import com.example.lib_utils.ktx.getString
import io.reactivex.Single
import retrofit2.http.GET
import retrofit2.http.Query
class RoomLuckyBagBiliDialog : BaseDialogFragment<DialogRoomLuckyBagBiliBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = 485.toDP()
override var dimAmount = 0f
override var gravity = Gravity.BOTTOM
private lateinit var mAdapter : RoomLuckyBagBiliAdapter
private var mSentPageNum = 1
private var mReceivedPageNum = 1
private var mType = RECEIVED
private var mSentData = mutableListOf<LuckyBagDetailEntity>()
private var mReceivedData = mutableListOf<LuckyBagDetailEntity>()
override fun init() {
mAdapter = RoomLuckyBagBiliAdapter()
mAdapter.emptyView = EmptyViewHelper.createEmptyView(context,R.drawable.ic_lucky_bag_empty,"")
binding.srlLayout.isEnableRefresh = false
binding.srlLayout.setOnLoadmoreListener {
loadData()
}
binding.rvList.adapter = mAdapter
binding.rvList.layoutManager = LinearLayoutManager(context,RecyclerView.VERTICAL,false)
UserModel.get().cacheLoginUserInfo?.let {
binding.avatar.loadAvatar(it.avatar)
binding.nick.text = it.nick
}
binding.btnBack.click {
dismiss()
}
binding.btnReceived.click {
changeBtn(binding.btnReceived,true)
changeBtn(binding.btnSent,false)
mType = RECEIVED
mAdapter.isReceived = true
mAdapter.setNewData(mReceivedData)
checkData(mReceivedData)
}
binding.btnSent.click {
changeBtn(binding.btnSent,true)
changeBtn(binding.btnReceived,false)
mType = SENT
mAdapter.isReceived = false
mAdapter.setNewData(mSentData)
checkData(mSentData)
}
binding.btnReceived.performClick()
}
private fun checkData(data: MutableList<LuckyBagDetailEntity>) {
if (!data.isVerify()) {
loadData()
}
}
private fun loadData() {
val pageNum = if (mType == RECEIVED) mReceivedPageNum else mSentPageNum
getDetails(mType, pageNum, 20)
.compose(bindToLifecycle())
.doOnSuccess {
if (pageNum == 1) {
if (mType == RECEIVED) {
mReceivedData.clear()
mReceivedData = it.toMutableList()
mAdapter.setNewData(mReceivedData)
} else {
mSentData.clear()
mSentData = it.toMutableList()
mAdapter.setNewData(mSentData)
}
} else {
// if (mType == RECEIVED) {
// mReceivedData.addAll(it)
// } else {
// mSentData.addAll(it)
// }
mAdapter.addData(it)
}
if (it.size == 20) {
if (mType == RECEIVED) {
mReceivedPageNum++
} else {
mSentPageNum++
}
}
binding.srlLayout.isEnableLoadmore = it.size == 20
binding.srlLayout.finishLoadmore()
}
.doOnError {
it?.message?.doToast()
binding.srlLayout.finishLoadmore()
}.subscribe()
}
override fun onDismiss(dialog: DialogInterface) {
mActionCallBack?.onAction(0,0)
super.onDismiss(dialog)
}
private fun changeBtn(text: DrawableTextView, select: Boolean) {
if (select) {
text.changeGradientColor("#FF9F00".toColor(), -1, "#FFF437".toColor())
text.setTextColor(R.color.color_292601.getColor())
} else {
text.changeGradientColor("#00FF9F00".toColor(),-1,"#00FFF437".toColor())
text.setTextColor(R.color.color_FFEA5C.getColor())
}
}
class RoomLuckyBagBiliAdapter : BaseBindingAdapter<ItemRoomLuckyBagBiliBinding, LuckyBagDetailEntity>() {
var isReceived = true
override fun onBindView(
viewBinding: ItemRoomLuckyBagBiliBinding,
data: LuckyBagDetailEntity,
pos: Int
) {
if (data.type == LuckyBagEntity.Type.GIFT) {
if (isReceived) {
viewBinding.item.text = "${data.giftName}*${data.num}"
} else {
viewBinding.item.text = "${R.string.gift_action.getString()}*${data.num}"
}
viewBinding.item.setDrawableEmpty(null,null,null,null)
} else {
viewBinding.item.text = data.originalAmount?.toString()?:""
viewBinding.item.setDrawableEmpty(null,null,R.drawable.ic_coin_84.getDrawable(),null)
}
viewBinding.time.text = data.createTimeStr?:""
if (isReceived) {
viewBinding.nick.text = data.nick?:""
} else {
viewBinding.nick.text = if (data.type == LuckyBagEntity.Type.GIFT) R.string._ver_24_Gift_Lucky_Bag.getString() else R.string._ver_24_Coin_Lucky_Bag.getString()
}
}
}
private fun getDetails(type: Int, page: Int, pageSize: Int): Single<List<LuckyBagDetailEntity>> {
return api.getDetails(type, page, pageSize)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
@GET("/new-red-envelope/detail")
fun getDetails(
@Query("type") type: Int,
@Query("pageNo") page: Int,
@Query("pageSize") pageSize: Int,
): Single<ServiceResult<List<LuckyBagDetailEntity>>>
}
}

View File

@@ -0,0 +1,870 @@
package com.chwl.app.avroom.dialog
import android.view.Gravity
import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.avroom.bean.LuckyBagGiftBody
import com.chwl.app.avroom.bean.LuckyBagGiftItemBody
import com.chwl.app.avroom.bean.LuckyBagGoldBody
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.bindadapter.BaseBindingViewHolder
import com.chwl.app.databinding.DialogRoomLuckyBagBinding
import com.chwl.app.databinding.ItemRoomLuckyBagGiftBinding
import com.chwl.app.databinding.ItemRoomLuckyBagGoldBinding
import com.chwl.app.databinding.ItemRoomLuckyBagTimeBinding
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.utils.KeyBoardUtils
import com.chwl.app.utils.RoomHelperManager
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.gift.GiftModel
import com.chwl.core.gift.bean.GiftType
import com.chwl.core.gift.bean.LuckyBagGift
import com.chwl.core.gift.bean.LuckyBagGold
import com.chwl.core.gift.bean.LuckyBagNumber
import com.chwl.core.gift.bean.LuckyBagNumber.Type
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.pay.PayModel
import com.chwl.core.user.UserModel
import com.chwl.core.utils.net.RxHelper
import com.chwl.core.widget.layoutmanager.pagergridlayoutmanager.PagerGridLayoutManager
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.doToast
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.postSafe
import com.chwl.library.common.util.setAutoSizeModel
import com.chwl.library.common.util.setMargin
import com.chwl.library.common.util.setRL
import com.chwl.library.common.util.setVis
import com.chwl.library.common.util.toColor
import com.chwl.library.common.util.toDP
import com.chwl.library.net.rxnet.RxNet
import com.example.lib_utils.ktx.getColor
import com.example.lib_utils.ktx.getString
import com.example.lib_utils.ktx.setPadding2
import com.example.lib_utils.spannable.SpannableTextBuilder
import com.google.gson.JsonElement
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.youth.banner.config.IndicatorConfig
import io.reactivex.Single
import retrofit2.http.Body
import retrofit2.http.POST
class RoomLuckyBagDialog : BaseDialogFragment<DialogRoomLuckyBagBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.WRAP_CONTENT
override var dimAmount = 0f
override var gravity = Gravity.BOTTOM
private lateinit var mGiftAdapter : GiftAdapter
private lateinit var mGiftTimeAdapter : NumberItemAdapter
private lateinit var mGoldAdapter : GoldAdapter
private lateinit var mGoldNumAdapter : NumberItemAdapter
private lateinit var mGoldTimeAdapter : NumberItemAdapter
private var mPageManager : PagerGridLayoutManager?=null
private var mGiftData = mutableListOf<LuckyBagGift>()
private var mGiftDataSelect = mutableListOf<LuckyBagGift>()
private var mGiftDataSelectPos = HashMap<Int,LuckyBagGift>()
private var mIsGift = true
private var mIsGiftReview = false
private var mGiftSelect = -1
private var mGiftTimeSelect = -1
private var mGoldSelect = -1
private var mGoldNumSelect = -1
private var mGoldTimeSelect = -1
override fun init() {
binding.redBagDesc.text = R.string._ver_24_sendHint.getString(0,0)
binding.giftIndicator.setRL()
mGiftAdapter = GiftAdapter()
mGiftAdapter.onItemChildClickListener = object : BaseQuickAdapter.OnItemChildClickListener {
override fun onItemChildClick(
adapter: BaseQuickAdapter<*, *>?,
view: View?,
position: Int
) {
view?.let {
when (it.id) {
R.id.etNum -> {
mGiftSelect = position
showInputLayout()
}
R.id.up -> {
if (mIsGiftReview) {
if (position.isVerify(mGiftDataSelect)) {
val data = mGiftDataSelect[position]
data.count = data.count.plus(1).coerceAtMost(99)
mGiftAdapter.notifyItemChanged(position,1)
mGiftDataSelectPos.forEach { (t, u) ->
if (u.giftId == data.giftId) {
u.count = data.count
mGiftData.getOrNull(t)?.count = data.count
}
}
}
}else{
if (position.isVerify(mGiftData)) {
val data = mGiftData[position]
data.count = data.count.plus(1).coerceAtMost(99)
mGiftAdapter.notifyItemChanged(position,1)
mGiftDataSelectPos[position] = data
}
}
showGiftCoin()
}
R.id.down -> {
if (mIsGiftReview) {
if (position.isVerify(mGiftDataSelect)) {
val data = mGiftDataSelect[position]
data.count = data.count.minus(1).coerceAtLeast(0)
mGiftAdapter.notifyItemChanged(position,1)
mGiftDataSelectPos.forEach { (t, u) ->
if (u.giftId == data.giftId) {
u.count = data.count
mGiftData.getOrNull(t)?.count = data.count
}
}
}
} else {
if (position.isVerify(mGiftData)) {
val data = mGiftData[position]
data.count = data.count.minus(1).coerceAtLeast(0)
mGiftAdapter.notifyItemChanged(position,1)
if (data.count <= 0) {
mGiftDataSelectPos.remove(position)
}
}
}
showGiftCoin()
}
else -> {}
}
}
}
}
mPageManager = PagerGridLayoutManager(2,4,PagerGridLayoutManager.HORIZONTAL,false).apply {
setPagerChangedListener(object : PagerGridLayoutManager.PagerChangedListener {
override fun onPagerCountChanged(pagerCount: Int) {
binding.giftIndicator.initView(IndicatorConfig().apply {
radius = 50.toDP()
selectedColor = R.color.color_FFEA5C.getColor()
normalColor = R.color.black_transparent_30.getColor()
selectedWidth = 5.toDP()
normalWidth = 5.toDP()
indicatorSpace = 3.toDP()
gravity = IndicatorConfig.Direction.CENTER
isAttachToBanner = false
currentPosition = 0
indicatorSize = pagerCount
})
}
override fun onPagerIndexSelected(prePagerIndex: Int, currentPagerIndex: Int) {
binding.giftIndicator.onPageSelected(currentPagerIndex)
}
})
}
binding.rvListGiftType.layoutManager = mPageManager
binding.rvListGiftType.adapter = mGiftAdapter
mGiftTimeAdapter = NumberItemAdapter()
mGiftTimeAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener {
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
mGiftTimeAdapter.select(position)
mGiftTimeSelect = mGiftTimeAdapter?.data?.getOrNull(position)?.number?:0
}
}
binding.rvListGiftTime.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false)
binding.rvListGiftTime.adapter = mGiftTimeAdapter
//--金币礼包
mGoldAdapter = GoldAdapter()
mGoldAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener {
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
mGoldAdapter.select(position)
mGoldSelect = mGoldAdapter?.data?.getOrNull(position)?.number?:0
showGoldCoin()
}
}
binding.rvListGoldType.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false)
binding.rvListGoldType.adapter = mGoldAdapter
mGoldNumAdapter = NumberItemAdapter()
mGoldNumAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener {
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
mGoldNumAdapter.select(position)
mGoldNumSelect = mGoldNumAdapter?.data?.getOrNull(position)?.number?:0
showGoldCoin()
}
}
binding.rvListGoldNum.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false)
binding.rvListGoldNum.adapter = mGoldNumAdapter
mGoldTimeAdapter = NumberItemAdapter()
mGoldTimeAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener {
override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
mGoldTimeAdapter.select(position)
mGoldTimeSelect = mGoldTimeAdapter?.data?.getOrNull(position)?.number?:0
}
}
binding.rvListGoldTime.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false)
binding.rvListGoldTime.adapter = mGoldTimeAdapter
val giftInfoList = GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_NORMAL)
giftInfoList.forEach {
mGiftData.add(LuckyBagGift().apply {
giftId = it.giftId.toLong()
giftName = it.giftName
giftPrice = it.goldPrice
giftPic = it.giftUrl
})
}
giftInfoList.isVerify(0){
it.isSelected = true
mGiftSelect = 0
}
RoomHelperManager.mLuckyBagConfig?.let { config ->
val goldData = arrayListOf<LuckyBagGold>()
val goldNumData = arrayListOf<LuckyBagNumber>()
val goldTimeData = arrayListOf<LuckyBagNumber>()
val giftTimeData = arrayListOf<LuckyBagNumber>()
config.goldItems.forEach {
goldData.add(LuckyBagGold().apply {
number = it
})
}
config.numItems.forEach {
goldNumData.add(LuckyBagNumber().apply {
type = Type.num
number = it
})
}
config.timeItems.forEach {
goldTimeData.add(LuckyBagNumber().apply {
type = Type.time
number = it
})
giftTimeData.add(LuckyBagNumber().apply {
type = Type.time
number = it
})
}
mGoldAdapter.setNewData(goldData)
mGoldNumAdapter.setNewData(goldNumData)
mGoldTimeAdapter.setNewData(goldTimeData)
mGiftTimeAdapter.setNewData(giftTimeData)
goldData.isVerify(0){
it.isSelect = true
mGoldSelect = it.number
}
goldNumData.isVerify(0){
it.isSelect = true
mGoldNumSelect= it.number
}
goldTimeData.isVerify(0){
it.isSelect = true
mGoldTimeSelect = it.number
}
giftTimeData.isVerify(0){
it.isSelect = true
mGiftTimeSelect = it.number
}
}
binding.bgGiftBag.click {
tabChange(true)
}
binding.bgGoldBag.click {
tabChange(false)
}
binding.notifyView.avatar.loadAvatar(UserModel.get().cacheLoginUserInfo?.avatar)
binding.notifyView.nick.text = UserModel.get().cacheLoginUserInfo?.nick
binding.notifyView.desc.text = if (mIsGift) R.string._ver_24_lucky_bag_room_notify_gift.getString() else R.string._ver_24_lucky_bag_room_notify_coin.getString()
binding.btnConfirm.click {
if (isSenting) return@click
if (checkSendData()) {
if (mIsGift) {
if (!mIsGiftReview) {
showGiftReview()
} else {
doSendGiftBag()
}
} else {
doSendGoldBag()
}
} else {
R.string._ver_24_sentLuckyBagNoSelect.doToast()
}
}
binding.btnModify.click {
showGiftSelectView()
}
binding.btnBill.click {
val root = binding.root
root.setVis(false)
val biliDialog = RoomLuckyBagBiliDialog()
biliDialog.mActionCallBack = object : Action {
override fun onAction(type: Int, data: Any?) {
if (isViewLoaded && isAdded) {
root.setVis(true)
}
}
}
biliDialog.show(context)
}
binding.btnMore.click {
DialogWebViewActivity.start(binding.btnMore.context,UriProvider.getLuckyBagRule(),false,(ScreenUtil.screenHeight * 0.4).toInt())
}
binding.inputLayout.setOnTouchListener { _: View?, _: MotionEvent? ->
binding.inputEdit.clearFocus()
binding.inputLayout.visibility = View.GONE
KeyBoardUtils.hideKeyBoard(activity, binding.inputEdit)
if (mIsGiftReview) {
if (mGiftSelect.isVerify(mGiftDataSelect)) {
val data = mGiftDataSelect[mGiftSelect]
data.isSelect = false
mGiftAdapter.notifyItemChanged(mGiftSelect,1)
}
}else{
if (mGiftSelect.isVerify(mGiftData)) {
val data = mGiftData[mGiftSelect]
data.isSelect = false
mGiftAdapter.notifyItemChanged(mGiftSelect,1)
}
}
mGiftSelect = -1
false
}
binding.inputSend.click {
var count = 0
val text = binding.inputEdit.text.toString()
if (text.isVerify()) {
count = text.toInt()
}
if (mIsGiftReview) {
if (mGiftSelect.isVerify(mGiftDataSelect)) {
val data = mGiftDataSelect[mGiftSelect]
data.count = count
data.isSelect = false
mGiftAdapter.notifyItemChanged(mGiftSelect,1)
mGiftDataSelectPos.forEach { (t, u) ->
if (u.giftId == data.giftId) {
u.count = data.count
mGiftData.getOrNull(t)?.count = data.count
}
}
}
}else{
if (mGiftSelect.isVerify(mGiftData)) {
val data = mGiftData[mGiftSelect]
data.count = count
data.isSelect = false
mGiftAdapter.notifyItemChanged(mGiftSelect,1)
if (count > 0) {
mGiftDataSelectPos[mGiftSelect] = data
} else {
mGiftDataSelectPos.remove(mGiftSelect)
}
}
}
binding.inputEdit.clearFocus()
binding.inputLayout.visibility = View.GONE
KeyBoardUtils.hideKeyBoard(activity, binding.inputEdit)
mGiftSelect = -1
showGiftCoin()
}
binding.userGold.text = (PayModel.get().currentWalletInfo?.diamondNum ?: 0.0).toInt().toString()
binding.userGold.click {
ChargeActivity.start(context)
}
binding.btnGoldBag.setAutoSizeModel()
binding.btnGiftBag.setAutoSizeModel()
tabChange(true)
}
private fun tabChange(isGift:Boolean) {
if (isGift) {
binding.bgGiftBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_left_s)
binding.bgGoldBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_right_n)
binding.notifyView.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gift_bg)
binding.giftBagLayout.setVis(true,true)
binding.goldBagLayout.setVis(false, true)
mIsGift = true
changeViewStatus()
showGiftCoin()
} else {
binding.bgGiftBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_left_n)
binding.bgGoldBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_right_s)
binding.notifyView.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gold_bg)
binding.goldBagLayout.setVis(true,true)
binding.giftBagLayout.setVis(false,true)
mIsGift = false
changeViewStatus()
showGoldCoin()
}
binding.btnConfirm.text = if (mIsGift) R.string._ver_24_Send_Gift_Lucky_Bag.getString() else R.string._ver_24_Send_Coin_Lucky_Bag.getString()
binding.btnGoldBag.paint.isFakeBoldText = !isGift
binding.btnGiftBag.paint.isFakeBoldText = isGift
}
private fun changeViewStatus() {
if (mIsGift && !mIsGiftReview) {
showGiftSelectView()
}else if (mIsGift && mIsGiftReview) {
showGiftReview()
} else {
showGoldSelectView()
}
}
private fun showGiftSelectView() {
binding.giftBagLayout.setVis(true)
binding.goldBagLayout.setVis(false)
binding.groupGiftSelect.setVis(true)
binding.groupReViewGift.setVis(false)
binding.flListGiftTypeLayout.setMargin(top = 37, bottom = 90)
// binding.flListGiftTypeLayout.setViewWH(height = 350)
binding.bottomSpace.setVis(true)
binding.userGold.setVis(true)
binding.redBagDesc.setPadding2(bottom = 0.toDP())
mGiftAdapter.setNewData(mGiftData)
binding.rvListGiftType.postSafe {
mPageManager?.scrollToPagerIndex(0)
}
mGiftDataSelect.clear()
val iterator = mGiftDataSelectPos.iterator()
while (iterator.hasNext()) {
val next = iterator.next().value
if (next.count <= 0) {
iterator.remove()
}
}
mIsGiftReview = false
}
private fun showGiftReview() {
binding.giftBagLayout.setVis(true)
binding.goldBagLayout.setVis(false)
binding.groupReViewGift.setVis(true)
binding.groupGiftSelect.setVis(false)
binding.flListGiftTypeLayout.setMargin(top = 37, bottom = 90)
// binding.flListGiftTypeLayout.setViewWH(height = 300)
binding.bottomSpace.setVis(false)
binding.userGold.setVis(false)
binding.redBagDesc.setPadding2(bottom = 0.toDP())
mGiftDataSelect.clear()
val iterator = mGiftDataSelectPos.iterator()
while (iterator.hasNext()) {
val next = iterator.next().value
if (next.count > 0) {
mGiftDataSelect.add(next)
} else {
iterator.remove()
}
}
mGiftAdapter.setNewData(mGiftDataSelect)
binding.rvListGiftType.postSafe {
mPageManager?.scrollToPagerIndex(0)
}
mIsGiftReview = true
}
private fun showGoldSelectView() {
binding.goldBagLayout.setVis(true)
binding.giftBagLayout.setVis(false)
binding.bottomSpace.setVis(true)
binding.userGold.setVis(true)
binding.redBagDesc.setPadding2(bottom = 20.toDP())
}
private fun showInputLayout() {
binding.inputLayout.postDelayed({
binding.inputLayout.visibility = View.VISIBLE
binding.inputEdit.isFocusableInTouchMode = true
binding.inputEdit.requestFocus()
if (mGiftSelect.isVerify(mGiftData)) {
val data = mGiftData[mGiftSelect]
binding.inputEdit.setText(data.count.toString())
binding.inputEdit.setSelection(binding.inputEdit.text.length)
data.isSelect = true
mGiftAdapter.notifyItemChanged(mGiftSelect,1)
}
KeyBoardUtils.showKeyBoard(context, binding.inputEdit)
}, 200)
}
private fun showGiftCoin() {
var giftCount = 0
var giftCoin = 0
mGiftDataSelectPos.forEach { (t, u) ->
if (u.count > 0) {
giftCount += u.count
giftCoin += u.count * u.giftPrice
}
}
val redBagDesc = R.string._ver_24_sendHint.getString(giftCount, giftCoin)
SpannableTextBuilder(binding.redBagDesc).appendText(redBagDesc)
.addTextStyleList(arrayListOf(
SpannableTextBuilder.TextStyleBean().apply {
text = giftCount.toString()
textColor = R.color.white.getColor()
},
SpannableTextBuilder.TextStyleBean().apply {
text = giftCoin.toString()
textColor = R.color.white.getColor()
}
))
.apply()
val time = mGiftTimeSelect / 60
val reviewTime = R.string._ver_24_reviewTime.getString(time)
SpannableTextBuilder(binding.reviewTime).appendText(reviewTime)
.addTextStyleList(arrayListOf(
SpannableTextBuilder.TextStyleBean().apply {
text = time.toString()
textColor = R.color.white.getColor()
}
))
.apply()
}
private fun showGoldCoin() {
val coin = mGoldSelect
val redBagDesc = R.string._ver_24_Total_spend_s_coins.getString(coin)
SpannableTextBuilder(binding.redBagDesc).appendText(redBagDesc)
.addTextStyleList(arrayListOf(
SpannableTextBuilder.TextStyleBean().apply {
text = coin.toString()
textColor = R.color.white.getColor()
}
))
.apply()
}
private fun checkSendData() : Boolean{
if (mIsGift) {
if (!mGiftDataSelectPos.isVerify()) {
return false
}
if (mGiftTimeSelect == -1) {
return false
}
} else {
if (mGoldSelect == -1) {
return false
}
if (mGoldNumSelect == -1) {
return false
}
if (mGoldTimeSelect == -1) {
return false
}
}
return true
}
var isSenting = false
private fun doSendGiftBag() {
isSenting = true
val items = mutableListOf<LuckyBagGiftItemBody>()
mGiftDataSelectPos.keys.forEach{ key->
if ((mGiftDataSelectPos[key]?.count ?: 0) > 0) {
items.add(LuckyBagGiftItemBody().apply {
giftId = mGiftDataSelectPos[key]?.giftId ?: -1
giftNum = mGiftDataSelectPos[key]?.count ?: -1
})
}
}
if (!items.isVerify()) {
R.string._ver_24_sentLuckyBagNoSelect.doToast()
isSenting = false
return
}
sentGiftBag(LuckyBagGiftBody().apply {
roomUid = AvRoomDataManager.get().roomUid
uid = AuthModel.get().currentUid
countDownSecond = mGiftTimeSelect
giftItems = items
}).compose(bindToLifecycle())
.doOnSuccess {
PayModel.get().refreshWalletInfo(true)
isSenting = false
dismiss()
}
.doOnError {
isSenting = false
it?.message?.doToast()
}.subscribe()
}
private fun doSendGoldBag() {
isSenting = true
sentGoldBag(LuckyBagGoldBody().apply {
roomUid = AvRoomDataManager.get().roomUid
uid = AuthModel.get().currentUid
goldNum = mGoldSelect
num = mGoldNumSelect
countDownSecond = mGoldTimeSelect
}).compose(bindToLifecycle())
.doOnSuccess {
PayModel.get().refreshWalletInfo(true)
isSenting = false
dismiss()
}
.doOnError {
isSenting = false
it?.message?.doToast()
}.subscribe()
}
private class GiftAdapter : BaseBindingAdapter<ItemRoomLuckyBagGiftBinding, LuckyBagGift>() {
override fun convert(
helper: BaseBindingViewHolder<ItemRoomLuckyBagGiftBinding>,
item: LuckyBagGift
) {
helper?.binding?.let {
it.gift.loadImage(item.giftPic)
it.giftName.text = item.giftName
it.gold.text = item.giftPrice.toString()
it.etNum.setText(item.count.toString())
it.giftCount.text = item.count.toString()
it.etNum.setTextColor(if (item.isSelect) R.color.color_FFEA5C.getColor() else R.color.white.getColor())
helper.addOnClickListener(R.id.up)
helper.addOnClickListener(R.id.down)
helper.addOnClickListener(R.id.etNum)
// if (item.isReView) {
// it.selectViews.setVis(false)
// it.giftCount.setVis(true)
// } else {
// it.selectViews.setVis(true)
// it.giftCount.setVis(false)
// }
}
}
override fun onBindViewByPayloads(
viewBinding: ItemRoomLuckyBagGiftBinding,
data: LuckyBagGift,
pos: Int,
payloads: MutableList<Any>
) {
viewBinding.etNum.setText(data.count.toString())
viewBinding.etNum.setTextColor(if (data.isSelect) R.color.color_FFEA5C.getColor() else R.color.white.getColor())
}
}
private class NumberItemAdapter : BaseBindingAdapter<ItemRoomLuckyBagTimeBinding, LuckyBagNumber>() {
public fun select(pos:Int) {
data?.forEachIndexed { index, luckyBagGold ->
luckyBagGold.isSelect = index == pos
}
notifyDataSetChanged()
}
override fun convert(
helper: BaseBindingViewHolder<ItemRoomLuckyBagTimeBinding>,
item: LuckyBagNumber
) {
helper?.binding?.let {
if (item.type == LuckyBagNumber.Type.time) {
it.number.text = "${(item.number/60)}${R.string._ver_24_Mins_s.getString()}"
} else {
it.number.text = item.number.toString()
}
if (item.isSelect()) {
it.number.changeGradientColor("#ff9f00".toColor(),-1,"#fff437".toColor())
it.number.changeStrikeColor("#00ffd168".toColor())
it.number.setTextColor(R.color.color_292601.getColor())
} else {
it.number.changeGradientColor("#610015".toColor(),-1,"#97000c".toColor())
it.number.changeStrikeColor("#ffd168".toColor())
it.number.setTextColor(R.color.color_FFEA5C.getColor())
}
}
}
}
private class GoldAdapter : BaseBindingAdapter<ItemRoomLuckyBagGoldBinding, LuckyBagGold>(){
public fun select(pos:Int) {
data?.forEachIndexed { index, luckyBagGold ->
luckyBagGold.isSelect = index == pos
}
notifyDataSetChanged()
}
private var imageRes = arrayOf(
R.drawable.ic_lucky_bag_gold_1,
R.drawable.ic_lucky_bag_gold_2,
R.drawable.ic_lucky_bag_gold_3,
R.drawable.ic_lucky_bag_gold_4,
)
override fun convert(
helper: BaseBindingViewHolder<ItemRoomLuckyBagGoldBinding>,
item: LuckyBagGold
) {
helper?.binding?.let {
it.gold.text = item.number.toString()
imageRes?.getOrNull(helper.bindingAdapterPosition)?.let { res->
it.goldPic.setImageResource(res)
}
if (item.isSelect()) {
it.goldBg.changeGradientColor("#ff9f00".toColor(),-1,"#fff437".toColor())
it.goldBg.changeStrikeColor("#00ffd168".toColor())
it.gold.setTextColor(R.color.color_292601.getColor())
} else {
it.goldBg.changeGradientColor("#610015".toColor(),-1,"#97000c".toColor())
it.goldBg.changeStrikeColor("#ffd168".toColor())
it.gold.setTextColor(R.color.color_FFEA5C.getColor())
}
}
}
}
private fun sentGiftBag(body: LuckyBagGiftBody?): Single<String> {
return api.sentGiftBag(body)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private fun sentGoldBag(body: LuckyBagGoldBody?): Single<String> {
return api.sentGoldBag(body)
.compose(RxHelper.handleIgnoreData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java)
private interface Api {
/**
* 发包
*/
@POST("/new-red-envelope")
fun sentGiftBag(@Body body: LuckyBagGiftBody?): Single<ServiceResult<JsonElement?>?>
@POST("/new-red-envelope")
fun sentGoldBag(@Body body: LuckyBagGoldBody?): Single<ServiceResult<JsonElement?>?>
}
}

View File

@@ -0,0 +1,379 @@
package com.chwl.app.avroom.dialog
import android.content.DialogInterface
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.bean.LuckyBagEntity
import com.chwl.app.avroom.bean.LuckyBagOpenBiliEntity
import com.chwl.app.avroom.bean.LuckyBagOpenEntity
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.bindadapter.BaseBindingAdapter
import com.chwl.app.databinding.DialogRoomLuckyBagOpenBinding
import com.chwl.app.databinding.ItemRoomLuckyBagViewOthersBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.utils.RoomHelperManager
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.gift.bean.LuckyBagViewOthers
import com.chwl.core.pay.PayModel
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.doLog
import com.chwl.library.common.util.doToast
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.postSafe
import com.chwl.library.common.util.setMargin
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.chwl.library.common.util.toDP
import com.chwl.library.net.rxnet.RxNet
import com.example.lib_utils.ktx.getDrawable
import com.example.lib_utils.ktx.getString
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.inter.IAnimListener
import com.tencent.qgame.animplayer.util.ScaleType
import io.reactivex.Single
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
class RoomLuckyBagOpenDialog : BaseDialogFragment<DialogRoomLuckyBagOpenBinding>() {
override var width = 300.toDP()
override var height = WindowManager.LayoutParams.WRAP_CONTENT
override var dimAmount = 0f
override var gravity = Gravity.CENTER
private var mAdapter : ViewOtherAdapter ? = null
var isGift = true
private var isOpen = false
private var mTimeJop : Job?=null
var mData : LuckyBagEntity? = null
override fun init() {
mAdapter = ViewOtherAdapter()
binding.rvListViewOthers.adapter = mAdapter
binding.rvListViewOthers.layoutManager = LinearLayoutManager(context,RecyclerView.VERTICAL,false)
binding.viewOthers.click {
viewOthers()
}
binding.confirm.click {
if (isOpen) {
doOpenBag()
} else {
dismiss()
}
}
binding.bagAnim.setLoop(1)
binding.bagAnim.setScaleType(ScaleType.FIT_XY)
mData?.let {
isGift = it.isGift
if (isGift) {
binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gift_pic_2)
binding.title.text = R.string._ver_24_luckBagOpenGiftTitle.getString(it.nick)
} else {
binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gold_pic_2)
binding.title.text = R.string._ver_24_luckBagOpenCoinTitle.getString(it.nick)
}
binding.bg.setBackgroundResource(R.drawable.ic_lucky_bag_open_bg)
binding.avatar.loadAvatar(it.avatar)
val timeDown = RoomHelperManager.getTimeDown(it.countDownTime,it.countDownSecond)
if (timeDown == 0L) {
// 倒计时结束 可开
ready()
} else {
timeDown(timeDown)
}
}
}
private fun doOpenBag() {
mData?.let { data ->
postLuckyBagOpen(data.id)
.compose(bindToLifecycle())
.doOnSuccess {
if (this@RoomLuckyBagOpenDialog.isAdded) {
if (it.currentUserGifts.isVerify() || it.currentUserAmount > 0){
mActionCallBack?.onAction(1,mData)
playAnim(it)
}else {
showEmpty()
}
}
}.doOnError {
it?.message?.doToast()
}.subscribe()
}
}
private fun timeDown(timeDown: Long) {
def()
binding.bagImg.setVis(true)
binding.comingHint.setVis(true)
binding.comingHint.text = R.string._ver_24_luckBagOpenHint.getString()
startTimeDown(timeDown)
}
private fun startTimeDown(timeDown:Long) {
mTimeJop?.cancel()
mTimeJop = lifecycleScope.launch {
for (time in timeDown downTo 0) {
delay(1000L)
binding.time.postSafe{
val timeString = RoomHelperManager.getTimeString(time)
binding.time.text = timeString
binding.time.setVis(time != 0L,true)
"倒计时 i=$time timeString=$timeString".doLog()
}
}
mTimeJop?.cancel()
mTimeJop = null
ready()
}
mTimeJop?.start()
}
private fun ready() {
binding.root.postSafe{
def()
binding.bagImg.setVis(true)
binding.confirm.text = R.string._ver_24_Click_Open.getString()
isOpen = true
}
}
private fun open(entity: LuckyBagOpenEntity) {
def()
binding.viewOthers.setVis(true)
if (isGift) {
binding.giftName.setVis(true)
binding.giftNum.setVis(true)
binding.giftImg.setVis(true)
binding.giftCoin.setVis(true)
binding.giftHint.setVis(true)
entity.currentUserGifts.isVerify(0){
binding.giftName.text = it?.giftVo?.giftName?:""
binding.giftCoin.text = ((it?.giftVo?.goldPrice?:0) * (it?.giftNum?:0)).toString()
binding.giftNum.text = "x"+(it?.giftNum?.toString()?:"0")
binding.giftImg.loadImage(it?.giftVo?.giftUrl?:"")
}
} else {
binding.gold.setVis(true)
binding.goldHint.setVis(true)
binding.gold.text = entity?.currentUserAmount?.toString()?:"0"
PayModel.get().refreshWalletInfo(true)
}
}
private fun showEmpty() {
def()
binding.viewOthers.setVis(true)
binding.bagImg.setVis(true)
binding.comingHint.setVis(true)
binding.comingHint.text = R.string._ver_24_luckBagOpen_Empty.getString()
binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_empty)
mActionCallBack?.onAction(1,mData)
}
private fun viewOthers() {
def()
binding.viewOthersHint.setVis(true)
binding.rvListViewOthers.setVis(true)
binding.bg.setViewWH(height = 414)
binding.confirm.setMargin(bottom = 10)
binding.bg.setBackgroundResource(R.drawable.ic_lucky_bag_open_bili_bg)
mData?.let { data->
getViewOthers(data.id)
.compose(bindToLifecycle())
.doOnSuccess {
val viewOthers = mutableListOf<LuckyBagViewOthers>()
it.forEach { vo->
viewOthers.add(LuckyBagViewOthers().apply {
uid = vo?.userVO?.uid?:0L
avatar = vo?.userVO?.avatar?:""
nick = vo?.userVO?.nick?:""
time = vo?.createTime?:0L
timeStr = vo?.createTimeStr?:""
giftName = vo?.redEnvelopeGiftItemVOs?.getOrNull(0)?.giftVo?.giftName?:""
giftNum = vo?.redEnvelopeGiftItemVOs?.getOrNull(0)?.giftNum?:0
goldNum = vo?.amount?:0
})
}
mAdapter?.setNewData(viewOthers)
}
.doOnError {
it?.message?.doToast()
}
.subscribe()
}
}
private fun def() {
isOpen = false
binding.viewOthers.visibility = View.INVISIBLE
binding.time.visibility = View.INVISIBLE
binding.giftName.visibility = View.INVISIBLE
binding.giftNum.visibility = View.INVISIBLE
binding.giftImg.visibility = View.INVISIBLE
binding.giftHint.visibility = View.INVISIBLE
binding.giftCoin.visibility = View.INVISIBLE
binding.gold.visibility = View.INVISIBLE
binding.goldHint.visibility = View.INVISIBLE
binding.bagImg.visibility = View.INVISIBLE
binding.comingHint.visibility = View.INVISIBLE
binding.rvListViewOthers.visibility = View.INVISIBLE
binding.viewOthersHint.visibility = View.INVISIBLE
binding.bg.setViewWH(height = 326)
binding.confirm.text = R.string.ok.getString()
binding.confirm.setMargin(bottom = 20)
}
private fun playAnim(luckyBagOpenEntity: LuckyBagOpenEntity) {
context?.let {
binding.bagAnim.setVis(true)
binding.bagAnim.setAnimListener(object : IAnimListener {
override fun onFailed(errorType: Int, errorMsg: String?) {
if (this@RoomLuckyBagOpenDialog.isAdded) {
_binding?.bagAnim.postSafe {
_binding?.bagAnim?.setVis(false)
open(luckyBagOpenEntity)
}
}
}
override fun onVideoComplete() {
if (this@RoomLuckyBagOpenDialog.isAdded) {
_binding?.bagAnim.postSafe {
_binding?.bagAnim?.setVis(false)
open(luckyBagOpenEntity)
}
}
}
override fun onVideoDestroy() {}
override fun onVideoRender(frameIndex: Int, config: AnimConfig?) {}
override fun onVideoStart() {
if (this@RoomLuckyBagOpenDialog.isAdded) {
_binding?.bagImg.postSafe {
_binding?.bagImg?.setVis(isVis = false, isInVis = true)
}
}
}
})
val url = if (isGift) "mp4/lucky_bag_gift_open.mp4" else "mp4/lucky_bag_gold_open.mp4"
binding.bagAnim.startPlay(it.assets,url)
}
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
mTimeJop?.cancel()
}
private class ViewOtherAdapter : BaseBindingAdapter<ItemRoomLuckyBagViewOthersBinding, LuckyBagViewOthers>() {
override fun onBindView(
viewBinding: ItemRoomLuckyBagViewOthersBinding,
data: LuckyBagViewOthers,
pos: Int
) {
viewBinding.time.text = data.timeStr
viewBinding.name.text = data.nick
viewBinding.me.setVis(data.uid == AuthModel.get().currentUid)
viewBinding.avatar.loadAvatar(data?.avatar?:"")
if (data.giftNum > 0) {
viewBinding.giftInfo.text = "${data.giftName}x${data.giftNum}"
viewBinding.giftInfo.setDrawableEmpty(null,null,null,null)
} else {
viewBinding.giftInfo.text = data.goldNum.toString()
viewBinding.giftInfo.setDrawableEmpty(null,null,R.drawable.ic_coin_84.getDrawable(),null)
}
}
}
private fun getViewOthers(redEnvelopeId: Long): Single<List<LuckyBagOpenBiliEntity>> {
return api.getViewOthers(redEnvelopeId)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private fun postLuckyBagOpen(redEnvelopeId: Long): Single<LuckyBagOpenEntity> {
return api.postLuckyBagOpen(redEnvelopeId)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
@GET("/new-red-envelope/get")
fun getViewOthers(@Query("redEnvelopeId") redEnvelopeId: Long): Single<ServiceResult<List<LuckyBagOpenBiliEntity>>>
@POST("/new-red-envelope/open")
fun postLuckyBagOpen(
@Query("redEnvelopeId") redEnvelopeId: Long
): Single<ServiceResult<LuckyBagOpenEntity>>
}
}

View File

@@ -0,0 +1,30 @@
package com.chwl.app.avroom.dialog
import android.content.DialogInterface
import android.view.Gravity
import android.view.WindowManager
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomMusicBinding
class RoomMusicDialog : BaseDialogFragment<DialogRoomMusicBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.MATCH_PARENT
override var dimAmount = 0f
override var gravity = Gravity.BOTTOM
override fun init() {
binding.musicView.setCallBack {
dismiss()
}
binding.musicView.showBoxInAnim();
}
override fun onDismiss(dialog: DialogInterface) {
binding.musicView.release()
super.onDismiss(dialog)
}
}

View File

@@ -8,7 +8,6 @@ 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.RoomNotifyBoomBinding
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.manager.AvRoomDataManager
@@ -28,10 +27,10 @@ class RoomNotifyBoomDialog(context: Context) :
data?.let { data ->
mBinding.boomIcon.loadImage(data.pic)
mBinding.avatar.loadImage(data.avatar)
mBinding.roomName.text = R.string.roomNick.getString(data.roomTitle)
mBinding.roomName.text = data.roomTitle
mBinding.boomDes.text = R.string.roomBoomNotify.getString()
mBinding.root.setOnClickListener {
mBinding.clickArea.setOnClickListener {
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
val mDialogManager = DialogManager(activity)
mDialogManager?.showOkCancelDialog(

View File

@@ -5,8 +5,8 @@ import android.graphics.Bitmap
import android.view.LayoutInflater
import com.chwl.app.databinding.RoomNotifyCpBindBinding
import com.chwl.app.ui.utils.CpUtils
import com.chwl.app.ui.utils.isDestroyed
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
@@ -78,7 +78,9 @@ class RoomNotifyCpBindDialog (private val context: Context) : BaseRoomNotifyDial
fun checkImg() {
if (index == 2){
show()
if (!context.isDestroyed()) {
show()
}
}
}

View File

@@ -1,19 +1,13 @@
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.chwl.core.utils.myutil.MySpanUtils
import com.example.lib_utils.ktx.getColor
import com.example.lib_utils.ktx.getString
import com.opensource.svgaplayer.SVGADrawable
@@ -32,7 +26,7 @@ class RoomNotifyLevelUpDialog (private val context: Context) : BaseRoomNotifyDia
override fun init() {
cpMsgBean?.let {
SpanUtils.with(mBinding.text)
MySpanUtils.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())
@@ -47,6 +41,7 @@ class RoomNotifyLevelUpDialog (private val context: Context) : BaseRoomNotifyDia
shareParser().decodeFromAssets(svga, object : SVGAParser.ParseCompletion {
override fun onComplete(svgaVideoEntity: SVGAVideoEntity) {
val dynamicEntity = SVGADynamicEntity()
// val textPaint = TextPaint()
// textPaint.color = Color.WHITE //字体颜色
// textPaint.textSize = 24f //字体大小

View File

@@ -0,0 +1,82 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.LayoutInflater
import com.chwl.app.R
import com.chwl.app.application.GlobalHandleManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.bean.LuckyBagEntity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.chwl.app.databinding.ViewRoomLuckyBagNotifyBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.redpackage.bean.RedPackageLuckyBag
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.setVis
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.ktx.getString
class RoomNotifyLuckBagDialog(private val context: Context) : BaseRoomNotifyDialog<ViewRoomLuckyBagNotifyBinding>(context) {
override fun createBinding(inflater: LayoutInflater): ViewRoomLuckyBagNotifyBinding {
return ViewRoomLuckyBagNotifyBinding.inflate(inflater)
}
private var mDialogManager: DialogManager? = null
var data: RedPackageLuckyBag? = null
override fun useAutoDismiss(): Boolean {
return false
}
override fun init() {}
private fun ready() {
mBinding.root.setVis(true)
data?.let {
mBinding.avatar.loadAvatar(it.getSendUserAvatar())
mBinding.nick.text = it.getSendUserNick()
if (it.redEnvelopeType == LuckyBagEntity.Type.GIFT) {
mBinding.desc.text = R.string._ver_24_lucky_bag_room_notify_gift.getString()
mBinding.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gift_bg)
} else {
mBinding.desc.text = R.string._ver_24_lucky_bag_room_notify_coin.getString()
mBinding.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gold_bg)
}
}
mBinding.clickView.click {
data?.roomUid?.let { roomUid ->
if (AvRoomDataManager.get().roomUid == roomUid) return@click
val activity = GlobalHandleManager.get().activity ?: return@click
mDialogManager = DialogManager(activity)
mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.changeRoomTips), true, object :
OkCancelDialogListener {
override fun onCancel() {
mDialogManager?.dismissDialog()
}
override fun onOk() {
mDialogManager?.dismissDialog()
AVRoomActivity.start(context, roomUid)
}
})
}
}
startAutoDismiss()
}
override fun showDialog() {
super.showDialog()
ready()
}
}

View File

@@ -9,12 +9,13 @@ 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.common.util.setAutoSizeModel
import com.chwl.library.common.util.setRL
import com.chwl.library.common.util.setString
import com.chwl.library.common.util.setVis
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.UiUtils
/**
* @Author Vance
@@ -31,35 +32,49 @@ class RoomNotifyLuckGiftDialog(private val context: Context) : BaseRoomNotifyDia
override fun init() {
}
override fun useAutoDismiss(): Boolean {
return false
}
private fun ready() {
mBinding.root.setVis(true)
mBinding.bg.setRL()
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
val coinNum = luckyGiftMsgBean?.coins?:0
mBinding.coinNum.setString(coinNum.toString())
mBinding.coinNum.setAutoSizeModel()
mBinding.clickArea.setOnClickListener {
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
mDialogManager = DialogManager(activity)
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)
}
luckyGiftMsgBean?.roomUid?.let { roomUid ->
if (AvRoomDataManager.get().roomUid == roomUid) return@setOnClickListener
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
mDialogManager = DialogManager(activity)
mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.changeRoomTips), true, object : OkCancelDialogListener {
override fun onCancel() {
mDialogManager?.dismissDialog()
}
}
})
override fun onOk() {
mDialogManager?.dismissDialog()
AVRoomActivity.start(context, roomUid)
}
})
}
}
startAutoDismiss()
}
override fun showDialog() {
super.showDialog()
ready()
}
}

View File

@@ -1,6 +1,7 @@
package com.chwl.app.avroom.dialog;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
@@ -14,26 +15,23 @@ 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;
import com.chwl.app.sadmin.RoomSAdminManagerActivity;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.application.GlobalHandleManager;
import com.chwl.app.avroom.activity.CreatePKActivity;
import com.chwl.app.avroom.activity.RoomSettingActivity;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.app.avroom.anotherroompk.RoomPKCreateActivity;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.room_album.RoomAlbumActivity;
import com.chwl.app.avroom.singleroompk.SingleRoomPKCreateActivity;
import com.chwl.library.common.util.Utils;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.room_chat.activity.RoomInviteFansActivity;
import com.chwl.app.sadmin.RoomSAdminManagerActivity;
import com.chwl.app.ui.widget.ButtonItem;
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
import com.chwl.app.ui.widget.recyclerview.layoutmanager.FullyGridLayoutManager;
import com.chwl.app.vip.dialog.VipBroadcastDialog;
import com.chwl.app.room_chat.activity.RoomInviteFansActivity;
import com.chwl.core.XConstants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.im.custom.bean.RoomPkBean;
@@ -55,8 +53,12 @@ import com.chwl.core.utils.CurrentTimeUtils;
import com.chwl.core.utils.net.BeanObserver;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.common.util.Utils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.coorchice.library.utils.LogUtils;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.hjq.toast.ToastUtils;
import org.greenrobot.eventbus.EventBus;
@@ -78,11 +80,12 @@ public class RoomOperationDialog extends BottomSheetDialog {
private OptAdapter optAdapter;
private OnActionListener onActionListener;
private CallBack callBack;
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
public interface CallBack{
public interface CallBack {
void onCLick(int Type);
}
@@ -129,9 +132,11 @@ public class RoomOperationDialog extends BottomSheetDialog {
addSingleRoomPKAction(optAdapter); //个播PK
// addSendBroadcastAction(optAdapter); //发布广播
// addInviteFansOptAdapter(); //邀请粉丝
addRoomMusicPlay(optAdapter); //音乐设置
addVipSendBroadcastAction(optAdapter); //小喇叭
// addRedPacketAction(optAdapter); //红包
addRoomSettingAction(optAdapter); //房间设置
addRoomSettingBackPicAction(optAdapter); //房间背景设置
addGiftEffectAction(optAdapter); //礼物特效
// addOpenOrClosePublicScreenAction(optAdapter); //公屏开关
// addRedPackageSwitch(); // 开关红包
@@ -172,7 +177,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
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));
@@ -189,7 +193,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
/**
* 跨房PK
* 跨房PK
*
* @param optAdapter
*/
@@ -215,7 +219,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
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));
@@ -268,7 +271,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
String finalStr = str;
optAdapter.addData(new OptAction(icon, str, () -> {
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
SingleRoomPKModel.INSTANCE
@@ -574,6 +576,27 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
}
/**
* 房间背景设置
*
* @param optAdapter
*/
private void addRoomSettingBackPicAction(OptAdapter optAdapter) {
if (SuperAdminUtil.isSuperAdmin()) {
return;
}
if (AvRoomDataManager.get().isManager()) {
optAdapter.addData(new OptAction(R.drawable.icon_room_bg, getContext().getResources().getString(R.string.roomBg), () -> {
Activity activity = GlobalHandleManager.get().getActivity();
if (activity != null) {
RoomBgSetDialog roomBgSetDialog = new RoomBgSetDialog();
roomBgSetDialog.show(activity);
}
}));
}
}
/**
* 房间类型切换
*
@@ -627,6 +650,31 @@ public class RoomOperationDialog extends BottomSheetDialog {
// ));
}
/**
* 音乐播放设置
*/
private void addRoomMusicPlay(OptAdapter optAdapter) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) {
return;
}
boolean isOnMic = AvRoomDataManager.get().isOnMic(AuthModel.get().getCurrentUid());
if (!isOnMic) return;
boolean isGameRoom = AvRoomDataManager.get().isOpenGame();
if (isGameRoom) return;
optAdapter.addData(new OptAction(R.drawable.icon_room_operation_music,
ResUtil.getString(R.string.layout_dialog_voice_seek_02),
() -> {
if (onActionListener != null) {
onActionListener.onActionClick(R.drawable.icon_room_operation_music,R.drawable.icon_room_operation_music);
}
}
));
}
/**
* 小喇叭
*/
@@ -635,6 +683,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
if (roomInfo == null) {
return;
}
if ( UserModel.get().getCacheLoginUserInfo() != null && UserModel.get().getCacheLoginUserInfo().isSuperAdmin()) return;
optAdapter.addData(new OptAction(R.drawable.icon_room_vip_send_broadcast,
ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_033),
() -> VipBroadcastDialog.newInstance().show(context)
@@ -652,6 +701,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
if (!AvRoomDataManager.get().isManager()) {
return;
}
if ( UserModel.get().getCacheLoginUserInfo() != null && UserModel.get().getCacheLoginUserInfo().isSuperAdmin()) return;
optAdapter.addData(new OptAction(R.drawable.icon_room_clean_screen,
ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_034),
() -> new DialogManager(context)
@@ -727,7 +777,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
public interface OnActionListener {
void onRedPackageAction();
default void onRedPackageAction(){};
default void onActionClick(int type,Object data){};
}

View File

@@ -19,10 +19,12 @@ import android.view.ViewStub
import android.widget.EditText
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.annotation.CallSuper
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
@@ -46,15 +48,18 @@ import com.chwl.app.avroom.dialog.DatingVipRuleDialog
import com.chwl.app.avroom.dialog.RoomBoomInfoDialog
import com.chwl.app.avroom.dialog.RoomGameListDialog
import com.chwl.app.avroom.dialog.RoomGameplayDialog
import com.chwl.app.avroom.dialog.RoomLuckyBagDialog
import com.chwl.app.avroom.dialog.RoomOperationDialog
import com.chwl.app.avroom.presenter.BaseRoomPresenter
import com.chwl.app.avroom.room_album.RoomAlbumModel
import com.chwl.app.avroom.view.IBaseRoomView
import com.chwl.app.avroom.widget.BottomView
import com.chwl.app.avroom.widget.LuckyBagBtn
import com.chwl.app.avroom.widget.MessageView
import com.chwl.app.avroom.widget.MicroView
import com.chwl.app.base.BaseMvpActivity
import com.chwl.app.base.BaseMvpFragment
import com.chwl.app.base.PhotoPickActivity
import com.chwl.app.event.OpenRoomIntroEvent
import com.chwl.app.friend.view.SelectFriendActivity
import com.chwl.app.home.adapter.RoomActAdapter
@@ -79,6 +84,8 @@ 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.utils.RoomBoomManager
import com.chwl.app.utils.RoomHelperManager
import com.chwl.app.vip.util.VipHelper
import com.chwl.core.Constants
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
@@ -91,7 +98,6 @@ import com.chwl.core.gift.bean.BoomMsgAwardList
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.gift.bean.BoomMsgExpPushBean
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.NotifyEvent
import com.chwl.core.gift.event.RoomFreeGiftEvent
@@ -135,9 +141,15 @@ 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.myutil.MyUtil
import com.chwl.core.utils.net.VipLevelNotEnoughException
import com.chwl.library.common.util.ClickUtils.click
import com.chwl.library.common.util.LimitClickUtils
import com.chwl.library.common.util.doLog
import com.chwl.library.common.util.doToast
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.postSafe
import com.chwl.library.common.util.setMargin
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
@@ -183,15 +195,28 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
protected lateinit var inputLayout: RelativeLayout
protected lateinit var inputEdit: EditText
protected lateinit var inputSend: ImageView
protected lateinit var inputSendImg: ImageView
protected lateinit var microView: MicroView
protected var mMusicPlayIconView: ImageView? = null
protected lateinit var btnIvConfigEntrance: ImageView
protected lateinit var btnIvgame: ImageView
protected lateinit var floatBtnLayout: LinearLayout
protected lateinit var floatBtnLayoutFold: LinearLayout
protected lateinit var btnFold: ImageView
protected lateinit var boomLayout: FrameLayout
protected lateinit var boomIcon: ImageView
protected lateinit var boomProMax: ImageView
protected lateinit var boomPro: ImageView
protected lateinit var luckyBagBtn: LuckyBagBtn
protected lateinit var ivTeamPk: ImageView
protected lateinit var btnIvConfigEntrance: ImageView
protected lateinit var btnIvgame: ImageView
protected lateinit var mIvQueuingMicro: ImageView
//---连击时间 需要透明化的view
protected var mPlayTogether:View? = null
protected var mLayoutDragon:View? = null
private var musicPlayerView: MusicPlayerView? = null
private var mVsMusicPlayer: ViewStub? = null
@@ -251,7 +276,10 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
false
}
inputSend = mView.findViewById(R.id.input_send)
inputSendImg = mView.findViewById(R.id.input_sendImg)
microView = mView.findViewById(R.id.micro_view)
mMusicPlayIconView = mView.findViewById(R.id.iv_music)
mVsMusicPlayer = mView.findViewById(R.id.vs_music_player)
messageView.setClickConsumer {
if (!TextUtils.isEmpty(it) && it != "0") {
@@ -269,43 +297,10 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
})
btnIvConfigEntrance = mView.findViewById(R.id.iv_config_entrance)
btnIvgame = mView.findViewById(R.id.iv_game)
initFloatBtnLayout()
boomLayout = mView.findViewById(R.id.boomLayout)
boomIcon = mView.findViewById(R.id.boomIcon)
boomProMax = mView.findViewById(R.id.boomProMax)
boomPro = mView.findViewById(R.id.boomPro)
boomIcon.post {
boomIcon.rotation = -30f
}
boomLayout.setOnClickListener {
mBoomInfoDialog = RoomBoomInfoDialog().apply {
roomUid = AvRoomDataManager.get().roomUid
}
mBoomInfoDialog?.setOnDismissListener {
mBoomInfoDialog = null
}
mBoomInfoDialog?.mCallBack = object : RoomBoomInfoDialog.CallBack {
override fun onCurrBoomInfo(boomInfo: BoomInfo) {
onExpPush(BoomMsgExpPushBean().apply {
speed = boomInfo.speed
level = boomInfo.level
pic = boomInfo.pic
})
}
override fun onClick(type: Int, data: Any) {
mBoomInfoDialog?.dismiss()
onSendGiftBtnClick()
}
}
mBoomInfoDialog?.show(requireContext())
}
mLayoutDragon = mView.findViewById(R.id.layout_dragon)
mPlayTogether = mView.findViewById(R.id.play_together)
}
@@ -384,6 +379,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
override fun onSetListener() {
bottomView.setMagicBtnEnable(true)
inputSend.setOnClickListener(this)
inputSendImg.setOnClickListener(this)
inputLayout.setOnTouchListener { _: View?, _: MotionEvent? ->
inputEdit.clearFocus()
inputLayout.visibility = View.GONE
@@ -411,7 +407,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
openOrCloseGiftValue(true)
updateView()
updateMicBtn()
AudioEngineManager.get().isNotRecord = false
AudioEngineManager.get().isNotRecord = AudioEngineManager.get().isNotRecord
microView.setOnMicroItemClickListener(this)
mDisposable = IMNetEaseManager.get().chatRoomEventObservable
.subscribe { onReceiveRoomEvent(it) }
@@ -451,58 +447,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
requestGamesData()
}
private fun initRoomBoom() {
AvRoomModel.get().getRoomBoomInfo(AvRoomDataManager.get().roomUid)
.doOnSuccess { boomInfo: RoomBoomInfo ->
fun initRoomBoom() {
LogUtils.d("roomLog RoomBoomManager initRoomBoom() roomUid = "+AvRoomDataManager.get().roomUid + " RoomBoomManager.mRoomUid = "+RoomBoomManager.mRoomUid)
if (RoomBoomManager.mRoomUid == -1L) return
checkBoomInfo()
upDateBoomExp()
LogUtils.d("roomLog RoomBoomManager initRoomBoom() end")
if (boomInfo.roomBoomSignVoList.isVerify()) {
boomInfo.roomBoomSignVoList.forEachIndexed { index, roomBoomInfoSign ->
RoomBoomManager.addAnim(BoomMsgAnimBean().apply {
countDownUrl = roomBoomInfoSign.countDownVapUrl
endUrl = roomBoomInfoSign.endVapUrl
level = roomBoomInfoSign.level
})
}
}
if (boomInfo.prizes.isVerify()) {
val toMap = boomInfo.prizes.groupBy { it.level }.toMap()
toMap.forEach { t, u ->
RoomBoomManager.addAward(BoomMsgAwardList().apply {
list = u
})
}
}
}
.doOnError {
LogUtils.d("")
}
.compose(bindToLifecycle())
.subscribe()
AvRoomModel.get().getBoomInfo(AvRoomDataManager.get().roomUid)
.doOnSuccess {
it.forEach { info->
if (info.currLevel) {
mBoomExp = BoomMsgExpPushBean().apply {
level = info.level
speed = info.speed
pic = info.pic
}
boomLayout.setVis(true)
boomIcon.loadImage(info.pic)
boomProMax.post {
boomPro.setViewWH(width = (boomProMax.width * (info.speed.toFloat() / 100)).toInt(), isDP = false)
}
}
}
}
.doOnError {
LogUtils.d(""+it?.message)
}
.compose(bindToLifecycle())
.subscribe()
}
@SuppressLint("CheckResult")
@@ -546,6 +497,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
RoomEvent.ROOM_INFO_UPDATE -> {
// "收到房间 ROOM_INFO_UPDATE 消息, 开始 跟新房间信息和UI ".doLog()
Logger.i(ResUtil.getString(R.string.avroom_fragment_baseroomfragment_01))
addOpenDatingTips() //一定要放在updateView之前!!!
updateScreen()
@@ -616,6 +568,10 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
RoomEvent.ROOM_CLEAN_SCREEN -> messageView.clear()
RoomEvent.MSG_BOOM -> onBoomAboutMsg(roomEvent);
RoomEvent.MSG_SELF_ENTER_ROOM -> initRoomBoom();
RoomEvent.MSG_ROOM_LUCKY_BAG_ADD -> onLuckyBagAdd(roomEvent);
}
}
@@ -854,9 +810,16 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
override fun onDestroyView() {
if (giftDialog != null) {
giftDialog?.setOnDismissListener(null)
giftDialog?.dismiss()
giftDialog = null
}
luckyBagBtn?.doDetach()
super.onDestroyView()
releaseView()
unregisterWidgets()
RoomBoomManager.mRoomUid = -1L
mBoomInfoDialog?.dismiss()
mBoomInfoDialog = null
}
@@ -901,16 +864,31 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
R.id.iv_game -> {
val dialog = RoomGameListDialog();
dialog.code = hashCode()
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
dialog.listener = object : RoomGameListDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
override fun onShowLeaderccGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showLeaderccGame(url, config)
}
override fun onShowLuckyBag() {
if (UserModel.get().cacheLoginUserInfo?.isRechargeUser == true) {
R.string._ver_23_Lucky_bag_Limit_tips.doToast()
return
}
RoomLuckyBagDialog().show(context)
}
}
dialog.show(childFragmentManager, "GAME_LIST")
}
R.id.input_send -> {
sendMsg()
}
R.id.input_sendImg -> {
sendImgMsg()
}
R.id.layout_room_rank -> {
DialogWebViewActivity.start(mContext, UriProvider.getRoomRanking())
}
@@ -958,6 +936,33 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
}
//todo do - 发送图片消息
private fun sendImgMsg() {
UserModel.get().cacheLoginUserInfo?.let {
UserModel.get().getUserInfoFromServerUpdate(it.uid,true)
.compose(bindToLifecycle())
.doOnSuccess { user->
if (VipHelper.roomPicScreen(user)) {
activity?.let { act->
try {
inputEdit.clearFocus()
inputLayout.visibility = View.GONE
KeyBoardUtils.hideKeyBoard(activity, inputEdit)
PhotoPickActivity.startImg(act)
} catch (e: Exception) {
}
}
} else {
dialogManager?.showOkDialog(R.string._ver_24_sentImgVipError.getString())
}
}
.doOnError {
it?.message?.doToast()
}
.subscribe()
}
}
@SuppressLint("CheckResult")
fun sendMsg(msg: String) {
if (!AuthModel.get().isImLogin) {
@@ -1041,14 +1046,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
if (throwable != null) {
toast(throwable.message)
callback.onFail()
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_CANCEL))
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_COMBO_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()
}
}
@@ -1160,6 +1159,17 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
) {
buttonItems.add(buttonItem1)
}
// if (AvRoomDataManager.get().isSingleRoom) {
// if (AvRoomDataManager.get().isRoomOwner && !AvRoomDataManager.get().isDatingVipMic(micPosition)) {
// buttonItems.add(buttonItem1)
// }
// } else {
// if ((AvRoomDataManager.get().isRoomOwner || AvRoomDataManager.get().isRoomAdmin) && !AvRoomDataManager.get().isDatingVipMic(micPosition)){
// buttonItems.add(buttonItem1)
// }
// }
}
if (!AvRoomDataManager.get().isOpenPKMode) {
//超管只有鎖麥操作
@@ -1210,9 +1220,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
override fun onUpMicBtnClick(position: Int, chatRoomMember: MicMemberInfo?) {
if (AvRoomDataManager.get().isDatingVipMic(position) &&
!AvRoomDataManager.get().isDatingVip(AuthModel.get().currentUid)
) {
if (MyUtil.upMicIng) {
"上麦 , 点击频繁限制".doLog()
R.string.avroom_dialog_micqueuedialog_01.doToast()
return
}
if (AvRoomDataManager.get().isDatingVipMic(position) && !AvRoomDataManager.get().isDatingVip(AuthModel.get().currentUid)) {
DatingVipRuleDialog.newInstance(mContext).show()
} else {
mvpPresenter?.microPhonePositionClick(position, chatRoomMember)
@@ -1269,19 +1283,16 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
if (micPosition == Int.MIN_VALUE) return
//抱人上麥
mvpPresenter?.inviteMicroPhone(
BaseInfo(account, nick),
micPosition ?: Int.MIN_VALUE
)
mvpPresenter?.inviteMicroPhone(BaseInfo(account, nick), micPosition ?: Int.MIN_VALUE)
}
} else if (requestCode == SelectFriendActivity.CODE_REQUEST_TO_SHARE_ROOM &&
resultCode == Activity.RESULT_OK
) {
} else if (requestCode == SelectFriendActivity.CODE_REQUEST_TO_SHARE_ROOM && resultCode == Activity.RESULT_OK) {
val targetUid = data?.getStringExtra(SelectFriendActivity.EXTRA_TARGET_UID)
val sessionType =
data?.getIntExtra(SelectFriendActivity.EXTRA_SESSION_TYPE, SessionType.P2P)
?: SessionType.P2P
IMNetEaseManager.get().sendSharingRoomMessage(sessionType, targetUid)
}else if (requestCode == PhotoPickActivity.PICK_ACT_RESULT && resultCode == Activity.RESULT_OK) {
RoomHelperManager.sendPicMsg(this@BaseRoomFragment,data)
}
}
@@ -1434,10 +1445,42 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
if (giftDialog?.isShowing != true && !requireActivity().isFinishing) {
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_POINT))
giftDialog?.show()
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_DIALOG_DISMISS))
if (activity != null && activity?.isFinishing == false && activity?.isDestroyed == false && this@BaseRoomFragment.isAdded){
if (AvRoomDataManager.get().hasAvRoomAct) {
giftDialog?.show()
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onGiftComboEvent(event: GiftComboEvent) {
if (event.action == GiftComboEvent.Action.ACT_GIFT_SEND_SUCCESS) {
//展示连击view ,隐藏其他view
setComboViewVis(false)
} else if (event.action == GiftComboEvent.Action.ACT_GIFT_DIALOG_SHOW) {
//隐藏连击view ,展示其他view
setComboViewVis(true)
}
}
private fun setComboViewVis(vis: Boolean) {
floatBtnLayout.alpha = if (vis) 1f else 0f //bottom_view
bottomView.alpha = if (vis) 1f else 0f //bottom_view
inputLayout.alpha = if (vis) 1f else 0f //input_layout
mLayoutDragon?.alpha = if (vis) 1f else 0f //layout_dragon
mPlayTogether?.alpha = if (vis) 1f else 0f //play_together
floatBtnLayout.isEnabled = vis //bottom_view
bottomView.isEnabled = vis //bottom_view
inputLayout.isEnabled = vis //input_layout
mLayoutDragon?.isEnabled = vis //layout_dragon
mPlayTogether?.isEnabled = vis //play_together
}
/**
* 開啟相親模式管理增加一條公屏提示
*/
@@ -1575,6 +1618,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
override fun onMoreBtnClick() {
val dialog = RoomOperationDialog(mContext)
dialog?.setOnActionListener(object : RoomOperationDialog.OnActionListener {
override fun onActionClick(type: Int, data: Any?) {
if (type == R.drawable.icon_room_operation_music) {
mMusicPlayIconView?.performClick()
}
}
})
dialog.show()
}
@@ -1669,29 +1719,16 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : 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 -> {}
mMusicPlayIconView?.let {
view.linkIconView(it,it)
}
}
//横幅相关消息
//通用消息
@Subscribe(threadMode = ThreadMode.MAIN)
fun onNotifyEvent(event: NotifyEvent) {
when (event.action) {
@@ -1708,7 +1745,11 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
val game = GameUtil.findGame(gameId.toLong(), gameplayList!!)
if (game != null) {
GameUtil.startGame(game){url, config->
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
if (game.isLeadercc()) {
(activity as? AVRoomActivity)?.showLeaderccGame(url, config)
}else if (game.isBaiShunGame()) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
}
}
@@ -1762,7 +1803,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
if (configModel == null) {
btnIvConfigEntrance.setVisibility(View.GONE)
} else {
if (configModel.icon1Url == null) {
if (configModel.icon1Url == null || TextUtils.isEmpty(configModel.icon1Url)) {
btnIvConfigEntrance.setVisibility(View.GONE)
} else {
ImageLoadUtils.loadAvatar(configModel.icon1Url, btnIvConfigEntrance)
@@ -1770,7 +1811,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
if (configModel.icon2Url != null) {
ImageLoadUtils.loadAvatar(configModel.icon2Url, btnIvgame)
ImageLoadUtils.loadImage( btnIvgame,configModel.icon2Url)
}
}
@@ -1811,14 +1852,16 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
var mBoomExp: BoomMsgExpPushBean?=null
//更新boom进度
private fun onExpPush(expPushBean: BoomMsgExpPushBean) {
private fun onExpPush(expPushBean: BoomMsgExpPushBean,isOverride:Boolean=false) {
LogUtils.d(" RoomBoomManager BaseRoom onExpPush() indexLevel=${mBoomExp?.level} expPushLevel=${expPushBean.level} indexSpeed=${mBoomExp?.speed} expPushSpeed=${expPushBean.speed} ")
mBoomInfoDialog?.setPro(expPushBean.speed,expPushBean.level)
if (mBoomExp != null) {
if (mBoomExp!!.level > expPushBean.level) return
if (mBoomExp!!.speed >= expPushBean.speed) return
if (!isOverride){
if (mBoomExp != null) {
if (mBoomExp!!.level > expPushBean.level) return
if (mBoomExp!!.level == expPushBean.level && mBoomExp!!.speed >= expPushBean.speed) return
}
}
mBoomExp = expPushBean
@@ -1829,6 +1872,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
LogUtils.d(" RoomBoomManager BaseRoom onExpPush() width = $width")
boomPro.setViewWH(width = width, isDP = false)
}
boomPro.scaleType = if (expPushBean.speed < 90) ImageView.ScaleType.MATRIX else ImageView.ScaleType.FIT_XY
}
//boom中奖弹窗
@@ -1846,8 +1890,205 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
endUrl = dialogBean.endVapUrl.trim()
level = dialogBean.level
})
upDateBoomExp()
}
}
private fun showBoomInfoDialog() {
mBoomInfoDialog = RoomBoomInfoDialog().apply {
roomUid = AvRoomDataManager.get().roomUid
}
mBoomInfoDialog?.setOnDismissListener {
mBoomInfoDialog = null
}
mBoomInfoDialog?.mCallBack = object : RoomBoomInfoDialog.CallBack {
override fun onCurrBoomInfo(boomInfo: BoomInfo) {
onExpPush(BoomMsgExpPushBean().apply {
speed = boomInfo.speed
level = boomInfo.level
pic = boomInfo.pic
},true)
}
override fun onClick(type: Int, data: Any) {
mBoomInfoDialog?.dismiss()
onSendGiftBtnClick()
}
}
context?.let {
mBoomInfoDialog?.show(it)
}
}
private fun upDateBoomExp(){
AvRoomModel.get().getBoomInfo(AvRoomDataManager.get().roomUid)
.compose(bindToLifecycle())
.doOnSuccess {
it.forEach { info->
if (info.currLevel) {
mBoomExp = BoomMsgExpPushBean().apply {
level = info.level
speed = info.speed
pic = info.pic
}
boomLayout.setVis(true)
boomIcon.loadImage(info.pic)
boomProMax.post {
boomPro.setViewWH(width = (boomProMax.width * (info.speed.toFloat() / 100)).toInt(), isDP = false)
}
boomPro.scaleType = if (info.speed < 90) ImageView.ScaleType.MATRIX else ImageView.ScaleType.FIT_XY
}
}
}
.doOnError {
LogUtils.d(""+it?.message)
}
.subscribe()
}
private fun checkBoomInfo() {
checkLuckyBagInfo()
"checkBoomInfo".doLog()
RoomBoomManager.clearQueue()
AvRoomModel.get().getRoomBoomInfo(AvRoomDataManager.get().roomUid)
.compose(bindToLifecycle())
.doOnSuccess { boomInfo: RoomBoomInfo ->
if (boomInfo.roomBoomSignVoList.isVerify()) {
boomInfo.roomBoomSignVoList.forEachIndexed { index, roomBoomInfoSign ->
RoomBoomManager.addAnim(BoomMsgAnimBean().apply {
countDownUrl = roomBoomInfoSign.countDownVapUrl
endUrl = roomBoomInfoSign.endVapUrl
level = roomBoomInfoSign.level
})
}
} else {
return@doOnSuccess
}
if (boomInfo.prizes.isVerify()) {
val toMap = boomInfo.prizes.groupBy { it.level }.toMap()
toMap.forEach {
RoomBoomManager.addAward(BoomMsgAwardList().apply {
list = it.value
})
}
}
}
.doOnError {
LogUtils.d("")
}
.subscribe()
}
//幸运礼包推送
private fun onLuckyBagAdd(roomEvent: RoomEvent) {
luckyBagBtn?.postSafe(200) {
RoomHelperManager.onLuckyBagAdd(roomEvent,luckyBagBtn)
}
}
private fun checkLuckyBagInfo() {
luckyBagBtn?.postSafe(200){
"红包信息 = checkLuckyBagInfo = $isAdded".doLog()
RoomHelperManager.getLuckyBagInfo {
luckyBagBtn?.postSafe {
"红包信息 = isAdded = $isAdded".doLog()
if (isAdded) {
"红包信息 = $it".doLog()
if (it.redEnvelopeListVoList.isVerify()) {
luckyBagBtn.setNewData(it.redEnvelopeListVoList)
}
}
}
}
}
}
public fun initFloatBtnLayout() {
floatBtnLayout = mView.findViewById(R.id.floatBtnLayout)
floatBtnLayoutFold = floatBtnLayout.findViewById(R.id.floatBtnLayoutFold)
btnFold = floatBtnLayout.findViewById(R.id.btnFold)
boomLayout = floatBtnLayout.findViewById(R.id.boomLayout)
boomIcon = floatBtnLayout.findViewById(R.id.boomIcon)
boomProMax = floatBtnLayout.findViewById(R.id.boomProMax)
boomPro = floatBtnLayout.findViewById(R.id.boomPro)
luckyBagBtn = floatBtnLayout.findViewById(R.id.luckyBagBtn)
ivTeamPk = floatBtnLayout.findViewById(R.id.iv_team_pk)
btnIvConfigEntrance = floatBtnLayout.findViewById(R.id.iv_config_entrance)
btnIvgame = floatBtnLayout.findViewById(R.id.iv_game)
mIvQueuingMicro = floatBtnLayout.findViewById(R.id.iv_queuing_micro)
boomIcon.post {
boomIcon.rotation = -30f
}
boomLayout.setOnClickListener {
showBoomInfoDialog()
}
boomLayout.postSafe(3000){
upDateBoomExp()
requestGamesData()
checkLuckyBagInfo()
}
if (AvRoomDataManager.get().isGameRoom) {
btnIvgame.setVis(false)
mIvQueuingMicro?.setVis(false)
} else if (AvRoomDataManager.get().isSingleRoom) {
ivTeamPk?.setVis(false)
mIvQueuingMicro?.setVis(false)
}
btnFold.setVis((AvRoomDataManager.get().is19Room || AvRoomDataManager.get().is20Room|| AvRoomDataManager.get().isGameRoom))
floatBtnLayoutFold.setViewWH(
height = if (btnFold.isVisible) 1 else ViewGroup.LayoutParams.WRAP_CONTENT,
isDP = false
)
btnFold.tag = btnFold.isVisible
btnFold.click {
val tag = btnFold.tag
if (tag is Boolean) {
if (tag) {
btnFold.tag = false
btnFold.setImageResource(R.drawable.icon_fold_down)
floatBtnLayoutFold.setViewWH(
height = ViewGroup.LayoutParams.WRAP_CONTENT,
isDP = false
)
} else {
btnFold.tag = true
btnFold.setImageResource(R.drawable.icon_fold_up)
floatBtnLayoutFold.setViewWH(height = 1, isDP = false)
}
}
}
bottomView.post {
floatBtnLayout.setMargin(bottom = bottomView.height, isDP = false)
setComboViewVis(true)
}
mIvQueuingMicro?.setOnClickListener(this)
btnIvgame?.setOnClickListener(this)
btnIvConfigEntrance?.setOnClickListener(this)
ivTeamPk?.setOnClickListener(this)
}
}

View File

@@ -6,10 +6,7 @@ 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;
@@ -21,47 +18,36 @@ 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.databinding.LayoutRoomNotifyLuckyGiftTipBinding;
import com.chwl.app.utils.GiftAnimUtil;
import com.chwl.app.utils.NumberUtils;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.app.utils.RoomNotifyDialogManager;
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;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
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.RoomTitleEditActivity;
import com.chwl.app.avroom.dialog.ExitRoomPopupWindow;
import com.chwl.app.avroom.dialog.RoomBgSetDialog;
import com.chwl.app.avroom.widget.GiftV2View;
import com.chwl.app.avroom.widget.RoomEffectView;
import com.chwl.app.base.BaseFragment;
import com.chwl.app.databinding.FragmentChatroomGameMainBinding;
import com.chwl.app.notify.GlobalNotifyManager;
import com.chwl.app.ui.utils.ImageLoadKt;
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.app.utils.RegexUtil;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.app.utils.RoomNotifyDialogManager;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.gift.bean.CpMsgBean;
import com.chwl.core.gift.bean.GiftMultiReceiverInfo;
import com.chwl.core.gift.bean.GiftReceiveInfo;
import com.chwl.core.gift.bean.LuckyBagGifts;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.gift.bean.MultiGiftReceiveInfo;
import com.chwl.core.gift.bean.RoomBgChangeBean;
import com.chwl.core.gift.bean.RoomLevelChangeBean;
import com.chwl.core.gift.bean.RoomNotifyDialogBean;
import com.chwl.core.gift.event.GiftComboEvent;
import com.chwl.core.gift.toolbox.GiftToolbox;
import com.chwl.core.home.event.FollowRoomEvent;
import com.chwl.core.home.model.CollectionRoomModel;
import com.chwl.core.im.custom.bean.CustomAttachment;
@@ -71,21 +57,34 @@ import com.chwl.core.magic.bean.MultiMagicReceivedInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.noble.bean.AllServiceGiftProtocol;
import com.chwl.core.praise.PraiseModel;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.queuing_mic.event.HasAnimationEffect;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.user.UserModel;
import com.chwl.core.user.bean.UserInfo;
import com.chwl.core.utils.ComboUtil;
import com.chwl.core.utils.CoreLogger;
import com.chwl.library.common.util.OtherExtKt;
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.example.lib_utils.UiUtils;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.opensource.svgaplayer.SVGAImageView;
import com.trello.rxlifecycle3.android.FragmentEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Field;
import java.util.List;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -107,7 +106,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
// private AppCompatImageView mIvGoodNumber;
private ImageView roomMore;
// private ImageView ivRoomShare;
// private ImageView ivRoomShare;
private GiftV2View giftView;
private ViewStub mVsGift2View;
private RoomEffectView mRoomEffectView;
@@ -116,7 +115,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
private String[] bgPicture = new String[]{""};
private UserInfo mUserInfo;
private FragmentChatroomGameMainBinding gameMainBinding;
public FragmentChatroomGameMainBinding gameMainBinding;
//收藏房间
private String FOLLOW_ROOM_TYPE = "";
@@ -243,6 +242,8 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
public void setRoomBg(RoomInfo roomInfo) {
if (svgaRoomBg == null) return;
AVRoomActivity.setBackBg(mContext, roomInfo, svgaRoomBg, bgPicture);
OtherExtKt.setVis(gameMainBinding.roomLevelIcon,OtherExtKt.isVerify(roomInfo.getRoomLevelIcon()),false);
ImageLoadKt.loadImage(gameMainBinding.roomLevelIcon,roomInfo.getRoomLevelIcon());
}
@@ -253,54 +254,77 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
IMNetEaseManager.get().getChatRoomEventObservable()
.compose(bindToLifecycle())
.subscribe(roomEvent -> {
if (roomEvent == null) return;
int event = roomEvent.getEvent();
switch (event) {
case RoomEvent.ENTER_ROOM:
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
updateOnlineNumberView(AvRoomDataManager.get().mCurrentRoomInfo.onlineNum);
.doOnNext(roomEvent -> {
OtherExtKt.postSafe(gameMainBinding.getRoot(), () -> {
try {
if (roomEvent == null) return null;
int event = roomEvent.getEvent();
// OtherExtKt.doLog("房间消息 接收到房间消息 - "+event + " == 34 ?");
switch (event) {
case RoomEvent.ENTER_ROOM:
try {
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
updateOnlineNumberView(AvRoomDataManager.get().mCurrentRoomInfo.onlineNum);
}
addTipMsg();
} catch (Exception e) {
OtherExtKt.doLog("房间消息 接收到房间消息=1 报错 - "+e.getMessage());
}
case RoomEvent.ROOM_INFO_UPDATE:
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
break;
case RoomEvent.RECEIVE_NORMALE_GIFT://普通
onReceiveGiftMsg(roomEvent.getGiftReceiveInfo());
break;
case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE:// 全服普通
onReceiveGiftMsgAllService(roomEvent.getGiftReceiveInfo());
case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE_NOTIFY:// 全服飘屏
onReceiveGiftMsgAllServiceNotify(roomEvent.getAnyData());
break;
case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人
onReceiveMultiGiftMsg(roomEvent.getGiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVE_ALL_MIC__NORMALEI_GIFT://普通全麦
onReceiveAllMicGiftMsg(roomEvent.getMultiGiftReceiveInfo());
break;
//福袋礼物
case RoomEvent.RECEIVE_LUCKY_GIFT:
case RoomEvent.RECEIVE_MULTI_LUCKY_GIFT:
case RoomEvent.RECEIVE_ALL_MIC_LUCKY_GIFT:
onReceiveLuckyGiftToMultiMsg(roomEvent.getLuckygiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVED_SINGLE_MAGIC:
onReceiveMagicMsg(roomEvent.getMagicReceivedInfo());
break;
case RoomEvent.RECEIVED_ALL_MIC_MAGIC:
onReceiveMultiMagicMsg(roomEvent.getMultiMagicReceivedInfo());
break;
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);
case RoomEvent.MSG_ROOM_BG_CHANGE:
onRoomBgChange(roomEvent);
case RoomEvent.MSG_ROOM_LEVEL_CHANGE:
onRoomLevelChange(roomEvent);
break;
default:
break;
}
addTipMsg();
case RoomEvent.ROOM_INFO_UPDATE:
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
break;
case RoomEvent.RECEIVE_NORMALE_GIFT://普通
onReceiveGiftMsg(roomEvent.getGiftReceiveInfo());
break;
case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人
onReceiveMultiGiftMsg(roomEvent.getGiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVE_ALL_MIC__NORMALEI_GIFT://普通全麦
onReceiveAllMicGiftMsg(roomEvent.getMultiGiftReceiveInfo());
break;
//福袋礼物
case RoomEvent.RECEIVE_LUCKY_GIFT:
case RoomEvent.RECEIVE_MULTI_LUCKY_GIFT:
case RoomEvent.RECEIVE_ALL_MIC_LUCKY_GIFT:
onReceiveLuckyGiftToMultiMsg(roomEvent.getLuckygiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVED_SINGLE_MAGIC:
onReceiveMagicMsg(roomEvent.getMagicReceivedInfo());
break;
case RoomEvent.RECEIVED_ALL_MIC_MAGIC:
onReceiveMultiMagicMsg(roomEvent.getMultiMagicReceivedInfo());
break;
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;
}
});
}
} catch (Exception e) {
OtherExtKt.doLog("房间消息 报错 "+roomEvent.getEvent()+" "+e.getMessage());
}
return null;
});
})
.subscribe();
}
/**
@@ -401,6 +425,16 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
tempFragment = RevelryRoomFragment.Companion.newInstance();
}
break;
case RoomInfo.ROOMTYPE_19_ROOM:
if (!(tempFragment instanceof Room19Fragment)) {
tempFragment = Room19Fragment.Companion.newInstance();
}
break;
case RoomInfo.ROOMTYPE_20_ROOM:
if (!(tempFragment instanceof Room20Fragment)) {
tempFragment = Room20Fragment.Companion.newInstance();
}
break;
default:
if (tempFragment == null || !(tempFragment.getClass().getSimpleName().equals(HomePartyRoomFragment.class.getSimpleName()))) {
tempFragment = HomePartyRoomFragment.newInstance();
@@ -448,13 +482,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
gameMainBinding.setHasAnimationEffect(AvRoomDataManager.get().mIsNeedGiftEffect);
}
/**
* 更新特效开关提示
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void updateHasAnimation(HasAnimationEffect event) {
updateHasAnimationEffect();
}
@Override
public void onClick(View v) {
@@ -464,7 +491,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
break;
case R.id.room_more:
int gravity = Gravity.END;
if(UiUtils.INSTANCE.isRtl(requireContext())){
if (UiUtils.INSTANCE.isRtl(requireContext())) {
gravity = Gravity.START;
}
ExitRoomPopupWindow.newInstance((AVRoomActivity) requireActivity())
@@ -514,18 +541,12 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFollowRoomEvent(FollowRoomEvent event) {
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
}
@Override
public void onDestroy() {
luckyGiftTipPool.clear();
handler.removeCallbacksAndMessages(null);
RoomNotifyDialogManager.INSTANCE. clear();
RoomBoomManager.INSTANCE. clear();
RoomNotifyDialogManager.INSTANCE.clear();
RoomBoomManager.INSTANCE.clear();
if (giftView != null) {
giftView.release();
@@ -539,6 +560,15 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
roomFragment.onActivityResult(requestCode, resultCode, data);
List<Fragment> fragments = getParentFragmentManager().getFragments();
if (ListUtils.isNotEmpty(fragments)) {
for (Fragment fragment : fragments) {
if (fragment instanceof RoomBgSetDialog) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
}
public void onRoomOnlineNumberSuccess(int onlineNumber) {
@@ -546,18 +576,37 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
/**
* 普通
*/
private void onReceiveGiftMsg(GiftReceiveInfo giftReceiveInfo) {
if (giftReceiveInfo == null || !isResumed()) return;
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(giftReceiveInfo));
if (giftReceiveInfo.getGift() != null && giftReceiveInfo.getGift().getNotifyFull() == 1) return;
//全服礼物 的 特效播放交给 onReceiveGiftMsgAllService() 35消息来处理 , 但是连击旧消息处理
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftMsg(giftReceiveInfo);
}
/**
* 普通多人
*/
private void onReceiveMultiGiftMsg(GiftMultiReceiverInfo giftMultiReceiverInfo) {
if (giftMultiReceiverInfo == null || !isResumed()) return;
gameMainBinding.giftComboLayout.onRoomCustomMsg(giftMultiReceiverInfo);
if (giftMultiReceiverInfo.getGift() != null && giftMultiReceiverInfo.getGift().getNotifyFull() == 1) return;
//全服礼物 的 特效播放交给 onReceiveGiftMsgAllService() 35消息来处理 , 但是连击旧消息处理
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftToMultiMsg(giftMultiReceiverInfo);
giftMultiReceiverInfo.isMulti = true;
gameMainBinding.giftComboLayout.onRoomCustomMsg(giftMultiReceiverInfo);
}
/**
@@ -565,26 +614,40 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
*/
private void onReceiveAllMicGiftMsg(MultiGiftReceiveInfo multiGiftReceiveInfo) {
if (multiGiftReceiveInfo == null || !isResumed()) return;
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(multiGiftReceiveInfo));
if (multiGiftReceiveInfo.getGift() != null && multiGiftReceiveInfo.getGift().getNotifyFull() == 1) return;
//全服礼物 的 特效播放交给 onReceiveGiftMsgAllService() 35消息来处理 , 但是连击旧消息处理
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveMultiGiftMsg(multiGiftReceiveInfo);
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(multiGiftReceiveInfo));
}
/**
* 普通
* 全服礼物
*/
private void onReceiveGiftMsg(GiftReceiveInfo giftReceiveInfo) {
private void onReceiveGiftMsgAllService(GiftReceiveInfo giftReceiveInfo) {
if (giftReceiveInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftMsg(giftReceiveInfo);
gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(giftReceiveInfo));
// 35 是 全服, 是服务器发的, 服务器发送的不带本地连击数, 所以不处理这个 连击横幅view , 让31 处理
// gameMainBinding.giftComboLayout.onRoomCustomMsg(GiftToolbox.transformToGiftMultiReceiverInfo(giftReceiveInfo));
}
/**
* 全服礼物-飘屏
*/
private void onReceiveGiftMsgAllServiceNotify(Object anyData) {
if (anyData != null && anyData instanceof AllServiceGiftProtocol.DataBean) {
GlobalNotifyManager.INSTANCE.onReceiveGiftMsgAllServiceNotify(anyData);
}
}
private void onReceiveMagicMsg(MagicReceivedInfo magicReceivedInfo) {
if (magicReceivedInfo == null || !isResumed()) return;
if (giftView == null) {
@@ -620,7 +683,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
// gameMainBinding.roomNums.setText(ResUtil.getString(R.string.avroom_fragment_homepartyfragment_013) + onlineNumber);
}
public void showUserCardDialog(String uid){
public void showUserCardDialog(String uid) {
long id = JavaUtil.str2long(uid);
if (id == 0) {
return;
@@ -656,30 +719,38 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
@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);
if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_BEGIN) {
if (gameMainBinding.giftComboBtn.isInCombo()) {
gameMainBinding.giftComboBtn.waitStart();
}
} else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_SEND_SUCCESS) {
showComboBtn(event.getGiftNumber());
} else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_COMBO_CANCEL) {
if (gameMainBinding.giftComboBtn.isInCombo()) {
gameMainBinding.giftComboBtn.cancel();
}
} else if (event.getAction() == GiftComboEvent.Action.ACT_GIFT_POINT) {
ComboUtil.INSTANCE.setPoint(gameMainBinding.giftComboBtn.getSvgaView());
}
}
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.showView(false);
gameMainBinding.giftComboBtn.cancel();
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_DIALOG_SHOW));
gameMainBinding.coinTips.setVisibility(View.GONE);
});
//连击点击事件
gameMainBinding.giftComboBtn.setComboClick(v -> {
ComboUtil.INSTANCE.setPoint(gameMainBinding.giftComboBtn.getSvgaView());
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_COMBO_START));
gameMainBinding.giftComboBtn.onBtnDown();
});
@@ -688,7 +759,8 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onGiftComboEnd() {
gameMainBinding.giftComboBtn.showView(false);
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_SHOW));
EventBus.getDefault().post(new GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_DIALOG_SHOW));
gameMainBinding.coinTips.setVisibility(View.GONE);
}
});
}
@@ -696,6 +768,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
gameMainBinding.giftComboBtn.showView(true);
gameMainBinding.giftComboBtn.start();
gameMainBinding.giftComboBtn.updateNumber(number);
gameMainBinding.coinTips.setVisibility(View.VISIBLE);
}
@@ -706,74 +779,24 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
MsgSuperLuckyGift msgSuperLuckyGift = roomEvent.getMsgSuperLuckyGift();
if (msgSuperLuckyGift != null) {
if (msgSuperLuckyGift.luckyGiftMsgAllBean != null) {
showLuckyGiftDlg(msgSuperLuckyGift.luckyGiftMsgAllBean);
RoomNotifyDialogManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE,
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM,
msgSuperLuckyGift.luckyGiftMsgAllBean
));
}
if (msgSuperLuckyGift.luckyGiftMsgSelfBean != null) {
showLuckyGiftDlgNotify(msgSuperLuckyGift.luckyGiftMsgSelfBean);
if (msgSuperLuckyGift.luckyGiftMsgSelfBean.getUid() != AuthModel.get().getCurrentUid()) return;
if (msgSuperLuckyGift.luckyGiftMsgSelfBean.getRoomId() != AvRoomDataManager.get().getRoomId()) return;
if (msgSuperLuckyGift.luckyGiftMsgSelfBean.getRoomUid() != AvRoomDataManager.get().getRoomUid()) return;
RoomNotifyDialogManager.INSTANCE.showLuckyGiftDlgNotify(gameMainBinding.flLuckyGiftNotifyLayout,msgSuperLuckyGift.luckyGiftMsgSelfBean);
gameMainBinding.coinTips.showView(String.valueOf(msgSuperLuckyGift.luckyGiftMsgSelfBean.getCoins()),true);
}
}
}
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 校验数据是否异常
RoomNotifyDialogManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE,
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM,
data
));
}
/**
* cp 礼物
*/
@@ -789,7 +812,51 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
}
/**
* 更新房间背景消息
*/
private void onRoomBgChange(RoomEvent roomEvent) {
RoomBgChangeBean changeBean = roomEvent.getRoomBgChangeBean();
if (changeBean != null) {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
roomInfo.setBackPic(changeBean.url);
setRoomBg(roomInfo);
}
}
}
/**
* 更新房间等级消息
*/
private void onRoomLevelChange(RoomEvent roomEvent) {
Object anyData = roomEvent.getAnyData();
if (anyData instanceof RoomLevelChangeBean ){
Object roomLevel = gameMainBinding.roomLevelIcon.getTag();
if (roomLevel != null && roomLevel instanceof Integer) {
if ((Integer) roomLevel > ((RoomLevelChangeBean) anyData).roomLevel) return;
}
gameMainBinding.roomLevelIcon.setTag(((RoomLevelChangeBean) anyData).roomLevel);
OtherExtKt.setVis(gameMainBinding.roomLevelIcon,OtherExtKt.isVerify(((RoomLevelChangeBean) anyData).getRoomLevelIcon()),false);
ImageLoadKt.loadImage(gameMainBinding.roomLevelIcon,((RoomLevelChangeBean) anyData).getRoomLevelIcon());
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFollowRoomEvent(FollowRoomEvent event) {
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
}
/**
* 更新特效开关提示
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void updateHasAnimation(HasAnimationEffect event) {
updateHasAnimationEffect();
}

View File

@@ -4,32 +4,9 @@ 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.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
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.app.ui.widget.GiftDialog;
import com.chwl.core.gift.bean.GiftInfo;
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.room.queue.bean.MicMemberInfo;
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;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter;
@@ -41,13 +18,19 @@ 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.RoomTeamPKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPkDialog;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.headline.RoomHeadlineWidget;
import com.chwl.app.avroom.online.RoomOnlineWidget;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.rank.RoomRankNumberWidget;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.FragmentAvRoomGameBinding;
import com.chwl.app.ui.webview.DatingRuleWebViewActivity;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.app.utils.UserUtils;
import com.chwl.core.Constants;
import com.chwl.core.UriProvider;
@@ -66,6 +49,7 @@ import com.chwl.core.room.model.AvRoomModel;
import com.chwl.core.room.model.MicQueueModel;
import com.chwl.core.room.pk.bean.PKRespQueuingMicListInfo;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.pk.event.PKStateEvent;
import com.chwl.core.room.pk.model.PkModel;
import com.chwl.core.room.queuing_mic.bean.RespQueuingMicListInfo;
@@ -78,12 +62,13 @@ import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.TimeUtils;
import com.chwl.library.utils.UIUtils;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.FragmentEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -92,7 +77,6 @@ import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
* 轰趴房间
@@ -136,7 +120,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setKtvModel(false);
gameBinding.playTogether.setVisibility(View.GONE);
microView = mView.findViewById(R.id.micro_view);
gameBinding.ivTeamPk.setOnClickListener(this);
}
@Override
@@ -165,7 +148,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
initRoomPkOrder(AvRoomDataManager.get().showPkBeginTime, AvRoomDataManager.get().pkBeginTime);
}
@Override
public void onReceiveRoomEvent(RoomEvent roomEvent) {
super.onReceiveRoomEvent(roomEvent);
@@ -365,14 +347,14 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private void updatePkScoreBoard() {
if (AvRoomDataManager.get().isOpenPKMode()) {
if (gameBinding.ivTeamPk.getVisibility() == View.GONE) {
if (ivTeamPk.getVisibility() == View.GONE) {
// 通知更新背景
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(true);
EventBus.getDefault().post(pkStateEvent);
showTeamPkDialog();
}
gameBinding.ivTeamPk.setVisibility(View.VISIBLE);
ivTeamPk.setVisibility(View.VISIBLE);
//这里通过接口获取PK 详情 更新pk 记分板
if (PkModel.get().getCurPkInfo() == null) {
PkModel.get().loadPKDataByRoomId(
@@ -411,13 +393,15 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
} else {
if (gameBinding.ivTeamPk.getVisibility() == View.VISIBLE) {
// 通知更新bg
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(false);
EventBus.getDefault().post(pkStateEvent);
if (ivTeamPk != null) {
if (ivTeamPk.getVisibility() == View.VISIBLE) {
// 通知更新bg
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(false);
EventBus.getDefault().post(pkStateEvent);
}
ivTeamPk.setVisibility(View.GONE);
}
gameBinding.ivTeamPk.setVisibility(View.GONE);
dismissTeamPkDialog();
}
@@ -474,12 +458,13 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
} else {
closeDatingMode();
}
if ((AvRoomDataManager.get().isDatingMode() || AvRoomDataManager.get().isOpenPKMode()) && !AvRoomDataManager.get().isManager()) {
gameBinding.ivQueuingMicro.setVisibility(View.VISIBLE);
gameBinding.ivQueuingMicro.setImageResource(AvRoomDataManager.get().isDatingMode() ?
mIvQueuingMicro.setVisibility(View.VISIBLE);
mIvQueuingMicro.setImageResource(AvRoomDataManager.get().isDatingMode() ?
R.drawable.ic_dating_queuing_micro : R.drawable.ic_pk_queuing_micro);
} else {
gameBinding.ivQueuingMicro.setVisibility(View.GONE);
mIvQueuingMicro.setVisibility(View.GONE);
gameBinding.bottomView.updateQueuingMicButton();
}
updateMicroView();
@@ -1058,11 +1043,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
}
@Override
protected void onInitMusicPlayerView(@NonNull MusicPlayerView view) {
super.onInitMusicPlayerView(view);
view.linkIconView(gameBinding.ivMusic, gameBinding.ivMusic);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {

View File

@@ -6,29 +6,24 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;
import com.chwl.app.R;
import com.chwl.app.avroom.adapter.OnlineUserAdapter;
import com.chwl.app.avroom.presenter.HomePartyUserListPresenter;
import com.chwl.app.avroom.view.IHomePartyUserListView;
import com.chwl.app.base.BaseMvpFragment;
import com.chwl.app.ui.widget.UserInfoDialog;
import com.chwl.core.Constants;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.room.bean.OnlineChatMember;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.room.bean.RoomOnlineUserBean;
import com.chwl.library.base.factory.CreatePresenter;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.ListUtils;
import com.chwl.library.utils.ResUtil;
import com.netease.nim.uikit.common.util.sys.NetworkUtil;
import com.orhanobut.logger.Logger;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.Iterator;
import java.util.List;
@@ -104,6 +99,15 @@ public class OnlineUserFragment extends BaseMvpFragment<IHomePartyUserListView,
@Override
public void onRequestRoomOnlineListSuccess(List<RoomOnlineUserBean> chatRoomMemberList) {
Iterator<RoomOnlineUserBean> iterator = chatRoomMemberList.iterator();
while (iterator.hasNext()) {
RoomOnlineUserBean next = iterator.next();
if (next.isSuperAdmin()) {
iterator.remove();
}
}
mOnlineUserAdapter.setNewData(chatRoomMemberList);
mRefreshLayout.finishRefresh();
}

View File

@@ -0,0 +1,33 @@
package com.chwl.app.avroom.fragment
import com.chwl.app.avroom.adapter.BaseMicroViewAdapter
import com.chwl.app.avroom.adapter.Mic19ViewAdapter
import com.example.lib_utils.UiUtils
import com.example.lib_utils.ktx.setMargin
/**
* 十九麦房
*/
class Room19Fragment : HomePartyRoomFragment() {
companion object {
fun newInstance(): Room19Fragment {
return Room19Fragment()
}
}
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_19) {
microView.bindAdapter(Mic19ViewAdapter(mContext))
}
if (microView.adapter != null) {
microView.adapter.notifyDataSetChanged()
}
}
}

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