279 Commits

Author SHA1 Message Date
Max
cd962493c6 fix:调整飘屏的未登录判断逻辑 2024-04-19 11:43:35 +08:00
Max
b65c25d168 feat:补充公屏过滤功能 2024-03-25 19:54:13 +08:00
Max
50ce4d135d 测试 2024-03-25 11:39:51 +08:00
Max
bafd68a265 fix:修复SVGA飘屏不能展示问题 2024-03-25 10:56:34 +08:00
Max
f26f399df0 feat:初步搭建新的飘窗架构
feat:移植部分piko的通用飘屏、公屏代码(待完善)
2024-03-22 20:06:29 +08:00
Max
c0bbabaa1c feat:新增渠道:fir 2024-03-18 18:42:58 +08:00
Max
c97b521d4c feat:移除AVRoomActivity中的全服礼物飘屏逻辑到BaseActivity 2024-03-18 14:05:29 +08:00
Max
469ee07eeb feat:同步peko完成礼物飘窗UI优化(同步peko:去掉普通礼物飘窗) 2024-03-18 09:53:59 +08:00
Max
60d274c79a feat:客服中心改为私聊 2024-03-14 14:31:12 +08:00
Max
a48440209a fix:修复首页默认选中Tab-bug 2024-03-13 17:39:25 +08:00
Max
65bcf7a7ca fix:修复【一键登录不可用时按钮改为手机号登录功能】部分场景未失效bug 2024-02-04 17:11:48 +08:00
Max
b307db446d fix:修复UI反馈问题(礼物面板) 2024-02-04 11:52:02 +08:00
Max
bed3184df9 fix:修复赠送背包TAB的解锁礼物后,未更新顶部提示面板数量问题 2024-02-02 18:04:12 +08:00
Max
2c4fb0e056 fix:修复公屏-装扮礼物icon展示大小问题 2024-02-02 10:56:23 +08:00
Max
784aeebdf4 feat:修改资料页UI调整:增加箭头icon 2024-02-01 15:50:34 +08:00
Max
043e79681d fix:修复背包礼物显示锁问题 2024-02-01 15:22:11 +08:00
Max
b6972ee445 fix:修复装扮公屏展示问题 2024-02-01 14:58:16 +08:00
Max
4fd1bd73ea fix:装扮礼物点击banner增加空值判断 2024-02-01 14:33:53 +08:00
Max
afab35a691 fix:修复我的头饰状态判断错误问题 2024-02-01 14:33:30 +08:00
Max
d508912a9c feat:设置SplashScreen默认背景色(部分手机默认黑色) 2024-02-01 09:39:19 +08:00
Max
ec2e46b0a4 fix:调整礼物墙等级背景展示错误问题 2024-01-31 17:23:54 +08:00
Max
e2cf045ab7 fix:修复已解锁后文案展示问题 2024-01-31 16:16:49 +08:00
Max
c2cdd5d6f1 feat:去掉年度盛典icon 2024-01-31 11:38:59 +08:00
Max
5bacadf9df Merge branch 'feature/gift' into develop 2024-01-30 17:06:22 +08:00
Max
eb81154c1c feat:替换新人标签icon 2024-01-30 17:03:22 +08:00
Max
ae19a0c653 feat:修改注册默认头像地址 2024-01-30 17:01:58 +08:00
Max
44787e5041 feat:完成礼物墙优化(用户主页展示所有礼物) 2024-01-30 16:12:46 +08:00
Max
a8f12371a7 feat:调整装扮礼物banner字段 2024-01-30 11:03:53 +08:00
Max
950ce098dc feat:解锁礼物&装扮礼物,增加气泡展示逻辑 2024-01-29 19:32:55 +08:00
Max
720cf52fd0 feat:调整礼物面板-tab-new图标 2024-01-29 18:59:19 +08:00
Max
5d4aa38b93 feat:完成我的装扮下各个Tab的过期时间展示规则调整; 2024-01-29 18:41:10 +08:00
Max
a2faf14901 fix:优化解锁提示面板体验(模糊背景偶尔加载慢,改为动态添加View,有所改善) 2024-01-29 17:33:24 +08:00
Max
665fecb427 feat:完成解锁礼物与装扮礼物公屏展示逻辑 2024-01-29 16:51:19 +08:00
Max
6fb428b536 feat:补充解锁礼物点击联动逻辑 2024-01-29 15:32:44 +08:00
Max
a01a362506 feat:完成装扮礼物banner展示逻辑 2024-01-29 14:47:59 +08:00
Max
44ad80c708 feat:完成送礼后的解锁礼物本地状态更新逻辑 2024-01-29 11:51:46 +08:00
Max
f212af49f1 feat:完成趣味礼物展示 2024-01-26 18:50:22 +08:00
Max
3bcac093c7 feat:完成装扮商城、我的装扮 部分UI调整 2024-01-26 15:16:09 +08:00
Max
dd87492ffb feat:完善礼物面板底部UI调整
feat:初步完成解锁信息条目UI部分
2024-01-26 11:44:48 +08:00
Max
de79e73c9a feat:完成礼物面板-条目部分的UI调整 2024-01-25 19:46:34 +08:00
Max
fac1497de3 feat:修改开通房间时的实名认证文案 2024-01-25 15:36:56 +08:00
Max
a8335e915c feat:优化用户修改昵称、简介体验(在当前页完成网络请求) 2024-01-25 15:08:45 +08:00
Max
53820a23c7 feat:优化一键登录获取失败后展示手机号登录 2024-01-25 14:49:25 +08:00
Max
8016cc860a fix:修复后台无法show弹窗问题 2024-01-25 14:21:48 +08:00
Max
95e3e0768c fix:修复小米推送集成配置问题 2024-01-24 18:15:27 +08:00
Max
6f73f3f4fb Merge branch 'fix/agroa' into develop 2024-01-24 18:00:07 +08:00
Max
b6524ad94f feat:删除调试日志 2024-01-24 17:59:57 +08:00
Max
f5fc2f9d79 fix:修复离开模式下管理可以点击主麦操作问题(改为点击toast提示) 2024-01-24 17:56:52 +08:00
Max
be28ed2509 fix:修复Pk结束后底部麦克风图标状态无法更新问题 2024-01-24 16:46:24 +08:00
Max
5be60fe7b2 fix:修复Pk面包拖拽问题(适配父容器内边距) 2024-01-24 16:07:59 +08:00
Max
522c4a9f6f fix:修复声网上麦后自动开麦问题 2024-01-23 15:22:46 +08:00
Max
e478c9c202 feat:针对华为市场审核 补充权限申请提示 2024-01-15 11:58:22 +08:00
Max
3ac10340d6 feat:调整多渠道方式(换gradle默认方式) 2024-01-09 15:33:37 +08:00
Max
a10471d1c2 feat:完成华为应用市场权限申请适配(增加提示) 2024-01-09 14:46:05 +08:00
Max
d47536cc13 fix:修复房间榜单数据展示问题(榜二、榜三,数值未渲染) 2024-01-05 10:09:28 +08:00
Max
641c15a91e fix:删减部分代码 2024-01-04 16:02:41 +08:00
Max
f29dc93faa feat:调整客服中心权限拒绝提示判断;增加私聊图片权限检测与提示; 2024-01-04 15:57:29 +08:00
Max
42afa779db feat:调整首页部分文案提示 2024-01-04 14:01:32 +08:00
Max
d300ef179d feat:完善部分场景的权限拒绝提示 2024-01-04 12:14:34 +08:00
Max
ecd6b8da81 feat:调整应用启动图标(年度盛典) 2024-01-04 10:20:32 +08:00
Max
dec6e5e0c1 feat:完成年度庆典:应用logo、首页Tab 图标替换 2024-01-03 14:21:17 +08:00
Max
18b680db70 feat:删除首页-交友列表 无用的样式属性 2023-12-28 20:22:28 +08:00
Max
0fd330848c feat:大富翁游戏隐藏背景 2023-12-28 19:32:23 +08:00
Max
d0d2418dbf fix:修复交友页UI问题 2023-12-28 18:46:20 +08:00
Max
a129fb405e fix:修复首页-交友-数据未正常请求问题 2023-12-28 16:44:16 +08:00
Max
91b006422c feat:首页广场的下拉刷新组件换新样式 2023-12-28 15:49:05 +08:00
Max
d83dbe2337 fix:修复游戏房打开消息弹窗回来导致的闪烁问题:因为生命周期变化调用游戏暂停恢复导致,目前把游戏暂停恢复已到onStart,onStop中 2023-12-28 15:34:52 +08:00
Max
ce27034ca6 feat:恢复房间顶部排行榜入口:游戏房显示一个,其他房间三个 2023-12-28 14:36:20 +08:00
Max
340403fe0d fix:修复TRTC 上麦闭麦状态下还有声音光波问题,参考peko同步调整部分配置 2023-12-28 14:21:41 +08:00
Max
ac8dc50955 fix:调整埋点问题:eventLable为空被拦截问题 2023-12-28 11:06:56 +08:00
Max
32ef74df3a fix:调整游戏房间列表样式问题 2023-12-28 10:55:21 +08:00
Max
e4cb690b68 fix:调整UI问题 2023-12-27 21:15:00 +08:00
Max
96de9e153c feat:优化房间布局(动态状态栏高度) 2023-12-27 20:01:31 +08:00
Max
35032c1f8e feat:调整首页派对-礼物消息-房间上锁的处理 2023-12-27 17:39:01 +08:00
Max
3e1ab090aa feat:完成数据埋点需求 2023-12-27 17:14:07 +08:00
Max
95aeda920a Merge branch 'develop' into test/2.0.0 2023-12-27 15:07:12 +08:00
Max
60d6bbeae8 Merge branch 'feature/game' into test/2.0.0 2023-12-27 15:07:07 +08:00
Max
0b339136cc feat:去掉本地一键匹配的忽略私聊限制:由后端处理 2023-12-27 15:04:40 +08:00
Max
6e7743960c fix:修复首页房间条目点击进房参数问题 2023-12-27 14:57:54 +08:00
Max
7709020221 feat:完成用户资料页优化需求 2023-12-27 14:47:59 +08:00
Max
b9d59e9477 feat:拆分首页ViewModel 2023-12-27 11:22:00 +08:00
Max
321fa1b9ea feat:完成一键匹配入口进私聊:忽略限制功能 2023-12-26 23:22:04 +08:00
Max
ff746b5a11 feat:调整首页下拉刷新UI效果 2023-12-26 22:09:06 +08:00
Max
802383b9e8 feat:初步完成首页下拉动画 2023-12-26 20:20:31 +08:00
Max
b41a2e0376 feat:完成首页-交友UI与数据联调
feat:完成更多游戏房间页面功能
2023-12-26 19:23:15 +08:00
Max
732cea412c feat:调整首页部分类命名与目录结构、删除部分无用类 2023-12-26 10:56:05 +08:00
Max
52db404fc0 Merge branch 'fix/speaker' into develop 2023-12-26 09:53:49 +08:00
Max
2d954d21ef feat:调整TRTC音质级别 2023-12-25 20:56:10 +08:00
Max
b7eb1e66fa fix:修复声网上麦后导致静音失效问题 2023-12-25 20:20:09 +08:00
Max
6491efe708 feat:完善首页交友页UI与数据
feat:删除无用代码(旧首页)
2023-12-25 18:34:22 +08:00
Max
37ed8facf3 feat:完善首页-交友UI 2023-12-22 20:21:50 +08:00
Max
6becbb6226 fix:调整派对-房间-条目边框加载策略 2023-12-22 19:00:06 +08:00
Max
ea19645fe8 feat:删除无用代码 2023-12-22 18:08:58 +08:00
Max
d48844dc14 temp:增加打印ABI信息 2023-12-22 17:09:00 +08:00
Max
a939c29e3e feat:升级TRTC版本(abi开放x86) 2023-12-22 16:24:20 +08:00
Max
e55b4d7348 fix:增加异常捕获打印 2023-12-22 14:56:59 +08:00
Max
583d5a139b feat:调整派对-房间条目样式尺寸
feat:完善交友UI
2023-12-22 12:11:45 +08:00
Max
c7dd6ec61c feat:调整首页相关类命名 2023-12-22 10:08:38 +08:00
Max
a58165213d feat:增加首页动态切换Tab 2023-12-22 09:50:24 +08:00
Max
f21e117e7f feat:首页资源位增加本地缓存 2023-12-22 09:32:22 +08:00
Max
f9bd5b7a9f feat:初步完善【首页-派对】数据与UI对接 2023-12-21 20:24:05 +08:00
Max
b9251a89a5 feat:完成【首页-派对】部分UI 2023-12-20 20:00:39 +08:00
Max
e81d75a8b8 feat:升级最新SUD游戏SDK版本1.3.6.1181,完善房间入口等功能 2023-12-19 18:27:42 +08:00
Max
c691e5f570 feat:初步搭建新版首页页面(未实现功能) 2023-12-19 10:42:53 +08:00
Max
0e30b8e303 feat:补充边界安全判断 2023-12-12 19:25:46 +08:00
Max
3325ccaee9 fix:调整私聊限制策略 2023-12-12 19:23:59 +08:00
Max
277c1a637e Merge branch 'v1.5.1/dev' into test/1.5.3 2023-12-12 10:56:07 +08:00
Max
8660f0e826 Merge branch 'feature/message_revoke' into test/1.5.3 2023-12-12 10:54:57 +08:00
Max
dc46c16f3e feat:完成消息撤回后本地删除消息等操作 2023-12-12 10:50:07 +08:00
Max
1dfa9e9d25 fix:修复部分等级URL解析失败问题 2023-11-17 10:44:18 +08:00
Max
5376774ab6 feat:修改易盾KEY 2023-11-16 19:09:22 +08:00
Max
cfe2a45e4b feat:TRTC未支持x86,去掉x86 2023-11-13 19:00:20 +08:00
Max
d8a39a4729 feat:调整ndk配置(现阶段没有细分模拟器渠道,那就模拟器和官网渠道共用一个吧) 2023-11-13 18:31:59 +08:00
Max
05935ca7f2 feat:修改声网KEY 2023-11-13 17:32:41 +08:00
Max
f1ae820a5a fix:修复私聊未互相关注也可以发消息bug 2023-11-13 17:31:44 +08:00
Max
5cddd9f18d fix:修复切换到个播房未主动上麦问题 2023-11-13 15:30:29 +08:00
Max
19d6fed2fb fix:修复ndk配置导致的so包异常 2023-11-13 11:20:55 +08:00
Max
fb1bcfb642 Merge branch 'v1.5.0/hour_ranking' into v1.5.0/test 2023-11-08 18:15:47 +08:00
Max
046ae8e04e Merge branch 'v1.5.0/room' into v1.5.0/test 2023-11-08 18:15:37 +08:00
Max
73f7998445 feat:隐藏个播-粉丝团入口 2023-11-08 18:15:28 +08:00
Max
c68419f2af fix:小时榜上一名差值 最大显示999w+ 2023-11-08 18:10:13 +08:00
Max
1f65f99221 Merge branch 'v1.5.0/room' into v1.5.0/test 2023-11-08 16:59:15 +08:00
Max
5125f08a20 fix:修复重新进房后PK面板未正确展示数据;解决方案:在获取麦位后主动再刷新下相关数据 2023-11-08 16:59:05 +08:00
Max
1d9e119f89 Merge branch 'v1.5.0/hour_ranking' into v1.5.0/test 2023-11-08 14:22:15 +08:00
Max
30e468bdf3 fix:修复小时榜点击调整未区分个播房问题 2023-11-08 14:22:00 +08:00
Max
c5862701f5 Merge branch 'v1.5.0/optimize' into v1.5.0/test 2023-11-08 10:32:10 +08:00
Max
66dd5a0f16 Merge branch 'v1.5.0/privilege' into v1.5.0/test 2023-11-08 10:32:00 +08:00
Max
da8cbda0fa fix:修复公屏中-部分特权卡git图展示失败(glide缓存策略调整) 2023-11-08 10:31:51 +08:00
Max
5158ff178e fix:修复粉丝列表魅力等级展示大小问题 2023-11-08 10:09:15 +08:00
Max
bf5c6436da Merge branch 'v1.5.0/optimize' into v1.5.0/test 2023-11-07 22:44:54 +08:00
Max
c65e7bfc3b Merge branch 'v1.5.0/hour_ranking' into v1.5.0/test 2023-11-07 22:44:25 +08:00
Max
3f92ca82e9 Merge branch 'v1.5.0/privilege' into v1.5.0/test 2023-11-07 22:44:12 +08:00
Max
5909ccbc6c fix:修复特权卡-gif加载失败问题 2023-11-07 22:44:01 +08:00
Max
cf2490b9e2 feat:调整特权卡-视频选择限制提醒方式 2023-11-07 20:03:49 +08:00
Max
fab25bd4f6 fix:修复好友列表&粉丝列表 等级图标展示过小问题 2023-11-07 19:48:11 +08:00
Max
c616082b21 fix:移除个播房 主播榜 2023-11-07 19:25:58 +08:00
Max
63cedcc467 feat:完成小时榜功能 2023-11-07 19:04:56 +08:00
Max
8d9781cf56 Merge branch 'v1.5.0/room' into v1.5.0/test 2023-11-07 15:46:54 +08:00
Max
b935216b6e fix:修复房间设置-标签修改异常 2023-11-07 11:23:06 +08:00
Max
c5155aed0d fix:修复主麦-PK队名与昵称重叠问题 2023-11-07 11:10:05 +08:00
Max
2e812f60f5 fix:修复房间部分弹窗未及时销毁问题 2023-11-07 10:53:14 +08:00
Max
49810b42b0 fix:修复排麦-点击抱上闪退问题(CommonLoadingDialog导致) 2023-11-07 10:47:48 +08:00
Max
6ba4f05b17 fix:修复麦位-PK队名与用户昵称重叠问题 2023-11-07 10:23:36 +08:00
Max
8ec2e32240 Merge branch 'v1.5.0/agora' into v1.5.0/test 2023-11-07 10:02:04 +08:00
Max
d740e2bcdb Merge branch 'v1.5.0/umeng' into v1.5.0/test 2023-11-07 10:01:58 +08:00
Max
f6068d745d Merge branch 'v1.5.0/ranking' into v1.5.0/test 2023-11-07 10:01:52 +08:00
Max
8c02426f6d Merge branch 'v1.5.0/optimize' into v1.5.0/test 2023-11-07 10:01:40 +08:00
Max
9eb632116e feat:调整客户端配置 h5Uris 字段命名 2023-11-06 18:52:37 +08:00
Max
76cca091d6 fixt:修复送礼面板-分类选择器与背包价值重叠问题 2023-11-06 18:26:01 +08:00
Max
16f8cf006a feat:声网升级(同步piko的修改记录) 2023-11-06 16:16:11 +08:00
Max
92577ba1f1 feat:升级声网SDK到4.2.3(参考的piko) 2023-11-06 15:47:26 +08:00
Max
892b8192cc feat:删除房间榜单部分代码(新的是H5实现,删除旧原生实现) 2023-11-06 11:44:01 +08:00
Max
71b8b4caf6 feat:替换房间礼物面板-专属icon 2023-11-06 11:12:15 +08:00
Max
b9c165f355 feat:完成首页榜单&房间榜单 动态地址功能(待测试) 2023-11-06 11:08:31 +08:00
Max
b17077fe17 feat:完成礼物面板部分icon替换 2023-11-05 13:46:21 +08:00
Max
faec2f542e Merge branch 'v1.5.0/dev' into v1.5.0/optimize 2023-11-05 13:22:56 +08:00
Max
3defba88a5 Merge branch 'v1.5.0/dev' into v1.5.0/privilege 2023-11-05 13:22:19 +08:00
Max
ca2b411bac fix:修复预览权限问题 2023-11-05 13:22:09 +08:00
Max
86b9f1b35f feat:修改Umeng-Key 2023-11-05 11:40:00 +08:00
Max
10e9a630d2 feat:完善从等级图标地址中解析等级逻辑
fix:修复公屏等级图标变形问题
2023-11-05 11:34:02 +08:00
Max
af3f90c0c8 feat:完成部分等级ICON替换(本地资源)(未自测) 2023-11-03 20:11:23 +08:00
Max
044fe4b53e feat:完成关于我们ICP展示 2023-11-03 18:12:39 +08:00
Max
7fd56533f7 feat:优化登录页相关功能 2023-11-03 17:16:22 +08:00
Max
2b078390e4 Merge branch 'v1.5.0/dev' into v1.5.0/privilege
# Conflicts:
#	library/src/module_common/java/com/nnbc123/library/common/photo/PhotoProviderNew.kt
2023-11-03 16:52:52 +08:00
Max
8990405c6f feat:视频选择支持具体类型过滤
fix:修复exo播放器字段初始化问题
2023-11-03 16:51:11 +08:00
Max
15cf083657 feat:完成特权卡动画修改,支持mp4播放 2023-11-03 16:47:59 +08:00
Max
529d1500ba Merge branch 'v1.5.0/dev' into v1.5.0/privilege 2023-11-03 15:17:57 +08:00
Max
4c98e9422c feat:完善Exoplayer
feat:新增资源下载(Glide版本)未测试验证是否有bug
2023-11-03 15:17:50 +08:00
Max
3de4273531 feat:初步完成特权卡发布新增视频功能 2023-11-02 19:13:32 +08:00
Max
60d60d3578 feat:新增部分工具类(图片、文件)
feat:增加图片选择器过滤参数
2023-11-02 19:12:53 +08:00
Max
56fdb706b4 feat:同步迁移utils、core模块
feat:集成网络调试工具
feat:初步搭建ExoPlayer-待完善
2023-11-02 16:25:48 +08:00
Max
c1a1867511 Merge branch 'bugfix/room_pk' into develop 2023-11-02 11:33:49 +08:00
Max
a59a2897e7 chore:调整打包输出配置,暂时增加abi分包 2023-11-02 11:33:36 +08:00
wzq
28c2841923 房间 关闭PK模式 不主动关麦 2023-10-09 14:45:41 +08:00
wushaocheng
b1269a5c2a [Modify]修复礼物墙关注之后显示重复数据的bug 2023-09-18 17:52:49 +08:00
wushaocheng
24606d7b44 [Modify]修复动态特权卡不能显示的问题 2023-09-08 14:36:23 +08:00
wushaocheng
f2b755cf77 [Modify]修复QQ客户端不存在和隐私政策 2023-09-01 16:03:19 +08:00
wushaocheng
f7d62e6aa0 [Modify]音萌1.3.0功能 2023-09-01 14:40:37 +08:00
wushaocheng
2cfc74fa85 [Modify]点单功能完善 2023-08-25 20:33:49 +08:00
wushaocheng
3def5cebda [Modify]点单ui修改 2023-08-23 10:18:33 +08:00
wushaocheng
d29a2c1245 [Modify]点单ui修改 2023-08-22 21:42:42 +08:00
wushaocheng
a304b4b07b [Modify]特权卡提示,礼物面板调整 2023-08-21 15:41:41 +08:00
wushaocheng
87b4ea4935 [Modify]个人资料页公会信息调整 2023-08-17 16:28:09 +08:00
wushaocheng
ee320f0591 [Modify]启动页政策文案修改 2023-08-08 14:33:52 +08:00
wushaocheng
d05e8e9a53 [Modify]1.2.0bug修复 2023-08-04 12:04:53 +08:00
wushaocheng
31266aaee0 [Modify]房间背景 2023-07-28 19:51:00 +08:00
wushaocheng
2bb57e2b3f [Modify]热门房间tab调整 2023-07-28 14:59:31 +08:00
wushaocheng
10b48eeb0e [Modify]热门房间tab调整 2023-07-28 10:23:22 +08:00
wushaocheng
7a7a394b03 [Modify]特权卡功能实现 2023-07-27 16:13:54 +08:00
wushaocheng
ce93e02d8a [BugFix]修复线上bug 2023-06-01 16:18:36 +08:00
DESKTOP-ICQKP58\H1
3e07b3d9d7 [BugFix]点击邀请工会信息闪退 2023-04-26 16:05:41 +08:00
DESKTOP-ICQKP58\H1
b8645b2058 [BugFix]点击邀请工会信息闪退 2023-04-25 18:03:51 +08:00
DESKTOP-ICQKP58\H1
2f238e0447 [BugFix]房间排行榜前三头像回显 2023-04-25 16:02:19 +08:00
DESKTOP-ICQKP58\H1
34b061996f 本地音乐Android10.0适配 2023-04-19 19:15:53 +08:00
DESKTOP-ICQKP58\H1
58a5556fc0 [BugFix]礼物墙铺满剩下空白页面 2023-04-18 17:00:49 +08:00
DESKTOP-ICQKP58\H1
4f2d895f38 [BugFix]修复列表里直播中不会有动效的问题 2023-04-18 16:09:17 +08:00
wushaocheng
8ee3bcef6e [Modify]修改版本号为1.1.1 2023-04-14 17:53:08 +08:00
wushaocheng
3e29eb1c32 [BugFix]个人中心头像问题修复 2023-04-14 17:51:53 +08:00
wushaocheng
486da1d028 Rename .java to .kt 2023-04-14 17:51:53 +08:00
wushaocheng
cb21a12b95 [BugFix]修复保存图片失败的bug 2023-04-14 15:31:58 +08:00
wushaocheng
ee1d528027 [Modify]私聊获取图片失败bug修复 2023-04-14 14:14:23 +08:00
wushaocheng
684bd5260d [Modify]安卓10以上适配加入基础库 2023-04-13 18:47:53 +08:00
wushaocheng
c678061633 [Modify]安卓10以上适配 2023-04-13 16:58:18 +08:00
huangjian
e208dc6950 房间公告入口文字居中,去除CancellationException的toast 2023-03-31 11:56:55 +08:00
huangjian
ec9c3a9a42 测试环境域名修改 2023-03-28 14:26:27 +08:00
huangjian
5298e69eed 推荐改为热门 2023-03-27 17:12:03 +08:00
huangjian
0bbe0c8b64 房间送礼图标替换 2023-03-27 11:59:13 +08:00
huangjian
20a745e955 targetSdkVersion 改为29 2023-03-24 16:25:23 +08:00
huangjian
e2a667fb90 打开塔罗支付方法修改 2023-03-23 21:28:26 +08:00
huangjian
4716157368 私聊发送图片权限申请优化 2023-03-23 19:22:22 +08:00
huangjian
00866e7c73 bug fix 2023-03-23 18:53:12 +08:00
huangjian
63bd50479d bug fix 2023-03-23 16:35:30 +08:00
huangjian
9dd27c723c H5调用原生支付逻辑优化 2023-03-23 15:08:19 +08:00
huangjian
362c58da6d 一键登录预取号成功才展示 2023-03-23 14:58:51 +08:00
huangjian
4ca4d25644 UI调整,放出第三方登录 2023-03-23 14:40:22 +08:00
huangjian
362fb3b6c3 Revert "隐藏需要发送验证码的页面"
This reverts commit f9254a3f
2023-03-22 18:50:33 +08:00
huangjian
7dcd553fba 增加H5调用原生支付方法 2023-03-22 18:49:25 +08:00
huangjian
ce63fdcd12 推荐改为热门 2023-03-22 10:52:49 +08:00
huangjian
bd14980c14 UI调整 2023-03-21 19:27:41 +08:00
huangjian
a8b993572c 增加魔法帽和星际探险公屏昵称点击事件 2023-03-21 14:33:46 +08:00
huangjian
adac9ad536 增加魔法帽和星际探险公屏昵称点击事件 2023-03-21 14:25:06 +08:00
huangjian
3be3591b15 魔法帽UI修改 2023-03-21 14:21:15 +08:00
huangjian
1feda0e047 星际探险UI修改 2023-03-21 14:11:46 +08:00
huangjian
72643d7753 UI微调 2023-03-21 11:29:46 +08:00
huangjian
331e3404a6 登录svga,资源位找大神优化 2023-03-20 19:13:34 +08:00
huangjian
655f7d9c40 UI对稿 2023-03-20 18:46:04 +08:00
huangjian
c94b40fe8a 广场话题UI优化 2023-03-20 16:49:35 +08:00
huangjian
e7193e9ef4 BaseFragment优化 2023-03-20 16:14:49 +08:00
huangjian
5b987ecccc StatusLayout 增加ID 2023-03-20 16:01:25 +08:00
huangjian
5b7ef4c86d 动态话题UI修改 2023-03-20 15:51:38 +08:00
huangjian
f9254a3f15 隐藏需要发送验证码的页面 2023-03-20 15:28:24 +08:00
huangjian
87c1dddbab UI对稿,部分错误提示优化 2023-03-20 15:17:56 +08:00
huangjian
1a363a19e3 细节处理 2023-03-17 21:21:57 +08:00
huangjian
8c8f93580d 验证码登录替换 2023-03-17 21:10:50 +08:00
huangjian
6234480529 logo替换 2023-03-17 20:01:08 +08:00
huangjian
cd7b4db946 主题色替换 2023-03-17 19:32:07 +08:00
huangjian
eb25a1244c 细节优化 2023-03-17 18:29:45 +08:00
huangjian
83810d088a 默认头像修改,隐藏第三方登录 2023-03-17 18:09:59 +08:00
huangjian
17c7129f87 部分id新增复制按钮 2023-03-17 17:58:26 +08:00
huangjian
0cbdea2e6f 房间公告UI修改 2023-03-17 17:45:10 +08:00
huangjian
fb4aeba530 系统用户过滤 2023-03-17 17:13:33 +08:00
huangjian
e807dab42f 换一换刷新逻辑修改 2023-03-17 15:55:06 +08:00
huangjian
deac16a90a 首页UI修改 2023-03-17 15:50:50 +08:00
huangjian
3642ae2748 去掉验证码登录 2023-03-16 22:19:45 +08:00
huangjian
7331d8e205 一些细节问题处理 2023-03-16 22:15:57 +08:00
huangjian
311202c075 实名认证SDK升级,增加心跳接口调用 2023-03-16 20:49:34 +08:00
huangjian
119546866c 动态bug fix 2023-03-16 20:14:50 +08:00
huangjian
c21768d3d0 推荐改到第一位 2023-03-16 19:18:37 +08:00
huangjian
860e41c45e 首页匹配大神 2023-03-16 19:07:20 +08:00
huangjian
bb00f6433f bug fix 2023-03-16 18:21:48 +08:00
huangjian
4c17cf30ef 动态bugfix 2023-03-16 17:52:51 +08:00
huangjian
48fa73353d 第三方key修改 2023-03-16 17:21:28 +08:00
huangjian
da01c04dcc 派对banner使用组队开黑的 2023-03-16 17:10:21 +08:00
huangjian
cd0898ae68 Rename .java to .kt 2023-03-16 17:10:20 +08:00
huangjian
df31666b29 飘屏UI修改 2023-03-16 16:38:38 +08:00
huangjian
4fec80e42a splash修改 2023-03-16 15:29:20 +08:00
huangjian
4490a5e54e bug fix 2023-03-16 15:19:31 +08:00
huangjian
20fded3771 首页tab新增发现新朋友 2023-03-16 11:51:48 +08:00
huangjian
efeea38cc1 支付宝SDK升级 2023-03-15 17:59:52 +08:00
huangjian
aa2635c652 房间UI修改 2023-03-15 16:33:20 +08:00
huangjian
95d94f95b2 星际探索H5背景透明 2023-03-15 10:57:50 +08:00
huangjian
d26205bd1f 域名修改 2023-03-15 10:36:51 +08:00
huangjian
abbe516b3a app_logo替换,UI整体调整 2023-03-14 17:41:25 +08:00
huangjian
ac2f16f308 七鱼客服接入 2023-03-14 16:34:25 +08:00
huangjian
dae987e9e0 航海冒险改为星际探索 2023-03-14 14:20:26 +08:00
huangjian
fc0c688916 APP_MARK 修改 2023-03-14 12:03:52 +08:00
huangjian
be16a0a810 add kotlinOptions 2023-03-14 11:23:00 +08:00
huangjian
fadc41bb84 域名修改 2023-03-14 10:04:44 +08:00
huangjian
9290fdbd02 糖果树UI修改 2023-03-13 16:53:08 +08:00
huangjian
aa94a834ce 用户主页UI修改 2023-03-10 16:36:28 +08:00
huangjian
213cfb97cb 礼物面板UI修改 2023-03-09 18:56:52 +08:00
huangjian
0ac2bdc775 登录UI修改 2023-03-09 14:09:39 +08:00
huangjian
b23d8b6fa5 充值页面UI修改 2023-03-08 18:12:06 +08:00
huangjian
f7b36c40ab 首页消息tab UI修改 2023-03-08 16:13:30 +08:00
huangjian
fa47dad924 首页我的tab UI修改 2023-03-08 15:25:04 +08:00
huangjian
a15ae87fd5 首页动态tab UI修改 2023-03-07 18:58:06 +08:00
huangjian
83e4cfc629 派对UI修改 2023-03-07 14:59:11 +08:00
huangjian
0c7fb5dcf1 包名修改 2023-03-07 14:06:03 +08:00
huangjian
9d0b9d79e9 移除lombok,Android SDK更新,改为使用Java11,targetSdkVersion变更为32 2023-03-06 19:30:25 +08:00
5437 changed files with 168500 additions and 82741 deletions

