191 Commits

Author SHA1 Message Date
ningwenqiang
7c6189db11 从pd拷贝 1、优化直播间聊天换行问题_2、PK连麦_结束图标(英文)更换
图,因为缩略图和主图加载完都回调,会导致计算换行的代码和之后转Drawable的代码重复多次调用
2024-10-23 10:16:36 +08:00
ningwenqiang
c166d0a476 从pd拷贝 删除将网络图片转为Drawable时候的先加载缩略图,因为缩略图和主图加载完都回调,会导致计算换行的代码和之后转Drawable的代码重复多次调用 2024-10-23 10:10:16 +08:00
ningwenqiang
a220408853 调整数据 设置的图标大小 2024-10-22 18:21:10 +08:00
ningwenqiang
c55b262926 修改开播的默认镜像方式 2024-10-22 17:40:58 +08:00
ningwenqiang
461a985799 替换新的送礼物接口 2024-10-22 17:19:29 +08:00
ningwenqiang
5c369f7215 initHourRankList UI调整 2024-10-22 17:10:08 +08:00
ningwenqiang
3ddcc944c0 Merge branch 'refs/heads/新潘多拉6.8.1' into 新潘多拉_6.8.2
# Conflicts:
#	main/src/main/java/com/yunbao/main/http/MainHttpUtil.java
2024-10-22 13:33:15 +08:00
ningwenqiang
7b2f853f2e Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2 2024-10-21 18:07:42 +08:00
ningwenqiang
636f5ded6f initHourRankList UI调整 2024-10-21 18:06:12 +08:00
ningwenqiang
bebfbb3f02 修改6.82-6.8.3 2024-10-18 17:10:51 +08:00
ningwenqiang
eee2648277 Ui调整 2024-10-18 15:41:03 +08:00
ningwenqiang
87e372e8f9 Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2 2024-10-16 15:09:01 +08:00
ningwenqiang
fb09b8ef35 替换了直播背景图 2024-10-16 15:08:47 +08:00
ningwenqiang
ecb44e510a 礼物展馆全部替换成新的 2024-10-16 13:58:44 +08:00
ningwenqiang
6b9d951c55 判断一下开关开启是显示 ON
开关关闭显示 OFF
2024-10-15 18:03:14 +08:00
ningwenqiang
f528353dd0 判断一下开关开启是显示 ON
开关关闭显示 OFF
2024-10-15 17:39:52 +08:00
ningwenqiang
54cf21092c 心愿单如果没有进行智控 2024-10-15 17:03:43 +08:00
ningwenqiang
2799991ef3 主播设置完心愿单直播间进行修改 2024-10-15 16:59:26 +08:00
ningwenqiang
8efa3b62e2 Pk图标设置
api/public/?service=Ranking.getAnchorRankData&app_from=PDL"
2024-10-15 15:20:21 +08:00
ningwenqiang
eed77f989f 调整观众的底部图标 2024-10-15 15:18:25 +08:00
ningwenqiang
417a9ac628 这个icon在有标题内容的时候就去掉吧,只显示标题内容 2024-10-15 13:15:10 +08:00
ningwenqiang
1be00c75c4 这个icon在有标题内容的时候就去掉吧,只显示标题内容 2024-10-15 10:52:57 +08:00
ningwenqiang
11ac669077 调整礼物栏高度,对文字进行部分对齐 2024-10-14 18:23:42 +08:00
ningwenqiang
e8c8456e14 合并支付User.getBaseInfos 新增返回pay_type //支付方式展示:1、三方支付,2:官方支付,3:无响应 且根据PDL修改不同界面 2024-10-14 14:07:03 +08:00
ningwenqiang
2ee9e9c726 1获取充值信息增加字段 传一个字段key1 值:6tnym1br6lhu7 2.取消防抖 2024-10-14 13:09:17 +08:00
ningwenqiang
bb91d1bef7 pd和潘多拉重新出个包给我 在手机号密码登录的接口 传一个字段key1 值:6tnym1br6lhu7 2024-10-14 10:36:19 +08:00
ningwenqiang
9649a7eb01 Merge branch 'refs/heads/新潘多拉6.8.1' into 新潘多拉_6.8.2
# Conflicts:
#	common/src/main/java/com/yunbao/common/sud/decorator/SudFSMMGDecorator.java
2024-10-14 09:58:01 +08:00
ningwenqiang
7c8db902f3 SudFSMMGDecorator 和并PD的跳转修复 2024-10-14 09:55:56 +08:00
ningwenqiang
7937ef70bc 替换融云IMkey 值 2024-10-14 09:45:04 +08:00
ningwenqiang
695c28db02 保存一波数据 2024-10-14 09:42:58 +08:00
ningwenqiang
94ec0d1d88 开播小贴士只随机取一条 2024-10-11 17:51:07 +08:00
ningwenqiang
88cf7ca74b 切换封面固定为切换封面 2024-10-11 17:30:11 +08:00
ningwenqiang
1d45fa8d3d 开始游戏的问题同步, 调整快捷聊天的边距 2024-10-11 16:17:17 +08:00
ningwenqiang
48f88a5a3b 送礼的选中效果修改 热度加成和小时榜图片修改
神龙倒计时背景修改,立即参加变为盾冬
2024-10-11 15:36:17 +08:00
ningwenqiang
045a8708e0 热度加成和小时榜图标替换 2024-10-11 14:50:40 +08:00
ningwenqiang
b3b127bd0b 观众席到底部 2024-10-11 14:30:09 +08:00
ningwenqiang
6c92adc0a3 直播条目背景颜色调整 2024-10-11 14:22:43 +08:00
ningwenqiang
9ecfc46467 修改开始直播的返回翻译 2024-10-11 11:28:42 +08:00
Martin
05f5538bc3 改变直播间消息框高度问题 2024-10-10 13:11:36 +08:00
Martin
cb2310914b 意见反馈,图片上传失败。原因:调错接口了;已修复 2024-10-10 10:52:27 +08:00
Martin
eac77dcdaf 調整用戶直播間底部tips Iicon 位置 2024-10-09 17:57:55 +08:00
Martin
ce3dc1cd3d 修改完成新手任務的接口 2024-10-09 17:56:47 +08:00
Martin
c24642e75a 隐藏主播结束页面 直播攻略 2024-10-09 15:43:44 +08:00
Martin
4f2311fbad 修改直播间消息View高度 2024-10-09 15:41:16 +08:00
Martin
ee53edbe1c 修复直播间push View通知UI问题 2024-10-09 13:49:58 +08:00
Martin
865bf58108 修复免费礼物提示gif位置 2024-10-09 13:49:21 +08:00
Martin
5383e2a4ea 修复将PDLIVE替换成PandoraLive 2024-10-09 10:01:38 +08:00
Martin
17dbe82d9b 修复主播关播页面直播攻略点击没反应问题 2024-10-09 10:01:00 +08:00
Martin
548e373310 修复开通贵族全服通知不滚动问题 2024-10-09 09:59:54 +08:00
Martin
d544de6c1d 修复小米手机首页导航栏展示不全问题 2024-10-09 09:58:54 +08:00
ningwenqiang
bf7bc0ed81 暂提 2024-10-08 10:26:33 +08:00
ningwenqiang
76d24123a7 周星榜数量修改 2024-10-07 18:20:31 +08:00
ningwenqiang
4f44278561 修复BUG 2024-10-07 17:48:41 +08:00
ningwenqiang
beace99a80 oppo英文版字挡图标贵族图标 2024-10-07 17:16:29 +08:00
ningwenqiang
cc48c7c2e8 chat_recyclerView 间距加在父类而不是子类 2024-10-07 16:42:24 +08:00
ningwenqiang
4f9c671e86 底部间隔修改实现 2024-10-07 16:21:38 +08:00
ningwenqiang
1caa595e00 直播的结束经验条部分UI进行修改 2024-10-07 15:53:31 +08:00
ningwenqiang
4c4d53196a 关注按钮替换成加号 2024-10-07 15:16:48 +08:00
ningwenqiang
121f07fa45 start 替换 left end 喜欢Right 2024-10-07 14:46:04 +08:00
ningwenqiang
e5d546ed6e 去除底部的贵族提示与开通贵族按钮 2024-10-07 14:24:30 +08:00
ningwenqiang
9298ad70f6 开始直播增加图标 2024-10-07 14:05:42 +08:00
ningwenqiang
ea1015b0b4 Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2 2024-10-07 13:37:51 +08:00
ningwenqiang
faf5305702 chat_recyclerView 增加右边间距 2024-10-07 13:37:21 +08:00
671ae63306 修复主播端PK中无助力榜前三头像框显示 2024-10-07 13:36:05 +08:00
ningwenqiang
949ff20317 为选择礼物时候为灰色 2024-10-07 11:28:48 +08:00
ningwenqiang
950bcee232 隐藏新人任务 2024-10-07 10:13:45 +08:00
ningwenqiang
2236a90b31 礼物包裹的逻辑进行修改 2024-10-06 17:20:50 +08:00
ningwenqiang
c65a19dc4c 包裹礼物的显示问题修改 2024-09-29 15:49:40 +08:00
ningwenqiang
ab009cf5d7 替换添加关注图标 2024-09-29 15:31:41 +08:00
ningwenqiang
ed1bd72d0a 1.PK倒计时是, 神龙倒计时 改成只有分钟秒格式
2.送礼物自定义数量下移
2024-09-29 14:53:05 +08:00
ningwenqiang
c42b3db7d2 礼物条目的标题头 英文的改回原来的逻辑 2024-09-29 10:57:35 +08:00
ningwenqiang
2b6ba78500 git忽略/outputs/apk 以及/TabLayout/build
直播的消息发送增加上距离和下距离
2024-09-28 18:11:48 +08:00
ningwenqiang
362bcce5f6 git忽略/outputs/apk 以及/TabLayout/build
直播的消息发送增加上距离和下距离
2024-09-28 17:45:21 +08:00
ningwenqiang
927211379f 1、热度图标和小时候榜单重新切了下(统一改成了12x13)到时候替换下
3、左上角昵称下面的id字号小一些
2024-09-28 17:20:52 +08:00
ningwenqiang
299c78e7c7 神龙送财的到期时之前反了现在修改一下 2024-09-28 16:44:59 +08:00
ningwenqiang
615416444d 礼物的贵族实现替换 2024-09-28 14:34:06 +08:00
ningwenqiang
257b4c51aa Merge branch 'refs/heads/新潘多拉6.8.1' into 新潘多拉_6.8.2
# Conflicts:
#	app/tmp/full-r8-config.txt
#	config.gradle
#	lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java
2024-09-27 18:07:04 +08:00
ningwenqiang
fef1e49429 PK时候女神说展开收起逻辑完成 2024-09-27 17:46:57 +08:00
ningwenqiang
57e25eaa89 Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2 2024-09-27 16:53:55 +08:00
ningwenqiang
195bc56152 UI做小的调整 2024-09-27 16:53:38 +08:00
ningwenqiang
9454b5407a 机器人语言设置完成 2024-09-27 16:49:08 +08:00
ningwenqiang
51caa11c07 机器人语言设置完成 2024-09-27 16:38:15 +08:00
ningwenqiang
380381c3fe 补充 2024-09-27 16:23:47 +08:00
ningwenqiang
ea391a648a 语言设置增加 2024-09-27 16:19:16 +08:00
ningwenqiang
f92406efa7 礼物字体大小进行调整 2024-09-27 14:59:18 +08:00
ningwenqiang
de9901707c 礼物增加空的布局 2024-09-27 14:31:08 +08:00
ningwenqiang
ea558cb22f 功能基本调试完成 2024-09-27 14:22:54 +08:00
ningwenqiang
cdf9e75ebd 选择礼物转到指定为止 2024-09-27 12:05:00 +08:00
ningwenqiang
b6d715d81c 接入Popup2进行UI调整 2024-09-27 11:43:55 +08:00
ningwenqiang
729db13ffd 保存一波数据线 2024-09-26 18:32:01 +08:00
ningwenqiang
d7a5d224b2 礼物的弹窗UI进行修改 2024-09-26 15:18:39 +08:00
ningwenqiang
6ba18e8ba2 保存新的送礼的UI 2024-09-25 17:23:15 +08:00
f738a9202b 调整多人PK分数UI层top
调整部分equals反转
2024-09-25 11:17:34 +08:00
ningwenqiang
b5401503e9 去掉主播的消息中心 2024-09-24 16:55:05 +08:00
ningwenqiang
5a19c0e1a5 PD和潘多拉的主播协议
PD的   671 -> 669
PD的   672 -> 670
2024-09-24 16:34:24 +08:00
ningwenqiang
4f81d720fd 普通用户的聊天栏更高一些 2024-09-24 15:51:56 +08:00
ningwenqiang
ad44be5af8 Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2
# Conflicts:
#	live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java
2024-09-24 13:57:32 +08:00
ningwenqiang
75ddc8d07f 增加重置View的逻辑 2024-09-24 11:25:52 +08:00
ningwenqiang
27776d1761 修改切换观众类型提示 2024-09-24 11:22:45 +08:00
ningwenqiang
352a49c762 PDLive字符串修改成PandoraLive 2024-09-24 10:36:42 +08:00
ningwenqiang
7976d36701 准备新的礼物和机器人部分业务 2024-09-24 10:30:48 +08:00
ningwenqiang
84bbb0c143 增加整蛊的消息类型 2024-09-23 16:22:55 +08:00
ningwenqiang
76e9748eeb 主播创建游戏的加入的UI进行调整 2024-09-23 15:23:40 +08:00
ningwenqiang
fd8e805f78 pk 倒计时去掉小时 2024-09-23 14:51:58 +08:00
ningwenqiang
50bdc01ea9 快捷消息功能发出UI调整 2024-09-23 14:37:19 +08:00
ningwenqiang
dffe681b95 贵族图标替换 同时增加新的参数 2024-09-23 14:23:27 +08:00
ningwenqiang
31c8365696 贵族图标替换 2024-09-23 13:33:53 +08:00
ningwenqiang
98fc9f61c3 直播的一些翻译问题修改 2024-09-21 17:38:34 +08:00
ningwenqiang
a44dfee38a 隐藏清晰度的选项 2024-09-21 16:37:25 +08:00
ningwenqiang
b3c962c03b 默认样式修改 2024-09-21 15:55:16 +08:00
ningwenqiang
f30144c42c 部分BUG修改 2024-09-21 14:35:07 +08:00
ningwenqiang
81cf2824a7 主播新手任务增加UID和TOKEN 但是未能加载界面 2024-09-21 11:22:10 +08:00
ningwenqiang
7ae32bbe77 女神说定时收齐来 2024-09-21 11:01:28 +08:00
ningwenqiang
0dc4f5b99b 调整播放时间计算 2024-09-20 15:27:04 +08:00
ningwenqiang
34a8637c9e 开播
tips无数据则隐藏
2024-09-19 18:26:34 +08:00
ningwenqiang
53f26aee68 普通用户 用户条修改 2024-09-19 17:51:48 +08:00
ningwenqiang
9d3ed3632a UI样式调整 2024-09-19 16:56:57 +08:00
ningwenqiang
4f4034c1d0 女神说选择样式UI调整 2024-09-18 16:55:09 +08:00
ningwenqiang
23ff910ee2 女神说选择样式UI调整 2024-09-18 16:53:42 +08:00
ningwenqiang
14c8a51690 ICON细节调整 2024-09-18 16:28:01 +08:00
ningwenqiang
86e7abb7ec 替换小时榜的图标 2024-09-18 16:07:56 +08:00
ningwenqiang
454a024caa HD的选项现在先不可见 2024-09-18 15:54:21 +08:00
ningwenqiang
a55f370871 心愿榜 主播和普通用户做区别 2024-09-18 15:52:34 +08:00
ningwenqiang
330cf1faa2 女神说编辑完成 2024-09-18 14:09:21 +08:00
ningwenqiang
7356431414 女神说新的展示方式编辑完成 2024-09-18 09:59:32 +08:00
ningwenqiang
91f18b01b9 主播语音聊天的UI修改完成 2024-09-14 15:25:10 +08:00
ningwenqiang
0a08b67fb1 底部的按钮调整完成 2024-09-14 10:05:31 +08:00
ningwenqiang
6322c36906 修复开播图片后摄像头卡住问题 2024-09-13 15:32:27 +08:00
ningwenqiang
73ea623700 准备切分支 提交用户底部部分逻辑 2024-09-13 15:03:23 +08:00
ningwenqiang
1f09d1a0c4 修改内部版本号 2024-09-13 13:22:59 +08:00
ningwenqiang
2d5f23519d 替换T 图标和KEY 2024-09-13 11:26:13 +08:00
ningwenqiang
39dc287623 合并了图片选择 现在能跑起来了 2024-09-13 10:58:27 +08:00
ningwenqiang
a86b560996 保存数据准备切分支 2024-09-13 09:49:35 +08:00
ningwenqiang
c58b37d111 第二行的UI调整完成 2024-09-12 16:34:34 +08:00
ningwenqiang
eb594fcfce 在6.8.1的这个代码里面 搜下getCode这个接口 把里面的source 写成2 2024-09-10 18:03:00 +08:00
ningwenqiang
eba7cb1ab8 6.8.2 用户列表部分UI进行修改 2024-09-10 17:49:37 +08:00
Martin
2d6f801f0b 修复-提示报错了,注释掉了红包神龙,移动位置代码 2024-09-06 17:15:28 +08:00
Martin
6f3dd58a8b 新增判断-push,im 是新用户才会推 2024-09-06 15:23:41 +08:00
ningwenqiang
1357eaaac9 Merge remote-tracking branch 'origin/新潘多拉_6.8.2' into 新潘多拉_6.8.2 2024-09-06 14:09:56 +08:00
ningwenqiang
a349e94bf3 Merge branch 'refs/heads/新潘多拉6.8.1' into 新潘多拉_6.8.2
# Conflicts:
#	common/src/main/res/values-en-rUS/strings.xml
#	common/src/main/res/values-zh/strings.xml
#	common/src/main/res/values/strings.xml
#	config.gradle
2024-09-06 14:05:47 +08:00
ningwenqiang
4d6e38734d 版本号 601 6.8.1 2024-09-06 11:19:24 +08:00
Martin
ddbce1bdbf 新版本潘多APP
增加一个  app_from = PDL 的值 判定是不是潘多拉的用户
2024-09-06 11:12:07 +08:00
Martin
319fa3c498 bug优化 2024-09-06 09:39:40 +08:00
ningwenqiang
55b53fb955 包名为获取 非写死 2024-09-05 18:10:08 +08:00
ningwenqiang
c4a24be6f7 Merge remote-tracking branch 'origin/新潘多拉' into 新潘多拉 2024-09-05 17:16:26 +08:00
18142669586
94a06b9cf2 Merge remote-tracking branch 'origin/新潘多拉' into 新潘多拉
# Conflicts:
#	app/tmp/full-r8-config.txt
#	gradle.properties
2024-09-05 17:16:03 +08:00
18142669586
410aa45b1c 升级34版本,以及谷歌内购7.0版本 2024-09-05 17:13:54 +08:00
ningwenqiang
e0c1e9c64f 搜索的数据重新加载 2024-09-05 16:55:13 +08:00
ningwenqiang
b56a0bcce4 修复一个判空问题 2024-09-05 15:00:56 +08:00
ningwenqiang
9c117e2752 主播A隐藏选项 2024-09-04 18:24:22 +08:00
Martin
d2662da0b7 还原代码 2024-09-04 14:56:56 +08:00
Martin
6b4f3537c2 去除无效内容 2024-09-04 14:47:14 +08:00
Martin
983bb2837a 代码优化 2024-09-04 14:44:46 +08:00
Martin
bee903d22a 修复设置女神说刷新问题 2024-09-03 15:48:14 +08:00
ningwenqiang
0e69ea1732 准备换个实现 2024-09-03 09:51:57 +08:00
Martin
b7a96d9b1d 获取主播数据接口,新增字段 stream 2024-09-02 09:35:39 +08:00
ningwenqiang
b4574f730d 消息分类后的搜索进行优化 2024-08-30 17:37:05 +08:00
Martin
9b9e2bb2dc 心愿单新增关闭弹窗刷新 2024-08-30 10:31:24 +08:00
Martin
849f5aa66d 修復bug 2024-08-29 16:28:02 +08:00
ningwenqiang
08480af796 僅展示對方已讀 僅展示對方未讀 逻辑进行调整 2024-08-29 15:28:40 +08:00
ningwenqiang
02387a7321 只有主播B才能进行消息筛选 2024-08-29 14:23:44 +08:00
ningwenqiang
c7f4c1276f 修改选择消息类型Tab页的使用类型和实现方式(减少二次层布局层级) 2024-08-29 11:08:15 +08:00
ningwenqiang
f463557bc4 聊天类型选择增加长期持有 2024-08-28 15:16:07 +08:00
Martin
8cf459b860 心愿单,新增刷新 2024-08-28 13:52:44 +08:00
ningwenqiang
114a6472fb 增加一些非空判断 2024-08-28 11:22:13 +08:00
Martin
e3d04c9307 修复bug 2024-08-27 18:29:00 +08:00
ningwenqiang
ba47239e12 修改已读未读判断逻辑
选择框外部可以点击
2024-08-27 18:01:03 +08:00
ningwenqiang
6abe02390e 聊天增加分类筛选 细节调整完整 2024-08-27 14:22:48 +08:00
ningwenqiang
7fb4a10425 聊天增加分类筛选 2024-08-27 14:01:00 +08:00
Martin
faa9adf69a 直播间push消息翻译 2024-08-26 18:29:55 +08:00
Martin
e1f59b9223 新人奖励领取 2024-08-26 13:15:09 +08:00
Martin
f3945e1b21 新用户观播push,im 2024-08-24 18:28:46 +08:00
Martin
13646d64c7 观众观播notify-push1 push2 push3 2024-08-23 18:16:30 +08:00
Martin
7f2136320d 观众观播notify 2024-08-22 18:31:29 +08:00
Martin
0d1e2c4e6b 主播开播优化 2024-08-22 10:45:11 +08:00
Martin
67b79cd306 Merge branch 'refs/heads/新潘多拉' into 新潘多拉_6.8.2
# Conflicts:
#	live/src/main/res/layout/dialog_live_data.xml
#	live/src/main/res/values-zh/strings.xml
2024-08-21 13:58:23 +08:00
18142669586
b6f9545fe8 Merge remote-tracking branch 'origin/gong_dev_play' into 新潘多拉
# Conflicts:
#	config.gradle
#	main/src/main/java/com/yunbao/main/activity/MyWalletActivity.java
2024-08-20 13:59:47 +08:00
Martin
150af4fc2c 修改:直播间UI调整,暂存 2024-08-16 18:29:35 +08:00
Martin
2c56322b1c 修改:貴族列表 2024-08-16 16:55:05 +08:00
Martin
86c7bd56d1 add[直播数据-当场数据、PK弹窗] 2024-08-16 13:36:58 +08:00
cfb5a5aac2 修复聊天页面卡顿问题 2024-08-16 10:44:20 +08:00
Martin
06bbca07a1 add[直播数据-送礼列表] 2024-08-15 18:28:08 +08:00
Martin
af8ac39e9c 咱提 2024-08-14 17:38:20 +08:00
Martin
54ee2fb0b7 add[主播底部功能] 2024-08-14 15:38:16 +08:00
Martin
12749a1183 关播页面优化 2024-08-14 10:02:41 +08:00
Martin
3143ec2be4 同步优化代码 2024-08-14 09:35:01 +08:00
Martin
e7d43e2b48 开播关播页面 2024-08-13 18:29:11 +08:00
Martin
732be62f90 fix[开播准备页面-调整ui] 2024-08-13 09:29:21 +08:00
Martin
a7a7bdd058 add[完成-开播准备页面] 2024-08-10 18:27:25 +08:00
Martin
dcdf2c666d 开播准备页面-暂提 2024-08-10 17:59:07 +08:00
gongduoxiang
af6398354c 谷歌支付 2024-08-06 10:28:19 +08:00
479 changed files with 15484 additions and 4799 deletions