View File

@@ -2,11 +2,11 @@ apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
compileSdkVersion 30
compileSdkVersion COMPILE_SDK_VERSION.toInteger()
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
minSdkVersion MIN_SDK_VERSION.toInteger()
targetSdkVersion TARGET_SDK_VERSION.toInteger()
testApplicationId 'com.soundcloud.android.crop.test'
testInstrumentationRunner 'android.test.InstrumentationTestRunner'
@@ -20,12 +20,21 @@ android {
}
buildToolsVersion = '30.0.3'
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
dependencies {
api 'androidx.annotation:annotation:1.1.0'
api 'androidx.annotation:annotation:1.2.0'
api 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "androidx.core:core-ktx:1.3.2"
implementation "androidx.core:core-ktx:1.7.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {

View File

@@ -33,7 +33,7 @@
"project_id":"736430079244645870",
"app_id":"102953045",
"api_key":"DAEDAN1bqknzqRuvualUo98vO7U9uXBJtBZ0rNQHgSo03bXgkl98tD4sytVBCBB1Y7ha0NcY++dSp9JLsws9BzDN+/fS3v8J9We3nA==",
"package_name":"com.voice.magic"
"package_name":"cn.nnbc123.voice"
},
"oauth_client":{
"client_id":"102953045",
@@ -41,7 +41,7 @@
},
"app_info":{
"app_id":"102953045",
"package_name":"com.voice.magic"
"package_name":"cn.nnbc123.voice"
},
"service":{
"analytics":{
@@ -75,12 +75,12 @@
"configuration_version":"3.0",
"appInfos":[
{
"package_name":"com.voice.magic",
"package_name":"cn.nnbc123.voice",
"client":{
"app_id":"102953045"
},
"app_info":{
"package_name":"com.voice.magic",
"package_name":"cn.nnbc123.voice",
"app_id":"102953045"
},
"oauth_client":{

Binary file not shown.

View File

@@ -3,47 +3,55 @@ apply plugin: 'com.android.application'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.huawei.agconnect'
apply plugin: 'com.tencent.vasdolly'
apply from: '../mob.gradle'
apply plugin: 'android-junk-code'
def onlyArm64 = Boolean.parseBoolean(only_arm64)
android {
compileSdkVersion 30
compileSdkVersion COMPILE_SDK_VERSION.toInteger()
defaultConfig {
applicationId "com.voice.magic"
minSdkVersion 21
targetSdkVersion 29
applicationId "cn.nnbc123.voice"
minSdkVersion MIN_SDK_VERSION.toInteger()
targetSdkVersion TARGET_SDK_VERSION.toInteger()
versionCode Integer.valueOf(version_code)
versionName version_name
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
//设置支持的SO库架构
if (onlyArm64) {
abiFilters "arm64-v8a"
} else {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
// ndk {
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
// }
flavorDimensions 'default'
}
// splits {
// abi {
// enable true
// reset()
// include 'armeabi-v7a', 'arm64-v8a', 'x86'
// universalApk true
// }
// }
//在apk文件后边生成版本号信息
android.applicationVariants.all {
variant ->
variant.outputs.all {
def date = new Date().format("MMddHHmm", TimeZone.getTimeZone("GMT+08"))
outputFileName = "magic_${buildType.name}_v${defaultConfig.versionName}-${date}.apk"
android.applicationVariants.configureEach { variant ->
variant.outputs.configureEach { output ->
def date = new Date().format("MMddHHmm", TimeZone.getTimeZone("GMT+08"))
def outputFile = output.outputFile
if (outputFile == null || !outputFile.name.endsWith('.apk')) {
return
}
def abi = output.getFilter(com.android.build.OutputFile.ABI)
if (abi == null) {
abi = "universal"
}
outputFileName = "yinmeng_${variant.flavorName}_${buildType.name}_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${abi}_${date}.apk"
}
}
lintOptions {
abortOnError false
disable 'MissingTranslation'
@@ -65,19 +73,19 @@ android {
signingConfigs {
v2 {
storeFile file('../magic.jks')
storePassword "magic2020"
keyAlias "magic"
keyPassword "magic2020"
storeFile file('../yinmeng.jks')
storePassword "yinmeng2023"
keyAlias "yinmeng"
keyPassword "yinmeng2023"
v2SigningEnabled true
v1SigningEnabled true
}
v1 {
storeFile file('../magic.jks')
storePassword "magic2020"
keyAlias "magic"
keyPassword "magic2020"
storeFile file('../yinmeng.jks')
storePassword "yinmeng2023"
keyAlias "yinmeng"
keyPassword "yinmeng2023"
v2SigningEnabled false
v1SigningEnabled true
}
@@ -136,7 +144,8 @@ android {
buildTypes {
release {
buildConfigField "String", "BASE_URL", "\"https://yinyou.api.shengxuanwangluo.com/\""
buildConfigField "String", "BASE_URL", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "WEB_URL", "\"https://h5.nnbc123.cn/\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "BASE_URL"
buildConfigField "String", "BASE_URL_RELEASE", "BASE_URL"
@@ -147,37 +156,93 @@ android {
}
debug {
buildConfigField "String", "BASE_URL", "\"http://api.uat.lecheng163.com/\""
buildConfigField "String", "BASE_URL", "\"http://beta.api.nnbc123.cn/\""
buildConfigField "String", "WEB_URL", "\"http://beta.api.nnbc123.cn\""
buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL"
buildConfigField "String", "BASE_URL_STAGING", "\"https://yinyou.api.shengxuanwangluo.com/\""
buildConfigField "String", "BASE_URL_RELEASE", "\"https://yinyou.api.shengxuanwangluo.com/\""
buildConfigField "String", "BASE_URL_STAGING", "\"https://api.nnbc123.cn/\""
buildConfigField "String", "BASE_URL_RELEASE", "\"https://api.nnbc123.cn/\""
minifyEnabled false
shrinkResources false
signingConfig signingConfigs.v1
signingConfig signingConfigs.v2
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "11"
}
buildToolsVersion = '30.0.3'
productFlavors {
official {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
fir {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
mlq {
ndk {
abiFilters 'x86'
}
}
yingyongbao {
ndk {
abiFilters 'armeabi-v7a'
}
}
vivo {
ndk {
abiFilters 'arm64-v8a'
}
}
oppo {
ndk {
abiFilters 'arm64-v8a'
}
}
xiaomi {
ndk {
abiFilters 'arm64-v8a'
}
}
huawei {
ndk {
abiFilters 'arm64-v8a'
}
}
kuaishou_01 {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [
// 渠道
CHANNEL_VALUE : name,
]
}
}
def Lombok = "1.18.18"
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation fileTree(dir: 'aliyun-libs', include: ['*.jar', '*.aar'])
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
api 'androidx.multidex:multidex:2.0.1'
@@ -202,7 +267,7 @@ dependencies {
api "com.jakewharton:butterknife:10.2.3"
annotationProcessor "com.jakewharton:butterknife-compiler:10.2.3"
implementation "com.llew.huawei:verifier:1.0.3"
annotationProcessor 'androidx.annotation:annotation:1.1.0'
annotationProcessor 'androidx.annotation:annotation:1.2.0'
implementation 'io.github.h07000223:flycoTabLayout:3.0.0'
@@ -216,8 +281,6 @@ dependencies {
api 'com.jungly:gridPasswordView:0.3'
api 'com.google.android.flexbox:flexbox:3.0.0'
compileOnly "org.projectlombok:lombok:${Lombok}"
annotationProcessor "org.projectlombok:lombok:${Lombok}"
implementation 'nl.dionsegijn:konfetti:1.1.2'
//数字滚动效果
@@ -245,10 +308,14 @@ dependencies {
//oppo推送需要
implementation 'commons-codec:commons-codec:1.6'
api 'com.tencent.vasdolly:helper:3.0.3'
// api 'com.tencent.vasdolly:helper:3.0.3'
implementation "io.github.tencent:vap:2.0.24"
implementation 'com.github.mmin18:realtimeblurview:1.2.1'
implementation 'com.qiyukf.unicorn:unicorn:8.2.0'
implementation 'com.github.yalantis:ucrop:2.2.7'
}
repositories {
@@ -259,36 +326,20 @@ repositories {
}
channel {
//多渠道包的输出目录默认为new File(project.buildDir,"channel")
outputDir = new File(project.buildDir, "channelapk")
//多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}-${buildTime}
def only64 = onlyArm64 ? "-only64" : ""
apkNameFormat = 'magic-${buildType}only64-${flavorName}-v${versionName}-${buildTime}'.replace("only64", only64)
//快速模式生成渠道包时不进行校验速度可以提升10倍以上默认为false
fastMode = false
//buildTime的时间格式默认格式yyyyMMdd-HHmmss
buildTimeDateFormat = 'MMddHHmm'
//低内存模式仅针对V2签名默认为false只把签名块、中央目录和EOCD读取到内存不把最大头的内容块读取到内存在手机上合成APK时可以使用该模式
lowMemory = false
}
android.applicationVariants.all { variant ->
print("variant.name=" + variant.name)
switch (variant.name) {//变体名称如果没有设置productFlavors就是buildType名称如果有设置productFlavors就是flavor+buildType例如freeRelease、proRelease
case "release":
androidJunkCode.configMap.put(variant.name, {
packageBase = "com.mango.plugin.ui" //生成java类根包名
packageCount = 30 //生成包数量
activityCountPerPackage = 30 //每个包下生成Activity类数量
excludeActivityJavaFile = false
//是否排除生成Activity的Java文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题
otherCountPerPackage = 50 //每个下生成其它类的数量
methodCountPerClass = 20 //每个类下生成方法数量
resPrefix = "mango_" //生成的layout、drawable、string等资源名前缀
drawableCount = 300 //生成drawable资源数量
stringCount = 300 //生成string数量
})
break
if (variant.name.contains("release") || variant.name.contains("Release")) {
androidJunkCode.configMap.put(variant.name, {
packageBase = "com.nnbc123.plugin.ui" //生成java类根包名
packageCount = 30 //生成包数量
activityCountPerPackage = 30 //每个包下生成Activity类数量
excludeActivityJavaFile = false
//是否排除生成ActivityJava文件,默认false(layout和写入AndroidManifest.xml还会执行),主要用于处理类似神策全埋点编译过慢问题
otherCountPerPackage = 50 //每个包下生成其它类的数量
methodCountPerClass = 20 //每个下生成方法数量
resPrefix = "mango_" //生成的layout、drawable、string等资源名前缀
drawableCount = 300 //生成drawable资源数量
stringCount = 300 //生成string数量
})
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -115,19 +115,19 @@
-keep class com.netease.** {*;}
# Presenter 相关
-keep class com.mango.moshen.base.** { *; }
-keep public class * extends com.mango.moshen.base.BaseMvpPresenter
-keep public class * extends com.mango.xchat_android_library.base.factory.AbstractMvpPresenter
-keep class com.nnbc123.app.base.** { *; }
-keep public class * extends com.nnbc123.app.base.BaseMvpPresenter
-keep public class * extends com.nnbc123.library.base.factory.AbstractMvpPresenter
# 云信自定义 ViewHolder 配置
-dontwarn com.mango.moshen.ui.im.recent.holder.**
-keep class com.mango.moshen.ui.im.recent.holder.** {*;}
-keep class com.mango.moshen.ui.im.chat.** {*;}
-keep class com.mango.moshen.luckymoney.viewholder.** {*;}
-keep class com.mango.moshen.share.viewholder.** {*;}
-keep class com.mango.moshen.public_chat_hall.msg.viewholder.** {*;}
-keep class com.mango.moshen.module_hall.im.msgholder.** {*;}
-keep class com.mango.moshen.mentoring_relationship.viewholder.** {*;}
-dontwarn com.nnbc123.app.ui.im.recent.holder.**
-keep class com.nnbc123.app.ui.im.recent.holder.** {*;}
-keep class com.nnbc123.app.ui.im.chat.** {*;}
-keep class com.nnbc123.app.luckymoney.viewholder.** {*;}
-keep class com.nnbc123.app.share.viewholder.** {*;}
-keep class com.nnbc123.app.public_chat_hall.msg.viewholder.** {*;}
-keep class com.nnbc123.app.module_hall.im.msgholder.** {*;}
-keep class com.nnbc123.app.mentoring_relationship.viewholder.** {*;}
-keep public class * extends com.netease.nim.uikit.common.ui.recyclerview.holder.RecyclerViewHolder {*;}
-keep public class * extends com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase {*;}
@@ -169,7 +169,7 @@
#-------------TakePhoto的混淆配置------------
-keep class com.jph.takephoto.** { *; }
-keep class com.nnbc123.app.takephoto.** { *; }
-dontwarn com.jph.takephoto.**
-keep class com.darsh.multipleimageselect.** { *; }
@@ -207,8 +207,8 @@
<init>(...);
}
-dontwarn com.mango.moshen.bindadapter.**
-keep class com.mango.moshen.bindadapter.** {*;}
-dontwarn com.nnbc123.app.bindadapter.**
-keep class com.nnbc123.app.bindadapter.** {*;}
# Ping++ 混淆过滤
-dontwarn com.pingplusplus.**
@@ -239,8 +239,8 @@
# TODO 网络加载 一些业务bean gson 时候混淆问题
-keep class org.json.** {*;}
-dontwarn com.moshen.core.**
-keep class com.mango.core.** {*;}
-dontwarn com.nnbc123.core.**
-keep class com.nnbc123.core.** {*;}
#百度统计
@@ -314,8 +314,8 @@
-keep class com.autonavi.aps.amapapi.model.**{*;}
#暂时keep这个View排查华为oom问题
-keep class com.mango.moshen.avroom.widget.MicroView{*;}
-keep class com.mango.moshen.ui.widget.rollviewpager.RollPagerView{*;}
-keep class com.nnbc123.app.avroom.widget.MicroView{*;}
-keep class com.nnbc123.app.ui.widget.rollviewpager.RollPagerView{*;}
#linkedMe
-keep class com.microquation.linkedme.android.** { *; }
@@ -373,7 +373,7 @@
-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** {*;}
-keep class com.mango.moshen.ui.widget.AppBarLayoutBehavior {*;}
-keep class com.nnbc123.app.ui.widget.AppBarLayoutBehavior {*;}
#ViewBinding使用的反射生成的对应Binding
-keepclassmembers class * implements androidx.viewbinding.ViewBinding {
@@ -436,9 +436,6 @@
# linkedme
-keep class com.microquation.linkedme.android.** { *; }
# 数美天网
-keep class com.ishumei.dfp.SMSDK { *; }
-dontwarn com.alibaba.**
-dontwarn com.taobao.**
-dontwarn com.google.**
@@ -453,5 +450,14 @@
-keep class android.support.v8.renderscript.** { *; }
-keep class androidx.renderscript.** { *; }
-keep class com.yinyou.plugin.**{*;}
-keep class com.nnbc123.plugin.ui.**{*;}
-dontwarn com.qiyukf.**
-keep class com.qiyukf.** {*;}
-dontwarn org.slf4j.**
-keep class org.slf4j.** { *; }
# For BannerViewPager
-keep class androidx.recyclerview.widget.** { *; }
-keep class androidx.viewpager2.widget.** { *; }
-keep class io.agora.**{*;}

View File

@@ -1,28 +0,0 @@
package com.mango.moshen;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.mango.moshen_android_client", appContext.getPackageName());
}
}

View File

@@ -0,0 +1,28 @@
package com.nnbc123.app;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.nnbc123.app_android_client", appContext.getPackageName());
}
}

View File

@@ -1,11 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/dialog_charge_bg_checked" android:state_selected="true" />
<item android:drawable="@drawable/dialog_charge_bg_checked" android:state_checked="true" />
<item android:state_selected="true">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#ffffe710" />
<solid android:color="#26ffe710" />
<corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white" />
<corners android:radius="8dp"/>
<solid android:color="#fff8f8fa" />
<corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" />
</shape>
</item>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:radius="@dimen/dp_12"
/>
<solid
android:color="@color/black_transparent_35"
/>
</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="@dimen/dp_12" />
<stroke android:color="#FFE974" android:width="1px"/>
<solid android:color="#0D002F"/>
</shape>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,10 +0,0 @@
package com.jph.takephoto.permission;
import com.jph.takephoto.model.InvokeParam;
/**
* 授权管理回调
*/
public interface InvokeListener {
PermissionManager.TPermissionType invoke(InvokeParam invokeParam);
}

View File

@@ -1,93 +0,0 @@
package com.jph.takephoto.uitl;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import com.darsh.multipleimageselect.activities.AlbumSelectActivity;
import com.darsh.multipleimageselect.helpers.Constants;
import com.jph.takephoto.model.CropOptions;
import com.jph.takephoto.model.TContextWrap;
/**
* Intent工具类用于生成拍照、
* 从相册选择照片裁剪照片所需的Intent
* Author: JPH
* Date: 2016/6/7 0007 13:41
*/
public class IntentUtils {
private static final String TAG = IntentUtils.class.getName();
/**
* 获取图片多选的Intent
* @param limit 最多选择图片张数的限制
* */
public static Intent getPickMultipleIntent(TContextWrap contextWrap, int limit){
Intent intent = new Intent(contextWrap.getActivity(), AlbumSelectActivity.class);
intent.putExtra(Constants.INTENT_EXTRA_LIMIT, limit>0? limit:1);
return intent;
}
/**
* 获取裁剪照片的Intent
* @param targetUri 要裁剪的照片
* @param outPutUri 裁剪完成的照片
* @param options 裁剪配置
* @return
*/
public static Intent getCropIntentWithOtherApp(Uri targetUri, Uri outPutUri, CropOptions options) {
boolean isReturnData = TUtils.isReturnData();
Log.w(TAG, "getCaptureIntentWithCrop:isReturnData:" + (isReturnData ? "true" : "false"));
Intent intent = new Intent("com.android.camera.action.CROP");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(targetUri, "image/*");
intent.putExtra("crop", "true");
if (options.getAspectX()*options.getAspectY()>0){
intent.putExtra("aspectX", options.getAspectX());
intent.putExtra("aspectY", options.getAspectY());
}
if (options.getOutputX()*options.getOutputY()>0){
intent.putExtra("outputX", options.getOutputX());
intent.putExtra("outputY", options.getOutputY());
}
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);
intent.putExtra("return-data", isReturnData);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
return intent;
}
/**
* 获取拍照的Intent
* @return
*/
public static Intent getCaptureIntent(Uri outPutUri) {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//设置Action为拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);//将拍取的照片保存到指定URI
return intent;
}
/**
* 获取选择照片的Intent
* @return
*/
public static Intent getPickIntentWithGallery() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);//Pick an item from the data
intent.setType("image/*");//从所有图片中进行选择
return intent;
}
/**
* 获取从文件中选择照片的Intent
* @return
*/
public static Intent getPickIntentWithDocuments() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
return intent;
}
}

View File

@@ -1,55 +0,0 @@
package com.mango.moshen.application;
import android.app.Activity;
import com.mango.moshen.avroom.activity.AVRoomActivity;
import com.mango.moshen.utils.ActWhiteListMrg;
import java.lang.ref.WeakReference;
import lombok.Getter;
/**
* create by lvzebiao @2019/8/8
*/
public class ActivityStackManager {
/**
* 用于保持最顶的Activity实例排除中转的activity
* 比如{@link com.mango.moshen.MiddleActivity}
*/
@Getter
private WeakReference<Activity> topUpgradeWeakRef;
@Getter
private WeakReference<Activity> avRoomActWeakRef;
public void setTopUpgradeActivity(Activity activity) {
if (!ActWhiteListMrg.isTempActivity(activity)) {
topUpgradeWeakRef = new WeakReference<>(activity);
}
}
public void addActivity(Activity activity){
if (activity instanceof AVRoomActivity) {
avRoomActWeakRef = new WeakReference<>(activity);
}
}
public void removeActivity(Activity activity){
if (activity instanceof AVRoomActivity) {
avRoomActWeakRef = null;
}
}
private static final class Helper {
public static final ActivityStackManager INSTANCE = new ActivityStackManager();
}
public static ActivityStackManager getInstance() {
return Helper.INSTANCE;
}
}

View File

@@ -1,10 +0,0 @@
package com.mango.moshen.audio.helper;
/**
* create by lvzebiao @2019/6/11
*/
public interface OnRefreshListener {
void refresh();
}

View File

@@ -1,35 +0,0 @@
package com.mango.moshen.audio.presenter;
import com.mango.moshen.audio.view.IMyVoiceView;
import com.mango.moshen.base.BaseMvpPresenter;
import com.mango.core.audio.AudioModel;
import com.mango.core.audio.bean.UserVoiceInfo;
import com.mango.core.auth.AuthModel;
import com.mango.core.utils.net.DontWarnObserver;
import com.mango.xchat_android_library.base.PresenterEvent;
import java.util.List;
/**
* 我的声音页面
*/
public class MyVoicePresenter extends BaseMvpPresenter<IMyVoiceView> {
public void getUserVoiceInfo() {
getMvpView().showLoadingView();
AudioModel.get().getMyVoiceInfoList(AuthModel.get().getCurrentUid())
.compose(bindUntilEvent(PresenterEvent.DESTROY))
.subscribe(new DontWarnObserver<List<UserVoiceInfo>>() {
@Override
public void accept(List<UserVoiceInfo> userVoiceInfos, String error) {
super.accept(userVoiceInfos, error);
if (getMvpView() == null) {
return;
}
getMvpView().hideLoadingView();
getMvpView().showVoiceInfo(userVoiceInfos);
}
});
}
}

View File

@@ -1,14 +0,0 @@
package com.mango.moshen.audio.view;
import com.mango.core.audio.bean.VoiceMatchInfo;
/**
* create by lvzebiao @2019/6/19
*/
public interface IBottleOpListener {
void onLimit(boolean isRight);
void onLikeOrUnLike(VoiceMatchInfo info, boolean isRight, boolean needLoading);
}

View File

@@ -1,23 +0,0 @@
package com.mango.moshen.audio.view;
import com.mango.core.audio.bean.UserVoiceInfo;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.List;
/**
* 我的声音页面
*/
public interface IMyVoiceView extends IMvpBaseView {
/**
* 显示声音数据消息
*/
void showVoiceInfo(List<UserVoiceInfo> voiceList);
/**
* 请稍后
*/
void showLoadingView();
void hideLoadingView();
}

View File

@@ -1,18 +0,0 @@
package com.mango.moshen.avroom;
import android.content.Context;
import android.util.SparseArray;
import com.mango.moshen.avroom.widget.ViewItem;
import com.mango.moshen.ui.widget.GiftDialog;
/**
* 用户卡片的管理
* Created by lvzebiao on 2018/11/12.
*/
public class UserCardButtonManager {
}

View File

@@ -1,20 +0,0 @@
package com.mango.moshen.avroom.adapter
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.moshen.R
import com.mango.moshen.ui.utils.ImageLoadUtils
import com.mango.core.home.bean.HomeRoomInfo
import com.mango.core.utils.subAndReplaceDot
class ExitRoomAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_exit_room) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
ImageLoadUtils.loadImage(mContext, item.avatar, helper.getView(R.id.iv_avatar))
ImageLoadUtils.loadImage(mContext, item.tagPict, helper.getView(R.id.iv_tag))
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
.setText(R.id.tv_title, item.title.subAndReplaceDot(8))
}
}

View File

@@ -1,17 +0,0 @@
package com.mango.moshen.avroom.adapter;
import com.mango.core.room.queue.bean.MicMemberInfo;
/**
* Created by lvzebiao on 2018/11/5.
*/
public interface OnMicroItemClickListener {
void onAvatarBtnClick(int position);
void onUpMicBtnClick(int position, MicMemberInfo chatRoomMember);
void onLockBtnClick(int position);
void onRoomSettingsClick();
}

View File

@@ -1,36 +0,0 @@
package com.mango.moshen.avroom.adapter;
import android.content.Context;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.mango.moshen.R;
import com.mango.moshen.ui.utils.ImageLoadUtils;
import com.mango.moshen.ui.widget.magicindicator.buildins.UIUtil;
/**
* 右滑操作的,写了暂时不用
* Created by lvzebiao
*/
public class RoomBlackListAdapter extends BaseQuickAdapter<ChatRoomMember, BaseViewHolder>{
private Context context;
private int itemWidth;
public RoomBlackListAdapter(Context context) {
super(R.layout.list_item_room_black);
this.context = context;
itemWidth = UIUtil.getScreenWidth(context);
}
@Override
protected void convert(BaseViewHolder helper, ChatRoomMember chatRoomMember) {
helper.setText(R.id.nick, chatRoomMember.getNick());
ImageLoadUtils.loadAvatar(context, chatRoomMember.getAvatar(), helper.getView(R.id.avatar));
helper.getView(R.id.layout_item).getLayoutParams().width = itemWidth;
}
}

View File

@@ -1,27 +0,0 @@
package com.mango.moshen.avroom.adapter;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
public class RoomRankFragmentPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public RoomRankFragmentPageAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}

View File

@@ -1,63 +0,0 @@
package com.mango.moshen.avroom.adapter;
import android.content.Context;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.mango.moshen.R;
import com.mango.moshen.avroom.fragment.RoomRankDialogUtils;
import com.mango.moshen.common.widget.CircleImageView;
import com.mango.moshen.ui.utils.ImageLoadUtils;
import com.mango.core.room.bean.RoomRankHalfHourRankInfo;
import com.mango.core.room.bean.RoomRankMultiItem;
import java.util.ArrayList;
public class RoomRankHalfHourListAdapter extends BaseMultiItemQuickAdapter<RoomRankMultiItem, BaseViewHolder> {
public final static int TYPE_TIPS = 4;
public RoomRankHalfHourListAdapter(Context context) {
super(new ArrayList<>());
addItemType(RoomRankMultiItem.TYPE_LINEAR, R.layout.item_room_rank_layout);
addItemType(RoomRankMultiItem.TYPE_EMPTY, R.layout.item_empty_list);
addItemType(TYPE_TIPS, R.layout.item_rank_half_tips);
}
@Override
protected void convert(BaseViewHolder baseViewHolder, RoomRankMultiItem roomConsumeInfo) {
if (roomConsumeInfo == null) {
return;
}
if (roomConsumeInfo.getItemType() == RoomRankMultiItem.TYPE_LINEAR) {
setLinearData(baseViewHolder, roomConsumeInfo);
} else if (roomConsumeInfo.getItemType() == RoomRankMultiItem.TYPE_EMPTY) {
}
}
private void setLinearData(BaseViewHolder baseViewHolder, RoomRankMultiItem roomConsumeInfo) {
if (roomConsumeInfo == null) {
return;
}
RoomRankHalfHourRankInfo roomRankHalfHourRankInfo = (RoomRankHalfHourRankInfo) roomConsumeInfo.getData();
if (roomRankHalfHourRankInfo == null)
return;
// 值
TextView valueTV = baseViewHolder.getView(R.id.tv_room_rank_value);
valueTV.setText(RoomRankDialogUtils.getRoomRankValueText(roomRankHalfHourRankInfo.getTotalNum()));
int drawable = RoomRankDialogUtils.getNumberImage(roomRankHalfHourRankInfo.getSeqNo());
if (drawable != 0)
baseViewHolder.setImageResource(R.id.iv_number, drawable);
// 标题
baseViewHolder.setText(R.id.tv_room_rank_title, roomRankHalfHourRankInfo.getRoomTitle());
// 头像
CircleImageView avatarView = baseViewHolder.getView(R.id.iv_room_rank_avatar);
ImageLoadUtils.loadAvatar(mContext, roomRankHalfHourRankInfo.getAvatar(), avatarView, true);
baseViewHolder.setText(R.id.tv_room_rank_id, "ID:" + roomRankHalfHourRankInfo.getErbanNo());
}
}

View File

@@ -1,20 +0,0 @@
package com.mango.moshen.avroom.anotherroompk
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.moshen.R
import com.mango.moshen.ui.utils.ImageLoadUtils
import com.mango.core.room.anotherroompk.SimpleRoomInfo
import com.mango.core.utils.subAndReplaceDot
class RoomPKSearchAdapter :
BaseQuickAdapter<SimpleRoomInfo, BaseViewHolder>(R.layout.item_room_pk_search) {
override fun convert(helper: BaseViewHolder, item: SimpleRoomInfo) {
helper.setText(R.id.tv_room_title,item.title.subAndReplaceDot(7))
.setText(R.id.tv_room_id,"ID:${item.erbanNo}")
.setChecked(R.id.check_box,item.checked)
ImageLoadUtils.loadImage(mContext,item.avatar,helper.getView(R.id.iv_avatar))
helper.addOnClickListener(R.id.iv_avatar,R.id.check_box)
}
}

View File

@@ -1,19 +0,0 @@
package com.mango.moshen.avroom.anotherroompk
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.DialogRoomPkRuleBinding
class RoomPkRuleDialog : BaseDialog<DialogRoomPkRuleBinding>() {
companion object {
@JvmStatic
fun newInstance(): RoomPkRuleDialog {
return RoomPkRuleDialog()
}
}
override fun init() {
binding.ivClose.setOnClickListener { dismissAllowingStateLoss() }
}
}

View File

@@ -1,35 +0,0 @@
package com.mango.moshen.avroom.dialog;
import android.content.Context;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import com.mango.moshen.R;
import com.mango.moshen.databinding.DialogDatingVipRuleBinding;
import com.mango.moshen.treasure_box.widget.dialog.BaseBindingDialog;
import com.mango.xchat_android_library.annatation.ActLayoutRes;
@ActLayoutRes(R.layout.dialog_dating_vip_rule)
public class DatingVipRuleDialog extends BaseBindingDialog<DialogDatingVipRuleBinding> implements View.OnClickListener {
public DatingVipRuleDialog(Context context) {
super(context, R.style.DialogFragment);
}
public static DatingVipRuleDialog newInstance(Context context) {
return new DatingVipRuleDialog(context);
}
@Override
protected void init() {
binding.setClick(this);
binding.tvRule.setMovementMethod(ScrollingMovementMethod.getInstance());
}
@Override
public void onClick(View v) {
closeDialog();
}
}

View File

@@ -1,23 +0,0 @@
package com.mango.moshen.avroom.dialog
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.DialogNewUserGiftBinding
import com.mango.moshen.ui.utils.load
import com.mango.core.gift.bean.GiftInfo
import com.mango.core.statistic.StatisticManager
import com.mango.core.statistic.protocol.StatisticsProtocol
class NewUserGiftDialog(val giftInfo: GiftInfo) :
BaseDialog<DialogNewUserGiftBinding>() {
override fun init() {
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_NUGIVE_POP_SHOW, "房间礼物赠送弹窗曝光")
binding.ivClose.setOnClickListener {
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_NUGIVE_POP_CLICK, "房间礼物赠送弹窗关闭点击")
dismissAllowingStateLoss()
}
binding.ivGift.load(giftInfo.giftUrl)
binding.tvGiftName.text = "${giftInfo.giftName}*${giftInfo.count}"
}
}

View File

@@ -1,44 +0,0 @@
package com.mango.moshen.avroom.dialog
import android.content.Context
import android.view.View
import com.mango.moshen.R
import com.mango.moshen.databinding.DialogRequestUpmicBinding
import com.mango.moshen.treasure_box.widget.dialog.BaseBindingDialog
import com.mango.core.manager.AvRoomDataManager
import com.mango.core.manager.IMNetEaseManager
import com.mango.core.user.bean.BaseInfo
import com.mango.core.user.bean.UserInfo
import com.mango.xchat_android_library.annatation.ActLayoutRes
@ActLayoutRes(R.layout.dialog_request_upmic)
class RequestUpMicDialog(context: Context) :
BaseBindingDialog<DialogRequestUpmicBinding>(context, R.style.dialog),
View.OnClickListener {
private var userInfo: UserInfo? = null
override fun init() {
binding.click = this
}
override fun onClick(v: View) {
when (v.id) {
R.id.btn_cancel -> {
closeDialog()
}
R.id.btn_ok -> {
userInfo?.let {
val baseInfo = BaseInfo(it.uid, it.nick)
val position = AvRoomDataManager.get().findFreePosition()
if ( position == Int.MIN_VALUE) return@let
IMNetEaseManager.get().inviteMicroPhoneBySdk(baseInfo, position ).subscribe()
}
closeDialog()
}
}
}
fun setUser(userInfo: UserInfo) {
this.userInfo = userInfo
binding.user = userInfo
}
}

View File

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

View File

@@ -1,687 +0,0 @@
package com.mango.moshen.avroom.fragment;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewStub;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.opensource.svgaplayer.SVGAImageView;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.mango.moshen.R;
import com.mango.moshen.avroom.activity.AVRoomActivity;
import com.mango.moshen.avroom.activity.RoomOnlineUserActivity;
import com.mango.moshen.avroom.adapter.SelectGameAdapter;
import com.mango.moshen.avroom.dialog.ExitRoomPopupWindow;
import com.mango.moshen.avroom.widget.GiftV2View;
import com.mango.moshen.base.BaseFragment;
import com.mango.moshen.databinding.FragmentChatroomGameMainBinding;
import com.mango.moshen.friend.view.SelectFriendActivity;
import com.mango.moshen.home.helper.OpenRoomHelper;
import com.mango.moshen.ui.widget.ShareDialog;
import com.mango.moshen.utils.RegexUtil;
import com.mango.core.gift.bean.GiftMultiReceiverInfo;
import com.mango.core.gift.bean.GiftReceiveInfo;
import com.mango.core.gift.bean.LuckyBagGifts;
import com.mango.core.gift.bean.MultiGiftReceiveInfo;
import com.mango.core.home.event.FollowRoomEvent;
import com.mango.core.home.event.ShareRoomEvent;
import com.mango.core.home.model.CollectionRoomModel;
import com.mango.core.im.custom.bean.CustomAttachment;
import com.mango.core.im.custom.bean.RoomInfoAttachment;
import com.mango.core.magic.bean.MagicReceivedInfo;
import com.mango.core.magic.bean.MultiMagicReceivedInfo;
import com.mango.core.manager.AvRoomDataManager;
import com.mango.core.manager.IMNetEaseManager;
import com.mango.core.manager.RoomEvent;
import com.mango.core.praise.PraiseModel;
import com.mango.core.room.bean.RoomInfo;
import com.mango.core.room.bean.RoomModeType;
import com.mango.core.room.game.GameInfo;
import com.mango.core.room.game.GameModel;
import com.mango.core.room.queuing_mic.event.HasAnimationEffect;
import com.mango.core.share.ShareModel;
import com.mango.core.statistic.StatisticManager;
import com.mango.core.statistic.protocol.StatisticsProtocol;
import com.mango.core.super_admin.util.SuperAdminUtil;
import com.mango.core.user.UserModel;
import com.mango.core.user.bean.UserInfo;
import com.mango.xchat_android_library.utils.JavaUtil;
import com.mango.xchat_android_library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import cn.sharesdk.framework.Platform;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
/**
* 轰趴房
* Created by 2016/9/22.
*
* @author Administrator
*/
public class HomePartyFragment extends BaseFragment implements View.OnClickListener, ShareDialog.OnShareDialogItemClick {
private Fragment roomFragment;
private TextView roomTitle;
private TextView roomId;
private ImageView ivFollowRoom;
private AppCompatImageView mIvGoodNumber;
private ImageView roomMore;
private GiftV2View giftView;
private ViewStub mVsGift2View;
private SVGAImageView svgaRoomBg;
private String[] bgPicture = new String[]{""};
private UserInfo mUserInfo;
private FragmentChatroomGameMainBinding gameMainBinding;
private ShareDialog shareDialog;
//收藏房间
private String FOLLOW_ROOM_TYPE = "";
private SelectGameAdapter gameAdapter;
public static HomePartyFragment newInstance() {
HomePartyFragment homePartyFragment = new HomePartyFragment();
Bundle bundle = new Bundle();
homePartyFragment.setArguments(bundle);
return homePartyFragment;
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// clear views
roomTitle.setText("");
setRoomId(0, 0);
updateOnlineNumberView(0);
if (roomFragment instanceof HomePartyRoomFragment) {
((HomePartyRoomFragment) roomFragment).onNewIntent(intent);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
private void setRoomId(long id, int onlineNumber) {
String htmlText = "ID:" + id;
roomId.setText(htmlText);
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_chatroom_game_main;
}
@Override
public void onFindViews() {
gameMainBinding = DataBindingUtil.bind(mView);
roomTitle = mView.findViewById(R.id.room_title);
setupRoomTitleMarquee();
roomMore = mView.findViewById(R.id.room_more);
roomId = mView.findViewById(R.id.room_id);
mVsGift2View = mView.findViewById(R.id.vs_gift_view);
mIvGoodNumber = mView.findViewById(R.id.iv_good_number);
ivFollowRoom = mView.findViewById(R.id.iv_follow_room);
svgaRoomBg = mView.findViewById(R.id.svga_image_view_bg);
}
/**
* 添加跑马灯
* 以及反射一些参数影响跑马灯
*/
private void setupRoomTitleMarquee() {
try {
ViewConfiguration configuration = ViewConfiguration.get(getContext());
Class claz = configuration.getClass();
Field field = claz.getDeclaredField("mFadingMarqueeEnabled");
field.setAccessible(true);
field.set(configuration, true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
roomTitle.setSelected(true);
}
@Override
public void onSetListener() {
roomMore.setOnClickListener(this);
ivFollowRoom.setOnClickListener(this);
gameMainBinding.llRoomInfo.setOnClickListener(this);
gameMainBinding.ivBack.setOnClickListener(this);
}
@SuppressLint("CheckResult")
@Override
public void initiate() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return;
if (!AvRoomDataManager.get().haveSelfChange) {
AvRoomDataManager.get().mIsNeedGiftEffect = AvRoomDataManager.get().mCurrentRoomInfo.isHasAnimationEffect();
}
}
private void initRvGame() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null || gameAdapter != null) return;
gameMainBinding.rvGame.setLayoutManager(new LinearLayoutManager(mContext));
gameMainBinding.rvGame.setAdapter(gameAdapter = new SelectGameAdapter());
gameMainBinding.llSelectGame.setOnClickListener(v -> {
if (gameMainBinding.rvGame.getVisibility() == View.VISIBLE) {
gameMainBinding.rvGame.setVisibility(View.GONE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
} else {
if (!isShowChangeGame()) {
SingleToastUtil.showToast("请关闭其他模式再切换游戏!");
return;
}
if (AvRoomDataManager.get().isGamePlaying()) {
SingleToastUtil.showToast("游戏中不可以切换游戏或玩法!");
} else {
gameMainBinding.rvGame.setVisibility(View.VISIBLE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type);
}
}
});
gameAdapter.setOnItemClickListener((adapter, view, position) -> {
if (AvRoomDataManager.get().isGamePlaying()) {
SingleToastUtil.showToast("游戏中不可以切换游戏或玩法!");
}
if (!isShowChangeGame()) {
SingleToastUtil.showToast("请关闭其他模式再切换游戏!");
return;
}
GameInfo gameInfo = gameAdapter.getItem(position);
if (gameInfo != null) {
int type;
long mgId = 0;
if (Objects.equals("扩列交友", gameInfo.getName())) {
type = RoomInfo.ROOMTYPE_HOME_PARTY;
} else {
type = RoomInfo.ROOMTYPE_GAME;
mgId = JavaUtil.str2long(gameInfo.getMgId());
}
gameMainBinding.rvGame.setVisibility(View.GONE);
gameMainBinding.ivChangeGameArrow.setImageResource(R.drawable.ic_room_arrow_type_below);
OpenRoomHelper.updateRoomInfo(
getBaseActivity(),
AvRoomDataManager.get().mCurrentRoomInfo,
type,
mgId,
false);
}
});
}
//这里的2和4是服务端定义的错误状态 关闭排麦模式和关闭PK模式!
private boolean isShowChangeGame() {
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
return currentRoomInfo != null &&
AvRoomDataManager.get().isRoomOwner() &&
currentRoomInfo.getIsPermitRoom() != 1 &&
currentRoomInfo.getType() != RoomInfo.ROOM_TYPE_SINGLE &&
(currentRoomInfo.getRoomModeType() == RoomModeType.NORMAL_MODE ||
currentRoomInfo.getRoomModeType() == 2 ||
currentRoomInfo.getRoomModeType() == 4);
}
public void setRoomBg(RoomInfo roomInfo) {
if (svgaRoomBg == null) return;
updateView(roomInfo);
AVRoomActivity.setBackBg(mContext, roomInfo, svgaRoomBg, bgPicture);
}
@SuppressLint("CheckResult")
@Override
public void onResume() {
super.onResume();
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
IMNetEaseManager.get().getChatRoomEventObservable()
.compose(bindToLifecycle())
.subscribe(roomEvent -> {
if (roomEvent == null) return;
int event = roomEvent.getEvent();
switch (event) {
case RoomEvent.ENTER_ROOM:
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
updateOnlineNumberView(AvRoomDataManager.get().mCurrentRoomInfo.onlineNum);
}
addTipMsg();
case RoomEvent.ROOM_INFO_UPDATE:
setRoomBg(AvRoomDataManager.get().mCurrentRoomInfo);
break;
case RoomEvent.RECEIVE_NORMALE_GIFT:
onReceiveGiftMsg(roomEvent.getGiftReceiveInfo());
break;
case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人
onReceiveMultiGiftMsg(roomEvent.getGiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVE_ALL_MIC__NORMALEI_GIFT://普通全麦
onReceiveAllMicGiftMsg(roomEvent.getMultiGiftReceiveInfo());
break;
//福袋礼物
case RoomEvent.RECEIVE_LUCKY_GIFT:
case RoomEvent.RECEIVE_MULTI_LUCKY_GIFT:
case RoomEvent.RECEIVE_ALL_MIC_LUCKY_GIFT:
onReceiveLuckyGiftToMultiMsg(roomEvent.getLuckygiftMultiReceiverInfo());
break;
case RoomEvent.RECEIVED_SINGLE_MAGIC:
onReceiveMagicMsg(roomEvent.getMagicReceivedInfo());
break;
case RoomEvent.RECEIVED_ALL_MIC_MAGIC:
onReceiveMultiMagicMsg(roomEvent.getMultiMagicReceivedInfo());
break;
case RoomEvent.FANS_TEAM_JOIN:
onReceiveFansTeamJoinMsg(roomEvent.getChatRoomMessage());
break;
default:
break;
}
});
}
private void onReceiveLuckyGiftToMultiMsg(LuckyBagGifts giftMultiReceiverInfo) {
if (giftMultiReceiverInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveLuckyGiftToMultiMsg(giftMultiReceiverInfo);
}
/**
* 进入房间时的提示信息
*/
private void addTipMsg() {
if (AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().mCurrentRoomInfo.isCloseScreen()) {
MsgAttachment attachment = new RoomInfoAttachment(CustomAttachment.CUSTOM_MSG_UPDATE_ROOM_INFO,
CustomAttachment.CUSTOM_MSG_UPDATE_ROOM_INFO_CLOSE_SCREEN);
ChatRoomMessage closeMsg = ChatRoomMessageBuilder.createChatRoomCustomMessage(
String.valueOf(AvRoomDataManager.get().getRoomId()), attachment);
closeMsg.setContent("管理员已关闭聊天公屏");
IMNetEaseManager.get().addCloseScreenMessages(closeMsg);
} else if (AvRoomDataManager.get().mCurrentRoomInfo != null && !AvRoomDataManager.get().mCurrentRoomInfo.isHasAnimationEffect()) {
ChatRoomMessage tipMessage = ChatRoomMessageBuilder.createTipMessage("");
tipMessage.setContent("礼物特效");
IMNetEaseManager.get().addCloseScreenMessages(tipMessage);
}
}
private void setIdOnlineData() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return;
UserModel.get().getUserInfo(roomInfo.getUid()).subscribe(new SingleObserver<UserInfo>() {
@Override
public void onSubscribe(Disposable d) {
mCompositeDisposable.add(d);
}
@Override
public void onSuccess(UserInfo userInfo) {
mUserInfo = userInfo;
setRoomId(mUserInfo.getErbanNo(), roomInfo.onlineNum);
mIvGoodNumber.setVisibility(mUserInfo.isHasPrettyErbanNo() ? View.VISIBLE : View.GONE);
}
@Override
public void onError(Throwable e) {
setRoomId(0, roomInfo.onlineNum);
mIvGoodNumber.setVisibility(View.GONE);
}
});
gameMainBinding.setRoomInfo(roomInfo);
}
@SuppressLint("CheckResult")
public void updateView(RoomInfo currentRoomInfo) {
if (currentRoomInfo != null) {
Fragment tempFragment = roomFragment;
switch (currentRoomInfo.getType()) {
case RoomInfo.ROOMTYPE_GAME:
if (!(tempFragment instanceof GameRoomFragment)) {
tempFragment = GameRoomFragment.newInstance();
}
break;
case RoomInfo.ROOM_TYPE_SINGLE:
if (!(tempFragment instanceof SingleRoomFragment)) {
tempFragment = SingleRoomFragment.newInstance();
}
break;
default:
if (!(tempFragment instanceof HomePartyRoomFragment)) {
tempFragment = HomePartyRoomFragment.newInstance();
}
break;
}
if (tempFragment != roomFragment) {
roomFragment = tempFragment;
getChildFragmentManager()
.beginTransaction()
.replace(R.id.container, roomFragment)
.commitAllowingStateLoss();
}
gameMainBinding.setRoomInfo(currentRoomInfo);
updateHasAnimationEffect();
roomTitle.setText(RegexUtil.getPrintableString(currentRoomInfo.getTitle()));
if (!StringUtil.isEmpty(currentRoomInfo.getRoomPwd())) {
roomTitle.setCompoundDrawablesWithIntrinsicBounds(null, null,
getResources().getDrawable(R.drawable.icon_room_lock), null);
} else {
roomTitle.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
}
ivFollowRoom.setVisibility(AvRoomDataManager.get().isRoomOwner() ? View.GONE : View.VISIBLE);
FOLLOW_ROOM_TYPE = AvRoomDataManager.get().isRoomFans ? "2" : "1";
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.icon_room_liked : R.drawable.icon_room_like);
setIdOnlineData();
if (isShowChangeGame()) {
initRvGame();
gameMainBinding.llChangeGame.setVisibility(View.VISIBLE);
if (AvRoomDataManager.get().isOpenGame()) {
gameMainBinding.tvCurrGame.setText(currentRoomInfo.getMgName());
} else {
gameMainBinding.tvCurrGame.setText("扩列交友");
}
GameModel.INSTANCE.getGameList()
.compose(bindToLifecycle())
.subscribe(gameInfos -> {
if (AvRoomDataManager.get().isOpenGame()) {
for (int i = 0; i < gameInfos.size(); i++) {
GameInfo gameInfo = gameInfos.get(i);
if (JavaUtil.str2long(gameInfo.getMgId()) == currentRoomInfo.getMgId()) {
gameInfos.remove(i);
break;
}
}
GameInfo gameInfo = new GameInfo();
gameInfo.setName("扩列交友");
gameInfos.add(gameInfo);
}
gameAdapter.setNewData(gameInfos);
});
} else {
gameMainBinding.llChangeGame.setVisibility(View.GONE);
}
}
}
public void updateHasAnimationEffect() {
if (!AvRoomDataManager.get().haveSelfChange && AvRoomDataManager.get().mCurrentRoomInfo != null) {
AvRoomDataManager.get().mIsNeedGiftEffect = AvRoomDataManager.get().mCurrentRoomInfo.isHasAnimationEffect();
}
gameMainBinding.setHasAnimationEffect(AvRoomDataManager.get().mIsNeedGiftEffect);
}
/**
* 更新特效开关提示
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void updateHasAnimation(HasAnimationEffect event) {
updateHasAnimationEffect();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.room_more:
ExitRoomPopupWindow.newInstance((AVRoomActivity) requireActivity())
.showAtLocation(gameMainBinding.getRoot(), Gravity.END, 0, 0);
break;
case R.id.ll_room_info:
RoomOnlineUserActivity.start(getActivity());
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_ONLINE_LIST_CLICK, "房间在线列表点击");
break;
case R.id.iv_follow_room:
followRoom();
break;
case R.id.iv_back:
if (getActivity() instanceof AVRoomActivity) {
((AVRoomActivity) getActivity()).onBackPressed();
}
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_RETURN_CLICK, "房间返回按钮点击");
break;
default:
}
}
public void dismissSendRedPackageDialog() {
if (roomFragment instanceof BaseRoomFragment) {
((BaseRoomFragment) roomFragment).clearDialog();
}
}
/**
* 收藏房间
*/
@SuppressLint("CheckResult")
private void followRoom() {
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoomInfo == null) {
return;
}
Map<String, String> arguments = new HashMap<>();
arguments.put("room_id", String.valueOf(mUserInfo == null ? currentRoomInfo.getUid() : mUserInfo.getErbanNo()));
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_COLLECT_ICON_CLICK, "语音房_收藏顶部按钮", arguments);
CollectionRoomModel.get().followRoom(FOLLOW_ROOM_TYPE, currentRoomInfo.getUid())
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.doOnError(throwable -> {
toast(throwable.getMessage());
})
.subscribe(s -> {
AvRoomDataManager.get().isRoomFans = !AvRoomDataManager.get().isRoomFans;
FOLLOW_ROOM_TYPE = AvRoomDataManager.get().isRoomFans ? "2" : "1";
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.icon_room_liked : R.drawable.icon_room_like);
if (AvRoomDataManager.get().isRoomFans) {
SingleToastUtil.showToast("收藏成功!");
PraiseModel.get().setFollowRoomSuccessRoomTip(currentRoomInfo.getUid());
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_FOLLOW_BUTTON_CLICK, "语音房_收藏顶部按钮");
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onFollowRoomEvent(FollowRoomEvent event) {
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.icon_room_liked : R.drawable.icon_room_like);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onShareRoomEvent(ShareRoomEvent event) {
shareRoom();
}
/**
* 分享房间
*/
public void shareRoom() {
if (shareDialog != null && shareDialog.isShowing()) {
shareDialog.dismiss();
}
shareDialog = new ShareDialog(getActivity());
shareDialog.setOnShareDialogItemClick(this);
shareDialog.show();
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ROOM_SHARE_CLICK, "语音房_分享");
}
@Override
public void onInAppSharingItemClick() {
shareDialog.dismiss();
SelectFriendActivity.startForSharingRoom(getActivity());
}
@Override
public void onSharePlatformClick(Platform platform) {
RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (currentRoomInfo != null) {
UserModel.get().getUserInfo(currentRoomInfo.getUid())
.flatMap(userInfo -> ShareModel.get().shareRoom(
platform,
currentRoomInfo.getUid(),
userInfo.getErbanNo(),
currentRoomInfo.getTitle(),
currentRoomInfo.getAvatar()
))
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.doAfterTerminate(new Action() {
@Override
public void run() throws Exception {
getDialogManager().dismissDialog();
}
})
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
toast(s);
}
@Override
public void onError(Throwable e) {
toast(e.getMessage());
}
});
}
}
@Override
public void onDestroy() {
if (giftView != null) {
giftView.release();
}
EventBus.getDefault().unregister(this);
super.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
roomFragment.onActivityResult(requestCode, resultCode, data);
}
public void onRoomOnlineNumberSuccess(int onlineNumber) {
updateOnlineNumberView(onlineNumber);
}
/**
* 普通多人
*
* @param giftMultiReceiverInfo
*/
private void onReceiveMultiGiftMsg(GiftMultiReceiverInfo giftMultiReceiverInfo) {
if (giftMultiReceiverInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftToMultiMsg(giftMultiReceiverInfo);
}
/**
* 普通全麦
*
* @param multiGiftReceiveInfo
*/
private void onReceiveAllMicGiftMsg(MultiGiftReceiveInfo multiGiftReceiveInfo) {
if (multiGiftReceiveInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveMultiGiftMsg(multiGiftReceiveInfo);
}
private void onReceiveGiftMsg(GiftReceiveInfo giftReceiveInfo) {
if (giftReceiveInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveGiftMsg(giftReceiveInfo);
}
private void onReceiveMagicMsg(MagicReceivedInfo magicReceivedInfo) {
if (magicReceivedInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveMagicMsg(magicReceivedInfo);
}
private void onReceiveMultiMagicMsg(MultiMagicReceivedInfo multiMagicReceivedInfo) {
if (multiMagicReceivedInfo == null || !isResumed()) return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveMultiMagicMsg(multiMagicReceivedInfo);
}
private void onReceiveFansTeamJoinMsg(ChatRoomMessage message) {
if (message == null || !isResumed())
return;
if (giftView == null) {
giftView = (GiftV2View) mVsGift2View.inflate();
}
giftView.onReceiveFansTeamOpenMsg(message);
}
private void updateOnlineNumberView(int onlineNumber) {
if (!SuperAdminUtil.isSuperAdmin()) {
if (onlineNumber < 1) {
onlineNumber = 1;
}
}
gameMainBinding.roomNums.setText("在线" + onlineNumber);
}
}

View File

@@ -1,5 +0,0 @@
package com.mango.moshen.avroom.fragment;
public interface IRoomRankDialogChangePageListener {
void onChangePage(int pos);
}

View File

@@ -1,5 +0,0 @@
package com.mango.moshen.avroom.fragment;
public interface IRoomRankDialogDismissListener {
void onDismiss();
}

View File

@@ -1,18 +0,0 @@
package com.mango.moshen.avroom.fragment;
import com.mango.core.room.bean.RoomRankHalfHourMeInfo;
import com.mango.core.room.bean.RoomRankHalfHourRankInfo;
import com.mango.core.room.bean.RoomRankMultiItem;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.List;
public interface IRoomRankHalfHourView extends IMvpBaseView {
void showMeInfo(RoomRankHalfHourMeInfo dataInfo/*, int progress, String onListTip*/);
void showTop3Info(List<RoomRankHalfHourRankInfo> dataInfoList);
void showRankListInfo(List<RoomRankMultiItem> dataList);
void loadDataFailure();
}

View File

@@ -1,41 +0,0 @@
package com.mango.moshen.avroom.fragment;
import androidx.fragment.app.Fragment;
import com.mango.moshen.R;
import com.mango.moshen.avroom.adapter.RoomContributeListAdapter;
import com.mango.moshen.avroom.widget.RankNavigatorAdapter;
import com.mango.moshen.base.BaseBindingFragment;
import com.mango.moshen.ui.widget.magicindicator.ViewPagerHelper;
import com.mango.moshen.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
import com.mango.core.room.bean.RoomContributeDataInfo;
import com.mango.xchat_android_library.annatation.ActLayoutRes;
import com.mango.moshen.databinding.FragmentRoomCharmListBinding;
import java.util.ArrayList;
@ActLayoutRes(R.layout.fragment_room_charm_list)
public class RoomCharmListFragment extends BaseBindingFragment<FragmentRoomCharmListBinding> {
public static RoomCharmListFragment newInstance() {
return new RoomCharmListFragment();
}
@Override
public void initiate() {
ArrayList<Fragment> fragments = new ArrayList<>(2);
fragments.add(RoomCharmRankingListFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_DAY_RANKING));
fragments.add(RoomCharmRankingListFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_WEEK_RANKING));
mBinding.vpCharmRankings.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), fragments));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(false);
RankNavigatorAdapter indicator = new RankNavigatorAdapter(false);
indicator.setOnItemSelectListener(position -> mBinding.vpCharmRankings.setCurrentItem(position));
commonNavigator.setAdapter(indicator);
mBinding.viewIndicator.setNavigator(commonNavigator);
ViewPagerHelper.bind(mBinding.viewIndicator, mBinding.vpCharmRankings);
}
}

View File

@@ -1,61 +0,0 @@
package com.mango.moshen.avroom.fragment;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.mango.moshen.R;
import com.mango.moshen.avroom.adapter.RoomContributeListAdapter;
import com.mango.moshen.avroom.widget.RankNavigatorAdapter;
import com.mango.moshen.base.BaseMvpFragment;
import com.mango.moshen.ui.widget.magicindicator.MagicIndicator;
import com.mango.moshen.ui.widget.magicindicator.ViewPagerHelper;
import com.mango.moshen.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
import com.mango.core.manager.AvRoomDataManager;
import com.mango.core.room.bean.RoomContributeDataInfo;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.ArrayList;
/**
* Created by MadisonRong on 25/04/2018.
*/
public class RoomContributeListFragment extends BaseMvpFragment implements IMvpBaseView {
private ViewPager viewPager;
private MagicIndicator viewIndicator;
@Override
public void onFindViews() {
viewIndicator = mView.findViewById(R.id.view_indicator);
viewPager = mView.findViewById(R.id.vp_contribute_rankings);
}
@Override
public void onSetListener() {
}
@Override
public void initiate() {
ArrayList<Fragment> fragments = new ArrayList<>(2);
fragments.add(RoomContributeFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_DAY_RANKING));
fragments.add(RoomContributeFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_WEEK_RANKING));
if (AvRoomDataManager.get().isDatingMode()) {
fragments.add(RoomContributeFragment.newInstance(RoomContributeDataInfo.TYPE_ROOM_MONTH_RANKING));
}
viewPager.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), fragments));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(false);
RankNavigatorAdapter indicator = new RankNavigatorAdapter(AvRoomDataManager.get().isDatingMode());
indicator.setOnItemSelectListener(position -> viewPager.setCurrentItem(position));
commonNavigator.setAdapter(indicator);
viewIndicator.setNavigator(commonNavigator);
ViewPagerHelper.bind(viewIndicator, viewPager);
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_room_contribute;
}
}

View File

@@ -1,99 +0,0 @@
package com.mango.moshen.avroom.fragment;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.app.AppCompatDialogFragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.mango.moshen.R;
import com.mango.moshen.avroom.adapter.RoomRankFragmentPageAdapter;
import java.util.ArrayList;
import java.util.List;
public class RoomRankDialogFragment extends AppCompatDialogFragment implements IRoomRankDialogDismissListener, IRoomRankDialogChangePageListener {
private ViewPager mViewPager;
public static RoomRankDialogFragment newInstance() {
Bundle args = new Bundle();
RoomRankDialogFragment fragment = new RoomRankDialogFragment();
fragment.setArguments(args);
return fragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (getActivity() != null) {
Dialog dialog = new Dialog(getActivity(), R.style.room_rank_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_fragment_room_rank);
dialog.setCanceledOnTouchOutside(true);
// 设置弹出框布局参数,宽度铺满全屏,底部。
Window window = dialog.getWindow();
if (window != null) {
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setDimAmount(0.3f);
window.setAttributes(wlp);
window.setBackgroundDrawableResource(R.drawable.bg_room_rank);
return dialog;
} else {
return super.onCreateDialog(savedInstanceState);
}
} else {
return super.onCreateDialog(savedInstanceState);
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_fragment_room_rank, container, false);
mViewPager = view.findViewById(R.id.vp_room_rank);
List<Fragment> fragmentList = new ArrayList<>();
if (getChildFragmentManager().getFragments() != null && getChildFragmentManager().getFragments().size() != 0) {
fragmentList = getChildFragmentManager().getFragments();
} else {
RoomRankListFragment roomInsideFragment = RoomRankListFragment.newInstance();
roomInsideFragment.setDismissListener(this);
roomInsideFragment.setChangePageListener(this);
fragmentList.add(roomInsideFragment);
}
mViewPager.setAdapter(new RoomRankFragmentPageAdapter(getChildFragmentManager(), fragmentList));
mViewPager.setOffscreenPageLimit(fragmentList.size());
mViewPager.setCurrentItem(0, false);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCancelable(true);
}
@Override
public void onDismiss() {
dismiss();
}
@Override
public void onChangePage(int pos) {
mViewPager.setCurrentItem(pos, false);
}
}