6
.gitignore vendored
View File

@@ -14,4 +14,8 @@ local.properties
/live/build/
/main/build/
/video/build/
/tmp/full-r8-config.txt
/tmp/full-r8-config.txt
/outputs/apk
/TabLayout/build
/app/google_test/release

View File

@@ -4,7 +4,7 @@
>
<queries>
<package android:name="com.pandora.sy"/>
<package android:name="${applicationId}"/>
<package android:name="com.facebook.orca"/>
<package

View File

@@ -5,7 +5,7 @@
<string name="dialog_share_title">分享</string>
<string name="dialog_share_app_internal">站內好友</string>
<string name="dialog_share_info">快來 PDLIVE觀看%s直播認識更多有趣的朋友吧</string>
<string name="dialog_share_info">快來 PandoraLive觀看%s直播認識更多有趣的朋友吧</string>
<string name="dialog_share_app_facebook">Facebook</string>
<string name="dialog_share_app_line">Line</string>
<string name="dialog_share_app_twitter">Twitter</string>
@@ -14,6 +14,6 @@
<string name="dialog_share_app_instagram">Instagram</string>
<string name="dialog_invite_title">邀請好友</string>
<string name="dialog_invite_info">快來 PDLIVE觀看直播,認識更多有趣的朋友吧!</string>
<string name="dialog_invite_info">快來 PandoraLive觀看直播,認識更多有趣的朋友吧!</string>
<string name="dialog_share_copy">複製</string>
</resources>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="dialog_share_title">Share</string>
<string name="dialog_share_info">Come and watch %s live on PDLIVE and meet more interesting people!</string>
<string name="dialog_share_info">Come and watch %s live on PandoraLive and meet more interesting people!</string>
<string name="dialog_invite_title">Invite Friends</string>
<string name="dialog_invite_info">Come to PDLIVE to discover more and better live streams.</string>
<string name="dialog_invite_info">Come to PandoraLive to discover more and better live streams.</string>
<string name="dialog_share_copy">Copy</string>
<string name="dialog_share_app_internal">Site friends</string>
<string name="dialog_share_internal_title">Share To</string>

View File

@@ -297,8 +297,7 @@ android {
defaultConfig {
// applicationId "myname.pdlive.shayu"
applicationId "com.pandora.sy"
applicationId "com.newpandora.yo"
minSdkVersion rootProject.ext.android.minSdkVersion
//版本在这里修改
targetSdkVersion rootProject.ext.android.targetSdkVersion

View File

@@ -1,57 +1,73 @@
{
"project_info": {
"project_number": "867032862719",
"project_id": "pdlnew",
"storage_bucket": "pdlnew.appspot.com"
"project_number": "671943160079",
"project_id": "pdlnews",
"storage_bucket": "pdlnews.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:867032862719:android:841a73fdfb6c37453ae1ca",
"mobilesdk_app_id": "1:671943160079:android:e3116655ea962750fb8e7a",
"android_client_info": {
"package_name": "com.pandora.sy"
"package_name": "com.newpandora.yo"
}
},
"oauth_client": [
{
"client_id": "867032862719-af2dnojobjd8s6ekdr1is1vev8nk36sv.apps.googleusercontent.com",
"client_id": "671943160079-9olh3lsv7mo2mrjr16u0cqtlmde8r4ps.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandora.sy",
"certificate_hash": "38cc19306c9facee36a9224e9a4070bc0be15c7d"
}
},
{
"client_id": "867032862719-ohaa1f18e186qpasvgt7qkk1i1pivniq.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandora.sy",
"certificate_hash": "b66dc8d21cfcf6c729577ddcf0c312b2a31ed872"
}
},
{
"client_id": "867032862719-snpbqruvqcc9fsifjnmm1h3dcgtr8am4.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pandora.sy",
"package_name": "com.newpandora.yo",
"certificate_hash": "15fc5e70cf238323bf7111c8c627803985478e87"
}
},
{
"client_id": "867032862719-ep4r92lpjmn7gs9tg0r7q0l75a4gm9mt.apps.googleusercontent.com",
"client_id": "671943160079-evu2q1gur12tb34cimc9g14t9vffb9sm.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.newpandora.yo",
"certificate_hash": "38cc19306c9facee36a9224e9a4070bc0be15c7d"
}
},
{
"client_id": "671943160079-gd4v6mr8t330ik8a00po6psdsn6p7b9k.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.newpandora.yo",
"certificate_hash": "89f318e9603ae92835b6dab299a45afc59485b9e"
}
},
{
"client_id": "671943160079-gs1mv4vpdjgofj541cuqkfhija98rna0.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.newpandora.yo",
"certificate_hash": "b55235e71e9e1d2f8f7120ddc4224db85125e085"
}
},
{
"client_id": "671943160079-pdtdv5k1s4mamo7obssuo99rtghkd503.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.newpandora.yo",
"certificate_hash": "b66dc8d21cfcf6c729577ddcf0c312b2a31ed872"
}
},
{
"client_id": "671943160079-9259s527l99jlrfikv6hd4ljcieup34u.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAnlY2aBEGyg7QpghHo7EaMRkM89dVNgq8"
"current_key": "AIzaSyCf7-JJ44TD09I34Yt4DVzcAO7VCDCa424"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "867032862719-ep4r92lpjmn7gs9tg0r7q0l75a4gm9mt.apps.googleusercontent.com",
"client_id": "671943160079-9259s527l99jlrfikv6hd4ljcieup34u.apps.googleusercontent.com",
"client_type": 3
}
]

View File

@@ -320,16 +320,3 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.qiniu.**{public <init>();}
-ignorewarnings
#Adjust SDK
-keep class com.adjust.sdk.** { *; }
-keep class com.google.android.gms.common.ConnectionResult {
int SUCCESS;
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
java.lang.String getId();
boolean isLimitAdTrackingEnabled();
}
-keep public class com.android.installreferrer.** { *; }

View File

@@ -54,6 +54,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.NETWORK_PROVIDER" />

View File