View File

@@ -1,64 +0,0 @@
package com.mango.moshen.avroom.fragment;
import com.mango.moshen.R;
import java.math.BigDecimal;
public class RoomRankDialogUtils {
public static String getRoomRankValueText(int value) {
if (value >= 10000) {
BigDecimal bigDecimal = new BigDecimal(value / 10000.0);
double doubleValue = bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
return String.valueOf(doubleValue) + "";
} else {
return String.valueOf(value);
}
}
public static int getNumberImage(int number) {
switch (number) {
case 1:
return R.drawable.ic_rank_1;
case 2:
return R.drawable.ic_rank_2;
case 3:
return R.drawable.ic_rank_3;
case 4:
return R.drawable.ic_rank_4;
case 5:
return R.drawable.ic_rank_5;
case 6:
return R.drawable.ic_rank_6;
case 7:
return R.drawable.ic_rank_7;
case 8:
return R.drawable.ic_rank_8;
case 9:
return R.drawable.ic_rank_9;
case 10:
return R.drawable.ic_rank_10;
case 11:
return R.drawable.ic_rank_11;
case 12:
return R.drawable.ic_rank_12;
case 13:
return R.drawable.ic_rank_13;
case 14:
return R.drawable.ic_rank_14;
case 15:
return R.drawable.ic_rank_15;
case 16:
return R.drawable.ic_rank_16;
case 17:
return R.drawable.ic_rank_17;
case 18:
return R.drawable.ic_rank_18;
case 19:
return R.drawable.ic_rank_19;
case 20:
return R.drawable.ic_rank_20;
default:
return 0;
}
}
}

View File

@@ -1,79 +0,0 @@
package com.mango.moshen.avroom.fragment;
import androidx.fragment.app.Fragment;
import android.view.View;
import com.mango.moshen.R;
import com.mango.moshen.avroom.adapter.RoomContributeListAdapter;
import com.mango.moshen.avroom.widget.RoomRankNavigatorAdapter;
import com.mango.moshen.base.BaseBindingFragment;
import com.mango.moshen.ui.widget.magicindicator.ViewPagerHelper;
import com.mango.moshen.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
import com.mango.xchat_android_library.annatation.ActLayoutRes;
import java.util.ArrayList;
import java.util.List;
import com.mango.moshen.databinding.FragmentRoomRankListBinding;
@ActLayoutRes(R.layout.fragment_room_rank_list)
public class RoomRankListFragment extends BaseBindingFragment<FragmentRoomRankListBinding> implements View.OnClickListener, IRoomRankDialogDismissListener{
public static RoomRankListFragment newInstance() {
return new RoomRankListFragment();
}
@Override
public void initiate() {
mBinding.setClick(this);
List<Fragment> list = new ArrayList<>(2);
list.add(new RoomContributeListFragment());
list.add(RoomCharmListFragment.newInstance());
mBinding.viewPager.setAdapter(new RoomContributeListAdapter(getChildFragmentManager(), list));
CommonNavigator commonNavigator = new CommonNavigator(getActivity());
commonNavigator.setAdjustMode(true);
RoomRankNavigatorAdapter indicator = new RoomRankNavigatorAdapter();
indicator.setOnItemSelectListener(position -> mBinding.viewPager.setCurrentItem(position));
commonNavigator.setAdapter(indicator);
mBinding.miRoomRank.setNavigator(commonNavigator);
ViewPagerHelper.bind(mBinding.miRoomRank, mBinding.viewPager);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_room_rank_half_hour_tab:
goToChangePage(0);
break;
case R.id.tv_room_rank_in_room_tab:
goToChangePage(1);
break;
}
}
private IRoomRankDialogDismissListener dismissListener;
private IRoomRankDialogChangePageListener changePageListener;
@Override
public void onDismiss() {
if (dismissListener != null) {
dismissListener.onDismiss();
}
}
public void setDismissListener(IRoomRankDialogDismissListener dismissListener) {
this.dismissListener = dismissListener;
}
/**
* 修改最外层Dialog的显示页面
*/
private void goToChangePage(int pos) {
if (changePageListener != null) {
changePageListener.onChangePage(pos);
}
}
public void setChangePageListener(IRoomRankDialogChangePageListener changePageListener) {
this.changePageListener = changePageListener;
}
}