@@ -29,6 +29,7 @@ import com.facebook.appevents.AppEventsLogger;
import com.fm.openinstall.OpenInstall;
import com.google.gson.Gson;
import com.pandoralive.shayu.R;
import com.yunbao.common.utils.DebugUtils;
import com.yunbao.common.utils.LogUtils;
import com.tencent.imsdk.v2.V2TIMGroupMemberInfo;
import com.yunbao.common.http.Data;
@@ -482,7 +483,7 @@ public class AppContext extends CommonAppContext {
NeverCrashUtils.getInstance().setDebugMode(BuildConfig.DEBUG).setMainCrashHandler((t, e) -> {
Log.e("ApplicationError", "主线程异常");//此处log只是展示当debug为true时主类内部log会打印异常信息
e.printStackTrace();
AppManager.runDebugCode(() -> {
DebugUtils.runDebugCode(() -> {
//闪退后finish所有Activity并且杀死进程
for (WeakReference<Activity> activity : activities) {
if (activity != null && activity.get() != null) {

View File

@@ -10,6 +10,7 @@ import android.widget.Toast;
import com.yunbao.common.bean.CrashSaveBean;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.DebugUtils;
import com.yunbao.common.utils.FileUtil;
import com.yunbao.common.utils.SpUtil;
@@ -105,10 +106,10 @@ public class NeverCrashUtils {
}
e.printStackTrace();
AppContext.setFirebaseCrashData();
AppManager.runDebugCode(() -> Toast.makeText(application, "发生闪退:" + e.getMessage(), Toast.LENGTH_SHORT).show());
DebugUtils.runDebugCode(() -> Toast.makeText(application, "发生闪退:" + e.getMessage(), Toast.LENGTH_SHORT).show());
FileUtil.saveStringToFile(new File(application.getDir("files", Context.MODE_PRIVATE).getAbsolutePath()), throwableToString(e), "error.log");
getMainCrashHandler().mainException(Looper.getMainLooper().getThread(), e);
AppManager.runDebugCode(() -> errorWhile = false);
DebugUtils.runDebugCode(() -> errorWhile = false);
// return;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -86,6 +86,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
api files('libs/jcc-bate-0.7.3.jar')
compileOnly fileTree(dir: '../libs', include: ['*.aar'])
api 'androidx.activity:activity:1.9.1'
api rootProject.ext.dependencies["appcompat-androidx"]
api rootProject.ext.dependencies["recyclerview-androidx"]
api rootProject.ext.dependencies["cardview-androidx"]

View File

@@ -25,7 +25,7 @@
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.pandora.sy.fileprovider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data

View File

@@ -282,6 +282,10 @@ public class Constants {
public static final String SOCKET_LIVE_ANCHOR_PK_DIALOG="GuildCompetitionNotice";//公会赛弹窗
public static final String SOCKET_SEND_NEW_TASK_PUSH="SendNewTaskPush";//直播间-新用户完成任务push
public static final String SOCKET_SEND_NEW_TASK_IM ="SendNewTaskIM"; //直播间—新用户领取礼物IM
//视频举报获取位置
public static int xIndex = 0;
public static int yindex = 0;

View File

@@ -434,6 +434,8 @@ public class WebViewActivity extends AbsActivity {
gotoLive(event.getLiveId());
}else if (TextUtils.equals(event.getMethod(), "androidtoCommunityVideo")) {
RouteUtil.forwardCommunityActivity();
}else if(TextUtils.equals(event.getMethod(), "toRoomManage")){
RouteUtil.forwardRoomManageActivity();
}
}

View File

@@ -0,0 +1,82 @@
package com.yunbao.common.adapter;
import static com.yunbao.common.utils.StringUtil.isEmpty;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveDataHistoryBean;
import java.util.ArrayList;
import java.util.List;
/**
* Created by cxf on 2019/4/22.
*/
public class LiveDataHistoryAdapter extends RecyclerView.Adapter<LiveDataHistoryAdapter.Vh> {
private Context mContext;
private List<LiveDataHistoryBean> mList= new ArrayList<>();
private LayoutInflater mInflater;
public LiveDataHistoryAdapter(Context context, List<LiveDataHistoryBean> list) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
mList = list;
}
public void setDataCollection(List<LiveDataHistoryBean> data) {
if (data == null) {
data = new ArrayList();
}
this.mList = data;
this.notifyDataSetChanged();
}
@NonNull
@Override
public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new Vh(mInflater.inflate(R.layout.live_data_history_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Vh holder, @SuppressLint("RecyclerView") int position) {
if (isEmpty() || mList.isEmpty()) {
return;
}
holder.time.setText(mList.get(position).getAddtime().substring(0,9)+"\n"+mList.get(position).getAddtime().substring(10));
holder.giftTypeName.setText(mList.get(position).getCateName());
holder.giftName.setText(mList.get(position).getGiftname());
holder.income.setText(String.valueOf(mList.get(position).getAnchor_profit_coin()));
}
@Override
public int getItemCount() {
return mList.size();
}
class Vh extends RecyclerView.ViewHolder {
private TextView time;
private TextView giftTypeName;
private TextView giftName;
private TextView income;
public Vh(@NonNull View itemView) {
super(itemView);
time = itemView.findViewById(R.id.time);
giftTypeName = itemView.findViewById(R.id.giftTypeName);
giftName = itemView.findViewById(R.id.giftName);
income = itemView.findViewById(R.id.income);
}
}
}

View File

@@ -1,4 +1,4 @@
package com.yunbao.live.adapter;
package com.yunbao.common.adapter;
import android.content.Context;
import android.text.Html;
@@ -10,21 +10,21 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.live.R;
import com.yunbao.live.bean.LiveDataInfoModel;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveDataInfoNowModel;
import java.util.ArrayList;
import java.util.List;
public class LiveDataInfoRecyclerAdapter extends RecyclerView.Adapter<LiveDataInfoRecyclerAdapter.LiveDataHolder> {
private Context mContext;
private List<LiveDataInfoModel> list=new ArrayList<>();
private List<LiveDataInfoNowModel> list=new ArrayList<>();
public LiveDataInfoRecyclerAdapter(Context mContext) {
this.mContext = mContext;
}
public void setList(List<LiveDataInfoModel> list) {
public void setList(List<LiveDataInfoNowModel> list) {
this.list = list;
notifyDataSetChanged();
}
@@ -54,12 +54,8 @@ public class LiveDataInfoRecyclerAdapter extends RecyclerView.Adapter<LiveDataIn
data = itemView.findViewById(R.id.item_data);
}
public void setData(LiveDataInfoModel model) {
if (model.getColor() != null) {
data.setText(Html.fromHtml("<font color='" + model.getColor() + "'>" + model.getData() + "</font>"));
} else {
data.setText(model.getData());
}
public void setData(LiveDataInfoNowModel model) {
data.setText(model.getData());
title.setText(model.getTitle());
}

View File

@@ -12,7 +12,10 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.blankj.utilcode.util.LogUtils;
import com.google.android.exoplayer2.C;
import com.yunbao.common.R;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
@@ -22,16 +25,21 @@ import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.ChatMsgTypeUtils;
import com.yunbao.common.utils.DateFormatUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.UiConversationCodeUtil;
import com.yunbao.common.utils.ViewUtils;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import org.spongycastle.jcajce.provider.asymmetric.rsa.ISOSignatureSpi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import io.rong.imkit.IMCenter;
import io.rong.imkit.RongIM;
import io.rong.imkit.conversationlist.ConversationListAdapter;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
@@ -51,18 +59,43 @@ public class MainConversationListAdapter extends ConversationListAdapter {
public static final int TYPE_SEARCH_USER = 510;
public static final int TYPE_SEARCH_CHAT = 520;
private List<BaseUiConversation> srcList;
private List<BaseUiConversation> allDataList;
private Context mContext;
private boolean isChat = true;
private OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener;
private Map<String, Integer> timerMap = new HashMap<>();
public static final int FILTER_OFFLINE = 0;
public static final int FILTER_ONLINE = 1;
public static final int FILTER_UNREAD = 2;
public static final int FILTER_READ = 4;
public static final int FILTER_ALL = 7;
private int mFilter = FILTER_ALL;
public int getFilter() {
return mFilter;
}
public void setFilter(int mFilter) {
if (this.mFilter == mFilter)
return;
this.mFilter = mFilter;
}
public MainConversationListAdapter(Context mContext) {
this.mContext = mContext;
}
public void setSrcList(List<BaseUiConversation> srcList) {
this.srcList = srcList;
notifyDataSetChanged();
if (mFilter== FILTER_OFFLINE || mFilter == FILTER_ONLINE) {
super.setDataCollection(UiConversationCodeUtil.FilterData(mFilter, allDataList));
}else {
notifyDataSetChanged();
}
}
public void setOnRefreshListener(OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener) {
@@ -86,7 +119,7 @@ public class MainConversationListAdapter extends ConversationListAdapter {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_msg_search_chat, parent, false);
holder = ViewHolder.createViewHolder(parent.getContext(), view);
} else if (viewType != -200) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rc_conversationlist_item, parent, false);
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rc_conversationlist_item2, parent, false);
holder = ViewHolder.createViewHolder(parent.getContext(), view);
} else {
holder = super.onCreateViewHolder(parent, viewType);
@@ -99,11 +132,13 @@ public class MainConversationListAdapter extends ConversationListAdapter {
int type = super.getItemViewType(position);
if (mDataList.size() > position) {
String objectName = mDataList.get(position).mCore.getObjectName();
Log.i("聊天数据源发现","objectName"+objectName);
if (!StringUtil.isEmpty(objectName) && objectName.startsWith("SEARCH_USER")) {
type = TYPE_SEARCH_USER;
} else if (!StringUtil.isEmpty(objectName) && objectName.startsWith("SEARCH_CHAT")) {
type = TYPE_SEARCH_CHAT;
} else if (!StringUtil.isEmpty(objectName) && objectName.startsWith("SEARCH_TITLE")) {
Log.i("聊天数据源发现 ","getItemViewTypeSEARCH_TITLE");
type = TYPE_SEARCH_TITLE;
}
} else if (mDataList.isEmpty() || isEmpty() || srcList.isEmpty()) {
@@ -123,15 +158,76 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (getItemViewType(position) == TYPE_SEARCH_CHAT) {
bindChat(holder, position);
} else if (getItemViewType(position) == TYPE_SEARCH_TITLE) {
Log.i("聊天数据源设置标题头","SEARCH_TITLE::"+position);
bindTitle(holder, position);
return;
} else if (getItemViewType(position) != -200) {
bindChatNew(holder, position);
super.onBindViewHolder(holder, position);
return;
}
if (getItemViewType(position) != -200) {
bindDefault(holder, position);
}
}
private void bindChatNew(ViewHolder holder, int position) {
BaseUiConversation conversation = mDataList.get(position);
ImgLoader.display(holder.getContext(), conversation.mCore.getPortraitUrl(), holder.getView(R.id.rc_conversation_portrait));
holder.setText(R.id.rc_conversation_title, conversation.mCore.getConversationTitle());
((TextView) holder.getView(R.id.rc_conversation_content)).setText(ChatMsgTypeUtils.getMsg(conversation.mConversationContent.toString()));
if (conversation.mCore.getSentTime() != -1 && holder.getView(R.id.rc_conversation_date) != null) {
holder.setText(R.id.rc_conversation_date, DateFormatUtil.getDateTimeString(conversation.mCore.getSentTime(), true, holder.getContext()));
holder.getView(R.id.rc_conversation_date).setVisibility(View.VISIBLE);
} else if (holder.getView(R.id.rc_conversation_date) != null) {
holder.getView(R.id.rc_conversation_date).setVisibility(View.GONE);
}
holder.setVisible(R.id.rc_conversation_live_online, "0".equals(conversation.mCore.getDraft()));
int unReadCount = conversation.mCore.getUnreadMessageCount();
if (unReadCount > 0) {
holder.setVisible(R.id.rc_conversation_unread_count, true);
holder.setText(R.id.rc_conversation_unread_count, String.valueOf(unReadCount));
} else {
holder.setVisible(R.id.rc_conversation_unread_count, false);
}
Message message = conversation.mCore.getMessage();
if (message != null && message.getMessageDirection() == Message.MessageDirection.SEND) {
holder.setVisible(R.id.rc_conversation_unread_tv, true);
if (conversation.mCore.getSentStatus() == Message.SentStatus.READ) {
holder.setTextColor(R.id.rc_conversation_unread_tv, ContextCompat.getColor(holder.itemView.getContext(), R.color.rc_secondary_color));
holder.setText(R.id.rc_conversation_unread_tv, WordUtil.getNewString(R.string.message_chat_msg_read_tip));
} else {
holder.setTextColor(R.id.rc_conversation_unread_tv, ContextCompat.getColor(holder.itemView.getContext(), R.color.red));
holder.setText(R.id.rc_conversation_unread_tv, WordUtil.getNewString(R.string.message_chat_msg_unread_tip));
}
} else {
holder.setVisible(R.id.rc_conversation_unread_tv, false);
}
if (holder.getView(R.id.rc_conversation_live_status) == null || IMLoginManager.get(holder.getContext()).getAnchorB() != 1) {
return;
}
Integer timer = timerMap.get(mDataList.get(position).mCore.getTargetId());
if (timer == null) {
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.GONE);
return;
}
if (timer >= 10) {
holder.setText(R.id.rc_conversation_live_status,
String.format(WordUtil.getNewString(R.string.message_chat_msg_look_live), timer)
);
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.VISIBLE);
} else {
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.GONE);
}
}
private void bindDefault(ViewHolder holder, int position) {
BaseUiConversation conversation = mDataList.get(position);
Log.i("列表", "bindDefault: 用户头像:" + conversation.mCore.getPortraitUrl());
@@ -145,12 +241,12 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (holder.getView(R.id.rc_conversation_date) != null) {
holder.getView(R.id.rc_conversation_date).setVisibility(View.GONE);
}
if("0".equals(conversation.mCore.getDraft())){
holder.setImageDrawable(R.id.rc_conversation_live_online_icon,mContext.getResources().getDrawable(R.mipmap.msg_online));
holder.setText(R.id.rc_conversation_live_online,WordUtil.isNewZh()?"在線":"Online");
}else{
holder.setImageDrawable(R.id.rc_conversation_live_online_icon,mContext.getResources().getDrawable(R.mipmap.msg_off));
holder.setText(R.id.rc_conversation_live_online,WordUtil.isNewZh()?"離線":"Offline");
if ("0".equals(conversation.mCore.getDraft())) {
holder.setImageDrawable(R.id.rc_conversation_live_online_icon, mContext.getResources().getDrawable(R.mipmap.msg_online));
holder.setText(R.id.rc_conversation_live_online, WordUtil.isNewZh() ? "在線" : "Online");
} else {
holder.setImageDrawable(R.id.rc_conversation_live_online_icon, mContext.getResources().getDrawable(R.mipmap.msg_off));
holder.setText(R.id.rc_conversation_live_online, WordUtil.isNewZh() ? "離線" : "Offline");
}
if (holder.getView(R.id.rc_conversation_live_status) == null || IMLoginManager.get(holder.getContext()).getAnchorB() != 1) {
return;
@@ -170,7 +266,9 @@ public class MainConversationListAdapter extends ConversationListAdapter {
}
}
private void bindEmpty(ViewHolder holder, int position) {
Log.i("聊天数据源", "bindEmpty: ");
if (isChat) {
ViewUtils.findViewById(holder.itemView, R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_chat_list);
ViewUtils.findViewById(holder.itemView, R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list);
@@ -182,15 +280,19 @@ public class MainConversationListAdapter extends ConversationListAdapter {
public void onFinish() {
if (onRefreshListener != null) {
Log.i("聊天数据源", "设置数据源: " + mDataList.size());
onRefreshListener.onFinish(mDataList);
Log.i("聊天数据源", "设置数据源: " + allDataList.size());
onRefreshListener.onFinish(allDataList);
}
}
@Override
public void setDataCollection(List<BaseUiConversation> data) {
private int listHashCode = 0;
public synchronized void setDataCollectionV2(List<BaseUiConversation> data, boolean isSearch) {
if (data.hashCode() == listHashCode) return;
listHashCode = data.hashCode();
List<BaseUiConversation> tmp = new ArrayList<>();
Log.i("聊天数据源", "setDataCollection: " + data.hashCode());
Log.i("聊天数据源", "size()" + data.size() + " setDataCollection: " + data.hashCode());
List<String> urls = new ArrayList<>();
if (srcList == null) {
srcList = new ArrayList<>();
@@ -199,7 +301,8 @@ public class MainConversationListAdapter extends ConversationListAdapter {
if (mContext == null)
mContext = AppManager.getInstance().getLastActivity();
for (BaseUiConversation item : data) {
if (urls.contains(item.mCore.getTargetId())) continue;
if (urls.contains(item.mCore.getTargetId()) && item.mCore.getTargetId()!=null) continue;
// if ( item.mCore.getConversationTitle()==null || item.mCore.getTargetId()==null) continue;
if (item.mConversationContent != null && item.mConversationContent.toString().contains("_method_")) {
IMCenter.getInstance().deleteMessages(Conversation.ConversationType.PRIVATE,
item.mCore.getTargetId(),
@@ -218,9 +321,13 @@ public class MainConversationListAdapter extends ConversationListAdapter {
IMCenter.getInstance().clearMessagesUnreadStatus(Conversation.ConversationType.PRIVATE, item.mCore.getTargetId(), null);
}
urls.add(item.mCore.getTargetId());
Log.i("聊天数据源", item.mCore.getConversationTitle() + "|" + item.mCore.getPortraitUrl() + "|" + item.mCore.getTargetId());
BaseUiConversation cn = new SingleConversation(mContext, item.mCore);
srcList.add(cn);
Log.i("聊天数据源", item.mCore.getConversationTitle() + "|" + item.mCore.getPortraitUrl() + "|" + item.mCore.getTargetId() +"|"+item.mCore.getObjectName());
if (!tmpUids.contains(item.mCore.getTargetId())) {
BaseUiConversation cn = new SingleConversation(mContext, item.mCore);
srcList.add(cn);
tmpUids.add(item.mCore.getTargetId());
}
if (item.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
if (item.mCore.getLatestMessage() instanceof MessageChatCardContent) {
@@ -229,11 +336,37 @@ public class MainConversationListAdapter extends ConversationListAdapter {
}
tmp.add(item);
}
// ToastUtil.showDebug("消息数:"+data.size());
super.setDataCollection(tmp);
List<BaseUiConversation> showData = null;
if (isSearch) {
// Log.i("聊天数据源", "FilterData isSearch");
showData = tmp ;//UiConversationCodeUtil.FilterData(mFilter, tmp, allDataList);
} else {
allDataList = tmp;
if (mFilter != FILTER_OFFLINE && mFilter != FILTER_ONLINE )
{
// Log.i("聊天数据源", "FilterData notSearch");
showData = UiConversationCodeUtil.FilterData(mFilter, allDataList);
}
}
if (showData != null && !UiConversationCodeUtil.checkIsSame(showData, mDataList)) {
// Log.i("聊天数据源", "数据源有变化" + showData.size());
super.setDataCollection(showData);
} else {
// Log.i("聊天数据源", "数据源无变化");
}
}
@Override
public void setDataCollection(List<BaseUiConversation> data) {
setDataCollectionV2(data, false);
}
private List<String> tmpUids = new ArrayList<>();
public void clear() {
Log.i("聊天数据源", "clear: " + mDataList.size());
mDataList.clear();
if (srcList != null) {
srcList.clear();
@@ -340,15 +473,15 @@ public class MainConversationListAdapter extends ConversationListAdapter {
BaseUiConversation conversation = mDataList.get(id);
conversation.mCore.setSentTime(bean.getSentTime());
conversation.mCore.setUnreadMessageCount(integer);
if(bean.getContent() instanceof SightMessage){
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh()?"[小視頻]":"[Video]");
}else if(bean.getContent() instanceof HQVoiceMessage){
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh()?"[語音]":"[Voice]");
} else if(bean.getContent() instanceof ImageMessage){
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh()?"[圖片]":"[picture]");
}else if(bean.getContent() instanceof MessageChatCardContent){
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh()?"[站內分享]":"[In-app sharing]");
} else{
if (bean.getContent() instanceof SightMessage) {
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh() ? "[小視頻]" : "[Video]");
} else if (bean.getContent() instanceof HQVoiceMessage) {
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh() ? "[語音]" : "[Voice]");
} else if (bean.getContent() instanceof ImageMessage) {
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh() ? "[圖片]" : "[picture]");
} else if (bean.getContent() instanceof MessageChatCardContent) {
conversation.mConversationContent = new SpannableString(WordUtil.isNewZh() ? "[站內分享]" : "[In-app sharing]");
} else {
conversation.mConversationContent = new SpannableString(((TextMessage) bean.getContent()).getContent());
}
mDataList.set(id, conversation);
@@ -366,4 +499,6 @@ public class MainConversationListAdapter extends ConversationListAdapter {
});
}
}

View File

@@ -62,6 +62,7 @@ public class ConfigBean extends BaseModel {
private String google_isup;
private String sud_game_speech;
private int pay_type = 0;
@SerializedName("is_return_user")//是否需要弹窗0否1是
private String isReturnUser="";
@@ -72,6 +73,14 @@ public class ConfigBean extends BaseModel {
@SerializedName("jump_h5_url")//点击跳转H5页面地址
private String jumpH5Url="";
public int getPay_type() {
return pay_type;
}
public void setPay_type(int pay_type) {
this.pay_type = pay_type;
}
@JSONField(name = "is_return_user")
public String getIsReturnUser() {
return isReturnUser;

View File

@@ -113,10 +113,67 @@ public class EnterRoomInfoModel extends BaseModel {
private String giftWallLightenNumber;
@SerializedName("gift_wall_lighten_total")
private String giftWallLightenTotal;
@SerializedName("connection_info")
private LivePkMicModel connectionInfo;
@SerializedName("week_star_gift_num")
private String weekStarGiftNum;
@SerializedName("week_gift_illuminate_num")
private String weekGiftIlluminateNum;
// 对应的getter和setter方法
public String getWeekStarGiftNum() {
return weekStarGiftNum;
}
public void setWeekStarGiftNum(String weekStarGiftNum) {
this.weekStarGiftNum = weekStarGiftNum;
}
public String getWeekGiftIlluminateNum() {
return weekGiftIlluminateNum;
}
public void setWeekGiftIlluminateNum(String weekGiftIlluminateNum) {
this.weekGiftIlluminateNum = weekGiftIlluminateNum;
}
//
// "week_star_gift_num": 0,
// "week_gift_illuminate_num": 0
@SerializedName("is_first_entry")
private String isFirstEntry;
@SerializedName("is_new_user")
private String isNewUser;
@SerializedName("is_com_all")
private String isComAll;
public String getIsComAll() {
return isComAll;
}
public void setIsComAll(String isComAll) {
this.isComAll = isComAll;
}
public String getIsFirstEntry() {
return isFirstEntry;
}
public void setIsFirstEntry(String isFirstEntry) {
this.isFirstEntry = isFirstEntry;
}
public String getIsNewUser() {
return isNewUser;
}
public void setIsNewUser(String isNewUser) {
this.isNewUser = isNewUser;
}
public LivePkMicModel getConnectionInfo() {
return connectionInfo;
}

View File

@@ -0,0 +1,40 @@
package com.yunbao.common.bean;
public class HotStrategyBean {
private String id;
private String title;
private String english_title;
private String url;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getEnglish_title() {
return english_title;
}
public void setEnglish_title(String english_title) {
this.english_title = english_title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}

View File

@@ -19,6 +19,21 @@ public class LiveAiRobotBean extends BaseModel {
@SerializedName("ai_gz")
private int autoRequestFollowNumber;//自动求关注已配置数量
@SerializedName("ai_langue")//0中文1英文
private int aiLangue;
public int getAiLangue() {
return aiLangue;
}
public Boolean isLangueCn(){
return aiLangue==0;
}
public void setAiLangue(int aiLangue) {
this.aiLangue = aiLangue;
}
public LiveAiRobotBean() {
}

View File

@@ -1,5 +1,7 @@
package com.yunbao.common.bean;
import androidx.annotation.Nullable;
import com.google.gson.annotations.SerializedName;
import java.util.List;
@@ -32,6 +34,9 @@ public class LiveAnchorSayModel extends BaseModel{
private int isShow;
private String content;
private String styleImage;
@Nullable
private String title;
public LivePreview() {
}
@@ -48,6 +53,15 @@ public class LiveAnchorSayModel extends BaseModel{
return content;
}
@Nullable
public String getTitle() {
return title;
}
public void setTitle(@Nullable String title) {
this.title = title;
}
public void setContent(String content) {
this.content = content;
}

View File

@@ -0,0 +1,64 @@
package com.yunbao.common.bean;
import com.yunbao.common.utils.WordUtil;
/**
* 直播数据
*/
public class LiveDataHistoryBean extends BaseModel {
private String giftid;
private String anchor_profit_coin;
private String addtime;
private String giftname;
private String cate_name;
private String english_cate_name;
public String getGiftid() {
return giftid;
}
public void setGiftid(String giftid) {
this.giftid = giftid;
}
public String getAnchor_profit_coin() {
return anchor_profit_coin;
}
public void setAnchor_profit_coin(String anchor_profit_coin) {
this.anchor_profit_coin = anchor_profit_coin;
}
public String getAddtime() {
return addtime;
}
public void setAddtime(String addtime) {
this.addtime = addtime;
}
public String getGiftname() {
return giftname;
}
public void setGiftname(String giftname) {
this.giftname = giftname;
}
public String getCateName() {
return WordUtil.isNewZh()?cate_name:english_cate_name;
}
public void setCate_name(String cate_name) {
this.cate_name = cate_name;
}
public String getEnglish_cate_name() {
return english_cate_name;
}
public void setEnglish_cate_name(String english_cate_name) {
this.english_cate_name = english_cate_name;
}
}

View File

@@ -0,0 +1,46 @@
package com.yunbao.common.bean;
public class LiveDataInfoNowModel extends BaseModel {
private String color;
private String title;
private String data;
public LiveDataInfoNowModel(String color, String title, String data) {
this.color = color;
this.title = title;
this.data = data;
}
public LiveDataInfoNowModel(String title, String data) {
this.title = title;
this.data = data;
}
public LiveDataInfoNowModel() {
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View File

@@ -0,0 +1,25 @@
package com.yunbao.common.bean;
/**
* 开播提示
*/
public class LiveOpenTipsBean extends BaseModel{
private String content;
private String english_content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getEnglish_content() {
return english_content;
}
public void setEnglish_content(String english_content) {
this.english_content = english_content;
}
}

View File

@@ -1,5 +1,7 @@
package com.yunbao.common.bean;
import android.util.Log;
import com.google.gson.annotations.SerializedName;
public class NewPeopleTaskModel extends BaseModel {
@@ -10,9 +12,12 @@ public class NewPeopleTaskModel extends BaseModel {
private GiftModel gift = new GiftModel();
@SerializedName("reward_all")
private RewardAllModel rewardAll = new RewardAllModel();
@SerializedName("reward_one")
private RewardAllModel rewardOne = new RewardAllModel();
@SerializedName("is_free_gift")
private String isFreeGift = "1";
public TaskModel getTask() {
return task;
}
@@ -22,6 +27,20 @@ public class NewPeopleTaskModel extends BaseModel {
return this;
}
public String getIsFreeGift() {
return isFreeGift;
}
public void setIsFreeGift(String isFreeGift) {
this.isFreeGift = isFreeGift;
}
public boolean hasFreeGift(){
Log.i("hasFreeGift",isFreeGift);
return isFreeGift.equals("0");
}
public GiftModel getGift() {
return gift;
}

View File

@@ -58,6 +58,16 @@ public class UserBean implements Parcelable {
private String is_bind;
private String mobile;
private String front_task;
public String getNoble_img() {
return noble_img;
}
public void setNoble_img(String noble_img) {
this.noble_img = noble_img;
}
private String noble_img;
private String is_admin;
@SerializedName("user_love_num")
private int praise;

View File

@@ -27,6 +27,7 @@ public abstract class AbsDialogFragment extends DialogFragment {
protected Context mContext;
protected View mRootView;
protected Dialog dialog;
@NonNull
@Override
@@ -37,7 +38,7 @@ public abstract class AbsDialogFragment extends DialogFragment {
} else {
mRootView = LayoutInflater.from(mContext).inflate(getLayoutId(), null);
}
Dialog dialog = new Dialog(mContext, getDialogStyle());
dialog = new Dialog(mContext, getDialogStyle());
dialog.setContentView(mRootView);
dialog.setCancelable(canCancel());
dialog.setCanceledOnTouchOutside(canCancel());
@@ -66,7 +67,7 @@ public abstract class AbsDialogFragment extends DialogFragment {
protected abstract void setWindowAttributes(Window window);
protected View findViewById(int id) {
protected <T extends View> T findViewById(int id) {
if (mRootView != null) {
return mRootView.findViewById(id);
}

View File

@@ -56,7 +56,7 @@ public class SudGameSearchDialogPopup extends AbsDialogPopupWindow {
@Override
public void dismiss() {
Bus.getOff(this);
// Bus.getOff(this);
super.dismiss();
}
@@ -78,7 +78,7 @@ public class SudGameSearchDialogPopup extends AbsDialogPopupWindow {
@Override
protected void onCreate() {
super.onCreate();
Bus.getOn(this);
// Bus.getOn(this);
editSearch = findViewById(R.id.edit_search);
// listHistory = findViewById(R.id.list_history);
listRoom = findViewById(R.id.list_room);

View File

@@ -143,7 +143,7 @@ public abstract class AbsMainMessageChatListFragment extends Fragment {
isNet = true;
for (BaseUiConversation conversation : srcList) {
map.put(conversation.mCore.getTargetId(), conversation);
if (conversation.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
if (conversation.mCore.getConversationType() == Conversation.ConversationType.PRIVATE&& !conversation.mCore.getTargetId().equals("__system__")) {
uids.add(conversation.mCore.getTargetId());
}
}

View File

@@ -0,0 +1,48 @@
package com.yunbao.common.fragment;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModel;
import com.facebook.all.All;
import com.yunbao.common.R;
import com.yunbao.common.utils.UiConversationCodeUtil;
public class ChatViewModel extends ViewModel {
private int mChatFilter = UiConversationCodeUtil.FILTER_ALL;
public int getChatFilter() {
return mChatFilter;
}
public void setChatFilter(int mChatFilter) {
this.mChatFilter = mChatFilter;
}
public int getTitleTextId() {
int id = R.string.all_chats;
switch (mChatFilter) {
case UiConversationCodeUtil.FILTER_ALL:
id = R.string.all_chats;
break;
case UiConversationCodeUtil.FILTER_ONLINE:
id = R.string.online_only;
break;
case UiConversationCodeUtil.FILTER_OFFLINE:
id = R.string.offline_only;
break;
case UiConversationCodeUtil.FILTER_READ:
id = R.string.read_only;
break;
case UiConversationCodeUtil.FILTER_UNREAD:
id = R.string.unread_only;
break;
}
return id;
}
}

View File

@@ -0,0 +1,114 @@
package com.yunbao.common.fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.R;
import com.yunbao.common.adapter.LiveDataHistoryAdapter;
import com.yunbao.common.bean.LiveDataHistoryBean;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.ViewUtils;
import java.util.ArrayList;
import java.util.List;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
public class LiveDataHistoryFragment extends Fragment {
protected SmartRefreshLayout mRefreshLayout;
protected RecyclerView mList;
private LiveDataHistoryAdapter mAdapter;
List<LiveDataHistoryBean> list = new ArrayList<>();
private View emptyView;
private Context mContext;
private String mStream;
private int mPageCount = 1;//页数
public LiveDataHistoryFragment(Context context,String stream) {
this.mContext =context;
this.mStream = stream;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
emptyView = inflater.inflate(R.layout.view_layout_msg,container, false);
ViewUtils.findViewById(emptyView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_addressbook_not_search);
ViewUtils.findViewById(emptyView,R.id.textView, TextView.class).setText(R.string.not_data_message_address_book_list);
return inflater.inflate(R.layout.live_data_history_list_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mAdapter = new LiveDataHistoryAdapter(mContext,list);
this.mList = (RecyclerView) view.findViewById(R.id.rc_conversation_list);
this.mRefreshLayout = (SmartRefreshLayout) view.findViewById(R.id.rc_refresh);
LinearLayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
this.mList.setLayoutManager(layoutManager);
mList.setAdapter(mAdapter);
initRefreshView();
initData();
}
protected void initRefreshView() {
this.mRefreshLayout.setNestedScrollingEnabled(false);
this.mRefreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
this.mRefreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
this.mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
mPageCount = 1;
initData();
}
});
this.mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
mPageCount++;
initData();
}
});
}
private void initData() {
CommonHttpUtil.getLiveDataHistoryList(mStream, String.valueOf(mPageCount),new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info != null) {
JSONObject obj = JSON.parseObject(info[0]);
List<LiveDataHistoryBean> tempList = JSON.parseArray(obj.getString("data"), LiveDataHistoryBean.class);
if(mPageCount==1){
list = tempList;
mAdapter.setDataCollection(list);
mRefreshLayout.finishRefresh(true);
}else{
list.addAll(tempList);
mAdapter.setDataCollection(list);
mRefreshLayout.finishLoadMore(true);
}
} else {
ToastUtil.show(msg);
}
}
});
}
}

View File

@@ -0,0 +1,95 @@
package com.yunbao.common.fragment;
import static com.umeng.commonsdk.stateless.UMSLEnvelopeBuild.mContext;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.adapter.LiveDataInfoRecyclerAdapter;
import com.yunbao.common.bean.LiveDataInfoModel;
import com.yunbao.common.bean.LiveDataInfoNowModel;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.ToastUtil;
import java.util.ArrayList;
import java.util.List;
public class LiveDataNowFragment extends Fragment {
private RecyclerView recyclerView;
private LiveDataInfoRecyclerAdapter adapter;
private List<LiveDataInfoNowModel> list;
private String mLiveUid;
private onDataResult onDataResult;
private String mStream;
public LiveDataNowFragment(Context context, String liveUid,String mStream,LiveDataNowFragment.onDataResult onDataResult) {
this.mLiveUid = liveUid;
this.onDataResult = onDataResult;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.live_data_now_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.live_data_list);
adapter = new LiveDataInfoRecyclerAdapter(getContext());
recyclerView.setAdapter(adapter);
initData();
}
private void initData() {
list = new ArrayList<>();
list.add(new LiveDataInfoNowModel("#00FFFF", getContext().getString(R.string.live_data_coin), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel("#FFF69F", getContext().getString(R.string.live_data_gold), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_accept), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_enter), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_attention), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_attention_rate), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_fan_group), getContext().getString(R.string.live_data_loading)));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_fan_group_rate), getContext().getString(R.string.live_data_loading)));
adapter.setList(list);
LiveNetManager.get(getContext())
.getLiveData(mLiveUid,mStream, new HttpCallback<LiveDataInfoModel>() {
@Override
public void onSuccess(com.yunbao.common.bean.LiveDataInfoModel data) {
list.clear();
list.add(new LiveDataInfoNowModel("#00FFFF", getContext().getString(R.string.live_data_coin), data.getTotalCoin() + ""));
list.add(new LiveDataInfoNowModel("#FFF69F", getContext().getString(R.string.live_data_gold), data.getTotalGold() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_accept), data.getAcceptNum() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_enter), data.getEnterNum() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_attention), data.getAttentionNum() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_attention_rate), data.getAttentionNumRate() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_fan_group), data.getFanGroupNum() + ""));
list.add(new LiveDataInfoNowModel(getContext().getString(R.string.live_data_fan_group_rate), data.getFanGroupNumRate() + ""));
adapter.setList(list);
if(onDataResult!=null){
onDataResult.Result(data.getTotalCoin() + "",data.getAcceptNum() + "");
}
}
@Override
public void onError(String error) {
ToastUtil.show(mContext.getString(com.yunbao.common.R.string.net_error));
}
});
}
public interface onDataResult{
void Result(String countZs,String countPerson);
}
}

View File

@@ -1,6 +1,7 @@
package com.yunbao.common.fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -19,6 +20,7 @@ import com.yunbao.common.bean.WishModel2;
import com.yunbao.common.event.LiveNewWishListCloseEvent;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
@@ -34,7 +36,11 @@ public class LiveNewWishListFragment extends BaseFragment {
private RecyclerView wishList;
private LiveNewWishAdapter liveNewWishAdapter;
private ImageView imageView2, tvDone;
private CommonCallback<Boolean> mSetResultCallback ;
public void setResultCallback(CommonCallback<Boolean> mCommonCallback) {
this.mSetResultCallback = mCommonCallback;
}
@Override
public View createView(LayoutInflater layoutInflater, ViewGroup viewGroup) {
return layoutInflater.inflate(R.layout.view_live_new_wish, viewGroup, false);
@@ -151,6 +157,9 @@ public class LiveNewWishListFragment extends BaseFragment {
@Override
public void onSuccess(String data) {
ToastUtil.show(WordUtil.isNewZh()?"修改成功":"Success");
if (mSetResultCallback!=null){
mSetResultCallback.callback(true);
}
}
@Override
@@ -183,6 +192,10 @@ public class LiveNewWishListFragment extends BaseFragment {
@Override
public void onSuccess(String data) {
ToastUtil.show(WordUtil.isNewZh()?"修改成功":"Success");
//这里需要通知刷新心愿信息
if (mSetResultCallback!=null){
mSetResultCallback.callback(true);
}
}
@Override
@@ -202,6 +215,9 @@ public class LiveNewWishListFragment extends BaseFragment {
@Override
public void onSuccess(String data) {
ToastUtil.show(WordUtil.isNewZh()?"修改成功":"Success");
if (mSetResultCallback!=null){
mSetResultCallback.callback(true);
}
}
@Override

View File

@@ -1,6 +1,8 @@
package com.yunbao.common.fragment;
import android.os.Bundle;
import android.os.Parcel;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,11 +11,13 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.yunbao.common.R;
import com.yunbao.common.adapter.MainConversationListAdapter;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.UiConversationCodeUtil;
import com.yunbao.common.utils.WordUtil;
import java.util.ArrayList;
@@ -26,16 +30,20 @@ import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.event.Event;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.MessageContent;
import io.rong.imlib.model.SearchConversationResult;
public class MainMessageChatFragment extends ConversationListFragment {
private static final String TAG = "融云列表";
int listHashCode = 0;
// ChatViewModel chatViewModel;
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.i(TAG, "onCreateView: 创建融云");
// chatViewModel = (ChatViewModel)(new ViewModelProvider(requireActivity())).get(ChatViewModel.class);
return inflater.inflate(R.layout.rc_conversationlist_fragment, container, false);
}
@@ -46,10 +54,12 @@ public class MainMessageChatFragment extends ConversationListFragment {
mConversationListViewModel.getConversationListLiveData().observe(this.getViewLifecycleOwner(), new Observer<List<BaseUiConversation>>() {
@Override
public void onChanged(List<BaseUiConversation> uiConversations) {
if (listHashCode != uiConversations.hashCode()) {
listHashCode = uiConversations.hashCode();
int hashCode = uiConversations.hashCode();
if (listHashCode != hashCode) {
listHashCode = hashCode;
((MainConversationListAdapter) mAdapter).onFinish();
}
}
});
mConversationListViewModel.getRefreshEventLiveData().observe(this.getViewLifecycleOwner(), new Observer<Event.RefreshEvent>() {
@@ -58,7 +68,6 @@ public class MainMessageChatFragment extends ConversationListFragment {
listHashCode = 0;
}
});
}
public void setEmptyView(int viewLayoutMsgId) {
@@ -70,7 +79,16 @@ public class MainMessageChatFragment extends ConversationListFragment {
}
public void refreshData() {
mRefreshLayout.autoRefresh();
//onConversationListRefresh(mRefreshLayout)
}
public void search(String search) {
if (TextUtils.isEmpty(search)){
mRefreshLayout.autoRefresh();
return;
}
((MainConversationListAdapter) mAdapter).setSearch();
getContactsList(search);
}
@@ -84,10 +102,11 @@ public class MainMessageChatFragment extends ConversationListFragment {
List<String> uidList = new ArrayList<>();
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setMessage(new Message());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_contacts));
Log.i("聊天数据源设置数据", "聊天数据源: " + conversation.mCore.getObjectName());
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
System.err.println(" ----------------------->" + mAdapter.getData().size());
for (BaseUiConversation cn : ((MainConversationListAdapter) mAdapter).getSrcList()) {
@@ -126,7 +145,9 @@ public class MainMessageChatFragment extends ConversationListFragment {
@Override
public void onSuccess(List<SearchConversationResult> searchConversationResults) {
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setMessage(new Message());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_chat_records));
Log.i("聊天数据源设置数据", "聊天数据源: " + conversation.mCore.getObjectName());
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
@@ -144,7 +165,10 @@ public class MainMessageChatFragment extends ConversationListFragment {
list.remove(list.size() - 1);
}
list.addAll(data);
mAdapter.setDataCollection(list);
for (BaseUiConversation cn : list){
Log.i("聊天数据源搜索前的", cn.mCore.getConversationTitle() + "|" + cn.mCore.getPortraitUrl() + "|" + cn.mCore.getTargetId());
}
((MainConversationListAdapter) mAdapter).setDataCollectionV2(list,true);
}
@Override
@@ -156,17 +180,19 @@ public class MainMessageChatFragment extends ConversationListFragment {
}
public void onChatList() {
if(mConversationListViewModel==null)return;
if (mConversationListViewModel == null) return;
((MainConversationListAdapter) mAdapter).setChat();
((MainConversationListAdapter) mAdapter).clear();
System.out.println(">!>!>!>!!>"+mConversationListViewModel);
System.out.println(">!>!>!>!!>" + mConversationListViewModel);
subscribeUi();
mRefreshLayout.autoRefresh();
}
@Override
protected ConversationListAdapter onResolveAdapter() {
this.mAdapter = new MainConversationListAdapter(getContext());
MainConversationListAdapter adapter = new MainConversationListAdapter(getContext());
// adapter.setFilter(chatViewModel.getChatFilter());
this.mAdapter = adapter;
return this.mAdapter;
}
}

View File

@@ -13,6 +13,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.yunbao.common.R;
@@ -49,7 +50,7 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
public MainMessageChatListFragment(Context mContext) {
this.mContext =mContext;
}
ChatViewModel chatViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -62,8 +63,10 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
@Override
public void onResume() {
super.onResume();
chatViewModel = (new ViewModelProvider(requireActivity())).get(ChatViewModel.class);
conversationListFragment = new MainMessageChatFragment();
setAdapter(conversationListFragment.getAdapter());
mAdapter.setFilter(chatViewModel.getChatFilter());
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment);
@@ -104,6 +107,7 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
uids.add(conversation.mCore.getTargetId());
}
}
Log.i("更新的用户数据信息", "getUserInfo");
getUserInfo(uids);
}
});
@@ -127,9 +131,7 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
baseUiConversation.mCore.setPortraitUrl(datum.getAvatar());
String remark = InstructorRemarkManager.get(getContext()).getInstructorRemark().get(datum.getId());
baseUiConversation.mCore.setConversationTitle(StringUtil.isEmpty(remark) ? datum.getUserNiceName() : remark);
list.add(baseUiConversation);
UserInfo userInfo = new UserInfo(baseUiConversation.mCore.getTargetId(),
baseUiConversation.mCore.getConversationTitle(),
Uri.parse(baseUiConversation.mCore.getPortraitUrl()));
@@ -150,7 +152,9 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
}
mAdapter.setDataCollection(srcList);
//mAdapter.onFinish();
recyclerView.scrollToPosition(position);
if ( recyclerView!=null && mAdapter.getSrcList().size()>position){
recyclerView.scrollToPosition(position);
}
}
onRefreshFinished();
onLoadMoreFinished();
@@ -165,6 +169,16 @@ public class MainMessageChatListFragment extends AbsMainMessageChatListFragment
}
public int getFilter() {
return mAdapter.getFilter();
}
public void setFilter(int mFilter) {
mAdapter.setFilter(mFilter);
chatViewModel.setChatFilter(mFilter);
conversationListFragment.refreshData();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.widget.ImageView;
import androidx.annotation.NonNull;
@@ -280,13 +281,12 @@ public class ImgLoader {
if (width != -1 && height != -1) {
builder = builder.override(width, height);
}
builder.thumbnail(thumbnail).skipMemoryCache(SKIP_MEMORY_CACHE).into(new CustomTarget<Drawable>() {
builder.skipMemoryCache(SKIP_MEMORY_CACHE).into(new CustomTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
if (callback != null) {
callback.onLoadSuccess(resource);
}
}

View File

@@ -20,7 +20,7 @@ public class CommonHttpConsts {
public static final String DOWNLOAD_GIF = "downloadGif";
public static final String GET_BALANCE = "getBalance";
public static final String CHECK_TOKEN_INVALID = "checkTokenInvalid";
public static final String NOTIFY_GOOGLE = "Charge.google_pay";
public static final String NOTIFY_GOOGLE = "Charge.goole_validate_panduola";
public static final String COMMUNITY_SETREPORT = "Community.setReport";
public static final String GET_USER_HOME = "getUserHome";

View File

@@ -417,18 +417,15 @@ public class CommonHttpUtil {
.params("purchaseToken", purchaseToken)
.params("productId", productId)
.params("orderno", orderno)
.params("package_name", "com.pandora.sy")
.params("package_name", CommonAppContext.sInstance.getPackageName())
.execute(callback);
}
public static void notifyGoogle(String purchaseToken, String orderNo, String tradeNo, String allData, String gps_adid, HttpCallback callback) {
public static void notifyGoogle(String purchaseToken, String productId, HttpCallback callback) {
HttpClient.getInstance().get(CommonHttpConsts.NOTIFY_GOOGLE, CommonHttpConsts.NOTIFY_GOOGLE)
.params("purchaseToken", purchaseToken)
.params("orderno", orderNo)
.params("trade_no", tradeNo)
.params("allData", allData)
.params("gps_adid", gps_adid)
.params("package_name", "com.pandora.sy")
.params("productId", productId)
.params("package_name", CommonAppContext.sInstance.getPackageName())
.execute(callback);
}
@@ -437,7 +434,7 @@ public class CommonHttpUtil {
.params("purchaseToken", purchaseToken)
.params("orderno", orderNo)
.params("trade_no", tradeNo)
.params("package_name", "com.pandora.sy")
.params("package_name", CommonAppContext.sInstance.getPackageName())
.execute(callback);
}
@@ -723,6 +720,16 @@ public class CommonHttpUtil {
.execute(callback);
}
/**
*获取聊天列表用户在线状态
* @param callback
*/
public static void getLiveDataHistoryList(String stream,String page,HttpCallback callback) {
HttpClient.getInstance().get("live.getLiveGiftList", "live.getLiveGiftList")
.params("stream",stream)
.params("page",page)
.execute(callback);
}
}

View File

@@ -31,19 +31,28 @@ public class LiveHttpUtil {
HttpClient.getInstance().cancel(tag);
}
/**
* 获取当前直播间的用户列表
*/
public static void getUserList(String liveuid, String stream, String type, int p, HttpCallback callback) {
public static void getUserList(String liveuid, String stream, String type, int p,String is_noble,HttpCallback callback) {
HttpClient.getInstance().get("Live.getUserLists", LiveHttpConsts.GET_USER_LIST)
.params("liveuid", liveuid)
.params("stream", stream)
.params("type", type)
.params("p", p)
.params("is_noble", is_noble)
.params("version", "" + VersionUtil.getVersion())
.execute(callback);
}
/**
* 获取当前直播间的用户列表
*/
public static void getUserList(String liveuid, String stream, String type, int p, HttpCallback callback) {
getUserList(liveuid,stream,type,p,"0",callback);
}
/**
* 获取直播用户日榜/周榜
*
@@ -543,6 +552,13 @@ public class LiveHttpUtil {
HttpClient.getInstance().get("Live.getGiftListApp", LiveHttpConsts.GET_GIFT_LIST)
.execute(callback);
}
/**
* 获取礼物列表,同时会返回剩余的钱(新版) -用于获取联系方式时的礼物设置
*/
public static void getHotGiftList(HttpCallback callback) {
HttpClient.getInstance().get("Gift.getHotGiftList", LiveHttpConsts.GET_GIFT_LIST)
.execute(callback);
}
/**
* 获取包裹列表
@@ -595,7 +611,7 @@ public class LiveHttpUtil {
* 完成新手任務
*/
public static void setFrontTask(String type, HttpCallback callback) {
HttpClient.getInstance().get("User.setFrontTask", "User.setFrontTask")
HttpClient.getInstance().get("tasknew.sendFreeGift", "tasknew.sendFreeGift")
.params("type", type)
.execute(callback);
}
@@ -604,12 +620,22 @@ public class LiveHttpUtil {
* 完成新手任務
*/
public static void setFrontTask(String type, String liveuid, HttpCallback callback) {
HttpClient.getInstance().get("User.setFrontTask", "User.setFrontTask")
.params("type", type)
HttpClient.getInstance().get("tasknew.sendFreeGift", "tasknew.sendFreeGift")
.params("liveuid", liveuid)
.execute(callback);
}
/**
* 完成新手任務
*/
public static void setFrontTaskNew(String liveuid, HttpCallback callback) {
HttpClient.getInstance().get("tasknew.sendFreeGift", "tasknew.sendFreeGift")
.params("liveuid", liveuid)
.params("token", true)
.params("uid", true)
.execute(callback);
}
/**
* 修改心愿单列表
*/

View File

@@ -1,105 +1,7 @@
package com.yunbao.common.http;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.bean.ActiveBean;
import com.yunbao.common.bean.ActiveModel;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.AnchorRecommendModel;
import com.yunbao.common.bean.AvatarBean;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.BattlePassPoints;
import com.yunbao.common.bean.BattlePassTask;
import com.yunbao.common.bean.BattlePassUserInfoBean;
import com.yunbao.common.bean.BlindBoxInfoModel;
import com.yunbao.common.bean.CareerBean;
import com.yunbao.common.bean.CheckLiveModel;
import com.yunbao.common.bean.CheckRemainingBalance;
import com.yunbao.common.bean.CheckUpgradesModel;
import com.yunbao.common.bean.ContributeModel;
import com.yunbao.common.bean.CoolConfig;
import com.yunbao.common.bean.CreateSudRoomModel;
import com.yunbao.common.bean.CustomSidebarInfoModel;
import com.yunbao.common.bean.DiscountsModel;
import com.yunbao.common.bean.EnterRoomNewModel;
import com.yunbao.common.bean.FaceBookUpModel;
import com.yunbao.common.bean.FansCheckRed;
import com.yunbao.common.bean.FansGroupGiftPack;
import com.yunbao.common.bean.FansGroupGiftPackInfo;
import com.yunbao.common.bean.FirstLoginBean;
import com.yunbao.common.bean.GiftAlreadyWallModel;
import com.yunbao.common.bean.GiftGuideModel;
import com.yunbao.common.bean.GiftNamingInfoModel;
import com.yunbao.common.bean.GiftWallBean;
import com.yunbao.common.bean.GiftWallGiftDetail;
import com.yunbao.common.bean.GiftWallInfoBean;
import com.yunbao.common.bean.GiftWallMainTab2ClassicInfoBean;
import com.yunbao.common.bean.GiftWallModel;
import com.yunbao.common.bean.GiftWallTab2Bean;
import com.yunbao.common.bean.GuardGetGuardOpenInfoModel;
import com.yunbao.common.bean.GuardGetGuardUserInfoModel;
import com.yunbao.common.bean.HomeUserExhibitInfoBean;
import com.yunbao.common.bean.HomeUserInfoBean;
import com.yunbao.common.bean.HourRank;
import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LinkMicUserBeanV2;
import com.yunbao.common.bean.ListInfoMessageModel;
import com.yunbao.common.bean.LiveAiRobotBean;
import com.yunbao.common.bean.LiveAnchorCallMeModel;
import com.yunbao.common.bean.LiveAnchorSayModel;
import com.yunbao.common.bean.LiveBattlePassRewardsBean;
import com.yunbao.common.bean.LiveDataInfoModel;
import com.yunbao.common.bean.LiveInfoModel;
import com.yunbao.common.bean.LiveRoomActivityBanner;
import com.yunbao.common.bean.LiveRoomVoteModel;
import com.yunbao.common.bean.LiveStetUpStatusModel;
import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.bean.LiveUserMailBoxModel;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.MessageChatIsAnchor;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.bean.MessageHiBean;
import com.yunbao.common.bean.MessageSayHiBean;
import com.yunbao.common.bean.MessageSayHiStartBean;
import com.yunbao.common.bean.MessageUserInfoBean;
import com.yunbao.common.bean.MsgSwitchDetailModel;
import com.yunbao.common.bean.NewPeopleInfo;
import com.yunbao.common.bean.NobleRankHideUserListModel;
import com.yunbao.common.bean.NobleTrumpetModel;
import com.yunbao.common.bean.OpenAdModel;
import com.yunbao.common.bean.PkRankBean;
import com.yunbao.common.bean.PrankGiftResultBean;
import com.yunbao.common.bean.PrankHttpTurntableBean;
import com.yunbao.common.bean.PrankProgressBean;
import com.yunbao.common.bean.QiniuLog;
import com.yunbao.common.bean.QuickGiftSendGiftModel;
import com.yunbao.common.bean.RandomPkUserBean;
import com.yunbao.common.bean.RankPkInfoBean;
import com.yunbao.common.bean.RedPacketDetailsBean;
import com.yunbao.common.bean.RedPacketGiftModel;
import com.yunbao.common.bean.RedPacketInfoModel;
import com.yunbao.common.bean.RedPacketListBean;
import com.yunbao.common.bean.RoomMicStatusModel;
import com.yunbao.common.bean.SearchModel;
import com.yunbao.common.bean.SendMoneyLongModel;
import com.yunbao.common.bean.SetAttentsModel;
import com.yunbao.common.bean.ShareBean;
import com.yunbao.common.bean.SlideInBannerModel;
import com.yunbao.common.bean.StarChallengeStatusModel;
import com.yunbao.common.bean.SudGameInfoBean;
import com.yunbao.common.bean.SudGameScoreBean;
import com.yunbao.common.bean.SudGameUserModel;
import com.yunbao.common.bean.SudRoomListModel;
import com.yunbao.common.bean.SudgameCodeModel;
import com.yunbao.common.bean.SwTokenModel;
import com.yunbao.common.bean.UserAreaBean;
import com.yunbao.common.bean.UserAvatarSelectBean;
import com.yunbao.common.bean.UserBean;
import com.yunbao.common.bean.VipModel;
import com.yunbao.common.bean.WishListGiftConfModel;
import com.yunbao.common.bean.WishListModel;
import com.yunbao.common.bean.sendMoneyLongListModel;
import com.yunbao.common.bean.*;
import com.yunbao.common.event.CheckCurrencyModel;
import java.util.List;
@@ -138,6 +40,7 @@ public interface PDLiveApi {
@Field("user_pass") String passWord,
@Field("uuid_Device") String uuidDevice,
@Field("pushid") String pushid,
@Field("app_from") String PDL,
@Field("lastlogindevice") String lastlogindevice,
@Field("langue") String langue
);
@@ -312,6 +215,15 @@ public interface PDLiveApi {
@GET("/api/public/?service=Live.getHourChartRank")
Observable<ResponseModel<List<HourRank>>> getHourChartRank(@Query("liveuid") String liveuid);
/**
* 小时榜接口
*
* @param liveuid 直播间id
*/
@GET("/api/public/?service=Tasknew.sendFreeGift")
Observable<ResponseModel<List<BaseModel>>> sendFreeGift(@Query("liveuid") String liveuid);
/**
* 清除系统消息的未读数
*/
@@ -343,7 +255,7 @@ public interface PDLiveApi {
* 【新人特惠】【趣味游戏】【幸运天使】
*/
@GET("/api/public/?service=Live.getLiveRoomActivtyBanner")
Observable<ResponseModel<List<LiveRoomActivityBanner>>> getLiveRoomActivityBanner();
Observable<ResponseModel<List<LiveRoomActivityBanner>>> getLiveRoomActivityBanner(@Query("langue") String language,@Query("version") String version);
/**
* 新侧边栏请求
@@ -360,7 +272,7 @@ public interface PDLiveApi {
/**
* PK排位赛接口
*/
@GET("/api/public/?service=Ranking.getAnchorRankData")
@GET("/api/public/?service=Ranking.getAnchorRankData&app_from=PDL")
Observable<ResponseModel<PkRankBean>> getPkRanksList(@Query("anchor_id") String anchorId, @Query("anchor_id2") String pkUid);
/**
@@ -654,7 +566,8 @@ public interface PDLiveApi {
*/
@GET("/api/public/?service=Live.getLiveStatisticalData")
Observable<ResponseModel<LiveDataInfoModel>> getLiveDataInfo(
@Query("liveuid") String liveUid
@Query("liveuid") String liveUid,
@Query("stream") String stream
);
/**
@@ -684,6 +597,7 @@ public interface PDLiveApi {
Observable<ResponseModel<String>> setLivePreviewInfo(
@Query("liveuid") String liveUid,
@Query("isShow") int isShow,
@Query("title") String title ,
@Query("content") String content,
@Query("styleImage") String styleImage
);
@@ -1295,7 +1209,7 @@ public interface PDLiveApi {
@Query("open_off") int status
);
@GET("/api/public/?service=Pdlmsg.sendBefore")
@GET("/api/public/?service=Pdlmsg.sendBefore&new_pop=1")
Observable<ResponseModel<MessageSayHiBean>> getMessageSayHiTimer(
);
@@ -1489,4 +1403,10 @@ public interface PDLiveApi {
@Query("live_uid")String liveUid
);
/**
* 获取開播提示
*/
@GET("/api/public/?service=live.getStartTips")
Observable<ResponseModel<List<LiveOpenTipsBean>>> getLiveDataInfo();
}

View File

@@ -1,6 +1,8 @@
package com.yunbao.common.http.live;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils;
import android.util.Log;
@@ -54,6 +56,7 @@ import com.yunbao.common.bean.LiveAnchorSayModel;
import com.yunbao.common.bean.LiveBattlePassRewardsBean;
import com.yunbao.common.bean.LiveDataInfoModel;
import com.yunbao.common.bean.LiveInfoModel;
import com.yunbao.common.bean.LiveOpenTipsBean;
import com.yunbao.common.bean.LiveRoomActivityBanner;
import com.yunbao.common.bean.LiveRoomVoteModel;
import com.yunbao.common.bean.LiveStetUpStatusModel;
@@ -347,8 +350,17 @@ public class LiveNetManager {
* 获取 【新人特惠】【趣味游戏】【幸运天使】
*/
public void getLiveRoomActivityBanner(HttpCallback<List<LiveRoomActivityBanner>> callback) {
//获取版本名称
String versionName = "";
try {
PackageManager manager = mContext.getPackageManager();
PackageInfo info = manager.getPackageInfo(mContext.getPackageName(), 0);
versionName = info.versionName;
} catch (Exception e) {
e.printStackTrace();
}
API.get().pdLiveApi(mContext)
.getLiveRoomActivityBanner()
.getLiveRoomActivityBanner( WordUtil.isNewZh()?"chinese":"english",versionName)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
@@ -1215,9 +1227,9 @@ public class LiveNetManager {
/**
* 获取直播数据
*/
public void getLiveData(String liveUid, HttpCallback<LiveDataInfoModel> callback) {
public void getLiveData(String liveUid,String stream, HttpCallback<LiveDataInfoModel> callback) {
API.get().pdLiveApi(mContext)
.getLiveDataInfo(liveUid)
.getLiveDataInfo(liveUid,stream)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
@@ -1274,10 +1286,11 @@ public class LiveNetManager {
*/
public void setLivePreviewInfo(String liveUid,
int isShow,
String title,
String content,
String styleImage, HttpCallback<String> callback) {
API.get().pdLiveApi(mContext)
.setLivePreviewInfo(liveUid, isShow, content, styleImage)
.setLivePreviewInfo(liveUid, isShow,title, content, styleImage)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listResponseModel -> {
@@ -4243,7 +4256,6 @@ public class LiveNetManager {
return MultipartBody.Part.createFormData("file", file.getName(), requestBody);
}
public void getSwToken( HttpCallback<SwTokenModel> callback) {
API.get().pdLiveApi(mContext)
.getSwToken()
@@ -4265,7 +4277,29 @@ public class LiveNetManager {
}
}
}).isDisposed();
}
/**
* 获取开播提示信息
*/
public void getLiveOpenTips(HttpCallback<List<LiveOpenTipsBean>> callback) {
API.get().pdLiveApi(mContext)
.getLiveDataInfo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(roomMicStatusModelResponseModel -> {
if (callback != null) {
callback.onSuccess(roomMicStatusModelResponseModel.getData().getInfo());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
/**

View File

@@ -55,7 +55,7 @@ public class MainNetManager {
* @param callback 网络请求回调
*/
public void login(String phoneNum, String pwd, String uuid, HttpCallback<IMLoginModel> callback) {
API.get().pdLiveApi(mContext).loginByManager(phoneNum, pwd, uuid, "", "Android", WordUtil.isNewZh()?"chinese":"english")
API.get().pdLiveApi(mContext).loginByManager(phoneNum, pwd, uuid, "", "PDL","Android", WordUtil.isNewZh()?"chinese":"english")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<IMLoginModel>>() {

View File

@@ -40,6 +40,24 @@ public class GiftQuantityManager extends BaseCacheManager {
return giftQuantityModels;
}
/**
* 获取指导员备注信息
*
* @return
*/
public List<GiftQuantityModel> getGiftQuantityNew() {
List<GiftQuantityModel> giftQuantityModels = getList(KEY_GIFT_QUANTITY, new TypeToken<List<GiftQuantityModel>>() {}.getType());
if (giftQuantityModels == null || giftQuantityModels.size() == 0) {
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("9999").setFontColour("#ffffff"));
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("3344").setFontColour("#ffffff"));
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("1314").setFontColour("#ffffff"));
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("520").setFontColour("#ffffff"));
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("50").setFontColour("#ffffff"));
giftQuantityModels.add(new GiftQuantityModel().setGiftQuantity("10").setFontColour("#ffffff"));
}
return giftQuantityModels;
}
/**
* 缓存等级图标
*

View File

@@ -536,6 +536,7 @@ public class IMLoginManager extends BaseCacheManager {
HttpClient.getInstance().get("User.getBaseInfos", "getBaseInfo")
.params("uid", uid)
.params("token", token)
.params("key1", RongcloudIMManager.RONG_IM_KEY)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {

View File

@@ -123,6 +123,7 @@ public class InstructorRemarkManager extends BaseCacheManager {
@Override
public void run() {
IMLoginModel userInfo = IMLoginManager.get(context).getUserInfo();
if(userInfo==null)return;
HttpClient.getInstance().get("User.getInstructorRemark", "getInstructorRemark")
.params("uid", userInfo.getId(), true)
.params("token", userInfo.getToken(), true)

View File

@@ -0,0 +1,19 @@
package com.yunbao.common.manager.imrongcloud;
import java.lang.reflect.Method;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imlib.model.UserInfo;
public class PDRongUserInfoManager {
public static void saveUserInfo(UserInfo userInfo) {
RongUserInfoManager instance = RongUserInfoManager.getInstance();
try {
Method method = instance.getClass().getDeclaredMethod("saveUserInfoCache", userInfo.getClass());
method.setAccessible(true);
method.invoke(instance, userInfo);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -51,7 +51,7 @@ public class RongcloudIMManager {
if (CommonAppConfig.HOST.contains("ceshi")) {
RONG_IM_KEY = "pvxdm17jpd3hr"; //测试服key
} else {
RONG_IM_KEY = "uwd1c0sxu1p71"; //正式服key
RONG_IM_KEY = "6tnym1br6lhu7"; //正式服key //上一个Key值uwd1c0sxu1p71
}
}

View File

@@ -0,0 +1,297 @@
package com.yunbao.common.pay.google;
import android.app.Activity;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ProductDetails;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.QueryProductDetailsParams;
import com.android.billingclient.api.QueryPurchasesParams;
import com.google.android.gms.ads.identifier.AdvertisingIdClient;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.common.collect.ImmutableList;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.R;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import java.util.ArrayList;
import java.util.List;
//谷歌支付
public class GooglePlay implements PurchasesUpdatedListener {
private String TAG = "mLog";
private BillingClient billingClient;
private GoogleBillingListener billingListener;
private GooglePlay() {
init();
}
private boolean init() {
if (getGoogleService() && billingClient == null) {
billingClient = BillingClient.newBuilder(CommonAppContext.sInstance)
.setListener(this)
.enablePendingPurchases()
.build();
startConnection();
return true;
}
if (billingClient != null && !billingClient.isReady()) {//没有连接的话去连接
startConnection();
}
if (billingClient == null)
return false;
return true;
}
private void startConnection() {
if (!billingClient.isReady()) {
//请求连接到GooglePay
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "连接到GooglePay失败 code = " + code + " msg = " + msg);
return;
}
Log.e(TAG, "连接到GooglePay成功");
}
//连接失败
@Override
public void onBillingServiceDisconnected() {
Log.e(TAG, "连接到GooglePay失败请重试");
}
});
}
}
//点击商品,先查询商品 然后出来支付界面,调用下单
public void purchase(Activity activity, String orderNumber, String id) {
if (!init()) {
return;
}
ImmutableList<QueryProductDetailsParams.Product> productList = ImmutableList.of(QueryProductDetailsParams.Product.newBuilder()
.setProductId(id)
.setProductType(BillingClient.ProductType.INAPP)
.build());
QueryProductDetailsParams queryProductDetailsParams =
QueryProductDetailsParams.newBuilder()
.setProductList(productList)
.build();
billingClient.queryProductDetailsAsync(
queryProductDetailsParams,
(billingResult, list) -> {
//查询商品成功
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK || list == null || list.isEmpty()) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "查询商品失败 code = " + code + " msg = " + msg);
return;
}
Log.e(TAG, "查询商品成功");
buyIt(activity, orderNumber, list.get(0));
}
);
}
//开始下单,准备生成订单了
private void buyIt(Activity activity, String orderNumber, ProductDetails productDetails) {
List<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = new ArrayList<>();
productDetailsParamsList.add(BillingFlowParams.ProductDetailsParams.newBuilder()
// retrieve a value for "productDetails" by calling queryProductDetailsAsync()
.setProductDetails(productDetails)
// For one-time products, "setOfferToken" method shouldn't be called.
// For subscriptions, to get an offer token, call
// ProductDetails.subscriptionOfferDetails() for a list of offers
// that are available to the user.
//一次性商品不需要传token
// .setOfferToken(selectedOfferToken)
.build());
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(productDetailsParamsList)
.setObfuscatedAccountId(orderNumber)//好像是账号id
.build();
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
int code = billingResult.getResponseCode();
if (code != BillingClient.BillingResponseCode.OK) {
String msg = billingResult.getDebugMessage();
Log.e(TAG, "购买商品失败 code = " + code + " msg = " + msg);
// ToastUtil.show(getString(R.string.pay_suc));
return;
}
Log.e(TAG, "购买商品 " + productDetails.toString());
}
//消耗商品 支付成功之后,调用我们后台下发商品成功之后,调用消耗
public void consume(List<Purchase> list) {
if (!init()) {
return;
}
for (Purchase purchase : list) {
getConsumeGoods(purchase);
}
}
/**
* 消耗所有商品
*/
public void consumeAll() {
if (!init()) {
return;
}
//以下示例展示了如何提取用户的订阅购买交易。请注意queryPurchasesAsync() 仅返回有效订阅和非消耗型一次性购买交易。
QueryPurchasesParams inAppPurchasesQuery = QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.INAPP).build();
billingClient.queryPurchasesAsync(inAppPurchasesQuery, (billingResult, list) -> {
if (BillingClient.BillingResponseCode.OK == billingResult.getResponseCode()) {
for (Purchase purchase : list) {
//0:PurchaseState.UNSPECIFIED_STATE未知状态
//1:PurchaseState.PURCHASED付款完成
//2:PurchaseState.PENDING购买正在等待付款完成。
if (Purchase.PurchaseState.PURCHASED == purchase.getPurchaseState()) {
//调用google去消费
//如果之后还出现谷歌掉单的行为在来处理
CommonHttpUtil.notifyGoogle(purchase.getPurchaseToken(),
purchase.getProducts().get(0), new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
getConsumeGoods(purchase);
}
}
});
}
}
}
});
}
/**
* 公共消费商品接口
*/
private void getConsumeGoods(Purchase purchase) {
if (purchase != null) {
Log.i(TAG, "-----开始消耗商品:" + purchase.toString());
ConsumeParams.Builder consumeParams = ConsumeParams.newBuilder();
consumeParams.setPurchaseToken(purchase.getPurchaseToken());
//调用消耗商品方法
consumeAsync(consumeParams.build(), purchase);
}
}
/**
* 消耗商品
* int SERVICE_TIMEOUT = -3; //服务超时
* int FEATURE_NOT_SUPPORTED = -2; //不支持功能
* int SERVICE_DISCONNECTED = -1; //服务单元已断开
* int OK = 0; //成功
* int USER_CANCELED = 1; //用户按上一步或取消对话框
* int SERVICE_UNAVAILABLE = 2; //网络连接断开
* int BILLING_UNAVAILABLE = 3; //所请求的类型不支持 Google Play 结算服务 AIDL 版本
* int ITEM_UNAVAILABLE = 4; //请求的商品已不再出售。
* int DEVELOPER_ERROR = 5; //提供给 API 的参数无效。此错误也可能说明应用未针对结算服务正确签名或设置,或者在其清单中缺少必要的权限。
* int ERROR = 6; //API 操作期间出现严重错误
* int ITEM_ALREADY_OWNED = 7; //未能购买,因为已经拥有此商品
* int ITEM_NOT_OWNED = 8; //未能消费,因为尚未拥有此商品
*/
private void consumeAsync(ConsumeParams consumeParams, Purchase purchase) {
if (!init()) {
return;
}
billingClient.consumeAsync(consumeParams, (billingResult, purchaseToken) -> {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
Log.i(TAG, "-----消耗商品成功");
} else {
Log.i(TAG, "-----消耗商品失败" + billingResult.toString() + "---" + purchaseToken + "--code:" + billingResult.getResponseCode());
}
});
}
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& purchases != null) {
//支付成功
if (billingListener != null)//消耗掉商品放到外面调用我们服务器成功的时候去消耗 todo 暂时注释掉 这样可以模拟掉单的问题
billingListener.onPaySuccess(purchases);
/*
* 一旦您验证了购买交易,您的应用就可以向用户授予使用权了。若要确认与购买交易相关联的用户账号,
* 您可以使用 Purchases.products:get 返回的 ProductPurchase.obfuscatedExternalAccountId适用于应用内商品的购买交易
* 和 Purchases.subscriptions:get 返回的 SubscriptionPurchase.obfuscatedExternalAccountId适用于服务器端的订阅
* 或者 Purchase.getAccountIdentifiers() 在客户端返回的 obfuscatedAccountId如果在交易时已使用 setObfuscatedAccountId 设置该 ID
* */
// purchases.get(0).getAccountIdentifiers()
for (Purchase purchase : purchases) {
Log.d("mLog", "谷歌支付的回调 " + purchase);
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
//取消支付了
if (billingListener != null)
billingListener.onPayFailed(CommonAppContext.sInstance.getString(R.string.pay_cancel));
} else {
//支付失败
if (billingListener != null)
billingListener.onPayFailed(CommonAppContext.sInstance.getString(R.string.pay_fail));
}
}
/**
* 检测GooglePlay服务是否可用(需要导入包api "com.google.android.gms:play-services-location:11.8.0",也可以不检查,跳过这个代码)
*/
public boolean getGoogleService() {
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
if (googleApiAvailability != null) {
int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(CommonAppContext.sInstance);
return resultCode == ConnectionResult.SUCCESS;
}
return false;
}
public String getAdId() {
try {
return AdvertisingIdClient.getAdvertisingIdInfo(CommonAppContext.sInstance).getId();
} catch (Exception e) {
e.printStackTrace();
Log.e("GooglePlay", "获取谷歌的id错误了");
}
return "google_default_id";
}
public void setBillingListener(GoogleBillingListener listener) {
billingListener = listener;
}
/**
* 定义接口返回支付结果
*/
public interface GoogleBillingListener {
void onPaySuccess(List<Purchase> purchases);
void onPayFailed(String msg);
}
public static class GooglePlayHelper {
static GooglePlay googlePlay = new GooglePlay();
}
public static GooglePlay getInstance() {
return GooglePlayHelper.googlePlay;
}
}

View File

@@ -10,6 +10,7 @@ import android.util.Log;
import com.blankj.utilcode.util.LogUtils;
import com.yunbao.common.event.CheckRemainingBalanceEvent;
import com.yunbao.common.sud.decorator.game.JumpEvent;
import com.yunbao.common.sud.state.SudMGPMGState;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.ISudFSMStateHandleUtils;
@@ -372,6 +373,8 @@ public class SudFSMMGDecorator implements ISudFSMMG {
} else {
listener.onGameMGCommonGameCreateOrder(handle, mgCommonGameCreateOrder);
}
// 调用创建订单接口
JumpEvent.hit(mgCommonGameCreateOrder);
break;
case SudMGPMGState.MG_COMMON_PLAYER_ROLE_ID: // 26. 游戏通知app玩家角色(仅对狼人杀有效)
SudMGPMGState.MGCommonPlayerRoleId mgCommonPlayerRoleId = SudJsonUtils.fromJson(dataJson, SudMGPMGState.MGCommonPlayerRoleId.class);

View File

@@ -144,7 +144,7 @@ public class UploadQnImpl implements UploadStrategy {
if (isLog) {
CommonHttpUtil.getUploadQiNiuTokenLog(mGetUploadTokenCallback, list.get(0).getOriginFile().getName());
} else {
CommonHttpUtil.getUploadQiNiuToken(mGetUploadTokenCallback, isImg);
CommonHttpUtil.getUploadQiNiuTokenNew(mGetUploadTokenCallback, isImg);
}
}

View File

@@ -179,14 +179,6 @@ public class AppManager {
activityStack.clear();
}
/**
* 仅在debug下运行的代码
*/
public static void runDebugCode(Runnable runnable) {
if (BuildConfig.DEBUG) {
runnable.run();
}
}
/**

View File

@@ -7,6 +7,7 @@ import android.text.TextUtils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import io.rong.common.RLog;
import io.rong.imkit.utils.language.LangUtils;
@@ -43,6 +44,45 @@ public class DateFormatUtil {
return formattedDate;
}
public static String getTimeLiveEndString(long time) {
Date date = new Date(time); // 创建Date对象并传入时间戳参数
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); // 设置日期格式
String formattedDate = sdf.format(date); // 格式化日期字符串
return formattedDate;
}
public static String getDiffInMilliseconds(String time1, String time2, String day, String hour, String minute) {
return getTime(Long.parseLong(time1), Long.parseLong(time2), day, hour, minute);
}
//根据时间计算出 分钟,小时,天
private static String getTime(Long startTime, Long endTime, String day, String hour, String minute) {
if (startTime == null || endTime == null || startTime >= endTime) {
return "Invalid time range";
}
long diff = endTime - startTime;
long days = TimeUnit.MILLISECONDS.toDays(diff);
long hours = TimeUnit.MILLISECONDS.toHours(diff) - (days * 24);
long minutes = TimeUnit.MILLISECONDS.toMinutes(diff) - (TimeUnit.MILLISECONDS.toHours(diff) * 60);
StringBuilder stringBuilder = new StringBuilder();
if (days > 0) {
stringBuilder.append(days).append(day).append(" ");
}
if (hours > 0) {
stringBuilder.append(hours).append(hour).append(" ");
}
if (minutes > 0) {
stringBuilder.append(minutes).append(minute);
}else {
stringBuilder.append("0"+minute);
}
return stringBuilder.toString();
}
public static String getTimeStrings(long time) {
Date date = new Date(time); // 创建Date对象并传入时间戳参数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置日期格式
@@ -105,7 +145,7 @@ public class DateFormatUtil {
formatDate = formatDate(date, "yyyy/M/d");
if (showTime) {
formatDate = formatDate ;//+ " " + getTimeString(dateMillis, context);
formatDate = formatDate;//+ " " + getTimeString(dateMillis, context);
}
}

View File

@@ -0,0 +1,30 @@
package com.yunbao.common.utils;
import android.util.Log;
import com.yunbao.common.BuildConfig;
public class DebugUtils {
/**
* 打印堆栈信息
*/
public static void showStackTrace(){
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
StringBuilder sb=new StringBuilder();
for (StackTraceElement element : stackTrace) {
if(element!=null){
sb.append(element).append("\n");
}
}
Log.e("DebugUtils",sb.toString());
}
/**
* 仅在debug下运行的代码
*/
public static void runDebugCode(Runnable runnable) {
if (BuildConfig.DEBUG) {
runnable.run();
}
}
}

View File

@@ -168,6 +168,15 @@ public class DialogUitl {
showSimpleDialog(context, content, false, callback);
}
public static void showSimpleDialogString(Context context, String content,String confirmString, SimpleCallback callback) {
if (context instanceof Activity) {
if (((Activity) context).isDestroyed() || ((Activity) context).isFinishing()) {
return;
}
}
new Builder(context).setTitle(null).setContent(content).setCancelable(false).setClickCallback(callback).setConfirmString(confirmString).build().show();
}
public static void showSimpleDialog(Context context, String content, boolean cancelable, SimpleCallback callback) {
showSimpleDialog(context, null, content, cancelable, callback);
}

View File

@@ -38,6 +38,7 @@ import com.yunbao.common.http.HttpClient;
import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import org.greenrobot.eventbus.EventBus;
@@ -659,6 +660,7 @@ public class JavascriptInterfaceUtils {
HttpClient.getInstance().get("User.getBaseInfos", "getBaseInfo")
.params("uid", IMLoginManager.get(mContext).getUserInfo().getId())
.params("token", IMLoginManager.get(mContext).getUserInfo().getToken())
.params("key1", RongcloudIMManager.RONG_IM_KEY)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {

View File

@@ -0,0 +1,65 @@
package com.yunbao.common.utils;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Build;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
public class NavigationBarUtils {
public static boolean hasNavigationBar(Activity activity) {
boolean hasNavigationBar = false;
int resourceId = activity.getResources().getIdentifier("config_showNavigationBar", "bool", "android");
if (resourceId > 0) {
hasNavigationBar = activity.getResources().getBoolean(resourceId);
}
try {
hasNavigationBar |= (Boolean) ViewConfiguration.class.getDeclaredMethod("hasNavigationBar").invoke(ViewConfiguration.get(activity));
} catch (Exception e) {
e.printStackTrace();
}
// Fall back on checking the navigation bar height, if available
if (!hasNavigationBar && hasNavBarHeight()) {
hasNavigationBar = true;
}
return hasNavigationBar;
}
public static boolean hasNavBarHeight() {
Resources res = Resources.getSystem();
int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return res.getDimensionPixelSize(resourceId) > 0;
}
return false;
}
// 示例在Activity中使用该方法
public static boolean checkNavigationBar(Activity activity) {
return hasNavigationBar(activity);
}
public static int checkBarHeight(Activity activity) {
int result = 0;
Resources resources = activity.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
result = resources.getDimensionPixelSize(resourceId);
}
return result;
}
public static void setBarStatus(RelativeLayout rt_main_tab, Activity mContext){
if("Xiaomi".equals(Build.BRAND)&&"2210132C".equals(Build.MODEL)){
ViewGroup.LayoutParams params = rt_main_tab.getLayoutParams();
params.height =params.height+ NavigationBarUtils.checkBarHeight(mContext);
rt_main_tab.setLayoutParams(params);
}
}
}

View File

@@ -3,13 +3,21 @@ package com.yunbao.common.utils;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.ImageDecoder;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.PickVisualMediaRequest;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import androidx.core.content.FileProvider;
import com.blankj.utilcode.util.LogUtils;
import com.yalantis.ucrop.UCrop;
import com.yalantis.ucrop.util.FileUtils;
import com.yunbao.common.CommonAppConfig;
@@ -39,6 +47,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
private ImageResultCallback mResultCallback;
private boolean mNeedCrop;//是否需要裁剪
private boolean mNeedGif;//允许gif图
ActivityResultLauncher<PickVisualMediaRequest> launcher;
public void setNeedGif(boolean mNeedGif) {
this.mNeedGif = mNeedGif;
@@ -83,7 +92,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
if (mNeedCrop) {
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(mContext, "com.pandora.sy.fileprovider", mCameraResult);
uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() +".fileprovider", mCameraResult);
} else {
uri = Uri.fromFile(mCameraResult);
}
@@ -117,6 +126,19 @@ public class ProcessImageUtil extends ProcessResultUtil {
return;
}
String path = FileUtils.getPath(mContext, intent.getData());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
ImageDecoder.Source source = ImageDecoder.createSource(mContext.getContentResolver(), intent.getData());
try {
Bitmap bitmap = ImageDecoder.decodeBitmap(source);
path=BitmapUtil.getInstance().saveBitmap(bitmap);
bitmap.recycle();
} catch (Exception e) {
e.printStackTrace();
mResultCallback.onFailure();
return;
}
}
File file = new File(path);
if (file.exists()) {
mResultCallback.onSuccess(file);
@@ -153,6 +175,19 @@ public class ProcessImageUtil extends ProcessResultUtil {
}
}
};
launcher = ((AppCompatActivity) mContext).registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), new androidx.activity.result.ActivityResultCallback<Uri>() {
@Override
public void onActivityResult(Uri result) {
LogUtils.e("result:" + result);
if (result == null) {
mAlumbResultCallback.onFailure();
return;
}
Intent intent = new Intent();
intent.setData(result);
mAlumbResultCallback.onSuccess(intent);
}
});
}
/**
@@ -173,15 +208,28 @@ public class ProcessImageUtil extends ProcessResultUtil {
/**
* 相册获取图片
*/
public void getImageByAlumb() {
public void getImageByAlbum() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
showSystemPick();
return;
}
requestPermissions(mAlumbPermissions, mAlumbPermissionCallback);
}
public void getImageByAlumb(boolean needCrop) {
public void getImageByAlbum(boolean needCrop) {
this.mNeedCrop = needCrop;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
showSystemPick();
return;
}
requestPermissions(mAlumbPermissions, mAlumbPermissionCallback);
}
private void showSystemPick() {
PickVisualMediaRequest.Builder builder = new PickVisualMediaRequest.Builder()
.setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE);
launcher.launch(builder.build());
}
/**
* 开启摄像头,执行照相
@@ -195,7 +243,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
mCameraResult = getNewFile();
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(mContext, "com.pandora.sy.fileprovider", mCameraResult);
uri = FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", mCameraResult);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else {
uri = Uri.fromFile(mCameraResult);
@@ -255,7 +303,7 @@ public class ProcessImageUtil extends ProcessResultUtil {
startActivityForResult(intent, mCropResultCallback);
} catch (Exception e) {
try {
Uri resultUri = FileProvider.getUriForFile(mContext, "com.pandora.sy.fileprovider", mCorpResult);
Uri resultUri = FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", mCorpResult);
if (resultUri == null || mFragment == null || mContext == null) {
return;
}

View File

@@ -66,6 +66,15 @@ public class RouteUtil {
public static final String PATH_SudSwGameActivity = "/live/SudSwGameActivity";
public static final String PATH_SudRyGameActivity = "/live/SudRyGameActivity";
public static final String PATH_LiveROOMMANAGE = "/live/RoomManageActivity";
/**
* 跳转到房间管理页面
*/
public static void forwardRoomManageActivity() {
ARouter.getInstance().build(PATH_LiveROOMMANAGE)
.navigation();
}
public static void forwardVideoPlayNewActivity(ActiveBean bean) {
ARouter.getInstance().build(PATH_VIDEO_NEW_PLAY)

View File

@@ -95,13 +95,38 @@ public class StringUtil {
int minutes = (int) ((mms % (1000 * 60 * 60)) / (1000 * 60));
int seconds = (int) ((mms % (1000 * 60)) / 1000);
sStringBuilder.delete(0, sStringBuilder.length());
if (hours > 0) {
if (hours < 10) {
if (hours < 10) {
sStringBuilder.append("0");
}
sStringBuilder.append(String.valueOf(hours));
sStringBuilder.append(":");
if (minutes > 0) {
if (minutes < 10) {
sStringBuilder.append("0");
}
sStringBuilder.append(String.valueOf(hours));
sStringBuilder.append(String.valueOf(minutes));
sStringBuilder.append(":");
} else {
sStringBuilder.append("00:");
}
if (seconds > 0) {
if (seconds < 10) {
sStringBuilder.append("0");
}
sStringBuilder.append(String.valueOf(seconds));
} else {
sStringBuilder.append("00");
}
return sStringBuilder.toString();
}
/**
* 把一个long类型的总毫秒数转成时长
*/
public static String getDurationText2(long mms) {
int minutes = (int) ((mms % (1000 * 60 * 60)) / (1000 * 60));
int seconds = (int) ((mms % (1000 * 60)) / 1000);
sStringBuilder.delete(0, sStringBuilder.length());
if (minutes > 0) {
if (minutes < 10) {
sStringBuilder.append("0");

View File

@@ -0,0 +1,198 @@
package com.yunbao.common.utils;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
public class UiConversationCodeUtil {
public static final int FILTER_OFFLINE = 0;
public static final int FILTER_ONLINE = 1;
public static final int FILTER_UNREAD = 2;
public static final int FILTER_READ = 4;
public static final int FILTER_ALL = 7;
public static boolean checkIsSame(List<BaseUiConversation> list1, List<BaseUiConversation> list2) {
if (list1.isEmpty()){
return false;
}
if (list1.size() != list2.size()) return false;
int hashCode1 = getListHasCode(list1);
int hashCode2 = getListHasCode(list2);
return hashCode1 == hashCode2;
}
public static boolean checkIsSame(int hashCode1, List<BaseUiConversation> list2) {
int hashCode2 = getListHasCode(list2);
return hashCode1 == hashCode2;
}
public static int getListHasCode(List<BaseUiConversation> list) {
int hashCodeValue = 1;
if (list == null || list.isEmpty())
return 1;
for (BaseUiConversation conversation : list) {
if (conversation != null) {
hashCodeValue = 31 * hashCodeValue + getBaseUiConversationHashCode(conversation);
}
}
return hashCodeValue;
}
//根据BaseUiConversation对象的属性计算hashCode
private static int getBaseUiConversationHashCode(BaseUiConversation item) {
final int prime = 31;
int result = 1;
Conversation mCore = item.mCore;
result = prime * result + ((mCore.getPortraitUrl() == null) ? 0 : mCore.getPortraitUrl().hashCode());
result = prime * result + ((mCore.getConversationTitle() == null) ? 0 : mCore.getConversationTitle().hashCode());
// result = prime * result + ((item.mConversationContent == null) ? 0 : item.mConversationContent.hashCode());
result = prime * result + (int) (mCore.getSentTime() ^ (mCore.getSentTime() >>> 32));
result = prime * result + ((mCore.getDraft() == null) ? 0 : mCore.getDraft().hashCode());
result = prime * result + mCore.getUnreadMessageCount();
Message message = mCore.getMessage();
if (message != null) {
Message.MessageDirection direction = message.getMessageDirection();
if (direction != null) {
result = prime * result + direction.hashCode();
}
}
result = prime * result + ((mCore.getSentStatus() == null) ? 0 : mCore.getSentStatus().hashCode());
result = prime * result + ((mCore.getReceivedStatus() == null) ? 0 : mCore.getReceivedStatus().hashCode());
result = prime * result + ((mCore.getTargetId() == null) ? 0 : mCore.getTargetId().hashCode());
return result;
}
private static boolean isContains(List<BaseUiConversation> list, BaseUiConversation item) {
// 根据 item.mCore.getChannelId() 判断 list 是否包含
if (list == null || list.isEmpty() || item == null || item.mCore == null) {
return false;
}
for (BaseUiConversation conversation : list) {
// 增加空值检查
if (conversation != null && conversation.mCore != null
&& conversation.mCore.getTargetId() != null
&& conversation.mCore.getTargetId().equals(item.mCore.getTargetId())) {
return true;
}
}
return false;
}
public static List<BaseUiConversation> FilterData(int filterType, List<BaseUiConversation> keyList,List<BaseUiConversation> srcList) {
List<BaseUiConversation> showData = new ArrayList<>();
if (keyList == null || keyList.isEmpty())
return showData;
Log.i("MainConversationListAdapter", "FilterData: 源" + keyList.size());
switch (filterType) {
case FILTER_ALL:
showData = keyList;
break;
case FILTER_ONLINE:
for (BaseUiConversation conversation : srcList) {
if ("0".equals(conversation.mCore.getDraft()) && isContains(keyList, conversation)) {
showData.add(conversation);
}
}
break;
case FILTER_OFFLINE:
for (BaseUiConversation conversation : keyList) {
if (!"0".equals(conversation.mCore.getDraft())) {
showData.add(conversation);
}
}
break;
case FILTER_READ:
for (BaseUiConversation conversation : keyList)
if (conversation.mCore.getMessage() != null && conversation.mCore.getMessage().getMessageDirection() != null) {
if (conversation.mCore.getMessage().getMessageDirection() == Message.MessageDirection.SEND) {
if (conversation.mCore.getSentStatus() == Message.SentStatus.READ) {
showData.add(conversation);
}
}
}
break;
case FILTER_UNREAD:
for (BaseUiConversation conversation : keyList) {
boolean isRead;
if (conversation.mCore.getMessage() != null && conversation.mCore.getMessage().getMessageDirection() != null) {
if (conversation.mCore.getMessage().getMessageDirection() == Message.MessageDirection.SEND) {
if (conversation.mCore.getSentStatus() != Message.SentStatus.READ) {
showData.add(conversation);
}
}
}
}
break;
}
Log.i("MainConversationListAdapter", "FilterData: 结果" + showData.size());
return showData;
}
public static List<BaseUiConversation> FilterData(int filterType, List<BaseUiConversation> data) {
List<BaseUiConversation> showData = new ArrayList<>();
if (data == null || data.isEmpty())
return showData;
Log.i("MainConversationListAdapter", "设置数据源 FilterData: 源" + data.size());
switch (filterType) {
case FILTER_ALL:
showData = data;
break;
case FILTER_ONLINE:
for (BaseUiConversation conversation : data) {
if ("0".equals(conversation.mCore.getDraft())) {
showData.add(conversation);
}
}
break;
case FILTER_OFFLINE:
for (BaseUiConversation conversation : data) {
if (!"0".equals(conversation.mCore.getDraft())) {
showData.add(conversation);
}
}
break;
case FILTER_READ:
for (BaseUiConversation conversation : data)
if (conversation.mCore.getMessage() != null && conversation.mCore.getMessage().getMessageDirection() != null) {
if (conversation.mCore.getMessage().getMessageDirection() == Message.MessageDirection.SEND) {
if (conversation.mCore.getSentStatus() == Message.SentStatus.READ) {
showData.add(conversation);
}
}
}
break;
case FILTER_UNREAD:
for (BaseUiConversation conversation : data) {
if (conversation.mCore.getMessage() != null && conversation.mCore.getMessage().getMessageDirection() != null) {
if (conversation.mCore.getMessage().getMessageDirection() == Message.MessageDirection.SEND) {
if (conversation.mCore.getSentStatus() != Message.SentStatus.READ) {
showData.add(conversation);
}
}
}
}
break;
}
Log.i("MainConversationListAdapter", " 设置数据源 FilterData: 结果" + showData.size());
return showData;
}
}

View File

@@ -63,7 +63,7 @@ public class VersionUtil {
@Override
public void onConfirmClick(Dialog dialog, String content) {
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.pandora.sy"));
i.setData(Uri.parse("https://play.google.com/store/apps/details?id="+context.getPackageName()));
context.startActivity(i);
context.finish();
}
@@ -85,7 +85,7 @@ public class VersionUtil {
@Override
public void onConfirmClick(Dialog dialog, String content) {
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.pandora.sy"));
i.setData(Uri.parse("https://play.google.com/store/apps/details?id="+context.getPackageName()));
context.startActivity(i);
context.finish();
}

View File

@@ -35,7 +35,9 @@ public class WordUtil {
public static boolean isNewZh() {
return IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.SIMPLIFIED_CHINESE
|| IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE ;
|| IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.TRADITIONAL_CHINESE
|| IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINESE
|| IMLoginManager.get(CommonAppContext.sInstance).getLocaleLanguage() == Locale.CHINA;
}
public static String getNewString(int res) {

View File

@@ -128,7 +128,7 @@ public class APKUpdateCustomPopup extends CenterPopupView {
public void onViewClicks() {
if (CommonAppConfig.IS_GOOGLE_PLAY == 1) {
Intent i = new Intent(android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.pandora.sy"));
i.setData(Uri.parse("https://play.google.com/store/apps/details?id="+mContext.getPackageName()));
mContext.startActivity(i);
mContext.finish();
} else if (CommonAppConfig.IS_GOOGLE_PLAY == 2) {

View File

@@ -26,7 +26,13 @@ public abstract class AbsViewHolder implements LifeCycleListener {
mTag = getClass().getSimpleName();
mContext = context;
mParentView = parentView;
mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
try {
mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
}catch (Exception e){
L.e("AbsViewHolder",e.toString());
}
if (mContentView == null)
L.e("AbsViewHolder","mContentView==null");
init();
}
@@ -35,7 +41,13 @@ public abstract class AbsViewHolder implements LifeCycleListener {
processArguments(args);
mContext = context;
mParentView = parentView;
mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
try {
mContentView = LayoutInflater.from(context).inflate(getLayoutId(), mParentView, false);
}catch (Exception e){
L.e("AbsViewHolder",e.toString());
}
if (mContentView == null)
L.e("AbsViewHolder","mContentView==null");
init();
}

View File

@@ -38,7 +38,7 @@ public class GiftNumberPopup extends BottomPopupView {
super.onCreate();
RecyclerView giftList = findViewById(R.id.gift_list);
giftList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
GiftNumberAdapter giftNumberAdapter = new GiftNumberAdapter(new GiftQuantityManager(getContext()).getGiftQuantity());
GiftNumberAdapter giftNumberAdapter = new GiftNumberAdapter(new GiftQuantityManager(getContext()).getGiftQuantityNew());
giftList.setAdapter(giftNumberAdapter);
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.to_can), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override

View File

@@ -33,11 +33,16 @@ public class LiveClarityCustomPopup extends BottomPopupView implements View.OnCl
private TextView titleSDText, titleHDText, titleFHDText, mTips;
private int banSelect;
private boolean isUser = false;
private SelectPositionListener selectPositionListener;
public int getSelectClarity() {
return selectClarity;
}
public void setSelectPositionListener(SelectPositionListener selectPositionListener) {
this.selectPositionListener = selectPositionListener;
}
/**
* @param banSelect 禁止选项,{@link #BAN_720} 禁止高清和超高清。 {@link #BAN_1080} 禁止超高清
* @param isUser 是否为观众true 观众false 主播
@@ -227,6 +232,13 @@ public class LiveClarityCustomPopup extends BottomPopupView implements View.OnCl
iconFhd.setVisibility(VISIBLE);
break;
}
if(selectPositionListener!=null){
selectPositionListener.onSelect(selectClarity);
}
}
public interface SelectPositionListener{
void onSelect(int position);
}
private Handler netHandler = new Handler();

View File

@@ -2,6 +2,8 @@ package com.yunbao.common.views;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -28,6 +30,7 @@ import com.yunbao.common.event.PopupViewDismissEvent;
import com.yunbao.common.fragment.LiveNewWishListFragment;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil;
@@ -61,6 +64,12 @@ public class LiveNewWishListPopup extends BottomPopupView {
private LiveNewWishListFragment dayWishFragment, zhouXinFragment, lunarWishFragment, seasonalWishFragment;
private ImageView wishListTop;
private CommonCallback<Boolean> mSetResultCallback ;
public void setResultCallback(CommonCallback<Boolean> mCommonCallback) {
this.mSetResultCallback = mCommonCallback;
}
public LiveNewWishListPopup(@NonNull FragmentActivity context) {
super(context);
mContext = context;
@@ -198,6 +207,10 @@ public class LiveNewWishListPopup extends BottomPopupView {
zhouXinFragment = LiveNewWishListFragment.newInstance(2);
lunarWishFragment = LiveNewWishListFragment.newInstance(3);
seasonalWishFragment = LiveNewWishListFragment.newInstance(4);
dayWishFragment.setResultCallback(mSetResultCallback);
zhouXinFragment.setResultCallback(mSetResultCallback);
lunarWishFragment.setResultCallback(mSetResultCallback);
seasonalWishFragment.setResultCallback(mSetResultCallback);
ViewList.add(dayWishFragment);
ViewList.add(zhouXinFragment);
ViewList.add(lunarWishFragment);

View File

@@ -5,12 +5,14 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import com.lxj.xpopup.core.BottomPopupView;
import com.lxj.xpopup.core.CenterPopupView;
import com.yunbao.common.Constants;
import com.yunbao.common.R;
import com.yunbao.common.bean.LiveClassBean;
import com.yunbao.common.bean.LiveRoomTypeBean;
import com.yunbao.common.bean.LiveStetUpStatusModel;
import com.yunbao.common.event.LiveNewWishListCloseEvent;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager;
@@ -18,7 +20,10 @@ import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
public class LiveOpenCustomPopup extends CenterPopupView {
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class LiveOpenCustomPopup extends BottomPopupView {
//清晰度
private int selectClarity;
//直播类型
@@ -26,10 +31,12 @@ public class LiveOpenCustomPopup extends CenterPopupView {
//房间类型
private LiveRoomTypeBean liveRoomTypeBean;
private TextView textClarity, textLiveRoomType, textLiveClass, textLiveWishlist, textRobot, textSay, textCall;
private TextView textClarity, textLiveClass, textLiveWishlist, textRobot, textSay, textCall;
private int status_say, status_call;
private Context mContext;
public LiveOpenCustomPopup setClassBean(LiveClassBean classBean) {
this.classBean = classBean;
textLiveClass.setText(classBean.getName());
@@ -38,17 +45,12 @@ public class LiveOpenCustomPopup extends CenterPopupView {
public LiveOpenCustomPopup setLiveRoomTypeBean(LiveRoomTypeBean liveRoomTypeBean) {
this.liveRoomTypeBean = liveRoomTypeBean;
if (liveRoomTypeBean.getId()== Constants.LIVE_TYPE_PWD){
textLiveRoomType.setText(WordUtil.isNewZh() ? "密碼房" : "password room");
}else {
textLiveRoomType.setText(liveRoomTypeBean.getName());
}
return this;
}
public LiveOpenCustomPopup(@NonNull Context context, int selectClarity, LiveClassBean classBean, LiveRoomTypeBean liveRoomTypeBean) {
super(context);
this.mContext = context;
this.selectClarity = selectClarity;
this.classBean = classBean;
this.liveRoomTypeBean = liveRoomTypeBean;
@@ -70,7 +72,6 @@ public class LiveOpenCustomPopup extends CenterPopupView {
private void initView() {
textClarity = findViewById(R.id.text_clarity);
textLiveRoomType = findViewById(R.id.text_live_room_type);
textLiveClass = findViewById(R.id.text_live_class);
textLiveWishlist = findViewById(R.id.text_live_wishlist);
textRobot = findViewById(R.id.text_robot);
@@ -79,13 +80,6 @@ public class LiveOpenCustomPopup extends CenterPopupView {
if (classBean != null) {
textLiveClass.setText(classBean.getName());
}
if (liveRoomTypeBean != null) {
if (liveRoomTypeBean.getId()== Constants.LIVE_TYPE_PWD){
textLiveRoomType.setText(WordUtil.isNewZh() ? "密碼房" : "password room");
}else {
textLiveRoomType.setText(liveRoomTypeBean.getName());
}
}
setSelectClarity(selectClarity);
//關閉彈窗
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.live_open_cancel), () -> dismiss());
@@ -108,12 +102,6 @@ public class LiveOpenCustomPopup extends CenterPopupView {
callBack.selectClarity(selectClarity);
}
});
//設置房間類型
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.line_live_room_type), () -> {
if (callBack != null) {
callBack.openLiveRoomType(liveRoomTypeBean);
}
});
//打開心願單
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.line_live_wishlist), () -> {
if (callBack != null) {
@@ -182,7 +170,7 @@ public class LiveOpenCustomPopup extends CenterPopupView {
}
public void initDate() {
textSay.setText(status_say == 1 ? R.string.do_set : R.string.not_set);
textSay.setText(IMLoginManager.get(mContext).getAnchorSayStatus() == 1 ? R.string.do_set : R.string.not_set);
textCall.setText(status_call == 1 ? R.string.robot_yes : R.string.robot_no);
LiveNetManager.get(getContext())
.getLiveStetUpStatus(String.valueOf(IMLoginManager.get(getContext()).getUserInfo().getId()),
@@ -190,7 +178,7 @@ public class LiveOpenCustomPopup extends CenterPopupView {
@Override
public void onSuccess(LiveStetUpStatusModel data) {
textLiveWishlist.setText(data.getWishListState() ? R.string.do_set : R.string.not_set);
textRobot.setText(data.getAiStateState() ? R.string.robot_yes : R.string.robot_no);
textRobot.setText(data.getAiStateState() ? R.string.robot_on : R.string.robot_off);
}
@Override

View File

@@ -1,5 +1,6 @@
package com.yunbao.common.views;
import android.app.Dialog;
import android.content.Context;
import android.view.KeyEvent;
import android.view.View;
@@ -7,6 +8,8 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -21,6 +24,12 @@ import com.yunbao.common.bean.HttpCallbackModel;
import com.yunbao.common.bean.LiveAiRobotBean;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.MicUserManager;
import com.yunbao.common.manager.MicedUserManager;
import com.yunbao.common.manager.RandomPkManager;
import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.MicStatusManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
@@ -32,6 +41,11 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View
private String time = "";
private ImageView robotState;
private ImageView languageZhImgView;
private AppCompatTextView languageZhTv;
private ImageView languageEnImgView;
private AppCompatTextView languageEnTv;
private int lastLanguage = 1;
private int robotStateInt = 1;
public int getRobotStateInt() {
@@ -60,17 +74,22 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View
robotNameSetting = findViewById(R.id.robot_name_setting);
robotNameText = findViewById(R.id.robot_name_text);
robotState = findViewById(R.id.robot_state);
languageZhImgView = findViewById(R.id.languageZhImgView);
languageZhTv = findViewById(R.id.languageZhTv);
languageEnImgView = findViewById(R.id.languageEnImgView);
languageEnTv = findViewById(R.id.languageEnTv);
automaticGreetingNumber = findViewById(R.id.automatic_greeting_number);
automaticMessageNumber = findViewById(R.id.automatic_message_number);
findViewById(R.id.automatic_message_sending).setOnClickListener(this);
findViewById(R.id.automatic_greeting_setting).setOnClickListener(this);
robotNameText.setOnClickListener(this);
robotState.setOnClickListener(this);
robotNameSetting.setImeOptions(EditorInfo.IME_ACTION_DONE);
robotNameSetting.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
L.e("EditorInfo.IME_ACTION_DONE");
// 修改助手名字
LiveNetManager.get(getContext())
.setAiRobotDate("ai_name", robotNameSetting.getText().toString(), new HttpCallback<HttpCallbackModel>() {
@@ -91,8 +110,65 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View
return false;
}
});
languageZhImgView.setOnClickListener(v -> {
if (lastLanguage == 0) {
return;
}
ShowChangeLanguagePopup(0);
});
languageZhTv.setOnClickListener(v -> {
if (lastLanguage == 0) {
return;
}
ShowChangeLanguagePopup(0);
});
languageEnImgView.setOnClickListener(v -> {
if (lastLanguage == 1) {
return;
}
ShowChangeLanguagePopup(1);
});
languageEnTv.setOnClickListener(v -> {
if (lastLanguage == 1) {
return;
}
ShowChangeLanguagePopup(1);
});
}
private void ShowChangeLanguagePopup(int i) {
DialogUitl.showSimpleDialogString(getContext(), getContext().getString(R.string.chang_langue_tips), getContext().getString(R.string.aristocrat_determine) ,new DialogUitl.SimpleCallback() {
@Override
public void onConfirmClick(Dialog dialog, String content) {
LiveNetManager.get(getContext())
.setAiRobotDate("ai_langue", i+"", new HttpCallback<HttpCallbackModel>() {
@Override
public void onSuccess(HttpCallbackModel data) {
if (i==0) {
languageZhImgView.setSelected(true);
languageEnImgView.setSelected(false);
lastLanguage = 0;
} else {
languageZhImgView.setSelected(false);
languageEnImgView.setSelected(true);
lastLanguage = 1;
}
}
@Override
public void onError(String error) {
ToastUtil.show(error);
}
});
}
});
}
@Override
public void onClick(View v) {
int viewID = v.getId();
@@ -243,6 +319,15 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View
robotNameText.setText(data.getName());
automaticGreetingNumber.setText(String.valueOf(data.getAutoSeyHiNumber()));
automaticMessageNumber.setText(String.valueOf(data.getAutoRequestFollowNumber()));
if (data.isLangueCn()) {
languageZhImgView.setSelected(true);
languageEnImgView.setSelected(false);
lastLanguage = 0;
} else {
languageZhImgView.setSelected(false);
languageEnImgView.setSelected(true);
lastLanguage = 1;
}
time = String.valueOf(data.getTime());
robotStateInt = data.getStatus();
if (data.getStatus() == 1) {
@@ -252,7 +337,7 @@ public class LiveRobotSettingCustomPopup extends BottomPopupView implements View
@Override
public void onError(String error) {
ToastUtil.show(WordUtil.isNewZh()?"抱歉!出錯了!":"i \\'m sorry! An error occurred");
ToastUtil.show(WordUtil.isNewZh() ? "抱歉!出錯了!" : "i \\'m sorry! An error occurred");
}
});

View File

@@ -0,0 +1,122 @@
package com.yunbao.common.views;
import static io.rong.imlib.publicservice.model.PublicServiceMenu.PublicServiceMenuItemType.View;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.lxj.xpopup.core.AttachPopupView;
import com.yunbao.common.R;
import com.yunbao.common.adapter.MainConversationListAdapter;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import org.repackage.com.zui.opendeviceidlibrary.OpenDeviceId;
public class MsgChatTypeSelectPoPupView extends AttachPopupView implements android.view.View.OnClickListener {
private TextView chatTypeTv1, chatTypeTv2, chatTypeTv3, chatTypeTv4, chatTypeTv5;
private ImageView chatTypeImg1, chatTypeImg2, chatTypeImg3, chatTypeImg4, chatTypeImg5;
private ResultCallBack mResultCallBack;
private int lastType;
public MsgChatTypeSelectPoPupView(@NonNull Context context, int type, ResultCallBack itemDelListener) {
super(context);
mResultCallBack = itemDelListener;
lastType = type;
}
@Override
protected int getImplLayoutId() {
return R.layout.view_msg_select_chat_type;
}
@Override
protected void onCreate() {
// 获取屏幕宽度
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
int screenWidth = displayMetrics.widthPixels;
// 设置弹窗宽度为屏幕宽度的 3/4
View view = findViewById(R.id.root);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = screenWidth*3/4;
view.setLayoutParams(layoutParams);
chatTypeTv1 = findViewById(R.id.chatTypeTv1);
chatTypeImg1 = findViewById(R.id.chatTypeImg1);
chatTypeTv2 = findViewById(R.id.chatTypeTv2);
chatTypeImg2 = findViewById(R.id.chatTypeImg2);
chatTypeTv3 = findViewById(R.id.chatTypeTv3);
chatTypeImg3 = findViewById(R.id.chatTypeImg3);
chatTypeTv4 = findViewById(R.id.chatTypeTv4);
chatTypeImg4 = findViewById(R.id.chatTypeImg4);
chatTypeTv5 = findViewById(R.id.chatTypeTv5);
chatTypeImg5 = findViewById(R.id.chatTypeImg5);
chatTypeImg1.setOnClickListener(this);
chatTypeImg2.setOnClickListener(this);
chatTypeImg3.setOnClickListener(this);
chatTypeImg4.setOnClickListener(this);
chatTypeImg5.setOnClickListener(this);
handleChatTypeClick(lastType);
}
private void handleChatTypeClick(int type) {
switch (type) {
case MainConversationListAdapter.FILTER_ALL:
chatTypeImg1.setImageResource(R.mipmap.ic_chat_type_select);
chatTypeTv1.setTextColor(ContextCompat.getColor(chatTypeTv1.getContext(), R.color.colorMainTab));
break;
case MainConversationListAdapter.FILTER_ONLINE:
chatTypeImg2.setImageResource(R.mipmap.ic_chat_type_select);
chatTypeTv2.setTextColor(ContextCompat.getColor(chatTypeTv2.getContext(), R.color.colorMainTab));
break;
case MainConversationListAdapter.FILTER_OFFLINE:
chatTypeImg3.setImageResource(R.mipmap.ic_chat_type_select);
chatTypeTv3.setTextColor(ContextCompat.getColor(chatTypeTv3.getContext(), R.color.colorMainTab));
break;
case MainConversationListAdapter.FILTER_READ:
chatTypeImg4.setImageResource(R.mipmap.ic_chat_type_select);
chatTypeTv4.setTextColor(ContextCompat.getColor(chatTypeTv4.getContext(), R.color.colorMainTab));
break;
case MainConversationListAdapter.FILTER_UNREAD:
chatTypeImg5.setImageResource(R.mipmap.ic_chat_type_select);
chatTypeTv5.setTextColor(ContextCompat.getColor(chatTypeTv5.getContext(), R.color.colorMainTab));
break;
}
}
@Override
public void onClick(android.view.View v) {
if (v.getId() == R.id.chatTypeImg1) {
mResultCallBack.callBack(MainConversationListAdapter.FILTER_ALL, chatTypeTv1.getText().toString());
} else if (v.getId() == R.id.chatTypeImg2) {
mResultCallBack.callBack(MainConversationListAdapter.FILTER_ONLINE, chatTypeTv2.getText().toString());
} else if (v.getId() == R.id.chatTypeImg3) {
mResultCallBack.callBack(MainConversationListAdapter.FILTER_OFFLINE, chatTypeTv3.getText().toString());
} else if (v.getId() == R.id.chatTypeImg4) {
mResultCallBack.callBack(MainConversationListAdapter.FILTER_READ, chatTypeTv4.getText().toString());
} else if (v.getId() == R.id.chatTypeImg5) {
mResultCallBack.callBack(MainConversationListAdapter.FILTER_UNREAD, chatTypeTv5.getText().toString());
}
dismiss();
}
public interface ResultCallBack {
void callBack(int i, String string);
}
}

View File

@@ -1,7 +1,9 @@
package com.yunbao.common.views.weight;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
@@ -256,14 +258,35 @@ public class NobleNoticeView extends FrameLayout {
}
@SuppressLint("StaticFieldLeak")
@Override
public void onStep(int frame, double v) {
System.out.println("frame = " + frame);
System.out.println("scrollLayout.getMeasuredWidth() = " + scrollLayout.getMeasuredWidth());
if (frame == 21) {
setButtonPosition(roleType);
observable.observeOn(AndroidSchedulers.mainThread())
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
// 在这里执行后台任务
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
TranslateAnimation animationTranslate = new TranslateAnimation(scrollLayout.getMeasuredHeight(), -scrollLayout.getMeasuredWidth(), 0, 0);
AnimationSet animationSet1 = new AnimationSet(true);
animationSet1.addAnimation(animationTranslate);
animationSet1.setFillAfter(true);
animationSet1.setDuration((animationTime - 1000) / 2);
animationSet1.setAnimationListener(animationListener);
scrollLayout.startAnimation(animationSet1);
}
}.execute();
/*observable.observeOn(AndroidSchedulers.mainThread())
.subscribe(bitmap -> {
L.e("44444");
TranslateAnimation animationTranslate = new TranslateAnimation(0, -scrollLayout.getMeasuredWidth(), 0, 0);
AnimationSet animationSet1 = new AnimationSet(true);
animationSet1.addAnimation(animationTranslate);
@@ -273,8 +296,7 @@ public class NobleNoticeView extends FrameLayout {
scrollLayout.startAnimation(animationSet1);
}, throwable -> {
}).isDisposed();
}).isDisposed();*/
}
if (frame == 135) {
contextLayout.setVisibility(GONE);
@@ -377,12 +399,10 @@ public class NobleNoticeView extends FrameLayout {
Animation.AnimationListener animationListener = new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
scrollLayout.clearAnimation();
if (svagaBc.isAnimating()) {
TranslateAnimation animationTranslate = new TranslateAnimation(0, -scrollLayout.getMeasuredWidth(), 0, 0);

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/transparent" />
<stroke
android:width="1dp"
android:color="#8D8D8D" />
<corners android:radius="21dp" />
</shape>

View File

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

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke
android:width="1dp"
android:color="#FF666666" />
<corners android:radius="21dp" />
</shape>

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

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

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 7%不透明度的白色-->
<solid android:color="#11FFFFFF" />
<corners
android:bottomLeftRadius="4dp"
android:bottomRightRadius="4dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp" />
</shape>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置ProgressBar背景色-->
<item android:id="@android:id/background">
<shape>
<!--设置ProgressBar进度条圆角半径-->
<corners android:radius="1dp" />
<solid android:color="#26000000" />
</shape>
</item>
<!--设置ProgressBar进度条颜色-->
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="1dp" />
<gradient
android:endColor="#FFC949"
android:startColor="#FFC949" />
</shape>
</scale>
</item>
</layer-list>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置ProgressBar背景色-->
<item android:id="@android:id/background">
<shape>
<!--设置ProgressBar进度条圆角半径-->
<corners android:radius="1dp" />
<solid android:color="#15FFFFFF" />
</shape>
</item>
<!--设置ProgressBar进度条颜色-->
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="1dp" />
<gradient
android:endColor="#DED9A5"
android:startColor="#DED9A5" />
</shape>
</scale>
</item>
</layer-list>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 7%不透明度的白色-->
<solid android:color="#11FFFFFF" />
<corners
android:bottomLeftRadius="17dp"
android:bottomRightRadius="17dp"
android:topLeftRadius="17dp"
android:topRightRadius="17dp" />
</shape>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="#FFF026" />
<corners android:bottomLeftRadius="17dp" android:bottomRightRadius="17dp" android:topLeftRadius="17dp" android:topRightRadius="17dp" />
</shape>
</item>
<item android:state_selected="false">
<shape android:shape="rectangle">
<solid android:color="#48FFF026" />
<corners android:bottomLeftRadius="17dp" android:bottomRightRadius="17dp" android:topLeftRadius="17dp" android:topRightRadius="17dp" />
</shape>
</item>
</selector>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置ProgressBar背景色-->
<item android:id="@android:id/background">
<shape>
<!--设置ProgressBar进度条圆角半径-->
<corners android:radius="3dp" />
<solid android:color="#73FFFFFF" />
</shape>
</item>
<!--设置ProgressBar进度条颜色-->
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="3dp" />
<gradient
android:endColor="#FFFFFF"
android:startColor="#FFFFFF" />
</shape>
</scale>
</item>
</layer-list>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ff6e84e7" />
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
</shape>

View File

@@ -0,0 +1,11 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> <!-- 设置形状为圆形 -->
<solid android:color="#6DFF7C" /> <!-- 设置填充颜色 -->
<!-- 可以添加额外的属性如边框等 -->
<!-- <stroke
android:width="2dp"
android:color="#000000" /> -->
</shape>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="355dp" android:height="121dp">
<shape android:shape="rectangle">
<solid android:color="#F3F3F3" />
<corners android:radius="6dp" />
</shape>
</item>
</selector>

View File

@@ -0,0 +1,17 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center_horizontal">
<shape android:shape="oval">
<solid android:color="#1a000000" /> <!-- 外圈 -->
</shape>
</item>
<item
android:bottom="4dp"
android:gravity="center_horizontal"
android:left="4dp"
android:right="4dp"
android:top="4dp">
<shape android:shape="oval">
<solid android:color="#2a000000" /> <!-- 深蓝色 -->
</shape>
</item>
</layer-list>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/white" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="18dp"
android:topRightRadius="18dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"> <!-- 设置形状为圆形 -->
<solid android:color="#ffff4874" /> <!-- 设置填充颜色 -->
<stroke
android:width="2dp"
android:color="#30ff4874" /> <!-- 设置边框颜色为黑色并带有 70% 的不透明度 (BB 是 alpha 值) -->
</shape>

View File

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

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
@@ -28,10 +29,7 @@
android:visibility="invisible">
<include
layout="@layout/view_blind_box" />
</FrameLayout>
<FrameLayout
@@ -124,7 +122,8 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="gone">
android:visibility="gone"
tools:visibility="visible">
<FrameLayout
android:layout_width="40dp"
@@ -421,6 +420,7 @@
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"
android:background="@mipmap/icon_live_gift_lian"
tools:visibility="visible"
android:visibility="gone">
<TextView

View File

@@ -0,0 +1,572 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="vertical">
<!-- 布局从下而上写的 -->
<!-- 底部背景大的背景 -->
<View
android:id="@+id/giftBg"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="-16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/openVipBg"
android:background="@drawable/bg_gift_bottom_bg" />
<!--底部送礼选择数量备份 -->
<View
android:id="@+id/giftSendBgV"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginEnd="20dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_gift_send"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.34" />
<TextView
android:id="@+id/liveGiftSend"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/bg_gift_send_btn"
android:gravity="center"
android:text="@string/live_gift_send"
android:textColor="@color/black1"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@+id/giftSendBgV"
app:layout_constraintDimensionRatio="2"
app:layout_constraintEnd_toEndOf="@+id/giftSendBgV"
app:layout_constraintTop_toTopOf="@+id/giftSendBgV" />
<ImageView
android:id="@+id/liveGiftImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:src="@mipmap/ic_gift_right_arrow"
app:layout_constraintBottom_toBottomOf="@+id/giftSendBgV"
app:layout_constraintEnd_toStartOf="@+id/liveGiftSend"
app:layout_constraintTop_toTopOf="@+id/giftSendBgV" />
<TextView
android:id="@+id/liveGiftSendTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@+id/giftSendBgV"
app:layout_constraintEnd_toStartOf="@+id/liveGiftImg"
app:layout_constraintHorizontal_bias="0.7"
app:layout_constraintStart_toStartOf="@+id/giftSendBgV"
app:layout_constraintTop_toTopOf="@+id/giftSendBgV"
tools:text="999" />
<androidx.constraintlayout.widget.Group
android:id="@+id/giftSendGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="giftSendBgV,liveGiftImg,liveGiftSendTv"
tools:visibility="visible" />
<!--底部钻石数量 -->
<ImageView
android:id="@+id/diamondImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:src="@mipmap/ic_diamond_3"
app:layout_constraintBottom_toBottomOf="@+id/giftSendBgV"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/giftSendBgV" />
<TextView
android:id="@+id/diamondNumberTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/diamondImg"
app:layout_constraintStart_toEndOf="@+id/diamondImg"
app:layout_constraintTop_toTopOf="@+id/diamondImg"
tools:text="28000000" />
<ImageView
android:id="@+id/diamondGoImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:src="@mipmap/ic_gift_right_arrow"
app:layout_constraintBottom_toBottomOf="@+id/diamondImg"
app:layout_constraintStart_toEndOf="@+id/diamondNumberTv"
app:layout_constraintTop_toTopOf="@+id/diamondImg" />
<View
android:id="@+id/diamondClickView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="-4dp"
android:layout_marginBottom="-4dp"
app:layout_constraintBottom_toBottomOf="@+id/diamondImg"
app:layout_constraintEnd_toEndOf="@+id/diamondGoImg"
app:layout_constraintStart_toStartOf="@+id/diamondImg"
app:layout_constraintTop_toTopOf="@+id/diamondImg"
tools:visibility="gone" />
<!--底部金豆数量 -->
<ImageView
android:id="@+id/goldBeanImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:src="@mipmap/ic_golden_beans_3"
app:layout_constraintBottom_toBottomOf="@+id/giftSendBgV"
app:layout_constraintStart_toEndOf="@+id/diamondGoImg"
app:layout_constraintTop_toTopOf="@+id/giftSendBgV" />
<TextView
android:id="@+id/goldNumberTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/goldBeanImg"
app:layout_constraintStart_toEndOf="@+id/goldBeanImg"
app:layout_constraintTop_toTopOf="@+id/goldBeanImg"
tools:text="28000000" />
<!--礼物列表 -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/giftRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/giftSendBgV"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintDimensionRatio="1.5"
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/emptyBg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ff171724"
app:layout_constraintTop_toTopOf="@+id/giftRecyclerView"
app:layout_constraintBottom_toBottomOf="@+id/giftRecyclerView"
app:layout_constraintStart_toStartOf="@+id/giftRecyclerView"
app:layout_constraintEnd_toEndOf="@+id/giftRecyclerView"/>
<ImageView
android:id="@+id/emptyImg"
app:layout_constraintTop_toTopOf="@+id/giftRecyclerView"
app:layout_constraintBottom_toBottomOf="@+id/giftRecyclerView"
app:layout_constraintStart_toStartOf="@+id/giftRecyclerView"
app:layout_constraintEnd_toEndOf="@+id/giftRecyclerView"
android:layout_width="112dp"
android:layout_height="90dp"
android:src="@mipmap/icon_empty_parcel" />
<TextView
android:id="@+id/emptyTv"
app:layout_constraintStart_toStartOf="@+id/giftRecyclerView"
app:layout_constraintEnd_toEndOf="@+id/giftRecyclerView"
app:layout_constraintTop_toBottomOf="@+id/emptyImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/nothing_in_the_package_yet"
android:textColor="#717375"
android:textSize="12sp" />
<androidx.constraintlayout.widget.Group
android:id="@+id/emptyGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="emptyBg,emptyImg,emptyTv"
tools:visibility="visible" />
<!--礼物列表无数据时候 -->
<!--顶部Warp -->
<TextView
android:id="@+id/giftWrapTv"
android:layout_width="48dp"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:padding="6dp"
android:text="@string/live_wrap"
android:textStyle="bold"
android:textColor="#CCCDCE"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@+id/giftRecyclerView"
app:layout_constraintEnd_toEndOf="parent" />
<View
android:layout_width="1.5dp"
android:layout_height="11dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="1dp"
android:background="#17FFFFFF"
app:layout_constraintBottom_toBottomOf="@+id/giftWrapTv"
app:layout_constraintEnd_toStartOf="@+id/giftWrapTv"
app:layout_constraintTop_toTopOf="@+id/giftWrapTv" />
<View
android:id="@+id/giftWrapRedPoint"
android:layout_width="6dp"
android:layout_height="6dp"
android:background="@drawable/bg_red_point"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@+id/giftWrapTv"
app:layout_constraintTop_toTopOf="@+id/giftWrapTv"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/giftTitleRecyclerView"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/giftWrapTv"
app:layout_constraintEnd_toStartOf="@+id/giftWrapTv"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/giftWrapTv"
tools:layout_height="0dp" />
<!--升级进度条 -->
<View
android:id="@+id/giftLevelClickV"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@+id/week_progressbar"
app:layout_constraintEnd_toEndOf="@+id/week_progressbar"
app:layout_constraintStart_toStartOf="@+id/lvTitleTv"
app:layout_constraintTop_toTopOf="@+id/lvTipsTv"
tools:visibility="gone" />
<TextView
android:id="@+id/lvTitleTv"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:minWidth="40dp"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:layout_gravity="center"
android:layout_marginStart="18dp"
android:layout_marginBottom="11dp"
android:background="@drawable/bg_live_gift_lv"
android:gravity="center"
android:textColor="@color/white"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/giftWrapTv"
app:layout_constraintStart_toStartOf="parent"
tools:text="LV.8" />
<com.yunbao.common.views.weight.MarqueeTextView
android:id="@+id/lvTipsTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:layout_marginTop="-1dp"
android:ellipsize="marquee"
android:focusable="true"
android:maxWidth="220dp"
android:focusableInTouchMode="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintStart_toEndOf="@+id/lvTitleTv"
app:layout_constraintTop_toTopOf="@+id/lvTitleTv"
tools:text="升至LV.9还需13000,00经验值" />
<ImageView
android:id="@+id/lvTipsImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:src="@mipmap/ic_gift_right_arrow"
app:layout_constraintBottom_toBottomOf="@+id/lvTipsTv"
app:layout_constraintStart_toEndOf="@+id/lvTipsTv"
app:layout_constraintTop_toTopOf="@+id/lvTipsTv" />
<ProgressBar
android:id="@+id/week_progressbar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="3dp"
android:layout_marginEnd="18dp"
android:layout_marginTop="2dp"
android:progressDrawable="@drawable/bg_gift_progressbar2"
app:layout_constraintEnd_toStartOf="@+id/openVipBg"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/lvTipsTv"
app:layout_constraintTop_toBottomOf="@+id/lvTipsTv"
tools:progress="10" />
<androidx.constraintlayout.widget.Group
android:id="@+id/giftLevelGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:constraint_referenced_ids="lvTitleTv,lvTipsTv,lvTipsImg,week_progressbar,giftLevelClickV"
tools:visibility="visible" />
<!--开通贵族 -->
<TextView
android:id="@+id/openVipTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="14dp"
android:text="@string/open_vip_live"
android:textColor="@color/white"
android:textSize="11sp"
app:layout_constraintBottom_toTopOf="@+id/giftWrapTv"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.935"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/openVipImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="2dp"
android:maxWidth="29dp"
android:src="@mipmap/ic_open_noble_3"
android:visibility="visible"
tools:visibility="visible"
app:layout_constraintBottom_toBottomOf="@+id/openVipTv"
app:layout_constraintEnd_toStartOf="@+id/openVipTv"
app:layout_constraintTop_toTopOf="@+id/openVipTv" />
<ImageView
android:id="@+id/vipIdentityImg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginEnd="2dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:visibility="gone"
tools:visibility="gone"
app:layout_constraintDimensionRatio="1"
android:src="@mipmap/ic_open_noble_3"
app:layout_constraintBottom_toBottomOf="@+id/openVipBg"
app:layout_constraintEnd_toStartOf="@+id/openVipImg"
app:layout_constraintTop_toTopOf="@+id/openVipBg" />
<ImageView
android:id="@+id/openVipArrowImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:src="@mipmap/ic_gift_right_arrow"
app:layout_constraintBottom_toBottomOf="@+id/openVipTv"
app:layout_constraintStart_toEndOf="@+id/openVipTv"
app:layout_constraintTop_toTopOf="@+id/openVipTv" />
<View
android:id="@+id/openVipBg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="-6dp"
android:layout_marginTop="-4dp"
android:layout_marginEnd="-7dp"
android:layout_marginBottom="-5dp"
android:background="@drawable/bg_gift_openvip"
app:layout_constraintBottom_toBottomOf="@+id/openVipTv"
app:layout_constraintEnd_toEndOf="@+id/openVipArrowImg"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/vipIdentityImg"
app:layout_constraintTop_toTopOf="@+id/openVipTv"
app:layout_constraintVertical_bias="1.0" />
<!--礼物描述 -->
<com.yunbao.common.views.weight.MarqueeTextView
android:id="@+id/gift_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="15dp"
android:layout_marginEnd="16dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="#80FFFFFF"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/openVipBg"
app:layout_constraintEnd_toStartOf="@+id/openVipBg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_percent="0.7"
tools:text="描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息描述信信息" />
<!-- 礼物连击 -->
<ImageView
android:id="@+id/continuousClicksBg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="5dp"
android:src="@drawable/bg_continuous_clicks"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.2" />
<View
android:id="@+id/continuousBgCenter"
android:layout_width="4dp"
android:layout_height="4dp"
app:layout_constraintBottom_toBottomOf="@+id/continuousClicksBg"
app:layout_constraintEnd_toEndOf="@+id/continuousClicksBg"
app:layout_constraintStart_toStartOf="@+id/continuousClicksBg"
app:layout_constraintTop_toTopOf="@+id/continuousClicksBg" />
<TextView
android:id="@+id/continuousClicksTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="@string/live_gift_send_lian"
android:textColor="@color/black1"
android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@+id/continuousBgCenter"
app:layout_constraintEnd_toEndOf="@+id/continuousClicksBg"
app:layout_constraintStart_toStartOf="@+id/continuousClicksBg" />
<TextView
android:id="@+id/lian_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textColor="@color/black1"
android:textSize="13sp"
app:layout_constraintEnd_toEndOf="@+id/continuousClicksBg"
app:layout_constraintStart_toStartOf="@+id/continuousClicksBg"
app:layout_constraintTop_toBottomOf="@+id/continuousBgCenter"
tools:text="到期时" />
<androidx.constraintlayout.widget.Group
android:id="@+id/continuousClickGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="continuousClicksBg,continuousBgCenter,continuousClicksTv,lian_text"
tools:visibility="gone" />
<!--开始写顶部布局 -->
<ImageView
android:id="@+id/operate_image"
android:layout_width="122dp"
android:layout_height="50dp"
android:layout_gravity="end|bottom"
android:layout_marginEnd="5dp"
android:layout_marginBottom="2dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toTopOf="@+id/giftBg"
app:layout_constraintEnd_toEndOf="parent" />
<include
android:id="@+id/blind_box"
layout="@layout/view_blind_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/giftBg"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<!--赞助信息 -->
<ImageView
android:id="@+id/giftSponsorBgImg"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:layout_marginBottom="5dp"
android:scaleType="fitXY"
android:src="@mipmap/background_live_gift_gift_itle"
app:layout_constraintBottom_toTopOf="@+id/giftBg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/gift_itle"
android:layout_width="54dp"
android:layout_height="13dp"
android:layout_marginStart="13dp"
android:src="@mipmap/icon_live_gift_gift_itle"
app:layout_constraintBottom_toBottomOf="@+id/giftSponsorBgImg"
app:layout_constraintStart_toStartOf="@+id/giftSponsorBgImg"
app:layout_constraintTop_toTopOf="@+id/giftSponsorBgImg" />
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/naming_avatar"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerHorizontal="true"
android:layout_marginStart="6dp"
android:scaleType="centerCrop"
android:src="@drawable/m_chu_xia"
app:layout_constraintBottom_toBottomOf="@+id/giftSponsorBgImg"
app:layout_constraintStart_toEndOf="@+id/gift_itle"
app:layout_constraintTop_toTopOf="@+id/giftSponsorBgImg"
app:riv_oval="true" />
<com.yunbao.common.views.weight.MarqueeTextView
android:id="@+id/naming_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="#FFFFFFFF"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/giftSponsorBgImg"
app:layout_constraintEnd_toEndOf="@+id/giftSponsorBgImg"
app:layout_constraintStart_toEndOf="@+id/naming_avatar"
app:layout_constraintTop_toTopOf="@+id/giftSponsorBgImg" />
<androidx.constraintlayout.widget.Group
android:id="@+id/giftSponsorGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="giftSponsorBgImg,gift_itle,naming_avatar,naming_name"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,353 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_live_tota"
android:orientation="vertical">
<LinearLayout
android:id="@+id/interactionLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="17dp"
android:text="@string/live_interaction_Interaction"
android:textColor="@color/white"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="13dp"
android:layout_marginBottom="20dp"
android:paddingEnd="16dp">
<LinearLayout
android:id="@+id/live_tool_prank"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_zg" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_tricky"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_wish"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_wish" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_wish"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_mic"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:visibility="visible">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_mic" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_voice_link"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_game"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_game" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_game"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:paddingEnd="16dp">
<LinearLayout
android:id="@+id/live_tool_anchor_say"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_anchor_say" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_god_say"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_qa"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_qa" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_interaction_ask_question"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/equityLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="17dp"
android:text="@string/live_interaction_broadcaster_rights"
android:textColor="@color/white"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:paddingEnd="16dp">
<LinearLayout
android:id="@+id/live_tool_live_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="31dp"
android:layout_height="40dp"
android:src="@mipmap/icon_interaction_live_data" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/broadcast_data"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_robot"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="31dp"
android:layout_height="40dp"
android:src="@mipmap/icon_interaction_robot" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/robot_setup"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="14dp"
android:text="@string/live_interaction_tools"
android:textColor="@color/white"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:layout_marginBottom="20dp"
android:paddingEnd="16dp">
<LinearLayout
android:id="@+id/live_tool_beauty"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_beauty" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_beauty"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_camera"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_camera" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_camera"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/live_tool_leave"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/live_tool_leave_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/icon_interaction_leave" />
<TextView
android:id="@+id/live_tool_leave_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="@string/live_zslk"
android:textColor="#FF9A9A9A"
android:textSize="12sp" />
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -45,11 +45,73 @@
app:srcCompat="@mipmap/special_icon_off" />
</LinearLayout>
<LinearLayout
android:id="@+id/robot_language"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/robot_status"
android:layout_marginTop="18dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:text="@string/ai_anguage_settings"
android:textColor="#FFF"
android:textSize="15sp" />
<ImageView
android:id="@+id/languageZhImgView"
android:layout_width="wrap_content"
android:padding="2dp"
android:layout_marginTop="0.5dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:src="@drawable/selector_protocol_check"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/languageZhTv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:paddingStart="2dp"
android:paddingEnd="5dp"
android:text="中文"
android:textColor="#FFF"
android:textSize="15sp" />
<ImageView
android:id="@+id/languageEnImgView"
android:layout_width="wrap_content"
android:padding="2dp"
android:layout_marginTop="0.5dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:src="@drawable/selector_protocol_check"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/languageEnTv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:layout_gravity="center_vertical"
android:paddingStart="2dp"
android:paddingEnd="5dp"
android:text="English"
android:layout_marginEnd="10dp"
android:textColor="#FFF"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/robot_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/robot_status"
android:layout_below="@+id/robot_language"
android:layout_marginTop="20dp"
android:orientation="horizontal">

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:orientation="vertical"
android:layout_marginBottom="10dp">
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="14dp"
android:paddingEnd="14dp"
android:text="222"
android:textColor="#92949A"
android:textSize="11sp" />
<TextView
android:layout_marginTop="5dp"
android:id="@+id/item_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="111"
android:textColor="#FFFFFF"
android:textSize="16sp"/>
</LinearLayout>

View File

@@ -9,7 +9,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@mipmap/live_bg" />
android:src="@mipmap/live_bg_new" />
<View
android:id="@+id/mask"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"
android:background="#80000000" />
<ImageView
android:id="@+id/iv_loading"

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rc_conversation_item"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:id="@+id/time"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:layout_gravity="center_vertical"
android:layout_weight="1.2"
android:ellipsize="end"
android:gravity="center_vertical"
android:textColor="#92949A"
android:textSize="12dp"
tools:text="2022-06-15\n16:26:15" />
<TextView
android:id="@+id/giftTypeName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center"
android:textColor="#92949A"
android:textSize="12dp"
tools:text="分類" />
<TextView
android:id="@+id/giftName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center"
android:textColor="#92949A"
android:textSize="12dp"
tools:text="禮物" />
<TextView
android:id="@+id/income"
android:layout_width="0dp"
android:layout_marginEnd="20dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.7"
android:ellipsize="end"
android:gravity="end|center"
android:textColor="#92949A"
android:textSize="12dp"
tools:text="10000" />
</LinearLayout>
</LinearLayout>

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