View File

@@ -1,338 +0,0 @@
package com.mango.moshen.avroom.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.viewModels
import com.mango.core.UriProvider
import com.mango.core.auth.AuthModel
import com.mango.core.fansteam.FansTeamInitInfo
import com.mango.core.home.bean.BannerInfo
import com.mango.core.im.custom.bean.FansTeamMsgAttachment
import com.mango.core.im.custom.bean.RequestUpmicAttachment
import com.mango.core.im.custom.bean.RoomPKAttachment
import com.mango.core.manager.AvRoomDataManager
import com.mango.core.manager.RoomEvent
import com.mango.core.pay.event.FirstChargeEvent
import com.mango.core.room.anotherroompk.ShowPkMatchEvent
import com.mango.core.room.anotherroompk.SingleRoomPKModel
import com.mango.core.statistic.StatisticManager
import com.mango.core.statistic.protocol.StatisticsProtocol
import com.mango.core.user.UserModel
import com.mango.core.user.bean.UserInfo
import com.mango.core.utils.CurrentTimeUtils
import com.mango.core.utils.toast
import com.mango.moshen.R
import com.mango.moshen.avroom.adapter.OnMicroItemClickListener
import com.mango.moshen.avroom.adapter.SingleAnchorMicroViewAdapter
import com.mango.moshen.avroom.adapter.SingleRoomPKMicroViewAdapter
import com.mango.moshen.avroom.dialog.RequestUpMicDialog
import com.mango.moshen.avroom.firstcharge.FirstChargePrizeDialog
import com.mango.moshen.avroom.presenter.SingleRoomPresenter
import com.mango.moshen.avroom.singleroompk.SingleRoomPkFinishDialog
import com.mango.moshen.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.mango.moshen.avroom.singleroompk.SingleRoomPkReceivedDialog
import com.mango.moshen.avroom.view.ISingleRoomView
import com.mango.moshen.databinding.FragmentSingleRoomBinding
import com.mango.moshen.fansteam.FansTeamJoinActivity
import com.mango.moshen.fansteam.FansTeamJoinedActivity
import com.mango.moshen.fansteam.FansTeamViewModel
import com.mango.moshen.ui.webview.CommonWebViewActivity
import com.mango.moshen.ui.webview.DialogWebViewActivity
import com.mango.xchat_android_library.base.factory.CreatePresenter
import com.mango.xchat_android_library.utils.TimeUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.trello.rxlifecycle3.android.FragmentEvent
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.concurrent.TimeUnit
import kotlin.math.max
/**
* 个播房间
*
* @author chenran
* @date 2017/7/26
*/
@CreatePresenter(SingleRoomPresenter::class)
class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresenter?>(),
ISingleRoomView, OnMicroItemClickListener {
companion object {
@JvmStatic
fun newInstance(): SingleRoomFragment {
val roomFragment = SingleRoomFragment()
val bundle = Bundle()
roomFragment.arguments = bundle
return roomFragment
}
}
private lateinit var gameBinding: FragmentSingleRoomBinding
private lateinit var upMicDialog: RequestUpMicDialog
private var pkMatchDisposable: Disposable? = null
private val fansTeamViewModel: FansTeamViewModel by viewModels()
override fun getRootLayoutId(): Int {
return R.layout.fragment_single_room
}
override fun onFindViews() {
super.onFindViews()
gameBinding = DataBindingUtil.bind(mView)!!
gameBinding.lifecycleOwner = this
gameBinding.click = this
}
@SuppressLint("CheckResult")
override fun initiate() {
super.initiate()
mvpPresenter?.getBannerList()
initSpeedyMessage(gameBinding.flSpeedyMessage)
UserModel.get().currentUserInfo
.compose(bindToLifecycle())
.subscribe { userInfo ->
gameBinding.ivFirstChargeEnter.isVisible = userInfo.isFirstCharge
if (userInfo.isFirstCharge) {
StatisticManager.Instance()
.onEvent(
StatisticsProtocol.EVENT_ROOM_POP_SHOW,
"房间pop曝光",
mapOf("name" to "新人充值")
)
}
}
fansTeamViewModel.loadFansTeamInitInfo()
fansTeamViewModel.fansTeamInitInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
updateFansTeamInfo(it)
}
}
initRoomPkOrder(AvRoomDataManager.get().pkMatchStartTime)
gameBinding.llRoomPkOrder.setOnClickListener {
dialogManager.showOkCancelDialog("是否取消PK匹配?") {
SingleRoomPKModel.cancelSingleRoomPkMatch()
.doOnSuccess {
initRoomPkOrder(0L)
AvRoomDataManager.get().pkMatchStartTime = 0
"取消PK匹配成功!".toast()
}
.doOnError { it.message.toast() }
.subscribe()
}
}
gameBinding.tvHourRank.setOnClickListener {
DialogWebViewActivity.start(
mContext,
UriProvider.getSingleRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
StatisticManager.Instance()
.onEvent(StatisticsProtocol.EVENT_ROOM_RANKLIST_CLICK, "房间小时榜点击")
}
}
@SuppressLint("SetTextI18n")
private fun updateFansTeamInfo(initInfo: FansTeamInitInfo) {
var clickListener: View.OnClickListener? = null
gameBinding.flFansTeam.isGone =
!AvRoomDataManager.get().isRoomOwner && !initInfo.hasFansTeamCurrentRoom
if (initInfo.hasFansTeamCurrentRoom) {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.tvFansTeamOpt.text = "粉丝团(${initInfo.anchorFansNum})"
clickListener = View.OnClickListener {
DialogWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamMyFansUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
if (initInfo.isAnchorFans) {
gameBinding.tvFansTeamOpt.text =
"粉丝LV.${if (initInfo.fansLevelSeq == 0) 1 else initInfo.fansLevelSeq}"
clickListener = View.OnClickListener {
FansTeamJoinedActivity.start(requireContext())
}
} else {
gameBinding.tvFansTeamOpt.text = "加入粉丝团"
clickListener = View.OnClickListener {
FansTeamJoinActivity.start(requireContext())
}
}
}
} else {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.tvFansTeamOpt.text = "开通粉丝团"
clickListener = View.OnClickListener {
CommonWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamOpenUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
gameBinding.tvFansTeamOpt.text = "该主播暂未开通粉丝团"
}
}
gameBinding.flFansTeam.setOnClickListener(clickListener)
}
@SuppressLint("CheckResult")
override fun onReceiveRoomEvent(roomEvent: RoomEvent?) {
super.onReceiveRoomEvent(roomEvent)
if (roomEvent == null) return
when (roomEvent.event) {
RoomEvent.ENTER_ROOM -> {
fansTeamViewModel.loadFansTeamInitInfo()
initRoomPkOrder(AvRoomDataManager.get().pkMatchStartTime)
}
RoomEvent.REQUEST_UP_MIC -> {
(roomEvent.chatRoomMessage?.attachment as? RequestUpmicAttachment)?.userInfo?.let {
showInviteDialog(it)
}
}
RoomEvent.FANS_TEAM_OPEN_SUCCESS,
RoomEvent.FANS_TEAM_OPEN_FAILED,
RoomEvent.FANS_TEAM_JOIN,
RoomEvent.FANS_TEAM_EXIT -> {
(roomEvent.chatRoomMessage?.attachment as? FansTeamMsgAttachment)?.fansTeamMsgInfo?.let {
val currFansTeamInitInfo = fansTeamViewModel.fansTeamInitInfoLiveData.value
updateFansTeamInfo(
FansTeamInitInfo(
it.count,
currFansTeamInitInfo?.fansLevelSeq ?: 1,
roomEvent.event != RoomEvent.FANS_TEAM_OPEN_FAILED,
if (AuthModel.get().currentUid == it.uid) {
roomEvent.event == RoomEvent.FANS_TEAM_JOIN
} else {
currFansTeamInitInfo?.isAnchorFans ?: false
},
AvRoomDataManager.get().isRoomOwner,
roomEvent.event == RoomEvent.FANS_TEAM_OPEN_FAILED
)
)
}
}
RoomEvent.ROOM_PK_INVITE ->
SingleRoomPkReceivedDialog.newInstance((roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean)
.show(mContext)
RoomEvent.ROOM_PK_FINISH -> {
val roomPkBean =
(roomEvent.chatRoomMessage.attachment as RoomPKAttachment).roomPkBean
if (roomPkBean.isForce) {
SingleRoomPkForceFinishDialog.newInstance(roomPkBean).show(mContext)
} else {
SingleRoomPkFinishDialog.newInstance(roomPkBean).show(mContext)
}
gameBinding.microView.adapter?.notifyDataSetChanged()
}
RoomEvent.ROOM_PK_TIMEOUT -> {
dialogManager.showOkCancelDialog("暂未匹配到合适的PK对象是否继续") {
SingleRoomPKModel.initSingleRoomPkMatch()
.compose(bindToLifecycle())
.subscribe({
AvRoomDataManager.get().pkMatchStartTime = it.toLong()
initRoomPkOrder(it.toLong())
}, {
it.message.toast()
})
}
}
}
}
//显示请求上麦弹窗
private fun showInviteDialog(userInfo: UserInfo) {
if (!this::upMicDialog.isInitialized) {
upMicDialog = RequestUpMicDialog(requireContext())
}
if (!upMicDialog.isShowing) {
upMicDialog.openDialog()
upMicDialog.setUser(userInfo)
}
}
override fun onSetListener() {
super.onSetListener()
bottomView.setBottomViewListener(BaseRoomBottomViewWrapper())
}
override fun updateView() {
super.updateView()
if (AvRoomDataManager.get().isOpenAnotherPKMode && gameBinding.microView.adapter !is SingleRoomPKMicroViewAdapter) {
gameBinding.microView.bindAdapter(SingleRoomPKMicroViewAdapter(context))
gameBinding.viewPkBoard.isVisible = true
gameBinding.microView.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = ScreenUtil.dip2px(140f)
}
} else if (!AvRoomDataManager.get().isOpenAnotherPKMode && gameBinding.microView.adapter !is SingleAnchorMicroViewAdapter) {
gameBinding.microView.bindAdapter(SingleAnchorMicroViewAdapter(context))
gameBinding.viewPkBoard.isVisible = false
gameBinding.microView.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = ScreenUtil.dip2px(110f)
}
} else {
gameBinding.microView.adapter?.notifyDataSetChanged()
}
}
private fun initRoomPkOrder(pkMatchStartTime: Long) {
if (!AvRoomDataManager.get().isRoomOwner) return
pkMatchDisposable?.dispose()
if (pkMatchStartTime > 0L) {
val residueSeconds = max((CurrentTimeUtils.getCurrentTime() - pkMatchStartTime) / 1000,0)
gameBinding.llRoomPkOrder.visibility = View.VISIBLE
pkMatchDisposable =
Observable.intervalRange(
residueSeconds,
Int.MAX_VALUE.toLong(),
0,
1,
TimeUnit.SECONDS
)
.observeOn(AndroidSchedulers.mainThread())
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe { aLong: Long ->
gameBinding.tvRoomPkOrderTime.text = TimeUtils.ms2MS(
aLong * 1000,
true
)
}
} else {
gameBinding.llRoomPkOrder.visibility = View.GONE
}
}
override fun onShowBanner(dialogInfos: List<BannerInfo>) {
initRoomAct(gameBinding.activityImg, dialogInfos, 10f)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onFirstRechargeEvent(event: FirstChargeEvent) {
gameBinding.ivFirstChargeEnter.visibility = View.GONE
FirstChargePrizeDialog(
requireContext(),
event.chargeProdTitle,
event.firstChargeRewardList
).openDialog()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onShowPkMatchEvent(event: ShowPkMatchEvent) {
initRoomPkOrder(event.pkMatchStartTime)
}
}

View File

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

View File

@@ -1,30 +0,0 @@
package com.mango.moshen.avroom.helper;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import lombok.Getter;
/**
* 房间数据的一些管理
* Created by lvzebiao on 2018/11/16.
*/
public class RoomViewModel extends ViewModel {
@Getter
private final MutableLiveData<Boolean> isKtvModel = new MutableLiveData<>();
@Getter
private final MutableLiveData<Boolean> isGameModel = new MutableLiveData<>();
public void init() {
isKtvModel.setValue(false);
isGameModel.postValue(false);
}
@Override
protected void onCleared() {
super.onCleared();
}
}

View File

@@ -1,42 +0,0 @@
package com.mango.moshen.avroom.newuserchargegift
import android.content.Context
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.mango.moshen.R
import com.mango.moshen.databinding.DialogNewUserChargePrizeBinding
import com.mango.moshen.treasure_box.widget.dialog.BaseBindingDialog
import com.mango.moshen.ui.utils.RVDelegate
import com.mango.core.pay.bean.FirstChargeReward
import com.mango.core.statistic.StatisticManager
import com.mango.core.statistic.protocol.StatisticsProtocol
import com.mango.xchat_android_library.annatation.ActLayoutRes
@ActLayoutRes(R.layout.dialog_new_user_charge_prize)
class NewUserChargePrizeDialog(
context: Context,
val title: String?,
private val firstChargeRewardList: List<FirstChargeReward>?
) : BaseBindingDialog<DialogNewUserChargePrizeBinding>(context) {
private lateinit var rvDelegate: RVDelegate<FirstChargeReward>
override fun init() {
rvDelegate = RVDelegate.Builder<FirstChargeReward>()
.setAdapter(RewardAdapter())
.setLayoutManager(LinearLayoutManager(context, RecyclerView.HORIZONTAL, false))
.setRecyclerView(binding.recyclerView)
.build()
binding.ivKnow.setOnClickListener {
closeDialog()
}
rvDelegate.setNewData(firstChargeRewardList)
StatisticManager.Instance()
.onEvent(
StatisticsProtocol.EVENT_NUGIFT_POP_FINISH_CLICK,
"新人专享礼物弹窗充值完成后弹窗",
mapOf("charge_money" to title)
)
}
}

View File

@@ -1,21 +0,0 @@
package com.mango.moshen.avroom.newuserchargegift
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.moshen.R
import com.mango.moshen.ui.utils.load
import com.mango.core.pay.bean.FirstChargeReward
import com.mango.core.utils.TextUtils
class RewardAdapter :
BaseQuickAdapter<FirstChargeReward, BaseViewHolder>(R.layout.item_new_user_charge_reward) {
override fun convert(helper: BaseViewHolder, item: FirstChargeReward) {
helper.getView<ImageView>(R.id.iv_pic).load(item.showPir)
helper.setText(R.id.tv_name, item.showText)
.setText(R.id.tv_time, "(${item.showTime})")
.setGone(R.id.tv_time, !TextUtils.isEmptyText(item.showTime))
}
}

View File

@@ -1,103 +0,0 @@
package com.mango.moshen.avroom.presenter;
import com.mango.moshen.avroom.fragment.IRoomRankHalfHourView;
import com.mango.core.manager.AvRoomDataManager;
import com.mango.core.room.bean.RoomInfo;
import com.mango.core.room.bean.RoomRankHalfHourDataInfo;
import com.mango.core.room.bean.RoomRankHalfHourRankInfo;
import com.mango.core.room.bean.RoomRankMultiItem;
import com.mango.core.room.model.RoomRankModel;
import com.mango.xchat_android_library.base.factory.AbstractMvpPresenter;
import com.mango.xchat_android_library.utils.SingleToastUtil;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
public class RoomRankHalfHourPresenter extends AbstractMvpPresenter<IRoomRankHalfHourView> {
public void getRankListInfo() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
RoomRankModel.get()
.getRoomRankHalfHourList(roomInfo.getUid())
.compose(bindToLifecycle())
.subscribe(new SingleObserver<RoomRankHalfHourDataInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(RoomRankHalfHourDataInfo roomRankHalfHourDataInfo) {
if (roomRankHalfHourDataInfo != null) {
if (mMvpView != null) {
if (roomRankHalfHourDataInfo.getMe() != null) {
mMvpView.showMeInfo(roomRankHalfHourDataInfo.getMe());
} else
mMvpView.showMeInfo(null);
transformData(roomRankHalfHourDataInfo.getRankVoList());
}
} else {
if (mMvpView != null)
mMvpView.loadDataFailure();
}
}
@Override
public void onError(Throwable e) {
if (mMvpView != null)
mMvpView.loadDataFailure();
SingleToastUtil.showToast(e.getMessage());
}
});
}
}
private void transformData(List<RoomRankHalfHourRankInfo> dataInfoList) {
if (dataInfoList != null) {
List<RoomRankHalfHourRankInfo> top3rankInfo;
if (dataInfoList.size() >= 3) {
top3rankInfo = dataInfoList.subList(0, 3);
} else {
top3rankInfo = dataInfoList;
}
mMvpView.showTop3Info(top3rankInfo);
// 第四名开始以后的信息
List<RoomRankMultiItem> otherRankInfo = new ArrayList<>();
if (dataInfoList.size() > 3) {
for (int i = 3; i < dataInfoList.size(); i++) {
RoomRankHalfHourRankInfo info = dataInfoList.get(i);
RoomRankMultiItem item = new RoomRankMultiItem();
item.setItemType(RoomRankMultiItem.TYPE_LINEAR);
item.setData(info);
otherRankInfo.add(item);
}
}
// RoomRankMultiItem item = new RoomRankMultiItem();
// item.setItemType(RoomRankHalfHourListAdapter.TYPE_TIPS);
// otherRankInfo.add(item);
mMvpView.showRankListInfo(otherRankInfo);
} else {
mMvpView.showTop3Info(null);
List<RoomRankMultiItem> otherRankInfo = new ArrayList<>();
RoomRankMultiItem item = new RoomRankMultiItem();
item.setItemType(RoomRankMultiItem.TYPE_EMPTY);
otherRankInfo.add(item);
mMvpView.showRankListInfo(otherRankInfo);
}
}
}

View File

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

View File

@@ -1,28 +0,0 @@
package com.mango.moshen.avroom.singleroompk
import com.mango.core.room.anotherroompk.SingleRoomPKModel
import com.mango.core.utils.toast
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.DialogSingleRoomPkRuleBinding
class SingleRoomPkRuleDialog : BaseDialog<DialogSingleRoomPkRuleBinding>() {
companion object {
@JvmStatic
fun newInstance(): SingleRoomPkRuleDialog {
return SingleRoomPkRuleDialog()
}
}
override fun init() {
binding.ivClose.setOnClickListener { dismissAllowingStateLoss() }
SingleRoomPKModel.getSingleRoomPkRule()
.compose(bindToLifecycle())
.doOnSuccess {
binding.tvContent.text = it.replace("\\n", "\n").replace("\\r", "\r")
}
.doOnError { it?.message.toast() }
.subscribe()
}
}

View File

@@ -1,11 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.xchat_android_library.base.IMvpBaseView;
/**
* @author jack
* @Description
* @Date 2018/12/28
*/
public interface ICreatePKView extends IMvpBaseView {
}

View File

@@ -1,17 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.home.bean.BannerInfo;
import java.util.List;
/**
* <p> 轰趴房View层 </p>
*
* @author jiahui
* @date 2017/12/8
*/
public interface IGameRoomView extends IBaseRoomView {
void onShowBanner(List<BannerInfo> dialogInfos);
}

View File

@@ -1,22 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.room.bean.OnlineChatMember;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.List;
/**
* <p> </p>
*
* @author jiahui
* @date 2017/12/8
*/
public interface IHomePartyUserListView extends IMvpBaseView {
void onRequestChatMemberByPageSuccess(List<OnlineChatMember> memberList, int page);
void onRequestChatMemberByPageFail(String errorStr, int page);
void onMemberInRefresh();
}

View File

@@ -1,25 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.home.bean.BannerInfo;
import com.mango.core.room.bean.RoomInfo;
import java.util.List;
/**
* <p> 轰趴房View层 </p>
*
* @author jiahui
* @date 2017/12/8
*/
public interface IHomePartyView extends IBaseRoomView {
//玩龙珠时换坑
void onDragonBarChangeMic(int micPosition, String uId, boolean isInviteUpMic, RoomInfo roomInfo);
/**
* 礼物值模式下换麦
*/
void onGiftValueChangeMic(int micPosition, String uId, boolean isInviteUpMic, RoomInfo roomInfo);
void onShowBanner(List<BannerInfo> bannerInfos);
}

View File

@@ -1,21 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.room.queue.bean.RoomConsumeInfo;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.List;
/**
* <p> </p>
*
* @author jiahui
* @date 2017/12/24
*/
public interface ILightChatConsumeView extends IMvpBaseView {
void onGetRoomConsumeListSuccess(List<RoomConsumeInfo> roomConsumeInfos);
void onGetRoomConsumeListFail(String error);
}

View File

@@ -1,12 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.xchat_android_library.base.IMvpBaseView;
/**
* @author jack
* @Description
* @Date 2018/12/29
*/
public interface IRecordForPKView extends IMvpBaseView {
}

View File

@@ -1,12 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.room.bean.RoomRankMultiItem;
import com.mango.xchat_android_library.base.IMvpBaseView;
import java.util.List;
public interface IRoomCharmRankingListView extends IMvpBaseView {
void roomCharmListSuccess(List<RoomRankMultiItem> list);
void roomCharListFail(String message);
}

View File

@@ -1,16 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.room.bean.RoomContributeDataInfo;
import com.mango.xchat_android_library.base.IMvpBaseView;
/**
* Created by MadisonRong on 25/04/2018.
*/
public interface IRoomContributeListView extends IMvpBaseView {
void getSingleRankingSuccess(RoomContributeDataInfo roomContributeDataInfo);
void getSingleRakingFail(int errorCode, String errorMsg);
}

View File

@@ -1,17 +0,0 @@
package com.mango.moshen.avroom.view;
import com.mango.core.home.bean.BannerInfo;
import java.util.List;
/**
* <p> 轰趴房View层 </p>
*
* @author jiahui
* @date 2017/12/8
*/
public interface ISingleRoomView extends IBaseRoomView {
void onShowBanner(List<BannerInfo> dialogInfos);
}

View File

@@ -1,303 +0,0 @@
package com.mango.moshen.avroom.widget;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Point;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGACallback;
import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.tencent.qgame.animplayer.AnimView;
import com.mango.moshen.R;
import com.mango.moshen.common.widget.CircleImageView;
import com.mango.moshen.ui.utils.ImageLoadKt;
import com.mango.moshen.ui.utils.ImageLoadUtils;
import com.mango.moshen.ui.widget.magicindicator.buildins.UIUtil;
import com.mango.core.bean.RoomQueueInfo;
import com.mango.core.gift.GiftModel;
import com.mango.core.gift.bean.GiftEffectInfo;
import com.mango.core.gift.bean.GiftInfo;
import com.mango.core.gift.bean.GiftReceiver;
import com.mango.core.initial.InitialModel;
import com.mango.core.initial.bean.InitInfo;
import com.mango.core.manager.AvRoomDataManager;
import com.mango.core.manager.IMNetEaseManager;
import com.mango.core.manager.RoomEvent;
import com.mango.xchat_android_library.utils.ResolutionUtils;
import java.lang.ref.WeakReference;
import java.net.MalformedURLException;
import java.net.URL;
import javax.annotation.Nullable;
/**
* @author chenran
* @date 2017/10/8
*/
public class GiftEffectView extends RelativeLayout implements SVGACallback {
private RelativeLayout container;
private SVGAImageView svgaImageView;
private AnimView vapAnimView;
private View svgaBg;
private ImageView giftLightBg;
private CircleImageView giftImg;
private ImageView imgBg;
private CircleImageView benefactorAvatar;
private CircleImageView receiverAvatar;
private TextView benefactorNick;
private TextView receiverNick;
private TextView giftNumber;
private TextView giftName;
private GiftEffectListener giftEffectListener;
private EffectHandler effectHandler;
private boolean isAnim;
private boolean isHideCarEffect;
public GiftEffectView(Context context) {
super(context);
init();
}
public GiftEffectView(Context context, AttributeSet attr) {
super(context, attr);
init();
}
public GiftEffectView(Context context, AttributeSet attr, int i) {
super(context, attr, i);
init();
}
public boolean isAnim() {
return isAnim;
}
public void setGiftEffectListener(GiftEffectListener giftEffectListener) {
this.giftEffectListener = giftEffectListener;
}
private void init() {
LayoutInflater.from(getContext()).inflate(R.layout.layout_gift_effect, this, true);
effectHandler = new EffectHandler(this);
container = findViewById(R.id.container);
imgBg = findViewById(R.id.img_bg);
giftLightBg = findViewById(R.id.gift_light_bg);
giftImg = findViewById(R.id.gift_img);
benefactorAvatar = findViewById(R.id.benefactor_avatar);
receiverAvatar = findViewById(R.id.receiver_avatar);
benefactorNick = findViewById(R.id.benefactor_nick);
receiverNick = findViewById(R.id.receiver_nick);
giftNumber = findViewById(R.id.gift_number);
giftName = findViewById(R.id.gift_name);
svgaImageView = findViewById(R.id.svga_imageview);
svgaImageView.setCallback(this);
svgaImageView.setClearsAfterStop(true);
svgaImageView.setLoops(1);
svgaBg = findViewById(R.id.svga_imageview_bg);
vapAnimView = findViewById(R.id.vap_anim_view);
}
public void startGiftEffect(GiftEffectInfo giftEffectInfo) {
this.isAnim = true;
GiftInfo giftInfo = GiftModel.get().findGiftInfoById(giftEffectInfo.getGiftId());
if (giftInfo == null || TextUtils.isEmpty(giftInfo.getGiftUrl())) {
giftInfo = giftEffectInfo.getGift();
}
if (giftInfo != null) {
int totalCoin = giftInfo.getGoldPrice() * giftEffectInfo.getGiftNum() * giftEffectInfo.getTargetUsers().size();
if (totalCoin >= 520 &&
giftEffectInfo.getGiftReceiveType() != GiftEffectInfo.GIFT_RECEIVE_TYPE_LUCKY
&& !AvRoomDataManager.get().isSelfGamePlaying()) {//礼物栏
ImageLoadUtils.loadImage(benefactorAvatar.getContext(), giftEffectInfo.getAvatar(), benefactorAvatar);
ImageLoadUtils.loadImage(giftImg.getContext(), giftInfo.getGiftUrl(), giftImg);
benefactorNick.setText(giftEffectInfo.getNick());
giftNumber.setText("X" + giftEffectInfo.getGiftNum());
giftName.setText(giftInfo.getGiftName());
container.setVisibility(VISIBLE);
if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_SINGLE) {
GiftReceiver giftReceiver = giftEffectInfo.getTargetUsers().get(0);
ImageLoadUtils.loadAvatar(receiverAvatar.getContext(), giftReceiver.getAvatar(), receiverAvatar);
receiverNick.setText(giftReceiver.getNick());
} else if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_ALL) {
receiverAvatar.setImageResource(R.drawable.about_logo);
receiverNick.setText("全麦");
} else if (giftEffectInfo.getGiftReceiveType() == GiftEffectInfo.GIFT_RECEIVE_TYPE_MULTI) {
receiverAvatar.setImageResource(R.drawable.about_logo);
StringBuilder sb = new StringBuilder();
for (GiftReceiver targetUser : giftEffectInfo.getTargetUsers()) {
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(targetUser.getUid() + "");
if (roomQueueInfo == null) continue;
sb.append(roomQueueInfo.mRoomMicInfo.getPosition() + 1).append("").append(",");
}
if (sb.length() > 0) {
sb.replace(sb.lastIndexOf(","), sb.length(), "");
}
receiverNick.setText(sb.toString());
}
Animation operatingAnim = AnimationUtils.loadAnimation(getContext(), R.anim.light_bg_rotate_anim);
LinearInterpolator lin = new LinearInterpolator();
operatingAnim.setInterpolator(lin);
giftLightBg.setAnimation(operatingAnim);
final Point center = new Point();
center.x = ResolutionUtils.getScreenWidth(getContext()) / 2;
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(container, "translationX", -UIUtil.dip2px(getContext(), 400), center.x - container.getWidth() / 2).setDuration(500);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(container, "alpha", 0.0F, 1.0F).setDuration(500);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1.start();
if (totalCoin < 4999) {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_1);
} else if (totalCoin < 9999) {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_2);
} else {
imgBg.setImageResource(R.drawable.icon_gift_effect_bg_3);
}
}
effectHandler.sendEmptyMessageDelayed(0, 6000);
if (giftInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(giftInfo.getViewUrl())) {
drawVAPEffect(giftInfo.getViewUrl());
} else if (giftInfo.isHasVggPic() && !StringUtil.isEmpty(giftInfo.getVggUrl())) {
try {
drawSvgaEffect(giftInfo.getVggUrl());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
InitInfo initInfo = InitialModel.get().getCacheInitInfo();
if (!isHideCarEffect && initInfo != null && giftInfo.getGoldPrice() >= initInfo.getHideCarEffectGiftPrice()) {
isHideCarEffect = true;
IMNetEaseManager.get().noticeRoomEvent(null, RoomEvent.ROOM_CAR_EFFECT_HIDE);
}
}
}
private void drawSvgaEffect(String url) throws MalformedURLException {
if (!AvRoomDataManager.get().mIsNeedGiftEffect ||
AvRoomDataManager.get().isSelfGamePlaying()) {
return;
}
SVGAParser.Companion.shareParser().decodeFromURL(new URL(url), new SVGAParser.ParseCompletion() {
@Override
public void onComplete(@Nullable SVGAVideoEntity videoItem) {
SVGADrawable drawable = new SVGADrawable(videoItem);
svgaImageView.setImageDrawable(drawable);
svgaImageView.startAnimation();
svgaBg.setVisibility(VISIBLE);
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(svgaBg, "alpha", 0.0F, 2.0F).setDuration(800);
objectAnimator1.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator1.start();
}
@Override
public void onError() {
}
}, null);
}
private void drawVAPEffect(String url) {
if (!AvRoomDataManager.get().mIsNeedGiftEffect || AvRoomDataManager.get().isSelfGamePlaying()) {
return;
}
ImageLoadKt.loadAnim(vapAnimView, url);
}
private void deleteAnim() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(container, "translationX", container.getX(), ResolutionUtils.getScreenWidth(getContext())).setDuration(500);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.start();
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(container, "alpha", 1.0F, 0.0F).setDuration(500);
objectAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (isHideCarEffect) {
isHideCarEffect = false;
IMNetEaseManager.get().noticeRoomEvent(null, RoomEvent.ROOM_CAR_EFFECT_SHOW);
}
if (giftEffectListener != null) {
isAnim = false;
giftEffectListener.onGiftEffectEnd();
}
}
});
objectAnimator1.start();
}
public void release() {
effectHandler.removeMessages(0);
}
@Override
public void onPause() {
}
@Override
public void onFinished() {
svgaBg.setVisibility(GONE);
}
@Override
public void onRepeat() {
}
@Override
public void onStep(int i, double v) {
}
public interface GiftEffectListener {
void onGiftEffectEnd();
}
private static class EffectHandler extends Handler {
private WeakReference<GiftEffectView> mReference;
EffectHandler(GiftEffectView giftEffectView) {
mReference = new WeakReference<>(giftEffectView);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (mReference != null) {
final GiftEffectView giftEffectView = mReference.get();
if (giftEffectView != null) {
if (msg.what == 0) {
giftEffectView.deleteAnim();
}
}
}
}
}
}

View File

@@ -1,119 +0,0 @@
package com.mango.moshen.avroom.widget;
import com.mango.moshen.R;
/**
* 从library拿到client
* Created by lvzebiao on 2018/11/9.
*/
public class ViewItem {
public static final int BUTTON_TYPE_NORMAL = 0;
public static final int BUTTON_TYPE_CANCEL = 1;
/**放置在资料卡片的底部位置的button*/
public static final int BUTTON_TYPE_USER_CAR_BOTTOM = 2;
/** 发送礼物 */
public static final int SEND_GIFT_ITEM = 0;
/** 锁坑 */
public static final int SEND_LOCK_MIC_ITEM = 1;
/** 踢下麦 */
public static final int SEND_KICKDOWN_MIC_ITEM = 2;
/** 踢出房间 */
public static final int SEND_KICKOUT_ROOM_ITEM = 3;
/** 查看个人信息 */
public static final int SEND_SHOW_USER_INCO_ITEM = 4;
/** 下麦 */
public static final int SEND_DOWN_MIC_ITEM = 5;
/** 释放麦 */
public static final int SEND_FREE_MIC_ITEM = 6;
/** 设置管理员 */
public static final int SEND_MARK_MANAGER_ITEM = 7;
/** 取消管理员 */
public static final int SEND_NOMARK_MANAGER_ITEM = 11;
/** 加入黑名单 */
public static final int SEND_MARK_BLACK_ITEM = 8;
/** 开麦 */
public static final int SEND_OPEN_MUTE_ITEM = 9;
/**
* 装扮
*/
public static final int SEND_DECORATION_ITEM = 10;
/** 抱上麦 */
public static final int SEND_INVITE_MIC_ITEM = 12;
/** 发起竞拍 */
public static final int START_AUCTION = 13;
/**关注or取消*/
public static final int ATTENT_ITEM = 15;
/**房间外送礼物*/
public final static int SEND_GIFT_OUT_ROOM = 16;
/**房间内送礼物*/
public final static int SEND_MAGIC_OUT_ROOM = 17;
/**是否是关注按钮*/
public boolean isAttent = false;
/**ture则的话则显示在个人资料卡片底部*/
public boolean isBottom = false;
/**
* 找到Ta
*/
public boolean isFindTa = false;
/**
* @Ta
*/
public boolean isAt = false;
public String mText;
public int resourceID;
public int imgRes;
public OnClickListener mClickListener;
public int mButtonType;
public int mTheme = -1;
public boolean noDissmis;
public ViewItem(String text, int imgRes, OnClickListener l) {
this(text, imgRes,BUTTON_TYPE_NORMAL, l);
}
public ViewItem(String text, int imgRes, boolean noDissmis, OnClickListener l) {
this(text, imgRes,BUTTON_TYPE_NORMAL, l);
this.noDissmis = noDissmis;
}
public ViewItem(String text, int imgRes, int buttonType, OnClickListener l) {
mText = text;
mClickListener = l;
mButtonType = buttonType;
this.imgRes = imgRes;
resourceID = R.layout.dialog_user_card_item;
}
public ViewItem(String text, int imgRes, int buttonType, int theme, OnClickListener l) {
mText = text;
this.imgRes = imgRes;
mClickListener = l;
mButtonType = buttonType;
resourceID = R.layout.dialog_user_card_item;
mTheme = theme;
}
/**用户卡片的底部item*/
public ViewItem(String text, OnClickListener l) {
mText = text;
mClickListener = l;
mButtonType = BUTTON_TYPE_USER_CAR_BOTTOM;
resourceID = R.layout.item_room_user_dialog_bottom_button;
}
public void setText(String text) {
this.mText = text;
}
public void setClickListener(OnClickListener mClickListener) {
this.mClickListener = mClickListener;
}
public interface OnClickListener {
void onClick();
}
}

View File

@@ -1,18 +0,0 @@
package com.mango.moshen.avroom.wishlist
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.gift.bean.SimpleUserInfo
import com.mango.core.room.wishlist.WishItemInfo
import com.mango.moshen.R
import com.mango.moshen.ui.utils.load
class WishListPanelUserAdapter :
BaseQuickAdapter<SimpleUserInfo, BaseViewHolder>(R.layout.item_wish_list_panel_user) {
override fun convert(helper: BaseViewHolder, item: SimpleUserInfo) {
helper.getView<ImageView>(R.id.iv_avatar).load(item.avatar)
}
}

View File

@@ -1,24 +0,0 @@
package com.mango.moshen.avroom.wishlist.history
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.mango.core.bean.response.ListResult
import com.mango.core.room.wishlist.WishHistoryInfo
import com.mango.core.room.wishlist.WishListModel
import com.mango.moshen.base.BaseViewModel
class WishListHistoryViewModel : BaseViewModel() {
private val _wishHistoryLiveData = MutableLiveData<ListResult<WishHistoryInfo>>()
val wishHistoryLiveData: LiveData<ListResult<WishHistoryInfo>> = _wishHistoryLiveData
fun getWisHistoryList() {
safeLaunch(true, onError = {
_wishHistoryLiveData.value = ListResult.failed(1)
}, block = {
val result = WishListModel.getWisHistoryList()
_wishHistoryLiveData.value = ListResult.success(result, 1)
})
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +0,0 @@
package com.mango.moshen.base;
import com.mango.xchat_android_library.base.IMvpBaseView;
import com.mango.xchat_android_library.base.factory.AbstractMvpPresenter;
/**
* @author alvin hwang
*/
public abstract class BaseMvpActivity<V extends IMvpBaseView, P extends AbstractMvpPresenter<V>> extends AbstractMvpActivity<V, P>
implements IDataStatus, DialogManagerInterface {
}

View File

@@ -1,15 +0,0 @@
package com.mango.moshen.base;
import android.view.KeyEvent;
import androidx.fragment.app.FragmentManager;
import com.mango.xchat_android_library.base.IMvpBaseView;
import com.mango.xchat_android_library.base.factory.AbstractMvpPresenter;
/**
* @author alvin hwang
*/
public abstract class BaseMvpFragment<V extends IMvpBaseView, P extends AbstractMvpPresenter<V>> extends AbstractMvpFragment<V, P>
implements KeyEvent.Callback, IDataStatus, FragmentManager.OnBackStackChangedListener, IAcitivityBase {
}

View File

@@ -1,27 +0,0 @@
package com.mango.moshen.base;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.mango.xchat_android_library.base.IMvpBaseView;
import com.mango.xchat_android_library.base.factory.AbstractMvpPresenter;
/**
* @author jack
* @Description
* @Date 2018/5/9
*/
public class BaseMvpPresenter<V extends IMvpBaseView> extends AbstractMvpPresenter<V> {
@Override
public void onCreatePresenter(@Nullable Bundle saveState) {
super.onCreatePresenter(saveState);
}
@Override
public void onDestroyPresenter() {
super.onDestroyPresenter();
}
}

View File

@@ -1,9 +0,0 @@
package com.mango.moshen.base;
/**
* Created by huangmeng1 on 2018/5/7.
*/
public class BaseVM {
}

View File

@@ -1,10 +0,0 @@
package com.mango.moshen.base;
import com.mango.moshen.common.widget.dialog.DialogManager;
/**
* 返回通用的dialogmanager
*/
public interface DialogManagerInterface {
DialogManager getDialogManager();
}

View File

@@ -1,7 +0,0 @@
package com.mango.moshen.base;
/**
* Created by zhouxiangfeng on 17/3/5.
*/
public interface IBase {
}

View File

@@ -1,507 +0,0 @@
/**
* Copyright 2013 Joan Zapata
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mango.moshen.base.list;
import android.graphics.Bitmap;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.IdRes;
import androidx.annotation.StringRes;
import androidx.recyclerview.widget.RecyclerView;
import android.text.util.Linkify;
import android.util.SparseArray;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.Checkable;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RatingBar;
import android.widget.TextView;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* https://github.com/CymChad/BaseRecyclerViewAdapterHelper
*/
public class BaseViewHolder extends RecyclerView.ViewHolder {
/**
* Views indexed with their IDs
*/
private final SparseArray<View> views;
public Set<Integer> getNestViews() {
return nestViews;
}
private final HashSet<Integer> nestViews;
private final LinkedHashSet<Integer> childClickViewIds;
private final LinkedHashSet<Integer> itemChildLongClickViewIds;
private CommonAdapter adapter;
/**
* use itemView instead
*/
@Deprecated
public View convertView;
/**
* Package private field to retain the associated user object and detect a change
*/
Object associatedObject;
public BaseViewHolder(final View view) {
super(view);
this.views = new SparseArray<>();
this.childClickViewIds = new LinkedHashSet<>();
this.itemChildLongClickViewIds = new LinkedHashSet<>();
this.nestViews = new HashSet<>();
convertView = view;
}
public HashSet<Integer> getItemChildLongClickViewIds() {
return itemChildLongClickViewIds;
}
public HashSet<Integer> getChildClickViewIds() {
return childClickViewIds;
}
/**
* use itemView instead
*
* @return the ViewHolder root view
*/
@Deprecated
public View getConvertView() {
return convertView;
}
/**
* Will set the text of a TextView.
*
* @param viewId The view id.
* @param value The text to put in the text view.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setText(@IdRes int viewId, CharSequence value) {
TextView view = getView(viewId);
view.setText(value);
return this;
}
public BaseViewHolder setText(@IdRes int viewId, @StringRes int strId) {
TextView view = getView(viewId);
view.setText(strId);
return this;
}
/**
* Will set the image of an ImageView from a resource id.
*
* @param viewId The view id.
* @param imageResId The image resource id.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setImageResource(@IdRes int viewId, @DrawableRes int imageResId) {
ImageView view = getView(viewId);
view.setImageResource(imageResId);
return this;
}
/**
* Will set background color of a view.
*
* @param viewId The view id.
* @param color A color, not a resource id.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setBackgroundColor(@IdRes int viewId, @ColorInt int color) {
View view = getView(viewId);
view.setBackgroundColor(color);
return this;
}
/**
* Will set background of a view.
*
* @param viewId The view id.
* @param backgroundRes A resource to use as a background.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setBackgroundRes(@IdRes int viewId, @DrawableRes int backgroundRes) {
View view = getView(viewId);
view.setBackgroundResource(backgroundRes);
return this;
}
/**
* Will set text color of a TextView.
*
* @param viewId The view id.
* @param textColor The text color (not a resource id).
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setTextColor(@IdRes int viewId, @ColorInt int textColor) {
TextView view = getView(viewId);
view.setTextColor(textColor);
return this;
}
/**
* Will set the image of an ImageView from a drawable.
*
* @param viewId The view id.
* @param drawable The image drawable.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setImageDrawable(@IdRes int viewId, Drawable drawable) {
ImageView view = getView(viewId);
view.setImageDrawable(drawable);
return this;
}
/**
* Add an action to set the image of an image view. Can be called multiple times.
*/
public BaseViewHolder setImageBitmap(@IdRes int viewId, Bitmap bitmap) {
ImageView view = getView(viewId);
view.setImageBitmap(bitmap);
return this;
}
/**
* Add an action to set the alpha of a view. Can be called multiple times.
* Alpha between 0-1.
*/
public BaseViewHolder setAlpha(@IdRes int viewId, float value) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getView(viewId).setAlpha(value);
} else {
// Pre-honeycomb hack to set Alpha value
AlphaAnimation alpha = new AlphaAnimation(value, value);
alpha.setDuration(0);
alpha.setFillAfter(true);
getView(viewId).startAnimation(alpha);
}
return this;
}
/**
* Set a view visibility to VISIBLE (true) or GONE (false).
*
* @param viewId The view id.
* @param visible True for VISIBLE, false for GONE.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setGone(@IdRes int viewId, boolean visible) {
View view = getView(viewId);
view.setVisibility(visible ? View.VISIBLE : View.GONE);
return this;
}
/**
* Set a view visibility to VISIBLE (true) or INVISIBLE (false).
*
* @param viewId The view id.
* @param visible True for VISIBLE, false for INVISIBLE.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setVisible(@IdRes int viewId, boolean visible) {
View view = getView(viewId);
view.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
return this;
}
/**
* Add links into a TextView.
*
* @param viewId The id of the TextView to linkify.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder linkify(@IdRes int viewId) {
TextView view = getView(viewId);
Linkify.addLinks(view, Linkify.ALL);
return this;
}
/**
* Apply the typeface to the given viewId, and enable subpixel rendering.
*/
public BaseViewHolder setTypeface(@IdRes int viewId, Typeface typeface) {
TextView view = getView(viewId);
view.setTypeface(typeface);
view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
return this;
}
/**
* Apply the typeface to all the given viewIds, and enable subpixel rendering.
*/
public BaseViewHolder setTypeface(Typeface typeface, int... viewIds) {
for (int viewId : viewIds) {
TextView view = getView(viewId);
view.setTypeface(typeface);
view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);
}
return this;
}
/**
* Sets the progress of a ProgressBar.
*
* @param viewId The view id.
* @param progress The progress.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setProgress(@IdRes int viewId, int progress) {
ProgressBar view = getView(viewId);
view.setProgress(progress);
return this;
}
/**
* Sets the progress and max of a ProgressBar.
*
* @param viewId The view id.
* @param progress The progress.
* @param max The max value of a ProgressBar.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setProgress(@IdRes int viewId, int progress, int max) {
ProgressBar view = getView(viewId);
view.setMax(max);
view.setProgress(progress);
return this;
}
/**
* Sets the range of a ProgressBar to 0...max.
*
* @param viewId The view id.
* @param max The max value of a ProgressBar.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setMax(@IdRes int viewId, int max) {
ProgressBar view = getView(viewId);
view.setMax(max);
return this;
}
/**
* Sets the rating (the number of stars filled) of a RatingBar.
*
* @param viewId The view id.
* @param rating The rating.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setRating(@IdRes int viewId, float rating) {
RatingBar view = getView(viewId);
view.setRating(rating);
return this;
}
/**
* Sets the rating (the number of stars filled) and max of a RatingBar.
*
* @param viewId The view id.
* @param rating The rating.
* @param max The range of the RatingBar to 0...max.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setRating(@IdRes int viewId, float rating, int max) {
RatingBar view = getView(viewId);
view.setMax(max);
view.setRating(rating);
return this;
}
/**
* Sets the on click listener of the view.
*
* @param viewId The view id.
* @param listener The on click listener;
* @return The BaseViewHolder for chaining.
*/
@Deprecated
public BaseViewHolder setOnClickListener(@IdRes int viewId, View.OnClickListener listener) {
View view = getView(viewId);
view.setOnClickListener(listener);
return this;
}
/**
* Sets the on touch listener of the view.
*
* @param viewId The view id.
* @param listener The on touch listener;
* @return The BaseViewHolder for chaining.
*/
@Deprecated
public BaseViewHolder setOnTouchListener(@IdRes int viewId, View.OnTouchListener listener) {
View view = getView(viewId);
view.setOnTouchListener(listener);
return this;
}
/**
* Sets the listview or gridview's item long click listener of the view
*
* @param viewId The view id.
* @param listener The item long click listener;
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setOnItemLongClickListener(@IdRes int viewId, AdapterView.OnItemLongClickListener listener) {
AdapterView view = getView(viewId);
view.setOnItemLongClickListener(listener);
return this;
}
/**
* Sets the listview or gridview's item selected click listener of the view
*
* @param viewId The view id.
* @param listener The item selected click listener;
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setOnItemSelectedClickListener(@IdRes int viewId, AdapterView.OnItemSelectedListener listener) {
AdapterView view = getView(viewId);
view.setOnItemSelectedListener(listener);
return this;
}
/**
* Sets the on checked change listener of the view.
*
* @param viewId The view id.
* @param listener The checked change listener of compound button.
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setOnCheckedChangeListener(@IdRes int viewId, CompoundButton.OnCheckedChangeListener listener) {
CompoundButton view = getView(viewId);
view.setOnCheckedChangeListener(listener);
return this;
}
/**
* Sets the tag of the view.
*
* @param viewId The view id.
* @param tag The tag;
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setTag(@IdRes int viewId, Object tag) {
View view = getView(viewId);
view.setTag(tag);
return this;
}
/**
* Sets the tag of the view.
*
* @param viewId The view id.
* @param key The key of tag;
* @param tag The tag;
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setTag(@IdRes int viewId, int key, Object tag) {
View view = getView(viewId);
view.setTag(key, tag);
return this;
}
/**
* Sets the checked status of a checkable.
*
* @param viewId The view id.
* @param checked The checked status;
* @return The BaseViewHolder for chaining.
*/
public BaseViewHolder setChecked(@IdRes int viewId, boolean checked) {
View view = getView(viewId);
// View unable cast to Checkable
if (view instanceof Checkable) {
((Checkable) view).setChecked(checked);
}
return this;
}
/**
* Sets the adapter of a adapter view.
*
* @param viewId The view id.
* @param adapter The adapter;
* @return The BaseViewHolder for chaining.
*/
@SuppressWarnings("unchecked")
public BaseViewHolder setAdapter(@IdRes int viewId, Adapter adapter) {
AdapterView view = getView(viewId);
view.setAdapter(adapter);
return this;
}
/**
* Sets the adapter of a adapter view.
*
* @param adapter The adapter;
* @return The BaseViewHolder for chaining.
*/
protected BaseViewHolder setAdapter(CommonAdapter adapter) {
this.adapter = adapter;
return this;
}
@SuppressWarnings("unchecked")
public <T extends View> T getView(@IdRes int viewId) {
View view = views.get(viewId);
if (view == null) {
view = itemView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
/**
* Retrieves the last converted object on this view.
*/
public Object getAssociatedObject() {
return associatedObject;
}
/**
* Should be called during convert
*/
public void setAssociatedObject(Object associatedObject) {
this.associatedObject = associatedObject;
}
}

View File

@@ -1,9 +0,0 @@
package com.mango.moshen.base.list;
/**
* Created by lvzebiao on 2018/12/18.
*/
public interface OnItemClickListener<T, K extends BaseViewHolder> {
void onItemClick(K holder, T item, int position);
}

View File

@@ -1,7 +0,0 @@
package com.mango.moshen.bills.presenter;
import com.mango.moshen.base.BaseMvpPresenter;
import com.mango.moshen.bills.view.IBillGiftIncomeGroupView;
public class BillGiftIncomeGroupPresenter extends BaseMvpPresenter<IBillGiftIncomeGroupView> {
}

View File

@@ -1,6 +0,0 @@
package com.mango.moshen.bills.view;
import com.mango.xchat_android_library.base.IMvpBaseView;
public interface IBillGiftIncomeGroupView extends IMvpBaseView {
}

View File

@@ -1,8 +0,0 @@
package com.mango.moshen.bills.view;
import com.mango.core.bills.bean.IncomeListInfo;
public interface IGiftIncomeView extends ISmoothToTopView {
void onGetDataError(String message);
void onGetIncomeBills(IncomeListInfo data);
}

View File

@@ -1,10 +0,0 @@
package com.mango.moshen.bills.view;
import com.mango.core.bills.bean.ExpendListInfo;
import com.mango.xchat_android_library.base.IMvpBaseView;
public interface IGiftOutputView extends IMvpBaseView {
void smoothScrollToTop();
void onGetDataError(String message);
void onGetExpendBills(ExpendListInfo data);
}

View File

@@ -1,8 +0,0 @@
package com.mango.moshen.bills.view;
import com.mango.core.bills.bean.RadishGiftListInfo;
public interface IRadishGiftView extends ISmoothToTopView {
void getRadishRecordSuccess(RadishGiftListInfo list);
void getRadishRecordFail(String message);
}

View File

@@ -1,7 +0,0 @@
package com.mango.moshen.bills.view;
import com.mango.xchat_android_library.base.IMvpBaseView;
public interface ISmoothToTopView extends IMvpBaseView {
void smoothScrollToTop();
}

View File

@@ -1,33 +0,0 @@
package com.mango.moshen.common;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.mango.moshen.R;
import com.mango.xchat_android_library.utils.NetworkUtils;
public class EmptyViewHelper {
public static View createEmptyView(Context context, String text) {
if (!NetworkUtils.isNetworkAvailable(context)) text = "网络异常,请检查网络再试~";
View view = LayoutInflater.from(context).inflate(R.layout.layout_ktv_empty, null);
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
((TextView) view.findViewById(R.id.tv_hint)).setText(text);
return view;
}
public static View createDarkEmptyView(Context context, String text) {
if (!NetworkUtils.isNetworkAvailable(context)) text = "网络异常,请检查网络再试~";
View view = LayoutInflater.from(context).inflate(R.layout.layout_ktv_empty, null);
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
((TextView) view.findViewById(R.id.tv_hint)).setText(text);
((ImageView) view.findViewById(R.id.iv_status)).setImageResource(R.drawable.empty_content_dark);
return view;
}
}

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