Compare commits

..

125 Commits

Author SHA1 Message Date
max
e26d548515 version_code update 2024-07-29 10:24:14 +08:00
eggmanQQQ
539be23e47 feat:调整配置入口按钮间距 2024-07-26 16:56:52 +08:00
eggmanQQQ
dcafb35e24 feat:调整配置入口按钮显示逻辑 2024-07-26 15:35:02 +08:00
eggmanQQQ
8fa429aca6 feat:更新数据的获取逻辑,接入配置按钮的跳转行为 2024-07-26 11:31:15 +08:00
max
f08b6d4577 新增 model 2024-07-25 22:28:54 +08:00
max
3ea7aecd5c feat:處理底部按鈕顯示邏輯 2024-07-25 18:31:50 +08:00
eggmanQQQ
178f4e24ef 更换资源 2024-07-25 16:12:07 +08:00
max
e2861459fb feat:玩法列表支持最多 3 行並滾動 2024-07-25 15:14:08 +08:00
eggmanQQQ
d704a44106 feat:更新玩法按鈕以及顯示內容 2024-07-24 20:08:03 +08:00
max
da81a4e905 feat:更新房間底部 layout 2024-07-24 14:54:41 +08:00
max
6c081d9a38 fix:修正英語翻譯 2024-07-24 12:13:56 +08:00
max
37d897035f feat:固化混淆配置 2024-07-12 19:07:32 +08:00
max
cea25c7497 feat:调整重名类命名 2024-07-12 14:25:32 +08:00
max
47d2bfd145 feat:替换登录页-logo图片 2024-07-12 11:21:44 +08:00
max
047e1454bd feat:适配Android14 2024-07-12 09:55:16 +08:00
max
714d5baec6 fix:修复个播粉丝团RTL适配问题 2024-07-11 18:56:09 +08:00
max
b20ee8064c fix:修复房间音乐音量无法调节bug 2024-07-11 18:24:50 +08:00
max
711135ae90 feat:移除不必要的debug-toast 2024-07-11 17:21:32 +08:00
max
ecf42e368e feat:完成游戏开黑翻译
fix:UI问题修复
2024-07-11 16:06:05 +08:00
max
205e1180e7 feat:首页-房间列表 麦位头像改为动态数据 2024-07-11 15:41:02 +08:00
max
bc48cc86a9 fix:礼物名称 动态适配多语言 2024-07-11 11:24:18 +08:00
max
e7b73a2961 feat:完成游戏开黑功能 2024-07-10 19:57:20 +08:00
max
5070e21d16 feat:【开黑】完成部分UI 2024-07-10 19:57:19 +08:00
max
049006aa8b feat:补充异常信息展示 2024-07-10 19:56:04 +08:00
max
86b498c00e feat:删除测试代码,删除不必要的log
fix:完善销毁逻辑
2024-07-09 15:57:11 +08:00
max
6df95cf11f feat:适配BillingService2,完善支付回调 2024-07-09 15:57:10 +08:00
max
3b407c0bd6 feat:初步实现H5唤起支付逻辑(不完善,用于打内测包验证) 2024-07-09 15:57:10 +08:00
max
83af08076a fix:头条UI微调 2024-07-09 15:56:20 +08:00
max
cdc1c51fec feat:调整版本号 2024-07-08 11:27:30 +08:00
max
a8191616a3 feat:私聊、公聊、房间、支持垃圾字检测 2024-07-08 11:27:11 +08:00
max
410832690f feat:调整启动背景-logo 2024-07-08 11:27:11 +08:00
max
b1d2f0515b fix:修复麦位空指针异常 2024-07-05 18:26:14 +08:00
max
82c2d8c25d feat:修改启动页背景 2024-07-04 19:17:35 +08:00
max
549088c99e feat:完成公聊厅-头条UI调整 2024-07-04 19:01:24 +08:00
max
5910e7c5fd feat:配置云信-安全通ID 2024-07-04 17:52:42 +08:00
max
53aed7599a feat:头条间距微调 2024-07-04 16:46:12 +08:00
max
8aebb7c2c2 feat:调整房间公聊-头条UI 2024-07-04 16:38:32 +08:00
max
3a120bf5f0 fix:修复反馈-联系客服-排序问题 2024-07-04 16:13:38 +08:00
max
2a0d8f06fa feat:头饰支持SVGA(个人资料页、房间个人资料弹窗、动态列表、动态详情、我的头饰列表、公聊厅、房间麦位) 2024-07-04 15:19:11 +08:00
max
495bae0d00 fix:修复反馈-bug 2024-07-03 19:40:59 +08:00
max
2af7cec8dd feat:完成反馈功能 2024-07-03 16:47:14 +08:00
max
e9e4da8d60 feat:补充启动时更新ticket逻辑 2024-07-02 17:36:08 +08:00
max
14c1805a2b feat:完成部分页面主题UI修改 2024-07-02 15:28:16 +08:00
max
066fc4056b feat:固化最新混淆配置 2024-07-01 09:38:36 +08:00
max
f8ad0d3961 feat:个人资料页UI微调
feat:首页房间列表-背景-阿语调整
2024-06-28 17:37:16 +08:00
max
0d974866c8 feat:调整首页-房间列表-背景多语言资源 2024-06-28 16:38:46 +08:00
max
b4f3c4f3e3 feat:补充混淆忽略 2024-06-28 16:24:53 +08:00
max
f74b744f56 fix:调整房间公告icon 2024-06-28 16:04:32 +08:00
max
b8f73ec0d5 feat:新增动态相关混淆配置 2024-06-28 14:44:16 +08:00
max
3ff80994f1 fix:调整动态部分翻译 2024-06-28 14:32:58 +08:00
max
c1426b39c4 fix:动态部分UI微调 2024-06-28 14:32:58 +08:00
max
3b28974919 feat:初步恢复动态 2024-06-28 14:32:57 +08:00
max
63a28bc142 fix:调整个人资源页部分文案翻译 2024-06-28 11:53:50 +08:00
max
729d626006 fix:修复个播-小麦位头像框大小比例问题 2024-06-28 10:50:06 +08:00
max
a407268be1 fix:修复房间麦位魅力icon 展示不完整bug 2024-06-28 09:47:08 +08:00
max
f4808e8acf fix:补充房间底部加号红点刷新时机 2024-06-28 09:34:07 +08:00
max
3e49dae43b feat:调整房间类型切换图片资源 2024-06-28 09:23:08 +08:00
max
35d53ccdb2 fix:调整已关注 翻译文案 2024-06-28 09:19:26 +08:00
max
2a20d75ffd feat:调整个人资料页 关注按钮 文案 2024-06-27 19:47:07 +08:00
max
5f157d8454 feat:聚会房、狂欢房 开放PK功能 2024-06-27 16:40:48 +08:00
max
5fbee068dc fix:调整切换房间页面部分图片资源 2024-06-27 16:18:01 +08:00
max
046c7d66cd fix:调整房间底部加号-红点提示逻辑:单独处理房间类型的功能提示
fix:修复游戏房未能返回之前房间类型问题
2024-06-27 16:18:01 +08:00
max
accf4562b1 fix:修复普通房麦位索引展示问题(1-8) 2024-06-27 16:18:00 +08:00
max
5b90524144 feat:适配房间类型切换-多语言翻译 2024-06-27 16:18:00 +08:00
max
1284a6e8a2 feat:调整房间公告位置 2024-06-27 16:18:00 +08:00
max
afdf3093a1 feat:新增聚会房、狂欢房; 2024-06-27 16:17:27 +08:00
max
843a37ed97 feat:初步完成房间类型切换页面 2024-06-27 16:14:52 +08:00
max
f99c6d8b37 fix:修复个人资料页UI问题 2024-06-27 14:49:13 +08:00
max
7add521040 feat:调整首页分页大小:50 2024-06-27 11:08:18 +08:00
max
b673f5603f fix:调整个人资料相册数据源 2024-06-27 11:06:03 +08:00
max
a4f9559ad9 fix:修复个人资料页部分UI细节问题 2024-06-27 10:07:10 +08:00
max
3226109442 fix:修复个人资料页部分BUG 2024-06-27 10:07:10 +08:00
max
3c60225e35 feat:调整个性签名默认值展示 2024-06-27 10:07:10 +08:00
max
0a70c6a478 feat:删除用户信息页不必要的请求 2024-06-27 10:06:53 +08:00
max
16a8f9a52a fix:调整翻译
feat:完成勋章展示
2024-06-27 10:06:27 +08:00
max
2a1983aa46 feat:完成个人资料页-UI改版 2024-06-27 10:06:26 +08:00
max
eb187ebc56 feat:调整首页列表分页大小
fix:修复首页列表底部间距问题(被遮挡)
2024-06-25 17:10:46 +08:00
max
f4ef62d2d6 固化混淆配置 2024-06-25 10:02:34 +08:00
max
49a10d9f40 feat:调整版本号 2024-06-24 17:40:34 +08:00
max
42b47fcb64 fix:修复PK-RTL适配问题 2024-06-24 16:26:04 +08:00
max
709b0b0274 fix:调整一些翻译 2024-06-24 15:54:39 +08:00
max
b6d59b5986 feat:微调UI 2024-06-24 14:52:49 +08:00
max
ef80b15f27 feat:修改背包icon 2024-06-24 14:22:24 +08:00
max
c14d376a1a feat;调整首页列表分页大小(减轻服务端压力) 2024-06-24 11:44:37 +08:00
max
7f8cd70d99 feat:调整“我的”翻译 2024-06-21 17:46:38 +08:00
max
d2a686f572 feat:首页房间列表:增加公告标题默认值 2024-06-21 16:53:31 +08:00
max
693a14d6cf fix:修复房间排行榜热度-最小化后恢复页面未展示最新值bug 2024-06-21 15:34:16 +08:00
max
cf078ebc5b feat:调整首页列表-公告展示字段 2024-06-20 19:01:05 +08:00
max
408fe443f4 fix:修复首页-排行榜-RTL问题 2024-06-20 17:56:39 +08:00
max
442bd1f238 fix:修复PK邀请弹窗 适配问题 2024-06-20 16:33:07 +08:00
max
4eed4c0cfb fix:修复首页-我的-房间卡片 展示bug 2024-06-20 15:56:10 +08:00
max
bf3ea4b437 feat:调整启动图标 2024-06-20 10:59:12 +08:00
max
f161a8e96b feat:补充翻译 2024-06-19 19:14:39 +08:00
max
574f290004 feat:首页排行榜资源位-背景改为本地 2024-06-19 18:51:59 +08:00
max
a46b5b4f32 feat:调整首页-排行榜-UI
fix:修复首页-我的列表不能主动刷新问题
2024-06-19 18:51:59 +08:00
max
936dd2f8e8 fix:修复首页排行榜异常 2024-06-19 18:51:59 +08:00
max
9d0b6e3a9f feat:完成我的-菜单列表:动态数据(接口) 2024-06-19 18:51:58 +08:00
max
14fa576814 feat:完善首页数据对接(首页排行榜、我的房间、房间标签列表)
feat:删除部分无用代码
2024-06-19 18:51:58 +08:00
max
9d14936d9c feat:初步实现首页排行榜UI效果 2024-06-19 18:51:58 +08:00
max
3dec68b1fc fix:修复一些英文翻译 2024-06-19 18:51:57 +08:00
max
3c75f0e86a feat:删除首页历史无用代码
feat:调整首页刷新机制(去掉定时刷新任务、改为每次可见刷新)
feat:完善首页-我的-房间信息展示
2024-06-19 18:51:57 +08:00
max
0caee6e191 feat:调整翻译文案 2024-06-19 18:51:43 +08:00
max
b9f87b4984 feat:初步完成首页改版UI部分(首页-推荐、首页-我的) 2024-06-19 18:49:52 +08:00
max
2b22fb3d4c fix:修复线上检测异常(房间公聊列表) 2024-06-19 16:25:00 +08:00
max
d80128f217 feat:调整礼物面板-背包图标大小 2024-06-19 15:52:22 +08:00
max
57a7bee15d 补充提交 2024-06-19 15:52:22 +08:00
max
677eb4327b feat:补充翻译 2024-06-19 15:52:22 +08:00
max
d8815a23e7 feat:完成房间礼物面板-背包位置调整
feat:调整礼物面板部分layout的间距、高度
2024-06-19 15:52:21 +08:00
max
a7faa20321 feat:调整房间在线人数定时任务时长 2024-06-19 15:52:21 +08:00
max
612bd50545 feat:调整给自己送礼的提示文案 2024-06-19 15:52:20 +08:00
max
3187bc0d37 fix:增加给自己送礼的提示(文案待确定) 2024-06-19 15:52:20 +08:00
max
48d2bc88b8 fix:修复团队PK-结束后进度未清零bug 2024-06-19 15:52:20 +08:00
max
168c0eab09 feat:补充游戏房、个播房:房间榜热度展示 2024-06-19 15:52:20 +08:00
max
d1fc37aa24 feat:完成房间榜流水展示 2024-06-19 15:52:19 +08:00
max
94cebe457a feat:补充PK-UI-多语言适配 2024-06-19 15:52:19 +08:00
max
6e8f69d273 feat:完善PK-UI改版:多语言资源适配 2024-06-19 15:52:18 +08:00
max
80d852114c fix:修改房间PK面板拖拽实现方案(RTL适配问题)
fix:修改首页房间悬浮球实现方案(RTL适配问题)
2024-06-19 15:52:17 +08:00
max
634adc5f19 fix:房间团队PK-阿语适配 2024-06-19 15:52:17 +08:00
max
3408f444aa fix:修复PK-头像缩放适配问题 2024-06-19 15:52:17 +08:00
max
95f65558a4 feat:完成房间团队PK-UI改版 2024-06-19 15:52:15 +08:00
max
fbb7d20f3d feat:迁移PK入口到玩法列表
feat:部分UI微调
2024-06-19 15:52:15 +08:00
max
12edababcd feat:调整跨房PK倒计时 颜色 2024-06-19 15:52:14 +08:00
max
97949c4828 feat:完成跨房PK-UI改版 2024-06-19 15:52:14 +08:00
max
78fa5751a6 feat:COS 增加动态配置(是否全球加速) 2024-06-14 16:00:55 +08:00
max
a6798cf35d fix:修复首页房间最小化入口展示不出来问题(去掉再次请求用户信息接口的逻辑,改用读取房间信息里面头像字段) 2024-06-11 10:26:22 +08:00
730 changed files with 21092 additions and 8441 deletions

View File

@@ -117,6 +117,7 @@ android {
'src/module_treasure_box/java',
'src/module_public_chat/java',
'src/module_game/java',
'src/module_community/java',
]
@@ -133,6 +134,7 @@ android {
'src/module_treasure_box/res',
'src/module_public_chat/res',
'src/module_game/res',
'src/module_community/res',
]
@@ -219,7 +221,6 @@ dependencies {
api "com.jzxiang.pickerview:TimePickerDialog:1.0.1"
api "com.github.zyyoona7:EasyPopup:1.0.2"
api "com.github.donkingliang:LabelsView:1.6.5"
api "com.github.yyued:SVGAPlayer-Android:2.6.1"
api "com.ms-square:expandableTextView:0.1.4"
annotationProcessor 'androidx.annotation:annotation:1.6.0'
@@ -337,6 +338,16 @@ xmlClassGuard {
"com.chwl.core": "com.hhchu.core",
"com.chwl.library": "com.hhchu.library"]
moveDir = [
"com.chwl.app.community.dynamic" : "ffefcef.ddbccaec",
"com.chwl.app.community.helper" : "eaeecbea.ccefdeaf",
"com.chwl.app.community.holder" : "aafebee.febeeba",
"com.chwl.app.community.im" : "eedadfa.cccedea",
"com.chwl.app.community.publish" : "ddae.cfdb",
"com.chwl.app.community.square" : "bddfb.eedde",
"com.chwl.app.community.user_dynamic" : "ddcdbcbc.acbfcfba",
"com.chwl.app.community.utils" : "cceaf.cbdcdb",
"com.chwl.app.community.widget" : "bdfaa.beeefc",
"com.chwl.app.community" : "cadfd.aeddb",
"com.chwl.app.avroom.headline" : "eefce.eecad",
"com.chwl.core.bean.game" : "caeccd.fdedac",
"com.chwl.core.bean.room" : "afceec.aaafbc",

View File

@@ -82,7 +82,8 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- 对于 Android 12.0 及以上设备,还需要添加如下权限: -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
<application
android:name=".application.App"
android:allowBackup="false"
@@ -265,6 +266,9 @@
android:name=".avroom.activity.RoomSettingActivity"
android:label="@string/main_androidmanifest_07"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomTypeSwitchActivity"
android:screenOrientation="portrait" />
<activity
android:name=".avroom.activity.RoomBgSettingActivity"
android:screenOrientation="portrait" />
@@ -873,17 +877,22 @@
<service
android:name="com.netease.nimlib.service.NimService"
android:foregroundServiceType="remoteMessaging"
android:process=":core" />
<service
android:name="com.netease.nimlib.service.NimService$Aux"
android:foregroundServiceType="remoteMessaging"
android:process=":core" />
<service
android:name="com.netease.nimlib.job.NIMJobService"
android:foregroundServiceType="remoteMessaging"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":core" />
<service android:name="com.netease.nimlib.service.ResponseService" />
<service android:name="com.netease.nimlib.service.ResponseService"
android:foregroundServiceType="remoteMessaging"/>
<service
android:name=".service.DaemonService"
android:foregroundServiceType="mediaPlayback"
android:enabled="true" />
<activity android:name=".avroom.room_album.RoomAlbumActivity" />
@@ -931,6 +940,23 @@
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".community.dynamic.view.DynamicDetailActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".community.publish.view.PublishActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustNothing" />
<activity
android:windowSoftInputMode="adjustPan"
android:name=".ui.feedback.FeedbackActivity"
android:screenOrientation="portrait" />
<activity android:name=".ui.debug.DebugActivity"
android:screenOrientation="portrait"/>
<activity android:name=".ui.game_team.record.GameTeamRecordActivity"
android:screenOrientation="portrait"/>
</application>
</manifest>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -25,34 +25,28 @@ import androidx.lifecycle.ViewModelProvider;
import com.chwl.app.base.GlobalViewModelOwner;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.community.square.SquareFragment;
import com.chwl.app.game.core.GameStateAbility;
import com.chwl.app.game.data.GameModel2;
import com.chwl.app.game.ui.game.GameActivity;
import com.chwl.app.game.ui.game.GameIntent;
import com.chwl.app.game.ui.home.GameHomeFragment;
import com.chwl.app.game.ui.home.GameHomeViewModel;
import com.chwl.app.star.StarFragment;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.bean.game.GameRoomInfo;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.settings.SettingsModel;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.StringUtils;
import com.example.lib_utils.StringUtils2;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.application.IReportConstants;
@@ -98,7 +92,6 @@ import com.chwl.core.channel_page.model.ChannelPageModel;
import com.chwl.core.community.event.SquareTaskEvent;
import com.chwl.core.community.event.UnReadCountEvent;
import com.chwl.core.home.bean.MainTabType;
import com.chwl.core.home.event.RefreshHomeDataEvent;
import com.chwl.core.home.event.VisitorUnreadCountEvent;
import com.chwl.core.home.model.GameHomeModel;
import com.chwl.core.home.model.HomeModel;
@@ -133,11 +126,6 @@ import org.jetbrains.annotations.NotNull;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
/**
* @author Administrator
@@ -150,13 +138,13 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private static final String TAG = "MainActivity";
private static final String EXTRA_APP_QUIT = "APP_QUIT";
private final SparseArray<Fragment> fragmentArray = new SparseArray<>();
private DragLayout avatarLayout;
private View avatarLayout;
private CircleImageView avatarImage;
private LivingIconView userLivingView;
private MainTabLayout mMainTabLayout;
private AnchorCardView anchorCardView;
private View viewClose;
private int mCurrentTabType = MainTabType.TAB_TYPE_STAR;
private int mCurrentTabType = MainTabType.TAB_TYPE_HOME;
/**
* 房间最小化动画换成属性动画原先的补间动画影响了activity的生命周期
*/
@@ -175,9 +163,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private Runnable touchRunnable;
{
fragmentArray.put(MainTabType.TAB_TYPE_STAR, new StarFragment());
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
}
@@ -260,11 +248,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
EventBus.getDefault().register(this);
otherModelInit();
Observable.interval(60, TimeUnit.SECONDS)
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> EventBus.getDefault().post(new RefreshHomeDataEvent()));
homeViewModel.getAnchorInfoLiveData().observe(this, anchorInfo -> {
if (anchorInfo != null) {
anchorCardView.setAnchorInfo(anchorInfo);
@@ -592,27 +575,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private void updateRoomState() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
UserModel.get().getUserInfo(roomInfo.getUid())
.subscribe(userInfo -> {
if (userInfo != null) {
displayAvatarLayout(userInfo.getAvatar(), roomInfo.getTitle(), userInfo.getErbanNo());
} else {
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(roomInfo.getUid() + "");
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(roomInfo.getUid() + "", new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
} else {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
displayAvatarLayout(roomInfo.getAvatar(), roomInfo.getTitle(), roomInfo.getUid());
}
}

View File

@@ -84,7 +84,6 @@ import com.chwl.library.common.file.FileHelper;
import com.chwl.library.net.rxnet.RxNet;
import com.chwl.library.net.rxnet.converter.GsonConverterPlugins;
import com.chwl.library.utils.AppMetaDataUtil;
import com.chwl.library.utils.AppUtils;
import com.chwl.library.utils.DeviceUuidFactory;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
@@ -417,7 +416,7 @@ public class App extends BaseApp {
httpParams.put("netType", String.valueOf(SystemUtils.getNetworkType(context)));
httpParams.put("model", SystemUtils.getPhoneModel());
httpParams.put("appVersion", VersionUtil.getLocalName(context));
httpParams.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context)));
httpParams.put("appVersionCode", String.valueOf(VersionUtil.getVersionCode(context)));
httpParams.put("deviceId", DeviceUuidFactory.getDeviceId(context));
httpParams.put("androidId", MD5Utils.getMD5String(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)));
httpParams.put("channel", AppMetaDataUtil.getChannelID());
@@ -484,7 +483,6 @@ public class App extends BaseApp {
ChannelModel.get();
MarketVerifyModel.get();
GiftModel.get();
GiftModel.get().tryLoadGiftList();
// 模厅
HallDataManager.get().application();
//全局处理

View File

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

View File

@@ -42,6 +42,7 @@ import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
import com.chwl.core.support.room.AudioRoomContext;
@@ -177,6 +178,15 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
private static final String TAG = "AVRoomActivity";
private static final int SHOW_RED_DIALOG_MAX = 10;
public static boolean isPKModel = false;
private static SVGAView.SVGACache svgaCache;
public static SVGAView.SVGACache getSvgaCache() {
if (svgaCache == null) {
svgaCache = SVGAView.newCache(20);
}
return svgaCache;
}
/**
* 管理限制进房
*/
@@ -899,6 +909,10 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
GiftModel.get().cancelCountDownTimer();
EventBus.getDefault().unregister(this);
DemoCache.saveBoolean("FirstCharge", false);
if (svgaCache != null) {
svgaCache.clear();
}
svgaCache = null;
super.onDestroy();
}

View File

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

View File

@@ -15,8 +15,12 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.coorchice.library.SuperTextView;
import com.example.lib_utils.StringUtils2;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGAImageView;
import com.chwl.app.R;
@@ -55,6 +59,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
public static final String MICRO_TYPE_DATING = "dating";
public static final String MICRO_TYPE_DATING_VIP = "dating_vip";
public static final String MICRO_TYPE_SINGLE = "single";
public static final String MICRO_TYPE_PARTY = "party";
public static final String MICRO_TYPE_REVELRY = "revelry";
protected static final int TYPE_KING = 2;
protected static final int TYPE_BOSS = 1;
protected static final int TYPE_NORMAL = 0;
@@ -76,11 +83,16 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
if (roomQueueInfo == null) return;
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
holder.micPositionNameOffset = getMicPositionNameOffset();
holder.bind(roomQueueInfo, position - 1);
}
public abstract String microType();
protected int getMicPositionNameOffset() {
return 2;
}
@Override
public int getItemCount() {
return 9;
@@ -137,7 +149,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
SVGAImageView ivHalo;
@Nullable
ImageView ivHeadWear;
SVGAView ivHeadWear;
@Nullable
ImageView ivCharmLevelTag;
@@ -146,6 +158,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
RoomQueueInfo info;
int position = TYPE_INVALID;
int micPositionNameOffset = 2;
NormalMicroViewHolder(View itemView) {
super(itemView);
@@ -162,6 +175,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivUpImage.setOnClickListener(this);
ivLockImage.setOnClickListener(this);
ivAvatar.setOnClickListener(this);
if (ivHeadWear != null) {
ivHeadWear.bindCache(AVRoomActivity.getSvgaCache());
}
}
public void clear() {
@@ -267,6 +283,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
private void clearHeadWear() {
if (ivHeadWear == null) return;
ivHeadWear.clearAnimation();
ivHeadWear.stopAnimation();
ivHeadWear.setImageDrawable(null);
ivHeadWear.setTag(R.id.mic_item_head_wear, null);
ivHeadWear.setVisibility(View.GONE);
@@ -274,7 +291,11 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
protected void setDefalutText(int index) {
tvNick.setTextColor(Color.WHITE);
tvNick.setText("NO."+ (index + 1));
tvNick.setText(getMicPositionName(index));
}
protected String getMicPositionName(int index) {
return "NO." + (index + micPositionNameOffset);
}
protected void setSelectText(int index, String nick, int gender) {
@@ -286,10 +307,13 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
private void updateNobleView(MicMemberInfo chatRoomMember) {
if (ivHeadWear == null) return;
String headWear = chatRoomMember.getHeadWearUrl();
int headWearType = chatRoomMember.getHeadWearType();
if (TextUtils.isEmpty(headWear)) {
headWear = NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) != null ?
NobleUtil.getHeadResource(HeadWearInfo.EFFECT, chatRoomMember) :
NobleUtil.getHeadResource(HeadWearInfo.PIC, chatRoomMember);
String type = NobleUtil.getHeadResource(HeadWearInfo.TYPE, chatRoomMember);
headWearType = StringUtils2.INSTANCE.toInt(type);
}
String nobleHeadWear = (String) NobleUtil.getResource(NobleResourceType.KEY_HEAD_WEAR, chatRoomMember);
if (!TextUtils.isEmpty(headWear)) {
@@ -297,7 +321,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
//只有头饰发生改变才更新,防止闪烁
if (!headWear.equals(ivHeadWear.getTag(R.id.mic_item_head_wear))) {
ivHeadWear.setTag(R.id.mic_item_head_wear, headWear);
NobleUtil.loadMicHeadWear(headWear, ivHeadWear, R.id.mic_item_head_wear, headWear);
AvatarHelper.loadAvatarFrame(ivHeadWear, headWear, headWearType);
}
} else if (!TextUtils.isEmpty(nobleHeadWear)) {
// 头饰
@@ -478,10 +502,10 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
//控制最高最低头饰
Observer<Integer> headWearObserver = headWearValue -> {
if (ivCharmLevelTag == null) return;
ivCharmLevelTag.setVisibility(View.GONE);
if (headWearValue == 1) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
ivCharmLevelTag.setVisibility(View.GONE);
// ivCharmLevelTag.setVisibility(View.VISIBLE);
// ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
} else if (headWearValue == 2) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_max));

View File

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

View File

@@ -27,6 +27,9 @@ import com.chwl.library.utils.ResUtil
* @date 2017/12/18
*/
class DatingMicroViewAdapter(context: Context?) : BaseMicroViewAdapter(context) {
override fun getMicPositionNameOffset(): Int {
return 1
}
/**
* Set LayoutManager and bind this to RecyclerView

View File

@@ -2,7 +2,6 @@ package com.chwl.app.avroom.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -13,8 +12,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.library.utils.ResUtil;
/**
* @author xiaoyu
@@ -27,6 +24,11 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
super(context);
}
@Override
protected int getMicPositionNameOffset() {
return 1;
}
/**
* Set LayoutManager and bind this to RecyclerView
*/
@@ -62,15 +64,6 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByMicPosition(position - 1);
if (roomQueueInfo == null) {
return;
}
NormalMicroViewHolder holder = (NormalMicroViewHolder) viewHolder;
holder.bind(roomQueueInfo, position - 1);
}
@Override
public String microType() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -9,7 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CreateRoomGameAdapter
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogCreateRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.RVDelegate
@@ -19,7 +19,7 @@ import com.chwl.core.room.game.GameModel
import com.chwl.core.utils.extension.toast
import com.chwl.library.utils.ResUtil
class CreateRoomDialog : BaseDialog<DialogCreateRoomBinding>() {
class CreateRoomDialog : BaseDialogFragment<DialogCreateRoomBinding>() {
private lateinit var rvDelegate: RVDelegate<GameInfo>
private val gameAdapter = CreateRoomGameAdapter()

View File

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

View File

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

View File

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

View File

@@ -11,6 +11,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.adapter.RoomGameListAdapter
import com.chwl.app.base.BaseActivity
@@ -38,7 +39,7 @@ class RoomGameListDialog :
private var compositeDisposable: CompositeDisposable? = null
private val adapter = RoomGameListAdapter()
private var dialogManager: DialogManager? = null
private lateinit var recycleView: RecyclerView
override fun getTheme(): Int {
return R.style.ErbanBottomSheetDialogDimFalse
}
@@ -61,6 +62,8 @@ class RoomGameListDialog :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
recycleView = recyclerView
switchStatus(0)
requestData()
}
@@ -89,6 +92,14 @@ class RoomGameListDialog :
binding?.recyclerView?.adapter = adapter
}
private fun updateDialogHeight(count: Int) {
if (count > 10) {
val layoutParams = recycleView.layoutParams
layoutParams.height = 600
recycleView.layoutParams = layoutParams
}
}
private fun requestData() {
val dataService =
AudioRoomContext.get()
@@ -96,6 +107,7 @@ class RoomGameListDialog :
val cacheKey = "game_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<GameInfo>
if (!list.isNullOrEmpty()) {
updateDialogHeight(list.size)
loadData(list)
return
}
@@ -106,6 +118,7 @@ class RoomGameListDialog :
}
.subscribe { it: List<GameInfo> ->
dataService?.putData(cacheKey, it)
updateDialogHeight(it.size)
loadData(it)
}
getCompositeDisposable().add(disposable)

View File

@@ -10,6 +10,8 @@ import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chwl.app.R
import com.chwl.app.avroom.activity.CreatePKActivity
import com.chwl.app.avroom.adapter.RoomGameplayAdapter
@@ -25,6 +27,7 @@ import com.chwl.core.auth.AuthModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.anotherroompk.SingleRoomPKModel
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.core.RoomDataService
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.core.room.model.AvRoomModel
@@ -38,8 +41,11 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.gson.Gson
import io.reactivex.disposables.CompositeDisposable
class RoomGameplayDialog :
BottomSheetDialogFragment() {
class RoomGameplayDialog : BottomSheetDialogFragment() {
var isOnlyPK = false
private lateinit var recycleView: RecyclerView
private var binding: RoomGameplayDialogBinding? = null
private var compositeDisposable: CompositeDisposable? = null
private val adapter = RoomGameplayAdapter()
@@ -68,6 +74,10 @@ class RoomGameplayDialog :
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
val recyclerView: RecyclerView = view.findViewById(R.id.recyclerView)
recycleView = recyclerView
switchStatus(0)
requestData()
}
@@ -96,28 +106,46 @@ class RoomGameplayDialog :
}
private fun requestData() {
val dataService =
AudioRoomContext.get()
?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
val cacheKey = "gameplay_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<RoomIcon>
if (!list.isNullOrEmpty()) {
loadSuccess(list)
return
if (isOnlyPK) {
loadSuccess(arrayListOf())
} else {
val dataService =
AudioRoomContext.get()
?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
val cacheKey = "gameplay_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<RoomIcon>
if (!list.isNullOrEmpty()) {
updateDialogHeight(list.size)
loadSuccess(list)
return
}
val disposable = AvRoomModel.get().roomGamePlayList
.doOnError {
loadFail(it)
}
.subscribe { it: List<RoomIcon> ->
dataService?.putData(cacheKey, it)
updateDialogHeight(it.size)
loadSuccess(it)
}
getCompositeDisposable().add(disposable)
}
}
private fun updateDialogHeight(count: Int) {
if (count > 10) {
val layoutParams = recycleView.layoutParams
layoutParams.height = 600
recycleView.layoutParams = layoutParams
}
val disposable = AvRoomModel.get().roomGamePlayList
.doOnError {
loadFail(it)
}
.subscribe { it: List<RoomIcon> ->
dataService?.putData(cacheKey, it)
loadSuccess(it)
}
getCompositeDisposable().add(disposable)
}
private fun loadSuccess(list: List<RoomIcon>?) {
val finalList = getLocalList()
var finalList = mutableListOf<RoomGameplayItem>()
if (isOnlyPK) {
finalList = getLocalList()
}
list?.let {
finalList.addAll(list.map {
RoomGameplayItem.RoomIconItem(it) { dialog, item ->
@@ -244,12 +272,12 @@ class RoomGameplayDialog :
private fun getLocalList(): MutableList<RoomGameplayItem> {
val list = ArrayList<RoomGameplayItem>()
// getPkItem()?.let {
// list.add(it)
// }
// getRoomPkItem()?.let {
// list.add(it)
// }
getPkItem()?.let {
list.add(it)
}
getRoomPkItem()?.let {
list.add(it)
}
// getSingleRoomPkItem()?.let {
// list.add(it)
// }
@@ -261,10 +289,7 @@ class RoomGameplayDialog :
if (SuperAdminUtil.isSuperAdmin()) {
return null
}
if (AvRoomDataManager.get().isOpenGame) {
return null
}
if (AvRoomDataManager.get().isSingleRoom) {
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
return null
}
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
@@ -277,7 +302,7 @@ class RoomGameplayDialog :
R.string.room_PK_mode
)
val icon =
if (AvRoomDataManager.get().isOpenPKMode) R.drawable.ic_room_opt_op_pk else R.drawable.ic_room_opt_in_pk
if (AvRoomDataManager.get().isOpenPKMode) R.drawable.room_gameplay_ic_team_pk else R.drawable.room_gameplay_ic_team_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01))
@@ -299,10 +324,7 @@ class RoomGameplayDialog :
if (SuperAdminUtil.isSuperAdmin()) {
return null
}
if (AvRoomDataManager.get().isOpenGame) {
return null
}
if (AvRoomDataManager.get().isSingleRoom) {
if (AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_HOME_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_PARTY && AvRoomDataManager.get().roomType != RoomInfo.ROOMTYPE_REVELRY) {
return null
}
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo
@@ -317,7 +339,7 @@ class RoomGameplayDialog :
R.string.avroom_dialog_roomoperationdialog_04
)
val icon =
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.ic_room_opt_another_pk_in else R.drawable.ic_room_opt_another_pk_open
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.room_gameplay_ic_room_pk else R.drawable.room_gameplay_ic_room_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05))

View File

@@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.coorchice.library.utils.LogUtils;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.hjq.toast.ToastUtils;
@@ -115,8 +116,8 @@ public class RoomOperationDialog extends BottomSheetDialog {
optAdapter = new OptAdapter(context, null);
addRoomAlbum(optAdapter);
addDatingAction(optAdapter);
addPKAction(optAdapter);
addRoomPKAction(optAdapter);
// addPKAction(optAdapter);
// addRoomPKAction(optAdapter);
addSingleRoomPKAction(optAdapter);
addSendBroadcastAction(optAdapter);
// addInviteFansOptAdapter();
@@ -131,6 +132,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
// addGiftValueAction(optAdapter);
addSuperAdminAction(optAdapter);
addShieldReportAction(optAdapter);
addRoomTypeSwitchAction(optAdapter);
rvOPtList.setAdapter(optAdapter);
}
@@ -286,10 +288,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
if (SuperAdminUtil.isSuperAdmin()) {
return;
}
if (AvRoomDataManager.get().isOpenGame()) {
return;
}
if (AvRoomDataManager.get().isSingleRoom()) {
if (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_HOME_PARTY) {
return;
}
if (AvRoomDataManager.get().isManager() && !AvRoomDataManager.get().isCpRoom()) {
@@ -556,6 +555,18 @@ public class RoomOperationDialog extends BottomSheetDialog {
}
}
/**
* 房间类型切换
*
* @param optAdapter
*/
private void addRoomTypeSwitchAction(OptAdapter optAdapter) {
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
optAdapter.addData(new OptAction(R.drawable.icon_room_type_switch,
getContext().getResources().getString(R.string.room_type), () -> RoomTypeSwitchActivity.Companion.start(getContext())));
}
}
/**
* 超管管理
*/

View File

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

View File

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

View File

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

View File

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

View File

@@ -63,6 +63,7 @@ import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.public_chat.ui.message.HeadlineViewModel
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.ui.widget.ButtonItem
import com.chwl.app.ui.widget.GiftDialog
@@ -98,6 +99,8 @@ import com.chwl.core.manager.RoomEvent
import com.chwl.core.mentoring_relationship.event.MentoringStopCountingEvent
import com.chwl.core.room.anotherroompk.ShowGiftDialogEvent
import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent
import com.chwl.core.room.bean.RightBottomIconConfig
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.event.RoomAtEvent
import com.chwl.core.room.event.RoomClearScreenEvent
@@ -122,6 +125,7 @@ import com.chwl.library.common.util.LimitClickUtils
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
import com.chwl.library.rxbus.RxBus
import com.chwl.library.utils.*
import com.google.gson.Gson
import com.netease.nim.uikit.common.antispam.AntiSpamEvent
import com.netease.nimlib.sdk.StatusCode
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
@@ -650,6 +654,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
open fun updateView() {
// 更新底欄
showBottomViewForDifRole()
bottomView.notifyStateChanged()
}
/**
@@ -664,6 +669,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
bottomView.showHomePartyDownMicBottom()
}
bottomView.showInputOrIcon(isOnMic)
bottomView.updateGameEntrance()
// 更新聽筒消息
bottomView.setRemoteMuteOpen(!AudioEngineManager.get().isRemoteMute)
if (isOnMic) {
@@ -791,8 +797,24 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
override fun onClick(v: View) {
if (mClickLimit.checkForTime(500)) return
when (v.id) {
R.id.iv_config_entrance -> {
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo ?: return
val configInfo = AvRoomDataManager.get().rightBottomIconConfig ?: return
if (configInfo.skipType == 1) {
playConfigWeb(configInfo.skipUrl)
} else if (configInfo.skipType == 2) {
playConfigBaishunGame(configInfo)
}
}
R.id.iv_game -> {
RoomGameListDialog().show(childFragmentManager, "GAME_LIST")
val dialog = RoomGameplayDialog()
dialog.isOnlyPK = false
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
}
R.id.input_send -> {
sendMsg()
@@ -806,6 +828,38 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
}
private fun playConfigWeb(url: String) {
CommonWebViewActivity.start(mContext, url)
}
private fun playConfigBaishunGame(configInfo: RightBottomIconConfig) {
val roomIcon: RoomIcon = RoomIcon(
skipContent = configInfo.skipUrl,
skipType = 3,
showType = 1,
code = "BAISHUN",
ruleValue = configInfo.reserve)
try {
val url = roomIcon.skipContent
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
roomIcon.ruleValue,
RoomIcon.RuleValueBean::class.java
)
val config = Gson().fromJson<BaiShunGameConfig>(
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun sendMsg() {
val message = inputEdit.text.toString().trim()
if (isPublicMessageTab()) {
@@ -1433,14 +1487,19 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
RoomMsgActivity.start(mContext)
}
override fun onRoomGameplayClick() {
val dialog = RoomGameplayDialog()
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
override fun onRoomGameplayClick(isOnlyPK: Boolean) {
if (isOnlyPK) {
val dialog = RoomGameplayDialog()
dialog.isOnlyPK = isOnlyPK
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
} else {
RoomGameListDialog().show(childFragmentManager, "GAME_LIST")
}
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
}
}

View File

@@ -18,6 +18,7 @@ import com.chwl.app.avroom.game.OnGameStatusChangeListener
import com.chwl.app.avroom.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.GameRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.view.IGameRoomView
import com.chwl.app.databinding.FragmentGameRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
@@ -115,10 +116,14 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
dialogManager.showOkCancelDialog(
getString(R.string.room_switch_standard_room_tips)
) {
var type = AvRoomDataManager.get().mCurrentRoomInfo?.oldType
if (type == null || type <= 0) {
type = RoomInfo.ROOMTYPE_HOME_PARTY
}
OpenRoomHelper.updateRoomInfo(
baseActivity,
AvRoomDataManager.get().mCurrentRoomInfo,
RoomInfo.ROOMTYPE_HOME_PARTY,
type,
0,
false
)
@@ -271,5 +276,6 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
super.initWidget()
registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
}

View File

@@ -15,8 +15,10 @@ import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.chwl.app.avroom.activity.RoomTitleEditActivity;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.app.ui.widget.GiftDialog;
import com.chwl.app.ui.widget.UserInfoDialog;
@@ -117,7 +119,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
if (roomFragment instanceof HomePartyRoomFragment) {
((HomePartyRoomFragment) roomFragment).onNewIntent(intent);
}
}
@Override
@@ -193,6 +194,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onSetListener() {
gameMainBinding.ivRoomNotice.setOnClickListener(this);
roomMore.setOnClickListener(this);
ivFollowRoom.setOnClickListener(this);
// ivRoomShare.setOnClickListener(this);
@@ -359,8 +361,18 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
tempFragment = SingleRoomFragment.newInstance();
}
break;
case RoomInfo.ROOMTYPE_PARTY:
if (!(tempFragment instanceof PartyRoomFragment)) {
tempFragment = PartyRoomFragment.Companion.newInstance();
}
break;
case RoomInfo.ROOMTYPE_REVELRY:
if (!(tempFragment instanceof RevelryRoomFragment)) {
tempFragment = RevelryRoomFragment.Companion.newInstance();
}
break;
default:
if (!(tempFragment instanceof HomePartyRoomFragment)) {
if (tempFragment == null || !(tempFragment.getClass().getSimpleName().equals(HomePartyRoomFragment.class.getSimpleName()))) {
tempFragment = HomePartyRoomFragment.newInstance();
}
break;
@@ -390,6 +402,12 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
ivFollowRoom.setImageResource(AvRoomDataManager.get().isRoomFans ? R.drawable.room_ic_collect_yes : R.drawable.room_ic_collect_no);
setIdOnlineData();
if (AvRoomDataManager.get().getRoomType() != RoomInfo.ROOMTYPE_GAME) {
gameMainBinding.ivRoomNotice.setVisibility(View.VISIBLE);
} else {
gameMainBinding.ivRoomNotice.setVisibility(View.GONE);
}
}
}
@@ -411,6 +429,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_room_notice:
showRoomIntroduction(AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin());
break;
case R.id.room_more:
int gravity = Gravity.END;
if(UiUtils.INSTANCE.isRtl(requireContext())){
@@ -572,4 +593,22 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
}
private void showRoomIntroduction(Boolean modify) {
var isModify = modify;
RoomInfo info = AvRoomDataManager.get().mCurrentRoomInfo;
if (info == null) {
return;
}
if (SuperAdminUtil.isSuperAdmin()) {
isModify = false;
}
if (isModify) {
RoomTitleEditActivity.startForResult(getActivity(), info.getRoomDesc(), info.getIntroduction());
} else {
DialogFragment dialogFragment =
RoomTitleDialogFragment.getInstance(info.getRoomDesc(), info.getIntroduction());
dialogFragment.show(requireActivity().getSupportFragmentManager(), "roomTitle");
}
}
}

View File

@@ -4,14 +4,24 @@ import android.annotation.SuppressLint;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPkDialog;
import com.chwl.app.avroom.headline.RoomHeadlineWidget;
import com.chwl.app.avroom.online.RoomOnlineWidget;
import com.chwl.app.avroom.rank.RoomRankNumberWidget;
import com.chwl.app.music.widget.MusicPlayerView;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.core.room.bean.RightBottomIconConfig;
import com.chwl.core.room.bean.RoomIcon;
import com.chwl.core.room.core.RoomDataService;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.support.room.AudioRoomContext;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
@@ -25,12 +35,9 @@ import com.chwl.app.avroom.anotherroompk.RoomPkForceFinishDialog;
import com.chwl.app.avroom.anotherroompk.RoomPkReceivedDialog;
import com.chwl.app.avroom.dialog.MicQueueDialog;
import com.chwl.app.avroom.dialog.PKMicQueueDialog;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.PKScoreBoardDialog;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.avroom.widget.PKBoardView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.FragmentAvRoomGameBinding;
@@ -78,6 +85,7 @@ import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
/**
* 轰趴房间
@@ -87,10 +95,10 @@ import io.reactivex.disposables.Disposable;
*/
@CreatePresenter(HomePartyPresenter.class)
public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, HomePartyPresenter> implements
IHomePartyView, PKBoardView.OnActionListener {
IHomePartyView, RoomTeamPkDialog.OnActionListener {
private long myUid;
private PKBoardView pkBoardView;
private RoomTeamPkDialog teamPkDialog;
private Disposable mDisposable;
private FragmentAvRoomGameBinding gameBinding;
/**
@@ -100,6 +108,8 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private PKMicQueueDialog pkMicQueueDialog;
private Disposable roomPkOrderDisposable;
private boolean hasBaishunGames;
public static HomePartyRoomFragment newInstance() {
HomePartyRoomFragment roomFragment = new HomePartyRoomFragment();
Bundle bundle = new Bundle();
@@ -121,8 +131,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setKtvModel(false);
gameBinding.playTogether.setVisibility(View.GONE);
microView = mView.findViewById(R.id.micro_view);
pkBoardView = mView.findViewById(R.id.layout_pk_board);
pkBoardView.setOnActionListener(this);
gameBinding.ivTeamPk.setOnClickListener(this);
}
@Override
@@ -136,6 +145,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
super.initWidget();
registerWidget(RoomOnlineWidget.class.getSimpleName(), gameBinding.onlineWidget);
registerWidget(RoomHeadlineWidget.class.getSimpleName(), gameBinding.headlineWidget);
registerWidget(RoomRankNumberWidget.class.getSimpleName(), gameBinding.rankNumberWidget);
}
@SuppressLint("CheckResult")
@@ -148,6 +158,28 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
updateQueuingMicBtn();
updatePkScoreBoard();
initRoomPkOrder(AvRoomDataManager.get().showPkBeginTime, AvRoomDataManager.get().pkBeginTime);
requestData();
}
private void requestData() {
RoomDataService dataService = (RoomDataService) AudioRoomContext.Companion.get().findAbility(RoomDataService.class.getSimpleName());
String cacheKey = "gameplay_list#" + hashCode();
Disposable disposable = AvRoomModel.get().getRoomGamePlayList().doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
hasBaishunGames = false;
updateConfigButtonArea();
}
}).subscribe(new Consumer<List<RoomIcon>>() {
@Override
public void accept(List<RoomIcon> roomIcons) throws Exception {
if (dataService != null) {
dataService.putData(cacheKey, roomIcons);
}
hasBaishunGames = roomIcons.size() > 0;
updateConfigButtonArea();
}
});
}
@Override
@@ -196,6 +228,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setRoomInfo(AvRoomDataManager.get().mCurrentRoomInfo);
updateQueuingMicBtn();
updatePkScoreBoard();
updateConfigButtonArea();
getMvpPresenter().updateLeaveMode();
break;
case RoomEvent.ENTER_ROOM:
@@ -257,8 +290,12 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
//PK 开始弹出大记分板
if (PkModel.get().getCurPkInfo() != null
&& PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_IN_PK) {
PKScoreBoardDialog pkScoreBoardDialog = new PKScoreBoardDialog(getContext());
pkScoreBoardDialog.show();
showTeamPkDialog();
}
break;
case RoomEvent.PK_CREATE:
if (PkModel.get().getCurPkInfo() != null) {
showTeamPkDialog();
}
break;
case RoomEvent.ROOM_PK_INVITE:
@@ -345,14 +382,14 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private void updatePkScoreBoard() {
if (AvRoomDataManager.get().isOpenPKMode()) {
if (pkBoardView.getVisibility() == View.GONE) {
if (gameBinding.ivTeamPk.getVisibility() == View.GONE) {
// 通知更新背景
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(true);
EventBus.getDefault().post(pkStateEvent);
showTeamPkDialog();
}
pkBoardView.setVisibility(View.VISIBLE);
gameBinding.ivTeamPk.setVisibility(View.VISIBLE);
//这里通过接口获取PK 详情 更新pk 记分板
if (PkModel.get().getCurPkInfo() == null) {
PkModel.get().loadPKDataByRoomId(
@@ -366,7 +403,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
@Override
public void onSuccess(RoomPkData roomPkData) {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
@Override
@@ -375,7 +414,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
});
} else {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
//取消掉正在进行的龙珠
if (AvRoomDataManager.get().haveStartDragon) {
@@ -387,23 +428,41 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
} else {
if (pkBoardView.getVisibility() == View.VISIBLE) {
if (gameBinding.ivTeamPk.getVisibility() == View.VISIBLE) {
// 通知更新bg
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(false);
EventBus.getDefault().post(pkStateEvent);
}
pkBoardView.setVisibility(View.GONE);
}
if (SuperAdminUtil.isSuperAdmin()) {
pkBoardView.setVisibility(View.GONE);
gameBinding.ivTeamPk.setVisibility(View.GONE);
dismissTeamPkDialog();
}
//龙珠相关界面设置
setDragonView();
}
private void showTeamPkDialog() {
if (getActivity() == null) {
return;
}
if (teamPkDialog != null) {
if (teamPkDialog.isResumed()) {
return;
}
dismissTeamPkDialog();
}
teamPkDialog = new RoomTeamPkDialog();
teamPkDialog.setOnActionListener(this);
teamPkDialog.safeShow(requireActivity().getSupportFragmentManager(), this, null);
}
private void dismissTeamPkDialog() {
if (teamPkDialog != null) {
teamPkDialog.safeDismiss();
teamPkDialog = null;
}
}
private void cleanDragonBar() {
LogUtil.e("cleanDragonBar");
@@ -440,6 +499,13 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.ivQueuingMicro.setVisibility(View.GONE);
gameBinding.bottomView.updateQueuingMicButton();
}
updateMicroView();
changeModelShowView();
refreshDatingNextStatus();
// updateConfigButtonArea();
}
protected void updateMicroView(){
String microType = microView.getAdapter() == null ? BaseMicroViewAdapter.MICRO_TYPE_NULL : microView.getAdapter().microType();
if (AvRoomDataManager.get().isCpRoom()) {
if (!microType.equals(BaseMicroViewAdapter.MICRO_TYPE_CP)) {
@@ -457,21 +523,41 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
if (microView.getAdapter() != null) {
microView.getAdapter().notifyDataSetChanged();
}
changeModelShowView();
refreshDatingNextStatus();
if (AvRoomDataManager.get().isDatingMode()) {
gameBinding.ivGame.setVisibility(View.GONE);
} else {
gameBinding.ivGame.setVisibility(View.VISIBLE);
}
}
public void updateMicBtn() {
super.updateMicBtn();
refreshDatingNextStatus();
}
public void updateConfigButtonArea() {
RightBottomIconConfig configModel = AvRoomDataManager.get().rightBottomIconConfig;
if (configModel == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
if (configModel.getIcon1Url() == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
ImageLoadUtils.loadAvatar(configModel.getIcon1Url(), gameBinding.ivConfigEntrance);
gameBinding.ivConfigEntrance.setVisibility(View.VISIBLE);
}
if (configModel.getIcon2Url() != null) {
ImageLoadUtils.loadAvatar(configModel.getIcon2Url(), gameBinding.ivGame);
}
}
if (AvRoomDataManager.get().isDatingMode()) {
gameBinding.ivGame.setVisibility(View.GONE);
} else {
if (hasBaishunGames) {
gameBinding.ivGame.setVisibility(View.VISIBLE);
}else {
gameBinding.ivGame.setVisibility(View.GONE);
}
}
}
private void updateQueuingMicBtn() {
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
bottomView.updateQueuingMicButton();
@@ -530,10 +616,10 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
mDisposable.dispose();
mDisposable = null;
}
dismissTeamPkDialog();
super.onDestroy();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onDatingSelectUserEvent(DatingSelectUserEvent event) {
if (getMvpPresenter() != null) {
@@ -565,6 +651,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.iv_team_pk:
showTeamPkDialog();
break;
case R.id.play_together:
if (!DynamicFaceModel.get().isShowingFace()) {
FaceInfo faceInfo = DynamicFaceModel.get().getPlayTogetherFace();
@@ -690,12 +779,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
@Override
public void onEndPK() {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), PkModel.get().getCurPkInfo());
pkResultDialog.show();
}
@Override
public void onShowPKMicQueueDialog() {
if (PkModel.get().isFighting()) {
@@ -1024,4 +1107,16 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
super.onInitMusicPlayerView(view);
view.linkIconView(gameBinding.ivMusic, gameBinding.ivMusic);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
RoomPkData data = PkModel.get().getCurPkInfo();
if (data == null) {
return;
}
if (event.getType() == PKDataUpdateEvent.TYPE_RESULT && data.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
RoomTeamPKResultDialog teamPkResultDialog = new RoomTeamPKResultDialog(getContext(), PkModel.get().getCurPkInfo());
teamPkResultDialog.show();
}
}
}

View File

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

View File

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

View File

@@ -16,6 +16,7 @@ import com.chwl.app.avroom.dialog.RequestUpMicDialog
import com.chwl.app.avroom.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.SingleRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.singleroompk.SingleRoomPkFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkReceivedDialog
@@ -238,6 +239,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
super.initWidget()
registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
override fun onInitMusicPlayerView(view: MusicPlayerView) {

View File

@@ -2,6 +2,7 @@ package com.chwl.app.avroom.headline
import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import androidx.core.view.isVisible
import androidx.databinding.DataBindingUtil
@@ -9,12 +10,15 @@ import com.chwl.app.R
import com.chwl.app.databinding.RoomHeadlineWidgetBinding
import com.chwl.app.public_chat.core.ChatRoomClient
import com.chwl.app.public_chat.core.ChatRoomClientManager
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment
import com.chwl.core.public_chat_hall.bean.HeadlineBean
import com.chwl.core.public_chat_hall.model.PublicChatModel
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomView
import com.example.lib_utils.AppUtils
import com.example.lib_utils.UiUtils
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum
@@ -44,6 +48,12 @@ class RoomHeadlineWidget : FrameLayoutRoomWidget {
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
if (UiUtils.isRtl(AppUtils.getApp())) {
binding.tvHeadlineContent.gravity = Gravity.RIGHT
}
}
override fun onStart(roomView: RoomView) {
super.onStart(roomView)
if (!isInEditMode) {
@@ -89,13 +99,11 @@ class RoomHeadlineWidget : FrameLayoutRoomWidget {
}
private fun updateHeadline(data: HeadlineBean?) {
val content = data?.content
if (data?.isValid() == true && !content.isNullOrEmpty()) {
binding.tvHeadlineContent.text = content
this.isVisible = true
} else {
this.isVisible = false
}
binding.tvHeadlineContent.text = data?.content ?: ""
binding.ivAvatar.loadAvatar(data?.avatar)
binding.tvName.text = "${data?.nick ?: ""} :"
binding.tvMoney.text = data?.payMoneyNum?.toString() ?: "0"
this.isVisible = data?.isValid() == true && !data.content.isNullOrEmpty()
}
override fun onStop() {

View File

@@ -152,7 +152,7 @@ class RoomOnlineWidget : FrameLayoutRoomWidget, RoomWidget {
private fun startUpdateOnlineTask() {
getCompositeDisposable().add(Observable.interval(
0, 10, TimeUnit.SECONDS
0, 30, TimeUnit.SECONDS
).subscribe {
refreshData()
})

View File

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

View File

@@ -32,7 +32,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.widget.OnMsgLongClickListener;
import com.chwl.app.avroom.widget.TemplateMessageAdapter;
import com.chwl.app.common.widget.CustomImageSpan;
@@ -50,7 +50,6 @@ import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.ObjectTypeHelper;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.DemoCache;
import com.chwl.core.XConstants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
import com.chwl.core.decoration.car.bean.CarInfo;
@@ -90,6 +89,7 @@ import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment;
import com.netease.nimlib.sdk.msg.attachment.ImageAttachment;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
@@ -546,16 +546,20 @@ public class PublicChatMessageView extends FrameLayout {
setMsgNotification(chatRoomMessage, tvContent, baseViewHolder.getAdapterPosition());
setVIPMessageBackground(chatRoomMessage, tvContent);
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
int first = attachment.getFirst();
int second = attachment.getSecond();
if (first == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED) {
if (second == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
setHeadlineMsg(chatRoomMessage, tvContent, attachment);
if (chatRoomMessage.getAttachment() != null && chatRoomMessage.getAttachment() instanceof CustomAttachment) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
int first = attachment.getFirst();
int second = attachment.getSecond();
if (first == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED) {
if (second == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
setHeadlineMsg(chatRoomMessage, tvContent, attachment);
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
tvContent.setText("");
}
}
} catch (UnsupportedOperationException e) {
@@ -563,6 +567,9 @@ public class PublicChatMessageView extends FrameLayout {
clearBackground(tvContent);
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
} catch (Exception e) {
clearBackground(tvContent);
tvContent.setText("");
}
}
@@ -830,7 +837,7 @@ public class PublicChatMessageView extends FrameLayout {
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MESS_SUB_ROOM_PK_RESULT) {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
RoomTeamPKResultDialog pkResultDialog = new RoomTeamPKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
pkResultDialog.show();
}
} else if (attachment instanceof RoomFollowOwnerAttachment2 && !AvRoomDataManager.get().isRoomFans) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,7 +4,7 @@ import android.annotation.SuppressLint
import android.os.Bundle
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogSingleRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.manager.AvRoomDataManager
@@ -17,7 +17,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class SingleRoomPkReceivedDialog : BaseDialog<DialogSingleRoomPkReceivedBinding>() {
class SingleRoomPkReceivedDialog : BaseDialogFragment<DialogSingleRoomPkReceivedBinding>() {
companion object {

View File

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

View File

@@ -16,11 +16,11 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.chwl.core.manager.AvRoomDataManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.app.avroom.dialog.RoomGameplayDialog;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
@@ -29,7 +29,6 @@ import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.chwl.app.R;
import com.chwl.app.avroom.BottomViewListenerWrapper;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.vip.VipMainActivity;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.core.helper.ImHelperUtils;
import com.chwl.core.manager.AvRoomDataManager;
@@ -59,6 +58,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
*/
private static final int NEW_OPTION = 1;
private static final String SH_NEW_OPTION = "sh_new_option";
private static final String NEW_OPTION_ROOM_TYPE = "new_option_room_type";
private BottomViewListenerWrapper wrapper;
private ImageView openMic;
@@ -73,6 +73,10 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
private ImageView iconMicQueue;
private ImageView iconRoomMsg;
private ImageView iconRoomBaiShunGame;
private ImageView pkGameView;
@Nullable
private PopupWindow msgTipPopupWindow;
@NonNull
@@ -104,11 +108,12 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
remoteMute = findViewById(R.id.icon_room_open_remote_mic);
faceLayout = findViewById(R.id.room_face_layout);
micLayout = findViewById(R.id.room_mic_layout);
iconRoomBaiShunGame = findViewById(R.id.icon_room_baishun_game);
iconMicQueue = (ImageView) findViewById(R.id.icon_mic_queue);
iconRoomMsg = findViewById(R.id.iv_room_message);
ImageView gameView = findViewById(R.id.icon_room_game);
pkGameView = findViewById(R.id.icon_room_PK_game);
openMic.setOnClickListener(this);
sendMsgInput.setOnClickListener(this);
sendFace.setOnClickListener(this);
@@ -117,7 +122,8 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
sendMagic.setOnClickListener(this);
iconMicQueue.setOnClickListener(this);
iconRoomMsg.setOnClickListener(this);
gameView.setOnClickListener(this);
pkGameView.setOnClickListener(this);
iconRoomBaiShunGame.setOnClickListener(this);
setMicBtnEnable(false);
setMicBtnOpen(false);
@@ -156,8 +162,11 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
if (newOption == NEW_OPTION) {
sendMagic.setImageResource(R.drawable.room_menu_ic_more);
if (isRemindOptionForRoomType()) {
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
}
} else {
sendMagic.setImageResource(R.drawable.room_menu_ic_more);
sendMagic.setImageResource(R.drawable.room_menu_ic_more_new);
}
sendMagic.setClickable(true);
sendMagic.setOnClickListener(this);
@@ -168,6 +177,29 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
}
}
private boolean isRemindOptionForRoomType() {
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
if (isReminded) {
return false;
}
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
return true;
}
return false;
}
private boolean updateOptionForRoomType() {
boolean isReminded = (boolean) SharedPreferenceUtils.get(NEW_OPTION_ROOM_TYPE, false);
if (isReminded) {
return false;
}
if (RoomTypeSwitchActivity.Companion.isCanSwitch()) {
SharedPreferenceUtils.put(NEW_OPTION_ROOM_TYPE, true);
return true;
}
return false;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onReceiveRecentContactChanged(List<RecentContact> imMessages) {
setRoomMessageUnread(IMMessageManager.get().queryUnreadMsg());
@@ -215,11 +247,31 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
}
}
public void setBaiShunBtnOpen(boolean isOpen) {
iconRoomBaiShunGame.setVisibility(isOpen ? VISIBLE : GONE);
}
public void notifyStateChanged() {
setMagicBtnEnable(true);
}
public void showHomePartyUpMicBottom() {
faceLayout.setVisibility(VISIBLE);
micLayout.setVisibility(VISIBLE);
}
public void updateGameEntrance() {
if (AvRoomDataManager.get().isManager() || SuperAdminUtil.isSuperAdmin()) {
if (!AvRoomDataManager.get().isCpRoom()) {
pkGameView.setVisibility(VISIBLE);
iconRoomBaiShunGame.setVisibility(VISIBLE);
}
} else {
pkGameView.setVisibility(GONE);
iconRoomBaiShunGame.setVisibility(GONE);
}
}
public void showHomePartyDownMicBottom() {
faceLayout.setVisibility(GONE);
micLayout.setVisibility(GONE);
@@ -295,12 +347,14 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
}
break;
case R.id.icon_room_send_magic:
int newOption = (int) SharedPreferenceUtils.get(SH_NEW_OPTION, 0);
if (newOption != NEW_OPTION) {
SharedPreferenceUtils.put(SH_NEW_OPTION, NEW_OPTION);
setMagicBtnEnable(true);
}
if (updateOptionForRoomType()) {
setMagicBtnEnable(true);
}
if (wrapper != null) {
wrapper.onMoreBtnClick();
@@ -317,9 +371,14 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
wrapper.onRoomMessageClick();
}
break;
case R.id.icon_room_game:
case R.id.icon_room_PK_game:
if (wrapper != null) {
wrapper.onRoomGameplayClick();
wrapper.onRoomGameplayClick(true);
}
break;
case R.id.icon_room_baishun_game:
if (wrapper != null) {
wrapper.onRoomGameplayClick(false);
}
break;
default:

View File

@@ -6,7 +6,6 @@ import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
@@ -14,7 +13,7 @@ import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import com.chwl.core.helper.PathHelper;
import com.chwl.library.utils.PathHelper;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;

View File

@@ -29,12 +29,9 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
@@ -42,7 +39,6 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -81,11 +77,9 @@ import com.chwl.app.sadmin.utils.SaAttachmentToMsgUtil;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.room_album.UnlockRoomAlbumPhotoDialog;
import com.chwl.library.common.util.Utils;
import com.chwl.app.common.widget.CustomAutoWidthImageSpan;
import com.chwl.app.common.widget.CustomImageSpan;
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
@@ -95,7 +89,6 @@ import com.chwl.app.ui.widget.RecyclerViewNoViewpagerScroll;
import com.chwl.app.ui.widget.UserInfoDialog;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.XConstants;
import com.chwl.core.DemoCache;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
@@ -162,7 +155,6 @@ import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.miniworld.bean.MiniWorldInWorldInfo;
import com.chwl.core.monsterhunting.bean.MonsterHuntingResult;
import com.chwl.core.monsterhunting.bean.MonsterProtocol;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.praise.PraiseModel;
@@ -2294,7 +2286,7 @@ public class MessageView extends FrameLayout {
})
.append(ResUtil.getString(R.string.gift_message_01), new ForegroundColorSpan(getResources().getColor(R.color.white)));
text.append(luckyGiftInfo.getGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
text.append(luckyGiftInfo.getFirstGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
.append(luckyGiftInfo.getUser().getNick(), new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View widget) {
@@ -2349,7 +2341,7 @@ public class MessageView extends FrameLayout {
})
.append(ResUtil.getString(R.string.gift_message_01), new ForegroundColorSpan(getResources().getColor(R.color.white)));
text.append(luckyGiftInfo.getGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
text.append(luckyGiftInfo.getFirstGiftName() + ResUtil.getString(R.string.gift_message_02), new ForegroundColorSpan(getResources().getColor(R.color.white)))
.append(luckyGiftInfo.getUser().getNick(), new ForegroundColorSpan(roomTipNickColor), new OriginalDrawStatusClickSpan() {
@Override
public void onClick(@NonNull View widget) {
@@ -2919,7 +2911,7 @@ public class MessageView extends FrameLayout {
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MESS_SUB_ROOM_PK_RESULT) {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
RoomTeamPKResultDialog pkResultDialog = new RoomTeamPKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
pkResultDialog.show();
}
} else if (attachment instanceof RoomFollowOwnerAttachment2 && !AvRoomDataManager.get().isRoomFans) {

View File

@@ -1,448 +0,0 @@
package com.chwl.app.avroom.widget;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.avroom.dialog.PKScoreBoardDialog;
import com.chwl.app.avroom.dialog.PKSelectPeopleDialog;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.room.pk.bean.PKMemberInfo;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.RoomPKInvitedUpMicMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.pk.event.PKTimeFinishEvent;
import com.chwl.core.room.pk.event.PKTimeTickEvent;
import com.chwl.core.room.pk.model.PkModel;
import com.chwl.library.utils.FormatUtils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* @author jack
* @Description
* @Date 2019/1/8
*/
public class PKBoardView extends RelativeLayout implements View.OnClickListener {
public PKBoardView(Context context) {
super(context);
init();
}
public PKBoardView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PKBoardView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private View llPkScoreBoard;
private View rlRedTeamAddPeople;
private TextView tvRedTeamScore;
private View rlBlueTeamAddPeople;
private TextView tvBlueTeamScore;
private TextView tvPkTimer;
private CircleImageView civRedTeamMember1;
private CircleImageView civRedTeamMember2;
private CircleImageView civRedTeamMember3;
private CircleImageView civRedTeamMember4;
private CircleImageView ivAddRedTeamMember;
private CircleImageView civBlueTeamMember1;
private CircleImageView civBlueTeamMember2;
private CircleImageView civBlueTeamMember3;
private CircleImageView civBlueTeamMember4;
private CircleImageView ivAddBlueTeamMember;
private ProgressBar pbScore;
private ImageView ivPkBegin;
private final List<CircleImageView> civRedAvatars = new ArrayList<>();
private final List<CircleImageView> civBlueAvatars = new ArrayList<>();
private void init() {
inflate(getContext(), R.layout.layout_pk_board_view, this);
if (isInEditMode()) {
return;
}
llPkScoreBoard = findViewById(R.id.root_view);
rlRedTeamAddPeople = findViewById(R.id.fl_left);
tvRedTeamScore = this.findViewById(R.id.tv_red_team_score);
rlBlueTeamAddPeople = findViewById(R.id.fl_right);
tvBlueTeamScore = this.findViewById(R.id.tv_blue_team_score);
tvPkTimer = this.findViewById(R.id.tv_pk_timer);
pbScore = findViewById(R.id.pb_score);
ivPkBegin = findViewById(R.id.iv_pk_begin);
civRedTeamMember1 = findViewById(R.id.civ_red_team_member_1);
civRedTeamMember2 = findViewById(R.id.civ_red_team_member_2);
civRedTeamMember3 = findViewById(R.id.civ_red_team_member_3);
civRedTeamMember4 = findViewById(R.id.civ_red_team_member_4);
ivAddRedTeamMember = findViewById(R.id.iv_add_red_team_member);
civBlueTeamMember1 = findViewById(R.id.civ_blue_team_member_1);
civBlueTeamMember2 = findViewById(R.id.civ_blue_team_member_2);
civBlueTeamMember3 = findViewById(R.id.civ_blue_team_member_3);
civBlueTeamMember4 = findViewById(R.id.civ_blue_team_member_4);
ivAddBlueTeamMember = findViewById(R.id.iv_add_blue_team_member);
civRedAvatars.add(civRedTeamMember1);
civRedAvatars.add(civRedTeamMember2);
civRedAvatars.add(civRedTeamMember3);
civRedAvatars.add(civRedTeamMember4);
civBlueAvatars.add(civBlueTeamMember1);
civBlueAvatars.add(civBlueTeamMember2);
civBlueAvatars.add(civBlueTeamMember3);
civBlueAvatars.add(civBlueTeamMember4);
updateView();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
EventBus.getDefault().register(this);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
EventBus.getDefault().unregister(this);
}
public void updateView() {
if (PkModel.get().isFighting()) {
long countDownTime = PkModel.get().getCurPkInfo().getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format(Locale.getDefault(), "%1$02d:%2$02d", countDownTime / 60, countDownTime % 60));
ivAddRedTeamMember.setVisibility(GONE);
ivAddBlueTeamMember.setVisibility(GONE);
ivPkBegin.setVisibility(GONE);
rlRedTeamAddPeople.setOnClickListener(null);
rlBlueTeamAddPeople.setOnClickListener(null);
tvPkTimer.setOnClickListener(null);
llPkScoreBoard.setOnClickListener(this);
showTeamAvatars();
PKTeamInfo blueTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (blueTeamInfo != null) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeamInfo.getScore()));
}
PKTeamInfo redTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
if (redTeamInfo != null) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeamInfo.getScore()));
}
if (redTeamInfo != null && blueTeamInfo != null) {
long totalScore = redTeamInfo.getScore() + blueTeamInfo.getScore();
if (totalScore > 0) {
int percent = (int) ((float) redTeamInfo.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
} else {
tvPkTimer.setText(ResUtil.getString(R.string.avroom_widget_pkboardview_01));
if (!isTeamHaveMember(PKTeamInfo.TEAM_RED)) {
ivAddRedTeamMember.setVisibility(VISIBLE);
} else {
ivAddRedTeamMember.setVisibility(GONE);
}
if (!isTeamHaveMember(PKTeamInfo.TEAM_BLUE)) {
ivAddBlueTeamMember.setVisibility(VISIBLE);
} else {
ivAddBlueTeamMember.setVisibility(GONE);
}
pbScore.setProgress(50);
showTeamAvatars();
rlRedTeamAddPeople.setOnClickListener(this);
rlBlueTeamAddPeople.setOnClickListener(this);
if (AvRoomDataManager.get().isManager()) {
ivPkBegin.setVisibility(VISIBLE);
ivPkBegin.setOnClickListener(this);
} else {
ivPkBegin.setVisibility(GONE);
}
llPkScoreBoard.setOnClickListener(null);
RoomPkData roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData != null &&
(roomPkData.getPkStatus() == RoomPkData.PK_STATUS_BEFORE_PK || roomPkData.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK)) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
}
}
private boolean isTeamHaveMember(int teamId) {
for (PKMemberInfo pkMemberInfo : PkModel.get().getPkMemberInfoList()) {
if (pkMemberInfo.getTeamId() == teamId) {
return true;
}
}
return false;
}
public void showTeamAvatars() {
List<PKMemberInfo> pkMemberInfoList = PkModel.get().getPkMemberInfoList();
for (CircleImageView civRedAvatar : civRedAvatars) {
civRedAvatar.setVisibility(GONE);
}
for (CircleImageView civBlueAvatar : civBlueAvatars) {
civBlueAvatar.setVisibility(GONE);
}
int redIndex = 0;
int blueIndex = 0;
for (int i = 0; i < pkMemberInfoList.size(); i++) {
PKMemberInfo pkMemberInfo = pkMemberInfoList.get(i);
if (pkMemberInfo.getTeamId() == PKTeamInfo.TEAM_RED) {
if (redIndex >= civRedAvatars.size()) {
break;
}
civRedAvatars.get(redIndex).setVisibility(VISIBLE);
GlideApp.with(this)
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(civRedAvatars.get(redIndex));
redIndex++;
} else if (pkMemberInfoList.get(i).getTeamId() == PKTeamInfo.TEAM_BLUE) {
if (blueIndex >= civBlueAvatars.size()) {
break;
}
civBlueAvatars.get(blueIndex).setVisibility(VISIBLE);
GlideApp.with(this)
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(civBlueAvatars.get(blueIndex));
blueIndex++;
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeTickEvent(PKTimeTickEvent event) {
if (PkModel.get().getCurPkInfo() == null) {
return;
}
long countDownTime = PkModel.get().getCurPkInfo().getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format("%1$02d:%2$02d", countDownTime / 60, countDownTime % 60));
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeFinishEvent(PKTimeFinishEvent event) {
updateView();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
if (PkModel.get().getCurPkInfo() == null) {
return;
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_IN_PK) {
PKTeamInfo blueTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (blueTeamInfo != null) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeamInfo.getScore()));
}
PKTeamInfo redTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
if (redTeamInfo != null) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeamInfo.getScore()));
}
if (redTeamInfo != null && blueTeamInfo != null) {
long totalScore = redTeamInfo.getScore() + blueTeamInfo.getScore();
if (totalScore > 0) {
int percent = (int) ((float) redTeamInfo.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
if (onActionListener != null) {
onActionListener.onEndPK();
}
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_TERMINAL_PK_BEFORE_END) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fl_left:
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager()) {
//已经排麦不操作
if (!PkModel.get().getPkMemberInfoList().isEmpty() && AvRoomDataManager.get().myIsInQueue) {
// Toast.makeText(getContext(), ResUtil.getString(R.string.avroom_widget_pkboardview_02), Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort(ResUtil.getString(R.string.avroom_widget_pkboardview_03));
return;
}
if (onActionListener != null) {
onActionListener.onShowPKMicQueueDialog();
}
return;
}
//添加红队人员
PKSelectPeopleDialog selectRedDialog = new PKSelectPeopleDialog(getContext(), PKTeamInfo.TEAM_RED, PkModel.get().getPkMemberInfoList());
selectRedDialog.setOnSelectPeopleListener(new PKSelectPeopleDialog.OnSelectPeopleListener() {
@Override
public void onSelectPeople(List<PKSelectPeopleDialog.MicEntity> micEntityList) {
//更新队伍,麦序,显示头像
List<RoomPKInvitedUpMicMember> upMicMemberList = new ArrayList<>();
for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue;
}
RoomPKInvitedUpMicMember roomPKInvitedUpMicMember = new RoomPKInvitedUpMicMember();
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_RED);
} else {
if (TextUtils.isEmpty(micEntity.uid)) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_NONE);
} else {
int teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid);
roomPKInvitedUpMicMember.setGroupType(
teamId == PKTeamInfo.TEAM_RED ? PKTeamInfo.TEAM_NONE : teamId);
}
}
roomPKInvitedUpMicMember.setUid(micEntity.uid);
roomPKInvitedUpMicMember.setNick(micEntity.nick);
SparseArray<RoomQueueInfo> micQueue = AvRoomDataManager.get().mMicQueueMemberMap;
//设置坑位的位置
for (int i = 0; i < micQueue.size(); i++) {
int key = micQueue.keyAt(i);
RoomQueueInfo roomQueueInfo = micQueue.get(key);
if (roomQueueInfo.mChatRoomMember != null
&& roomQueueInfo.mChatRoomMember.getAccount().equals(micEntity.uid)) {
roomPKInvitedUpMicMember.setPosition(key);
}
}
upMicMemberList.add(roomPKInvitedUpMicMember);
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError(throwable -> SingleToastUtil.showToastShort(throwable.getMessage()))
.subscribe();
}
});
selectRedDialog.show();
break;
case R.id.fl_right:
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager()) {
//已经排麦不操作
if (!PkModel.get().getPkMemberInfoList().isEmpty() && AvRoomDataManager.get().myIsInQueue) {
return;
}
if (onActionListener != null) {
onActionListener.onShowPKMicQueueDialog();
}
return;
}
//添加蓝队人员
PKSelectPeopleDialog selectBlueDialog = new PKSelectPeopleDialog(getContext(), PKTeamInfo.TEAM_BLUE, PkModel.get().getPkMemberInfoList());
selectBlueDialog.setOnSelectPeopleListener(micEntityList -> {
//更新队伍,麦序,显示头像
List<RoomPKInvitedUpMicMember> upMicMemberList = new ArrayList<>();
for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue;
}
RoomPKInvitedUpMicMember roomPKInvitedUpMicMember = new RoomPKInvitedUpMicMember();
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_BLUE);
} else {
int teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid);
roomPKInvitedUpMicMember.setGroupType(
teamId == PKTeamInfo.TEAM_BLUE ? PKTeamInfo.TEAM_NONE : teamId);
}
roomPKInvitedUpMicMember.setUid(micEntity.uid);
roomPKInvitedUpMicMember.setNick(micEntity.nick);
SparseArray<RoomQueueInfo> micQueue = AvRoomDataManager.get().mMicQueueMemberMap;
//设置坑位的位置
for (int i = 0; i < micQueue.size(); i++) {
int key = micQueue.keyAt(i);
RoomQueueInfo roomQueueInfo = micQueue.get(key);
if (roomQueueInfo.mChatRoomMember != null &&
roomQueueInfo.mChatRoomMember.getAccount().equals(micEntity.uid)) {
roomPKInvitedUpMicMember.setPosition(key);
}
}
upMicMemberList.add(roomPKInvitedUpMicMember);
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError(throwable -> SingleToastUtil.showToastShort(throwable.getMessage()))
.subscribe();
});
selectBlueDialog.show();
break;
case R.id.iv_pk_begin:
// 开始PK 倒计时
if (onActionListener != null) {
onActionListener.onBeginPK();
}
break;
case R.id.root_view:
//pk中点击pk 面板
if (PkModel.get().isFighting()) {
PKScoreBoardDialog pkScoreBoardDialog = new PKScoreBoardDialog(getContext());
pkScoreBoardDialog.show();
}
break;
default:
break;
}
}
private OnActionListener onActionListener;
public void setOnActionListener(OnActionListener onActionListener) {
this.onActionListener = onActionListener;
}
public interface OnActionListener {
void onBeginPK();
void onEndPK();
void onShowPKMicQueueDialog();
}
}

View File

@@ -0,0 +1,46 @@
package com.chwl.app.avroom.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.databinding.LayoutRoomTeamPkUserListViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.room.pk.bean.PKMemberInfo
class TeamPKUserListView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val binding = LayoutRoomTeamPkUserListViewBinding.inflate(LayoutInflater.from(context))
private val ivAvatars = arrayOf(binding.ivAvatar1, binding.ivAvatar2, binding.ivAvatar3)
init {
addView(binding.root)
}
fun showBlueStyle() {
binding.ivAvatarSeat1.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
binding.ivAvatarSeat2.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
binding.ivAvatarSeat3.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
}
fun updateData(data: List<String?>?) {
for (i in ivAvatars.indices) {
val item = data?.getOrNull(i)
if (item.isNullOrEmpty()) {
ivAvatars[i].isInvisible = true
} else {
ivAvatars[i].isVisible = true
ImageLoadUtils.loadImage(
context,
item,
ivAvatars[i], R.drawable.default_avatar
)
}
}
}
}

View File

@@ -7,12 +7,17 @@ import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.*
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.withResumed
import androidx.viewbinding.ViewBinding
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.trello.rxlifecycle3.components.support.RxDialogFragment
import kotlinx.coroutines.launch
import java.lang.reflect.ParameterizedType
abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
abstract class BaseDialogFragment<T : ViewBinding> : RxDialogFragment() {
val isViewLoaded: Boolean get() = _binding != null
protected var _binding: T? = null
@@ -59,6 +64,46 @@ abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
}
}
private var safeShowTask: ((FragmentManager, String?) -> Unit)? = null
fun safeShow(fragmentManager: FragmentManager, lifecycleOwner: LifecycleOwner, tag: String? = null) {
lifecycleOwner.lifecycleScope.launch {
safeShowTask = { fm, tag ->
try {
show(fm, tag)
} catch (e: Exception) {
e.printStackTrace()
}
}
lifecycleOwner.withResumed {
safeShowTask?.invoke(fragmentManager, tag)
}
}
}
fun safeDismiss() {
try {
dismissAllowingStateLoss()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onDestroy() {
super.onDestroy()
safeShowTask = null
}
override fun dismiss() {
super.dismiss()
safeShowTask = null
}
override fun dismissAllowingStateLoss() {
super.dismissAllowingStateLoss()
safeShowTask = null
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
onDismissListener?.invoke()

View File

@@ -17,7 +17,6 @@ import com.chwl.app.databinding.PhotoDialogBinding
import com.chwl.app.ui.widget.dialog.CommonTipDialog
import com.chwl.library.common.base.BaseDialogFragment
import com.chwl.library.common.photo.PhotoProvider
import com.chwl.library.common.photo.PhotoProviderNew
import com.chwl.library.common.util.PhotoCompressCallback
import com.chwl.library.common.util.PhotoCompressUtil
import com.chwl.library.common.util.PhotosCompressCallback
@@ -84,7 +83,7 @@ class PhotoDialog : BaseDialogFragment<PhotoDialogBinding>(), EasyPermissions.Pe
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
PhotoProviderNew.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
}
}
@@ -118,7 +117,7 @@ class PhotoDialog : BaseDialogFragment<PhotoDialogBinding>(), EasyPermissions.Pe
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
)
} else {
PhotoProviderNew.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
PhotoProvider.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
}
}

View File

@@ -1,72 +0,0 @@
package com.chwl.app.decoration.adapter;
import android.view.View;
import com.chwl.app.R;
import com.chwl.app.bindadapter.BaseAdapter;
import com.chwl.app.bindadapter.BindingViewHolder;
import com.chwl.app.databinding.ItemHeadWearBinding;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.noble.NobleUtil;
import com.chwl.library.utils.ListUtils;
/**
* Created by huangmeng1 on 2018/5/10.
*/
public class HeadWearShopAdapter extends BaseAdapter<HeadWearInfo> {
private int selectPosition;
public int getSelectPosition() {
return selectPosition;
}
public void setSelectPosition(int selectPosition) {
notifyItemChanged(this.selectPosition);
this.selectPosition = selectPosition;
notifyItemChanged(this.selectPosition);
}
public HeadWearShopAdapter(int layoutResId, int brid) {
super(layoutResId, brid);
}
@Override
protected void convert(BindingViewHolder helper, HeadWearInfo item) {
super.convert(helper, item);
ItemHeadWearBinding binding = (ItemHeadWearBinding) helper.getBinding();
binding.llRoot.setSelected(selectPosition == helper.getAdapterPosition());
NobleUtil.loadHeadWears(item.getPic(), binding.ivHeadWear);
binding.setSelectPosition(selectPosition == helper.getAdapterPosition());
if (item.getLabelType() == HeadWearInfo.LABEL_TYPE_NORMAL) {
binding.ivTag.setVisibility(View.GONE);
} else if (HeadWearInfo.LABEL_TYPE_NEW == item.getLabelType()) {
binding.ivTag.setVisibility(View.VISIBLE);
binding.ivTag.setImageResource(R.drawable.ic_mark_new);
} else if (HeadWearInfo.LABEL_TYPE_DISCOUNT == item.getLabelType()) {
binding.ivTag.setVisibility(View.VISIBLE);
binding.ivTag.setImageResource(R.drawable.ic_mark_discount);
} else if (HeadWearInfo.LABEL_TYPE_LIMIT == item.getLabelType()) {
binding.ivTag.setVisibility(View.VISIBLE);
binding.ivTag.setImageResource(R.drawable.ic_mark_limit);
} else if (HeadWearInfo.LABEL_TYPE_EXCLUSIVE == item.getLabelType()) {
binding.ivTag.setVisibility(View.VISIBLE);
binding.ivTag.setImageResource(R.drawable.ic_mark_exclusive);
}
binding.tvHeadName.setText(item.getName() + "");
}
public void setCarInfoHasBeenBought(HeadWearInfo carInfo) {
if (carInfo.getHeadwearId() <= 0 || ListUtils.isListEmpty(mData)) return;
int index = mData.indexOf(carInfo);
if (index == -1) return;
mData.get(index).setStatus(HeadWearInfo.STATUS_IN_USED);
notifyItemChanged(index);
}
}

View File

@@ -6,9 +6,11 @@ import com.chwl.app.R;
import com.chwl.app.bindadapter.BaseAdapter;
import com.chwl.app.bindadapter.BindingViewHolder;
import com.chwl.app.databinding.ItemMyHeadWearBinding;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.noble.NobleUtil;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.widget.SVGAView;
/**
* Created by huangmeng1 on 2018/5/11.
@@ -20,11 +22,14 @@ public class MyHeadWearAdapter extends BaseAdapter<HeadWearInfo> {
super(layoutResId, brid);
}
private SVGAView.SVGACache svgaCache = SVGAView.newCache(10);
@Override
protected void convert(BindingViewHolder helper, HeadWearInfo item) {
super.convert(helper, item);
ItemMyHeadWearBinding binding = (ItemMyHeadWearBinding) helper.getBinding();
NobleUtil.loadHeadWears(item.getPic(), binding.ivCarCover);
binding.ivCarCover.bindCache(svgaCache);
AvatarHelper.loadAvatarFrame(binding.ivCarCover, item.getFirstUrl(), item.getType());
helper.addOnClickListener(R.id.tv_used);
if (item.getLabelType() == HeadWearInfo.LABEL_TYPE_NORMAL) {

View File

@@ -0,0 +1,45 @@
package com.chwl.app.home
import androidx.lifecycle.MutableLiveData
import com.chwl.app.base.BaseViewModel
import com.chwl.core.bean.response.ListResult
import com.chwl.core.home.bean.HomeRoomCardInfo
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.model.HomeModel
class HomeMeViewModel : BaseViewModel() {
val roomInfoLiveData = MutableLiveData<HomeRoomCardInfo>()
val historyRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val collectRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
fun getMyRoomInfo() {
safeLaunch {
roomInfoLiveData.postValue(HomeModel.getMyRoomInfo())
}
}
fun getHomeHistoryList(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
historyRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeHistoryRoomList(pageNum, pageSize)
historyRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
fun getHomeCollectList(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
collectRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeMyCollectRoomList(pageNum, pageSize)
collectRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
}

View File

@@ -1,76 +1,40 @@
package com.chwl.app.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.chwl.app.base.BaseViewModel
import com.chwl.core.bean.response.ListResult
import com.chwl.core.home.bean.*
import com.chwl.core.home.model.HomeModel
import com.chwl.core.room.bean.AnchorInfo
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.utils.extension.toast
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.MutableSharedFlow
class HomeViewModel : BaseViewModel() {
private val _tabHomeLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val tabHomeLiveData: MutableLiveData<ListResult<HomeRoomInfo>?> = _tabHomeLiveData
private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
val tabRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val bannerLiveData = MutableLiveData<List<BannerInfo>?>()
private val _currentResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
val currentResourceLiveData: MutableLiveData<List<CurrentResourceInfo>?> = _currentResourceLiveData
val homeResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
val resourceJumpFlow = MutableSharedFlow<HomeRoomInfo?>()
// private val _homeChatPickLiveData = MutableLiveData<String?>()
// val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
val pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
private val _gameRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val gameRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _gameRoomLiveData
val openGameRoomLiveData = MutableLiveData<Long?>()
private val _pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
val pickRoomLiveData: MutableLiveData<HomeRoomInfo?> = _pickRoomLiveData
val anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
private val _openGameRoomLiveData = MutableLiveData<Long?>()
val openGameRoomLiveData: MutableLiveData<Long?> = _openGameRoomLiveData
val homeTabLiveData: MutableLiveData<List<HomeTagInfo>> = MutableLiveData<List<HomeTagInfo>>()
private val _concernsLiveData = MutableLiveData<List<HomeRoomInfo>>()
val concernsLiveData: LiveData<List<HomeRoomInfo>> = _concernsLiveData
private val _collectLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val collectLiveData: LiveData<ListResult<HomeRoomInfo>> = _collectLiveData
private val _tagLiveData = MutableLiveData<List<HomeTagInfo>>()
val tagLiveData: LiveData<List<HomeTagInfo>> = _tagLiveData
private val _emptyLiveData = MutableLiveData<Boolean>()
val emptyLiveData: LiveData<Boolean> = _emptyLiveData
private val _anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
val anchorInfoLiveData: MutableLiveData<AnchorInfo?> = _anchorInfoLiveData
private val _homePlayInfoLiveData = MutableLiveData<List<HomeRoomInfo>?>()
val homePlayInfoData: MutableLiveData<List<HomeRoomInfo>?> = _homePlayInfoLiveData
private val _homeHotRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val homeHotRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _homeHotRoomLiveData
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
val homeTagLiveData: MutableLiveData<List<HomeTagInfo>> = MutableLiveData<List<HomeTagInfo>>()
fun getHomeTabName(tabId: Int, pageNum: Int) {
val homeRankListLiveData = MutableLiveData<List<List<HomeRankBean>>>()
fun getTabRoomList(tabId: Int, pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
_tabHomeLiveData.value = ListResult.failed(pageNum)
tabRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeTabHome(tabId, pageNum, 20)
_tabHomeLiveData.value = ListResult.success(result, pageNum)
val result = HomeModel.getHomeTabHome(tabId, pageNum, pageSize)
tabRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
@@ -78,13 +42,13 @@ class HomeViewModel : BaseViewModel() {
/**
* 首页改版资源位
*/
fun getCurrentResourceInfo() {
fun getHomeResourceInfo() {
safeLaunch(
onError = {
_currentResourceLiveData.value = null
homeResourceLiveData.value = null
},
block = {
_currentResourceLiveData.value = HomeModel.getCurrentResource()
homeResourceLiveData.value = HomeModel.getCurrentResource()
}
)
}
@@ -92,166 +56,35 @@ class HomeViewModel : BaseViewModel() {
fun getResourceJumpInfo(id: Int) {
safeLaunch(
onError = {
_resourceJumpLiveData.value = null
resourceJumpFlow.emit(null)
it.message.toast()
},
block = {
_resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id)
resourceJumpFlow.emit(HomeModel.getResourceJumpInfo(id))
}
)
}
//
// fun getHomeChatPick() {
// safeLaunch(
// onError = {
// _homeChatPickLiveData.value = null
// it.message.toast()
// },
// block = {
// _homeChatPickLiveData.value = HomeModel.getHomeChatPick()
// }
// )
// }
fun getBannerInfo() {
safeLaunch(
onError = {
_bannerLiveData.value = null
bannerLiveData.value = null
},
block = {
_bannerLiveData.value = HomeModel.getHomeBanner("1")
bannerLiveData.value = HomeModel.getHomeBanner("1")
}
)
}
fun getTagInfo() {
fun getHomeTabInfo() {
safeLaunch {
_tagLiveData.value = HomeModel.getHomeTag()
homeTabLiveData.value = HomeModel.getNewHomeTab()
}
}
fun getGameRoom(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
it.message.toast()
_gameRoomLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getGameRoom(pageNum, pageSize)
_gameRoomLiveData.value = ListResult.success(result, pageNum)
}
)
}
fun fastPickGameRoom(mgId: Long? = null) {
safeLaunch(
onError = {
it.message.toast()
},
block = {
val homeRoomInfo = HomeModel.fastPickGameRoom(mgId)
if (homeRoomInfo?.isPick == true) {
_pickRoomLiveData.value = homeRoomInfo
} else if (homeRoomInfo?.isNeedOpenSelfRoom == true) {
_openGameRoomLiveData.value = mgId
}
}
)
}
fun getCollectRoom(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
_collectLiveData.value = ListResult.failed(pageNum)
_emptyLiveData.value = true
},
block = {
if (pageNum == 1) {
val concernsRooms = async(Dispatchers.IO) {
try {
HomeModel.getConcernsRoom()
} catch (e: Throwable) {
null
}
}
val collectRooms = async(Dispatchers.IO) {
try {
HomeModel.getCollectRoom(pageNum, pageSize)
} catch (e: Throwable) {
null
}
}
val data = concernsRooms.await()
data?.let { _concernsLiveData.value = it }
val collectList = collectRooms.await()
if (collectList == null) {
_collectLiveData.value = ListResult.failed(pageNum)
} else {
_collectLiveData.value =
ListResult.success(collectList.fansRoomList, pageNum)
}
_emptyLiveData.value = _concernsLiveData.value.isNullOrEmpty() &&
_collectLiveData.value?.data.isNullOrEmpty()
} else {
val result = HomeModel.getCollectRoom(pageNum, pageSize)
_collectLiveData.value = ListResult.success(result?.fansRoomList, pageNum)
}
}
)
}
fun requestAnchorInfo() {
safeLaunch(
onError = {
_anchorInfoLiveData.value = null
},
block = {
_anchorInfoLiveData.value = HomeModel.requestAnchorInfo()
}
)
}
fun getHomePlayV2() {
safeLaunch(
onError = {
_homePlayInfoLiveData.value = null
},
block = {
_homePlayInfoLiveData.value = HomeModel.getHomePlayV2()
}
)
}
fun getHotRoom() {
safeLaunch(
onError = {
_homeHotRoomLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getHotRoom()
_homeHotRoomLiveData.value = ListResult.success(result, 1)
}
)
}
fun getNewFriendList(gender: Int? = null) {
safeLaunch(
onError = {
_newFriendLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getNewFriendList(gender)
_newFriendLiveData.value = ListResult.success(result, 1)
}
)
}
fun getHomeTagInfo() {
fun getHomeRankList() {
safeLaunch {
homeTagLiveData.value = HomeModel.getNewHomeTag()
homeRankListLiveData.value = HomeModel.getHomeRankList()
}
}
}

View File

@@ -3,108 +3,58 @@ package com.chwl.app.home
import androidx.lifecycle.MutableLiveData
import com.chwl.app.R
import com.chwl.app.base.BaseViewModel
import com.chwl.core.UriProvider
import com.chwl.core.home.model.HomeModel
import com.chwl.core.im.custom.bean.RouterType
import com.chwl.core.room.bean.MeCenterInfo
import com.chwl.library.utils.ResUtil
class MeViewModel : BaseViewModel() {
private val _meCenterInfoLiveData = MutableLiveData<MutableList<MeCenterInfo>?>()
val meCenterInfoLiveData: MutableLiveData<MutableList<MeCenterInfo>?> = _meCenterInfoLiveData
private var menuList: List<MeCenterInfo>? = null
var donationMenuVisible = false
val menuListLiveData = MutableLiveData<List<MeCenterInfo>?>()
val donationMenu: MeCenterInfo by lazy(LazyThreadSafetyMode.NONE) {
MeCenterInfo(
icon = R.drawable.me_ic_menu_donation,
centerName = ResUtil.getString(R.string.me_donation),
skipType = RouterType.USER_DONATION
)
private var donationMenuVisible = false
fun updateDonationMenuVisible(isVisible: Boolean) {
donationMenuVisible = isVisible
if (!menuList.isNullOrEmpty()) {
menuListLiveData.value = transformMenuList(menuList)
}
}
// private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
// val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
init {
refreshData()
}
fun refreshData() {
// getBannerInfo()
requestMeCenterInfoList()
}
// private fun getBannerInfo() {
// safeLaunch(
// block = {
// _bannerLiveData.value = HomeModel.getHomeBanner("10")
// },
// onError = {
// _bannerLiveData.value = null
// }
// )
// }
private fun requestMeCenterInfoList() {
safeLaunch(
block = {
_meCenterInfoLiveData.value = requestCenterList()
},
onError = {
_meCenterInfoLiveData.value = null
fun requestMenuList() {
safeLaunch(onError = {
if (menuListLiveData.value.isNullOrEmpty()) {
menuListLiveData.postValue(transformMenuList(null))
}
)
}) {
val value = HomeModel.requestMeCenterInfoList()
menuList = value
menuListLiveData.postValue(transformMenuList(value))
}
}
private fun requestCenterList(): MutableList<MeCenterInfo>? {
private fun transformMenuList(list: List<MeCenterInfo>?): List<MeCenterInfo> {
val finalList = ArrayList<MeCenterInfo>()
if (list.isNullOrEmpty()) {
finalList.addAll(getDefaultMenuList())
} else {
finalList.addAll(list)
}
if (!donationMenuVisible) {
val donationMenuPosition = finalList.indexOfFirst {
it.skipType == RouterType.MY_DONATION
}
if (donationMenuPosition >= 0) {
finalList.removeAt(donationMenuPosition)
}
}
return finalList
}
private fun getDefaultMenuList(): MutableList<MeCenterInfo> {
return ArrayList<MeCenterInfo>().apply {
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_room,
centerName = ResUtil.getString(R.string.me_my_room),
skipType = RouterType.MY_ROOM
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_invite_fan,
centerName = ResUtil.getString(R.string.menu_my_invite),
skipType = RouterType.H5,
centerUrl = UriProvider.getInviteFan()
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_dress_shop,
centerName = ResUtil.getString(R.string.decoration_view_decorationstoreactivity_01),
skipType = RouterType.DECORATION_STORE
)
)
// add(
// MeCenterInfo(
// icon = R.drawable.me_ic_menu_revenue,
// centerName = ResUtil.getString(R.string.me_gain_recording),
// skipType = RouterType.MY_REVENUE
// )
// )
if (donationMenuVisible) {
add(donationMenu)
}
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_collect,
centerName = ResUtil.getString(R.string.my_collection),
skipType = RouterType.COLLECTION_ROOM
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_level,
centerName = ResUtil.getString(R.string.menu_my_level),
skipType = RouterType.USER_LEVEL
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_setting,

View File

@@ -1,6 +1,8 @@
package com.chwl.app.home.adapter;
import android.text.TextUtils;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
@@ -59,7 +61,8 @@ public class CommunityNoticeAdapter extends BaseQuickAdapter<CommunityNoticeInfo
}
helper.setGone(R.id.tv_label_community_notice_list, false);
helper.setText(R.id.tv_content_community_notice_list, item.getMessage());
TextView textView = helper.getView(R.id.tv_content_community_notice_list);
textView.setText(item.getMessage());
switch (item.getActionType()) {
case 1: // 评论
if (item.getTargetUid() == AuthModel.get().getCurrentUid()) {

View File

@@ -1,59 +0,0 @@
package com.chwl.app.home.adapter
import android.view.View
import android.widget.ImageView
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
/**
* create by lvzebiao @2019/11/13
*/
class HomeHotAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_recommend) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
setText(R.id.tv_online_number, item.onlineNum.toString())
setText(R.id.tv_room_title, item.title)
setText(R.id.tv_desc, item.introduction)
}
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isInvisible = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
val topView = helper.getView<ImageView>(R.id.iv_top)
if (item.isHourTop1 == 1) {
topView.setImageResource(R.drawable.home_room_bg_hour_top)
topView.visibility = View.VISIBLE
} else if (item.isWeekTop1 == 1) {
topView.setImageResource(R.drawable.home_room_bg_week_top)
topView.visibility = View.VISIBLE
} else {
topView.visibility = View.INVISIBLE
}
val tagPict = item.tagPict
val tagView = helper.getView<ImageView>(R.id.iv_tag)
if (tagPict.isNullOrEmpty()) {
tagView.isVisible = false
} else {
ImageLoadUtils.loadImage(tagView, tagPict)
tagView.isVisible = true
}
}
}

View File

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

View File

@@ -1,89 +0,0 @@
package com.chwl.app.home.adapter
import android.graphics.Color
import android.graphics.LinearGradient
import android.graphics.Shader
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.makeramen.roundedimageview.RoundedImageView
import com.chwl.app.R
import com.chwl.app.home.helper.BannerHelper
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
import com.chwl.core.utils.extension.ifNullOrEmpty
import com.chwl.library.utils.ResUtil
/**
* create by lvzebiao @2019/11/13
*/
class HomePlayAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
init {
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_home_play)
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_home_play_broadcast)
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
if (item.itemType == HomeRoomInfo.TYPE_ROOM ||
item.itemType == HomeRoomInfo.TYPE_BROADCAST
) {
helper.setText(R.id.tv_room_title, item.title)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
val tvMgName = helper.getView<TextView>(R.id.tv_mg_name)
tvMgName.text = item.mgName.ifNullOrEmpty { ResUtil.getString(R.string.home_adapter_homeplayadapter_01) }
if (item.mgName.isNullOrEmpty()) {
setGradient(tvMgName, "#FF8C5FFF", "#FFFF969B")
} else {
setGradient(tvMgName, "#FF61C4FE", "#FFA979FF")
}
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
val ivRoomImage = helper.getView<RoundedImageView>(R.id.iv_room_image)
ImageLoadUtilsV2.loadAvatar(ivRoomImage, item.avatar)
ivRoomImage.borderColor =
Color.parseColor(if (item.gender == 1) "#CCD7FF" else "#FFD0D0")
if (item.itemType == HomeRoomInfo.TYPE_BROADCAST) {
helper.setText(R.id.tv_broad_msg, item.broadMsg)
} else {
helper.setBackgroundRes(
R.id.view_bg,
if (item.gender == 1) R.drawable.bg_home_play_item_man else R.drawable.bg_home_play_item_woman
)
}
} else {
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
}
}
private fun setGradient(textView: TextView, startColor: String, endColor: String) {
val endX = textView.paint.textSize * textView.text.length
val linearGradient = LinearGradient(
0f, 0f, endX, 0f,
Color.parseColor(startColor),
Color.parseColor(endColor),
Shader.TileMode.CLAMP
)
textView.paint.shader = linearGradient
textView.invalidate()
}
}

View File

@@ -0,0 +1,62 @@
package com.chwl.app.home.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.home.bean.HomeRankBean
class HomeRankViewFlipperAdapter : BaseAdapter() {
private val list = ArrayList<List<HomeRankBean>>()
fun setNewData(newList: List<List<HomeRankBean>>) {
list.clear()
list.addAll(newList)
notifyDataSetChanged()
}
override fun getCount(): Int {
return list.size
}
override fun getItem(position: Int): List<HomeRankBean>? {
return list.getOrNull(position)
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(parent.context)
.inflate(R.layout.home_recommend_item_rank, parent, false)
view.layoutDirection = View.LAYOUT_DIRECTION_LTR
val rankView1 = view.findViewById<ImageView>(R.id.iv_rank_1)
val rankView2 = view.findViewById<ImageView>(R.id.iv_rank_2)
val rankView3 = view.findViewById<ImageView>(R.id.iv_rank_3)
val rankBorderView1 = view.findViewById<ImageView>(R.id.iv_rank_border_1)
val rankBorderView2 = view.findViewById<ImageView>(R.id.iv_rank_border_2)
val rankBorderView3 = view.findViewById<ImageView>(R.id.iv_rank_border_3)
val list = getItem(position)
loadRankData(rankView1, rankBorderView1, list?.getOrNull(0))
loadRankData(rankView2, rankBorderView2, list?.getOrNull(1))
loadRankData(rankView3, rankBorderView3, list?.getOrNull(2))
return view
}
private fun loadRankData(view: ImageView, borderView: View, data: HomeRankBean?) {
if (data == null) {
view.isVisible = false
borderView.isVisible = false
} else {
view.isVisible = true
borderView.isVisible = true
view.loadAvatar(data.avatar)
}
}
}

View File

@@ -0,0 +1,109 @@
package com.chwl.app.home.adapter
import android.graphics.Rect
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.example.lib_utils.AppUtils
import com.example.lib_utils.UiUtils
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
/**
* create by lvzebiao @2019/11/13
*/
class HomeRoomAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) {
private var micUserItemViewPool = RecycledViewPool().apply {
setMaxRecycledViews(0, 50)
}
private val isRTL = UiUtils.isRtl(AppUtils.getApp())
override fun onCreateDefViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
return super.onCreateDefViewHolder(parent, viewType).apply {
val micUserRecyclerView = this.getView<RecyclerView>(R.id.recycler_view_users)
micUserRecyclerView.setOnTouchListener { v, event -> true }
micUserRecyclerView.setRecycledViewPool(micUserItemViewPool)
micUserRecyclerView.setHasFixedSize(true)
micUserRecyclerView.layoutManager =
LinearLayoutManager(parent.context, RecyclerView.HORIZONTAL, false).apply {
this.recycleChildrenOnDetach = true
this.isSmoothScrollbarEnabled
}
micUserRecyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
val offset = AppUtils.getApp().resources.getDimensionPixelOffset(R.dimen.dp_4) * -1
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
val position = parent.getChildAdapterPosition(view)
if (position != 0) {
if (isRTL) {
outRect.right = offset
} else {
outRect.left = offset
}
}
}
})
micUserRecyclerView.adapter = HomeRoomUserAdapter()
}
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
setText(R.id.tv_online_number, item.onlineNum.toString())
setText(R.id.tv_room_title, item.title)
setText(R.id.tv_desc, item.roomDesc)
}
val micUserRecyclerView = helper.getView<RecyclerView>(R.id.recycler_view_users)
val userAdapter = micUserRecyclerView.adapter as HomeRoomUserAdapter
userAdapter.setNewData(item.micUsers)
val topView = helper.getView<ImageView>(R.id.iv_top)
if (item.isHourTop1 == 1) {
topView.setImageResource(R.drawable.home_room_bg_hour_top)
topView.visibility = View.VISIBLE
} else if (item.isWeekTop1 == 1) {
topView.setImageResource(R.drawable.home_room_bg_week_top)
topView.visibility = View.VISIBLE
} else {
topView.visibility = View.INVISIBLE
}
val tagPict = item.tagPict
val tagView = helper.getView<ImageView>(R.id.iv_tag)
if (tagPict.isNullOrEmpty()) {
tagView.isVisible = false
} else {
ImageLoadUtils.loadImage(tagView, tagPict)
tagView.isVisible = true
}
val pkView = helper.getView<SVGAImageView>(R.id.svga_pk)
if (item.isCrossPking) {
pkView.isVisible = true
if (pkView.drawable !is SVGADrawable) {
pkView.loadFromAssets("svga/home_pk.svga")
}
pkView.startAnimation()
} else {
pkView.isVisible = false
pkView.stopAnimation()
}
}
}

View File

@@ -0,0 +1,16 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.home.bean.MicUsersBean
class HomeRoomUserAdapter :
BaseQuickAdapter<MicUsersBean, BaseViewHolder>(R.layout.home_item_room_user) {
override fun convert(helper: BaseViewHolder, item: MicUsersBean?) {
val avatarView = helper.getView<ImageView>(R.id.iv_avatar)
avatarView.loadAvatar(item?.avatar)
}
}

View File

@@ -1,56 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.opensource.svgaplayer.SVGAImageView
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
/**
* create by lvzebiao @2019/11/13
*/
class HomeSingleAnchorAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_home_single_anchor) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.setText(R.id.tv_nickname, if (!CoreTextUtils.isEmptyText(item.nick)) item.nick else "")
helper.setText(
R.id.tv_room_name,
if (!CoreTextUtils.isEmptyText(item.title)) item.title else ""
)
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_avatar), item.avatar)
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_avatar_big), item.avatar, false, 8)
val ivPking = helper.getView<SVGAImageView>(R.id.iv_pking)
val ivTag = helper.getView<ImageView>(R.id.iv_tag)
ivPking.isVisible = item.isCrossPking
ivTag.isGone = item.isCrossPking
if (item.isCrossPking) {
ivPking.loadFromAssets("svga/single_room_pking.svga")
} else {
ivTag.load(item.tagPict)
}
helper.setImageResource(
R.id.iv_gender,
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
)
helper.setText(
R.id.tv_topic,
if (!CoreTextUtils.isEmptyText(item.roomDesc)) item.roomDesc else ""
)
helper.itemView.setOnClickListener {
AVRoomActivity.startForFromType(
mContext,
item.uid,
AVRoomActivity.FROM_TYPE_RECOMMEND
)
}
}
}

View File

@@ -3,9 +3,9 @@ package com.chwl.app.home.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chad.library.adapter.base.diff.BaseQuickDiffCallback
import com.chwl.app.R
import com.chwl.app.ui.im.RouterHandler
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.room.bean.MeCenterInfo
@@ -15,8 +15,35 @@ class MeCenterAdapter :
override fun convert(helper: BaseViewHolder, item: MeCenterInfo) {
item.icon?.let {
helper.getView<ImageView>(R.id.iv_pic).setImageResource(it)
} ?: let {
helper.getView<ImageView>(R.id.iv_pic).loadImage(item.androidCenterPic)
}
helper.setText(R.id.tv_name, item.centerName)
}
fun updateData(list: List<MeCenterInfo>?) {
val newList = ArrayList<MeCenterInfo>()
if (list != null) {
newList.addAll(list)
}
setNewDiffData(object : BaseQuickDiffCallback<MeCenterInfo>(newList) {
override fun areItemsTheSame(
oldItem: MeCenterInfo,
newItem: MeCenterInfo
): Boolean {
return newItem.centerId == oldItem.centerId
}
override fun areContentsTheSame(
oldItem: MeCenterInfo,
newItem: MeCenterInfo
): Boolean {
return newItem.skipType == oldItem.skipType
&& newItem.centerName == oldItem.centerName
&& newItem.centerUrl == oldItem.centerUrl
&& newItem.androidCenterPic == oldItem.androidCenterPic
}
}, true)
}
}

View File

@@ -1,47 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.opensource.svgaplayer.SVGAImageView
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
/**
* create by lvzebiao @2019/11/13
* 人气主播更多
*/
class MoreSingleAnchorAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_home_single_anchor_more) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
val ivPking = helper.getView<SVGAImageView>(R.id.iv_pking)
val ivTag = helper.getView<ImageView>(R.id.iv_tag)
ivPking.isVisible = item.isCrossPking
ivTag.isVisible = !CoreTextUtils.isEmptyText(item.tagPict) && !item.isCrossPking
if (item.isCrossPking) {
ivPking.loadFromAssets("svga/single_room_pking.svga")
} else {
ivTag.load(item.tagPict)
}
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
.setText(R.id.tv_nickname, item.nick)
.setText(R.id.tv_room_name, item.title)
.setImageResource(
R.id.iv_gender,
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
)
helper.getView<ImageView>(R.id.iv_room_avatar)
.load(item.avatar, 12f, R.drawable.default_cover)
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.uid)
}
}
}

View File

@@ -1,58 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.home.helper.BannerHelper
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
class RoomHotAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
init {
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_room_hot)
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_room_hot)
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
if (item.itemType != HomeRoomInfo.TYPE_BANNER) {
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.uid)
}
helper.getView<ImageView>(R.id.iv_room_image).load(item.avatar)
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
helper.setText(R.id.tv_room_title, item.title)
helper.setText(R.id.tv_id, "ID:${item.erbanNo}")
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
helper.getView<ImageView>(R.id.iv_room_tag).load(item.tagPict)
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
} else {
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
}
}
}

View File

@@ -1,55 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
class RoomLikeAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_like) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.roomAvatar)
setText(R.id.tv_online_number, "${item.roomOnlineNum}")
setText(R.id.tv_room_title, item.roomName)
setText(R.id.tv_id, "ID:${item.erbanNo}")
}
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.roomUid)
}
if (item.isValid) {
helper.setGone(R.id.tv_online_number, true)
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item)
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar)
} else {
helper.setGone(R.id.tv_online_number, false)
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item_disable)
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar_disable)
}
}
}

View File

@@ -7,14 +7,14 @@ import android.view.WindowManager
import android.widget.ImageView
import androidx.core.view.isGone
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogHelloMessageBinding
import com.chwl.app.ui.utils.load
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.core.channel_page.bean.HelloMessageInfo
import com.chwl.library.utils.ResUtil
class HelloMessageDialog : BaseDialog<DialogHelloMessageBinding>() {
class HelloMessageDialog : BaseDialogFragment<DialogHelloMessageBinding>() {
companion object {

View File

@@ -4,13 +4,13 @@ import android.annotation.SuppressLint
import android.os.Bundle
import android.view.WindowManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogNewUserHelloBinding
import com.chwl.app.ui.utils.load
import com.chwl.core.channel_page.bean.NewUserHelloInfo
import com.chwl.core.utils.extension.subAndReplaceDot
class NewUserHelloDialog : BaseDialog<DialogNewUserHelloBinding>() {
class NewUserHelloDialog : BaseDialogFragment<DialogNewUserHelloBinding>() {
companion object {

View File

@@ -3,12 +3,12 @@ package com.chwl.app.home.dialog
import android.annotation.SuppressLint
import android.os.Bundle
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseDialog
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRecommendRoomBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.home.bean.HomeRoomInfo
class RecommendRoomDialog : BaseDialog<DialogRecommendRoomBinding>() {
class RecommendRoomDialog : BaseDialogFragment<DialogRecommendRoomBinding>() {
companion object {

View File

@@ -1,184 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.dialog.CreateRoomDialog
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentAccompanyBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeChatAdapter
import com.chwl.app.home.adapter.RoomNewFriendsAdapter
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.core.user.UserModel
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.user.event.LoginUserInfoUpdateEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class AccompanyFragment : BaseViewBindingFragment<FragmentAccompanyBinding>() {
private lateinit var charAdapter: HomeChatAdapter
private lateinit var roomNewFriendsAdapter: RoomNewFriendsAdapter
private val homeViewModel: HomeViewModel by activityViewModels()
private lateinit var rvDelegate: RVDelegate<UserInfo>
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
initRefreshView()
initChatTab()
initHotRoomTab()
showGameGuide()
binding.ivGameGuide.setOnClickListener {
//首页_扩列聊天-创建游戏房
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.NINE),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
CreateRoomDialog().apply { setGameVisible() }.show(context)
}
}
private fun initRefreshView() {
binding.refreshLayout.setOnRefreshListener {
binding.refreshLayout.finishRefresh()
EventBus.getDefault().post(RefreshHomeDataEvent())
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initChatTab() {
charAdapter = HomeChatAdapter()
charAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = charAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_扩列聊天-用户房间
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SEVEN),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
AVRoomActivity.startForFromType(
mContext,
homePlayInfo.uid,
AVRoomActivity.FROM_TYPE_RECOMMEND
)
}
}
binding.mRecyclerChat.adapter = charAdapter
binding.mLiCreateRoom.setOnClickListener {
//首页_扩列聊天-创建普通房
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.EIGHT),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
OpenRoomHelper.openRoom(context as BaseActivity?)
}
homeViewModel.homePlayInfoData.observe(this) {
it?.let {
if (it.isNotEmpty()) {
binding.mLiCreateRoom.visibility = View.GONE
binding.nsHost.visibility = View.VISIBLE
charAdapter.setNewData(it)
} else {
binding.mLiCreateRoom.visibility = View.VISIBLE
binding.nsHost.visibility = View.GONE
}
}
}
}
private fun initHotRoomTab() {
roomNewFriendsAdapter = RoomNewFriendsAdapter()
rvDelegate = RVDelegate.Builder<UserInfo>()
.setAdapter(roomNewFriendsAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(EmptyViewHelper.createEmptyTextView(context, "暂无新朋友"))
.setLayoutManager(LinearLayoutManager(mContext))
.build()
homeViewModel.newFriendLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData()
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData()
isShield = false
}
}
private fun loadData() {
homeViewModel.getHomePlayV2()
homeViewModel.getNewFriendList()
}
private fun showGameGuide(){
val userInfo = UserModel.get().cacheLoginUserInfo
if (userInfo?.isHasPermitRoom == true) {
binding.ivGameGuide.visibility = View.GONE
} else {
binding.ivGameGuide.visibility = View.GONE
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) {
showGameGuide()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -26,6 +26,7 @@ import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.im.friend.FriendListFragment
import com.chwl.app.ui.im.recent.RecentListFragment
import com.chwl.app.ui.relation.FansListFragment
import com.chwl.app.ui.user.adapter.ContactsIndicatorAdapter
import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.Constants
@@ -43,7 +44,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
private val viewModel: HomeMessageViewModel by activityViewModels()
private val publicChatAdapter = PublicChatLaneAdapter(ArrayList())
private val stateHelper = FragmentVisibleStateHelper(this) {
private val stateHelper = FragmentVisibleStateHelper(this).start {
onVisibleChanged(it)
}
companion object {
@@ -85,7 +86,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
tagList.add(getString(R.string.layout_fragment_contact_list_04))
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
val magicIndicatorAdapter = UserInfoIndicatorAdapter(context, tagList)
val magicIndicatorAdapter = ContactsIndicatorAdapter(context, tagList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
binding.viewPager.currentItem = position
}
@@ -138,7 +139,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
}
override fun onScroll(
e1: MotionEvent,
e1: MotionEvent?,
e2: MotionEvent,
distanceX: Float,
distanceY: Float
@@ -150,7 +151,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
}
override fun onFling(
e1: MotionEvent,
e1: MotionEvent?,
e2: MotionEvent,
velocityX: Float,
velocityY: Float

View File

@@ -1,148 +1,32 @@
package com.chwl.app.home.fragment
import android.view.Gravity
import android.view.View
import androidx.core.view.isVisible
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.FragmentHomeBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeBannerAdapter
import com.chwl.app.home.dialog.RecommendRoomDialog
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.home.adapter.HomeIndicatorAdapter
import com.chwl.app.ui.search.SearchActivity
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.user.adapter.MainIndicatorAdapter
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.DemoCache
import com.chwl.core.UriProvider
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.library.utils.ListUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.zhpan.bannerview.BannerViewPager
import org.greenrobot.eventbus.EventBus
/**
首页
*/
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener,
MainIndicatorAdapter.OnItemSelectListener {
private val TAB_ID_RECOMMEND = Int.MAX_VALUE - 1
private val TAB_ID_ACCOMPANY = Int.MAX_VALUE - 2
private val tabList = mutableListOf<HomeTagInfo>()
private val tabTitleList = mutableListOf<String>()
private val homeViewModel: HomeViewModel by activityViewModels()
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener {
override fun init() {
initListener()
initTab()
initBanner()
initResource()
homeViewModel.homeTagLiveData.observe(this) {
loadTabList(transformTabList(it))
}
homeViewModel.getHomeTagInfo()
}
private fun initListener() {
binding.tvSearch.setOnClickListener(this)
binding.ivRanking.setOnClickListener(this)
binding.ivMyRoom.setOnClickListener(this)
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
EventBus.getDefault().post(RefreshHomeDataEvent())
homeViewModel.getBannerInfo()
if (binding.viewPager.adapter?.itemCount == 0) {
homeViewModel.getHomeTagInfo()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initResource(){
homeViewModel.currentResourceLiveData.observe(this) {
it?.let {
val resourceViews = arrayOf(
binding.ivResource0,
binding.ivResource1
)
if (it.size != 2) {
resourceViews.forEach {
it.isVisible = false
}
return@observe
}
resourceViews.forEach {
it.isVisible = true
}
for (i in resourceViews.indices) {
resourceViews[i].load(it[i].icon)
resourceViews[i].setOnClickListener { _ ->
when {
it[i].resourceType == 5 -> {
CommonWebViewActivity.start(context, it[i].resourceContent)
}
else -> {
dialogManager.showProgressDialog(mContext)
homeViewModel.getResourceJumpInfo(it[i].id)
}
}
}
}
}
}
homeViewModel.resourceJumpLiveData.observe(this) {
dialogManager.dismissDialog()
it?.let {
if (it.isPick) {
AVRoomActivity.start(context, it.uid)
} else {
RecommendRoomDialog.newInstance(it).show(context)
}
}
}
homeViewModel.getCurrentResourceInfo()
}
private fun initBanner() {
val bannerView: BannerViewPager<BannerInfo?> =
binding.bannerView as BannerViewPager<BannerInfo?>
homeViewModel.bannerLiveData.observe(this) {
it?.let {
if (ListUtils.isListEmpty(it)) {
bannerView.visibility = View.GONE
return@let
}
bannerView.visibility = View.VISIBLE
bannerView.adapter = HomeBannerAdapter()
bannerView.post {
binding.bannerView.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
homeViewModel.getBannerInfo()
}
override fun onClick(v: View) {
@@ -161,107 +45,31 @@ class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClic
DemoCache.saveAnchorCardView(1)
}
}
R.id.iv_ranking -> {
//首页_排行榜
CommonWebViewActivity.start(mContext, UriProvider.getRanking())
}
R.id.iv_my_room -> {
OpenRoomHelper.openRoom(baseActivity)
}
}
}
private fun initTab() {
val fragmentList = ArrayList<Fragment>()
fragmentList.add(HomeRecommendFragment())
fragmentList.add(HomeWithMeFragment())
val titleList = ArrayList<String>()
titleList.add(getString(R.string.main_tab_recommend))
titleList.add(getString(R.string.main_me))
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
val magicIndicatorAdapter = MainIndicatorAdapter(context, tabTitleList)
magicIndicatorAdapter.setOnItemSelectListener(this)
val magicIndicatorAdapter = HomeIndicatorAdapter(context, titleList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
binding.viewPager.adapter =
object : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun getItemId(position: Int): Long {
return tabList[position].id.toLong()
}
override fun containsItem(itemId: Long): Boolean {
return tabList.firstOrNull { it.id.toLong() == itemId } != null
}
override fun createFragment(position: Int): Fragment {
val itemId = getItemId(position)
return when (itemId) {
TAB_ID_RECOMMEND.toLong() -> {
RecommendFragment()
}
TAB_ID_ACCOMPANY.toLong() -> {
AccompanyFragment()
}
else -> {
return HomeTabFragment.newInstance(itemId.toInt())
}
}
}
override fun getItemCount(): Int {
return tabList.size
}
}
binding.viewPager.offscreenPageLimit = 2
binding.viewPager.adapter = CommonVPAdapter(
childFragmentManager,
lifecycle,
fragmentList
)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
loadTabList(transformTabList(emptyList()))
}
private fun transformTabList(list: List<HomeTagInfo>): List<HomeTagInfo> {
// val finalList = ArrayList<HomeTagInfo>()
// finalList.add(
// HomeTagInfo(
// TAB_ID_RECOMMEND,
// ResUtil.getString(R.string.home_fragment_homefragment_04),
// 0
// )
// )
// finalList.addAll(list)
// finalList.add(
// HomeTagInfo(
// TAB_ID_ACCOMPANY,
// ResUtil.getString(R.string.home_fragment_homefragment_07),
// 0
// )
// )
return list
}
private fun loadTabList(list: List<HomeTagInfo>) {
// 预防脏数据导致fragment复用问题
val newList = list.distinctBy {
it.id
}
val currentListId = tabList.joinToString { it.id.toString() }
val newListId = newList.joinToString { it.id.toString() }
if (currentListId == newListId) {
return
}
tabList.clear()
tabList.addAll(newList)
tabTitleList.clear()
tabTitleList.addAll(tabList.map { it.name })
binding.magicIndicator.navigator.notifyDataSetChanged()
binding.viewPager.adapter?.notifyDataSetChanged()
}
override fun onDestroyView() {
super.onDestroyView()
tabList.clear()
tabTitleList.clear()
}
override fun onItemSelect(position: Int, view: TextView?) {
binding.viewPager.currentItem = position
binding.viewPager.isUserInputEnabled = false
}
}

View File

@@ -0,0 +1,274 @@
package com.chwl.app.home.fragment
import android.view.View
import android.widget.LinearLayout
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.FragmentHomeRecommendBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeBannerAdapter
import com.chwl.app.home.adapter.HomeRankViewFlipperAdapter
import com.chwl.app.home.dialog.RecommendRoomDialog
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.search.SearchActivity
import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.DemoCache
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.library.utils.ListUtils
import com.example.lib_utils.ktx.getDrawableById
import com.zhpan.bannerview.BannerViewPager
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
/**
首页
*/
class HomeRecommendFragment : BaseViewBindingFragment<FragmentHomeRecommendBinding>(),
View.OnClickListener {
private val tabList = mutableListOf<HomeTagInfo>()
private val homeViewModel: HomeViewModel by activityViewModels()
override fun init() {
initListener()
initTab()
initBanner()
initResource()
initRank()
FragmentVisibleStateHelper(this).apply {
start {
onVisibleChanged(it, isFirstVisible)
}
}
homeViewModel.getHomeTabInfo()
homeViewModel.getBannerInfo()
homeViewModel.getHomeResourceInfo()
homeViewModel.getHomeRankList()
}
private fun initListener() {
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
childFragmentManager.fragments.forEach {
(it as? OnRefreshListener)?.onRefresh()
}
homeViewModel.getHomeRankList()
homeViewModel.getBannerInfo()
if (binding.viewPager.adapter?.itemCount == 0) {
homeViewModel.getHomeTabInfo()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initResource() {
homeViewModel.homeResourceLiveData.observe(this) {
it?.let {
val resourceViews = arrayOf(
binding.ivResource0,
binding.ivResource1
)
if (it.size != 2) {
resourceViews.forEach {
it.isVisible = false
}
binding.viewFlipper.isVisible = false
return@observe
}
binding.viewFlipper.isVisible = true
resourceViews.forEachIndexed { index, imageView ->
imageView.isVisible = true
if (index != 0) {
imageView.load(it[index].icon)
}
imageView.setOnClickListener { _ ->
when {
it[index].resourceType == 5 -> {
CommonWebViewActivity.start(context, it[index].resourceContent)
}
else -> {
dialogManager.showProgressDialog(mContext)
homeViewModel.getResourceJumpInfo(it[index].id)
}
}
}
}
}
}
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
homeViewModel.resourceJumpFlow.collectLatest {
dialogManager.dismissDialog()
it?.let {
if (it.isPick) {
AVRoomActivity.start(context, it.uid)
} else {
RecommendRoomDialog.newInstance(it).show(context)
}
}
}
}
}
}
private fun initBanner() {
val bannerView: BannerViewPager<BannerInfo?> =
binding.bannerView as BannerViewPager<BannerInfo?>
homeViewModel.bannerLiveData.observe(this) {
it?.let {
if (ListUtils.isListEmpty(it)) {
bannerView.visibility = View.GONE
return@let
}
bannerView.visibility = View.VISIBLE
bannerView.adapter = HomeBannerAdapter()
bannerView.post {
binding.bannerView.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
}
private fun initRank() {
val rankAdapter = HomeRankViewFlipperAdapter()
binding.viewFlipper.adapter = rankAdapter
binding.viewFlipper.setInAnimation(context, R.animator.home_rank_anim_in)
binding.viewFlipper.setOutAnimation(context, R.animator.home_rank_anim_out)
homeViewModel.homeRankListLiveData.observe(this) {
rankAdapter.setNewData(it ?: emptyList())
}
}
override fun onClick(v: View) {
when (v.id) {
R.id.tv_search -> {
//首页_搜索
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.ONE),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
SearchActivity.start(activity)
//为啥触发条件这么恶心
if (DemoCache.readAnchorCardView() == 0) {
DemoCache.saveAnchorCardView(1)
}
}
}
}
private fun initTab() {
binding.viewPager.adapter =
object : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun getItemId(position: Int): Long {
return tabList[position].id.toLong()
}
override fun containsItem(itemId: Long): Boolean {
return tabList.firstOrNull { it.id.toLong() == itemId } != null
}
override fun createFragment(position: Int): Fragment {
val itemId = getItemId(position)
return HomeTabRoomFragment.newInstance(itemId.toInt()).apply {
this.autoRefreshOnVisible = true
}
}
override fun getItemCount(): Int {
return tabList.size
}
}
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
homeViewModel.homeTabLiveData.observe(this) {
loadTabList(transformTabList(it))
}
}
private fun resetTabIndicator(list: List<String>) {
val commonNavigator = CommonNavigator(context)
if (list.size <= 4) {
commonNavigator.isAdjustMode = true
}
val magicIndicatorAdapter = HomeRecommendIndicatorAdapter(
context,
list
)
magicIndicatorAdapter.setOnItemSelectListener { position, _ ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
val titleContainer: LinearLayout = commonNavigator.titleContainer // must after setNavigator
titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
titleContainer.dividerPadding = resources.getDimensionPixelOffset(R.dimen.dp_15)
titleContainer.dividerDrawable = getDrawableById(R.drawable.home_recommend_tab_splitter)
binding.magicIndicator.onPageSelected(binding.viewPager.currentItem)
}
private fun transformTabList(list: List<HomeTagInfo>): List<HomeTagInfo> {
return list
}
private fun loadTabList(list: List<HomeTagInfo>) {
// 预防脏数据导致fragment复用问题
val newList = list.distinctBy {
it.id
}
val currentListId = tabList.joinToString { it.id.toString() }
val newListId = newList.joinToString { it.id.toString() }
if (currentListId == newListId) {
return
}
tabList.clear()
tabList.addAll(newList)
binding.viewPager.adapter?.notifyDataSetChanged()
resetTabIndicator(tabList.map { it.name })
}
override fun onDestroyView() {
super.onDestroyView()
tabList.clear()
}
private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) {
if (isVisible) {
if (!isFirstVisible) {
if (homeViewModel.homeResourceLiveData.value == null) {
homeViewModel.getHomeResourceInfo()
}
homeViewModel.getHomeRankList()
}
binding.viewFlipper.startFlipping()
} else {
binding.viewFlipper.stopFlipping()
}
}
}

View File

@@ -0,0 +1,102 @@
package com.chwl.app.home.fragment
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 收藏
*/
class HomeRoomCollectListFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val viewModel: HomeMeViewModel by viewModels()
private var pageNum = 1
private val pageSize = 50
companion object {
fun newInstance(): HomeRoomCollectListFragment {
return HomeRoomCollectListFragment()
}
}
override fun init() {
initListView()
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(pageSize)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
viewModel.collectRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
viewModel.getHomeCollectList(pageNum, pageSize)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -0,0 +1,102 @@
package com.chwl.app.home.fragment
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 最近访问记录
*/
class HomeRoomHistoryListFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val viewModel: HomeMeViewModel by viewModels()
private var pageNum = 1
private val pageSize = 50
companion object {
fun newInstance(): HomeRoomHistoryListFragment {
return HomeRoomHistoryListFragment()
}
}
override fun init() {
initListView()
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(pageSize)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
viewModel.historyRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
viewModel.getHomeHistoryList(pageNum, pageSize)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -1,128 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeHotAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabFragmentBinding
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* Peko首页
*/
class HomeTabFragment : BaseViewBindingFragment<HomeTabFragmentBinding>() {
private lateinit var roomHotAdapter: HomeHotAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by viewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
private var pageNum = 1
private var tabId: Int? = null
companion object {
fun newInstance(tabId: Int): HomeTabFragment {
return HomeTabFragment().apply {
arguments = Bundle().apply {
putInt("tabId", tabId)
}
}
}
}
override fun init() {
tabId = arguments?.getInt("tabId")
initHotRoomTab()
}
private fun initHotRoomTab() {
roomHotAdapter = HomeHotAdapter()
roomHotAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(20)
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, getString(R.string.data_empty)))
.setLayoutManager(LinearLayoutManager(mContext))
.build()
roomHotAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
homeViewModel.tabHomeLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
homeViewModel.getHomeTabName(tabId ?: 0, pageNum)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData(true)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -1,220 +0,0 @@
package com.chwl.app.home.fragment;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
import com.chwl.app.application.IReportConstants;
import com.chwl.app.application.ReportManager;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseFragment;
import com.chwl.app.home.adapter.HomeTopAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.core.home.bean.HomeTabMapInfo;
import com.chwl.core.home.event.RefreshHomeDataEvent;
import com.chwl.core.home.model.GameHomeModel;
import com.chwl.core.room.event.RoomShieldEvent;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.utils.ListUtils;
import com.zhpan.bannerview.BannerViewPager;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
/**
*
*/
public class HomeTabHomeFragment extends BaseFragment {
private static final Comparator<HomeTabMapInfo> comp = (o1, o2) -> {
int seq = o1.getSeq() - o2.getSeq();
return Integer.compare(seq, 0);
};
private BannerViewPager<HomeTabMapInfo> mBanner;
//是否需要刷新接口进行屏蔽房间操作
private boolean isShield = false;
public static HomeTabHomeFragment newInstance() {
HomeTabHomeFragment fragment = new HomeTabHomeFragment();
return fragment;
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_home_room_tab;
}
@Override
public void onFindViews() {
super.onFindViews();
mBanner = mView.findViewById(R.id.mBanner);
}
/**
* 请求数据
*/
@SuppressLint("CheckResult")
private void getData() {
GameHomeModel.get()
.getHomeTabHome()
.compose(RxHelper.handleSchedulers())
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe((serviceResult, throwable) -> {
if (throwable == null) {
if (ListUtils.isListEmpty(serviceResult)) {
return;
}
List<HomeTabMapInfo> roomsList = new ArrayList<>(serviceResult);//未处理的数
List<HomeTabMapInfo> randomList = new ArrayList<>();//不是置顶的
List<HomeTabMapInfo> finalList = new ArrayList<>();//最终的6条数据
for (int i = 0; i < roomsList.size(); i++) {
roomsList.get(i).setItemType(HomeTabMapInfo.TYPE_NORMAL);//对原始数据设置type
}
for (int i = 0; i < roomsList.size(); i++) {
if (roomsList.get(i).isIsTop()) {
finalList.add(roomsList.get(i));
} else {
randomList.add(roomsList.get(i));
}
}
sortSeqRoom(finalList);
refreshRoomData(finalList, randomList);
}
});
}
/**
* 刷新数据
*/
private void refreshRoomData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
mBanner.setAdapter(new HomeTopAdapter());
mBanner.post(() -> {
int width = UIUtil.getScreenWidth(mContext) - (UIUtil.dip2px(mContext, 10) * 3);
int revealWidth = width / 3;
ViewGroup.LayoutParams bannerLayoutParams = mBanner.getLayoutParams();
bannerLayoutParams.height = revealWidth + UIUtil.dip2px(mContext, 32);
mBanner.setLayoutParams(bannerLayoutParams);
setupBanner(
revealWidth,
revealWidth,
getConvertData(finalList1, randomList1)
);
});
}
private void setupBanner(
int leftRevealWidth,
int rightRevealWidth,
List<HomeTabMapInfo> list
) {
mBanner.setPageMargin(UIUtil.dip2px(mContext, 10))
.setScrollDuration(800)
.setRevealWidth(leftRevealWidth, rightRevealWidth)
.setOnPageClickListener((clickedView, position) -> {
//首页_热门房间
HashMap<String, Object> map = new HashMap<>(3);
map.put(IReportConstants.HOMEPAGE_TYPE, IReportConstants.FIVE);
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE);
ReportManager.get().reportEvent(IReportConstants.MODULE_HOMEPAGE_CLICK, map);
AVRoomActivity.startForFromType(mContext, list.get(position).getRoomUid(), AVRoomActivity.FROM_TYPE_RECOMMEND);
})
.create(list);
}
/**
* 转化房间数组不足6的加上虚位以待
*
* @param
* @return
*/
private List<HomeTabMapInfo> getConvertData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
int ROOM_COUNT = 6;//首页显示6条数据
randomList1 = randomList(randomList1);
finalList1.addAll(randomList1);
if (finalList1.size() >= ROOM_COUNT) {
finalList1 = finalList1.subList(0, ROOM_COUNT);
}
return finalList1;
}
/**
* **************************** 排序 ***********************************
*/
private void sortSeqRoom(List<HomeTabMapInfo> list) {
if (list.size() == 0) {
return;
}
Collections.sort(list, comp);
}
private List<HomeTabMapInfo> randomList(List<HomeTabMapInfo> sourceList) {
if (sourceList == null || sourceList.size() == 0) {
return sourceList;
}
ArrayList randomList = new ArrayList(sourceList.size());
do {
int randomIndex = Math.abs(new Random().nextInt(sourceList.size()));
randomList.add(sourceList.remove(randomIndex));
} while (sourceList.size() > 0);
return randomList;
}
@Override
public void initiate() {
getData();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
if(isShield){
getData();
isShield = false;
}
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
if (isResumed()) getData();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRoomShieldEvent(RoomShieldEvent event){
isShield = true;
}
}

View File

@@ -0,0 +1,113 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 首页-房间列表
*/
class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by viewModels()
var autoRefreshOnVisible = false
private var pageNum = 1
private val pageSize = 50
private var tabId: Int? = null
companion object {
fun newInstance(tabId: Int): HomeTabRoomFragment {
return HomeTabRoomFragment().apply {
arguments = Bundle().apply {
putInt("tabId", tabId)
}
}
}
}
override fun init() {
tabId = arguments?.getInt("tabId")
initListView()
if (autoRefreshOnVisible) {
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(pageSize)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
homeViewModel.tabRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
homeViewModel.getTabRoomList(tabId ?: 0, pageNum, pageSize)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -0,0 +1,114 @@
package com.chwl.app.home.fragment
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.HomeMeFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.home.bean.HomeRoomCardInfo
import com.chwl.core.home.bean.MicUsersBean
import com.example.lib_utils.ktx.singleClick
/**
首页-我的
*/
class HomeWithMeFragment : BaseViewBindingFragment<HomeMeFragmentBinding>() {
private val viewModel: HomeMeViewModel by activityViewModels()
override fun init() {
initListener()
initTab()
initObserve()
FragmentVisibleStateHelper(this).start {
if (it) {
viewModel.getMyRoomInfo()
}
}
}
private fun initListener() {
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
viewModel.getMyRoomInfo()
childFragmentManager.fragments.forEach {
(it as? SwipeRefreshLayout.OnRefreshListener)?.onRefresh()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
binding.layoutRoomCard.singleClick {
OpenRoomHelper.openRoom(baseActivity)
}
}
private fun initTab() {
val tabList = listOf(getString(R.string.lately), getString(R.string.collect))
val fragmentList = listOf(HomeRoomHistoryListFragment(), HomeRoomCollectListFragment())
val commonNavigator = CommonNavigator(context)
val magicIndicatorAdapter = HomeRecommendIndicatorAdapter(
context,
tabList
)
magicIndicatorAdapter.setOnItemSelectListener { position, _ ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
binding.magicIndicator.onPageSelected(binding.viewPager.currentItem)
binding.viewPager.offscreenPageLimit = fragmentList.size
binding.viewPager.adapter = CommonVPAdapter(
childFragmentManager,
lifecycle,
fragmentList
)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
}
private fun initObserve() {
viewModel.roomInfoLiveData.observe(this) {
updateRoomInfo(it)
}
}
private fun updateRoomInfo(roomInfo: HomeRoomCardInfo?) {
binding.tvRoomName.text = roomInfo?.title
binding.tvRoomTopic.text = roomInfo?.roomDesc
binding.ivRoomCover.load(roomInfo?.avatar ?: "")
binding.tvOnlineNumber.text = roomInfo?.onlineNum?.toString() ?: "0"
loadRoomUsers(roomInfo?.micUsers)
}
private fun loadRoomUsers(list: List<MicUsersBean>?) {
val avatarViewList = arrayOf(
binding.ivRoomUser0,
binding.ivRoomUser1,
binding.ivRoomUser2,
binding.ivRoomUser3,
binding.ivRoomUser4
)
avatarViewList.forEachIndexed { index, imageView ->
val item = list?.getOrNull(index)
if (item == null) {
imageView.setImageDrawable(null)
imageView.isGone = true
} else {
imageView.loadAvatar(item.avatar)
imageView.isVisible = true
}
}
binding.layoutRoomUserList.isGone = list.isNullOrEmpty()
}
}

View File

@@ -29,7 +29,6 @@ import com.chwl.app.module_hall.hall.activity.ModuleClanActivity
import com.chwl.app.module_hall.hall.activity.ModuleHallActivity
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.im.RouterHandler
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.relation.AttentionListActivity
import com.chwl.app.ui.relation.FansListActivity
import com.chwl.app.ui.utils.ImageLoadUtils
@@ -39,7 +38,6 @@ import com.chwl.app.view.GenderAgeTextView
import com.chwl.app.vip.VipMainActivity
import com.chwl.app.vip.VipViewModel
import com.chwl.core.auth.AuthModel
import com.chwl.core.im.custom.bean.RouterType
import com.chwl.core.initial.InitialModel
import com.chwl.core.level.UserLevelVo
import com.chwl.core.manager.IMNetEaseManager
@@ -100,9 +98,11 @@ class MeFragment : BaseFragment(), View.OnClickListener {
override fun initiate() {
EventBus.getDefault().register(this)
mBinding.rvMenu.adapter = mCenterAdapter
mCenterAdapter.setOnItemClickListener { adapter, view, position ->
mCenterAdapter.getItem(position)?.let {
RouterHandler.handle(mContext, it.skipType, it.centerUrl)
RouterHandler.handle(mContext, it.skipType?:-1, it.centerUrl)
}
}
@@ -116,7 +116,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
}
)
meViewModel.meCenterInfoLiveData.observe(viewLifecycleOwner) {
meViewModel.menuListLiveData.observe(viewLifecycleOwner) {
setCenterData(it)
}
@@ -136,20 +136,20 @@ class MeFragment : BaseFragment(), View.OnClickListener {
loadVipInfo(it)
}
FragmentVisibleStateHelper(this) {
onVisibleChanged(it)
FragmentVisibleStateHelper(this).apply {
start {
onVisibleChanged(it, isFirstVisible)
}
}
}
private fun setCenterData(list: List<MeCenterInfo>?) {
if (list.isNullOrEmpty()) {
mBinding.rvMenu.visibility = View.GONE
mBinding.layoutMenu.visibility = View.GONE
return
}
mBinding.rvMenu.visibility = View.VISIBLE
mBinding.rvMenu.adapter = mCenterAdapter
mCenterAdapter.setNewData(list)
mBinding.layoutMenu.visibility = View.VISIBLE
mCenterAdapter.updateData(list)
}
private fun onGetRelationShipEvent(event: RelationShipEvent) {
@@ -201,33 +201,9 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|| levelSep >= (initInfo?.giveDiamondExperLevel
?: 0) || levelSep >= (initInfo?.giveGiftExperLevel ?: 0)
) {
reloadMenuForDonation(true)
meViewModel.updateDonationMenuVisible(true)
} else {
reloadMenuForDonation(false)
}
}
private fun reloadMenuForDonation(isVisible: Boolean) {
meViewModel.donationMenuVisible = isVisible
val list = mCenterAdapter.data
val itemIndex = list.indexOfFirst {
it.skipType == RouterType.USER_DONATION
}
if (isVisible) {
if (itemIndex == -1) {
val index = list.indexOfFirst {
it.skipType == RouterType.MY_REVENUE
}
if (index == -1) {
mCenterAdapter.addData(meViewModel.donationMenu)
} else {
mCenterAdapter.addData(index, meViewModel.donationMenu)
}
}
} else {
if (itemIndex != -1) {
mCenterAdapter.remove(itemIndex)
}
meViewModel.updateDonationMenuVisible(false)
}
}
@@ -267,12 +243,12 @@ class MeFragment : BaseFragment(), View.OnClickListener {
fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) {
setUserData()
vipViewModel.getVipPageInfo()
meViewModel.refreshData()
}
@SuppressLint("CheckResult")
private fun reloadClanInfo(){
HallDataManager.get().requestUserClanInfo(AuthModel.get().currentUid).compose(bindToLifecycle())
private fun reloadClanInfo() {
HallDataManager.get().requestUserClanInfo(AuthModel.get().currentUid)
.compose(bindToLifecycle())
.subscribe { info: UserClanInfo? ->
val clanHallInfo = info?.asClanHall()
if (clanHallInfo != null) {
@@ -321,7 +297,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
} else {
mBinding.tvGuild.setText(R.string.me_join_guild)
mBinding.ivGuild.singleClick {
CommonWebViewActivity.start(context, familyInfo.getFullFamilyListUrl())
CommonWebViewActivity.start(context, familyInfo.getFullFamilyListUrl())
}
}
}
@@ -396,9 +372,10 @@ class MeFragment : BaseFragment(), View.OnClickListener {
private fun loadVipInfo(data: VipInfo?) {
}
private fun onVisibleChanged(isVisible: Boolean) {
private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) {
if (isVisible) {
reloadClanInfo()
meViewModel.requestMenuList()
}
}
}

View File

@@ -1,144 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.Gravity
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.coorchice.library.utils.LogUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.avroom.adapter.RoomVPAdapter
import com.chwl.app.base.BaseFragment
import com.chwl.app.databinding.FragmentPartyBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.PartyMagicIndicatorAdapter
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class PartyFragment : BaseFragment(), PartyMagicIndicatorAdapter.OnItemSelectListener {
private lateinit var mBinding: FragmentPartyBinding
private val mFragments: ArrayList<Fragment> = ArrayList()
private val mTabInfoList: ArrayList<CharSequence> = ArrayList()
private val homeViewModel: HomeViewModel by activityViewModels()
private var currentIndex = 1
companion object {
fun newInstance(): PartyFragment {
val args = Bundle()
val fragment = PartyFragment()
fragment.arguments = args
return fragment
}
}
override fun getRootLayoutId(): Int {
return R.layout.fragment_party
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
override fun onFindViews() {
mBinding = DataBindingUtil.bind(mView)!!
}
override fun initiate() {
homeViewModel.tagLiveData.observe(this) {
it?.let {
onGetHomeTagSuccess(it)
}
}
}
override fun onResume() {
super.onResume()
homeViewModel.getTagInfo()
}
private fun onGetHomeTagSuccess(info: List<HomeTagInfo>) {
var changed = false
val oldTabInfoList: List<CharSequence> = ArrayList<CharSequence>(mTabInfoList)
for (tagInfo in info) {
if (!oldTabInfoList.contains(tagInfo.name)) {
changed = true
break
}
}
//只有HomeTagInfo发生改变才刷新数据
if (changed) {
LogUtils.e("$changed:oldTabInfoList")
mTabInfoList.clear()
mFragments.clear()
for (i in info.indices) {
//过滤对象是空和没有标签名同时也没有子标签的情况
var title: CharSequence?
var fragment: Fragment?
var name = info[i].name
if (name != null) {
name = name.trim { it <= ' ' }
}
title = name
mTabInfoList.add(title)
val tabId: Int = info[i].id
fragment = when (title) {
ResUtil.getString(R.string.home_fragment_partyfragment_01) -> {
RoomLikeFragment.newInstance()
}
ResUtil.getString(R.string.home_fragment_partyfragment_02) -> {
RoomGameFragment.newInstance()
}
else -> {
RoomCommonFragment.newInstance(tabId)
}
}
mFragments.add(fragment)
}
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
val magicIndicatorAdapter = PartyMagicIndicatorAdapter(mTabInfoList)
magicIndicatorAdapter.textSize = 14
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
mBinding.magicIndicator.navigator = commonNavigator
mBinding.viewPager.offscreenPageLimit = 2
mBinding.viewPager.adapter = CommonVPAdapter(
childFragmentManager, lifecycle,
mFragments
)
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
onItemSelect(currentIndex, null)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) homeViewModel.getTagInfo()
}
override fun onItemSelect(position: Int, view: TextView?) {
currentIndex = position
mBinding.viewPager.currentItem = currentIndex
}
}

View File

@@ -1,111 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRecommendBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeHotAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class RecommendFragment : BaseViewBindingFragment<FragmentRecommendBinding>() {
private lateinit var roomHotAdapter: HomeHotAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by activityViewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
initHotRoomTab()
}
private fun initHotRoomTab() {
roomHotAdapter = HomeHotAdapter()
roomHotAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.TEN),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, ResUtil.getString(R.string.hot_recommend_empty)))
.setLayoutManager(LinearLayoutManager(mContext, RecyclerView.VERTICAL, false))
.build()
homeViewModel.homeHotRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData()
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData()
isShield = false
}
}
private fun loadData() {
homeViewModel.getHotRoom()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -1,116 +0,0 @@
package com.chwl.app.home.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomCommonBinding
import com.chwl.app.home.RoomCommonViewModel
import com.chwl.app.home.adapter.RoomCommonAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>() {
companion object {
fun newInstance(tabID: Int): RoomCommonFragment {
val args = Bundle()
args.putInt("tab_id", tabID)
val fragment = RoomCommonFragment()
fragment.arguments = args
return fragment
}
}
private val tabID: Int by lazy { arguments?.getInt("tab_id") ?: -1 }
private var pageNum: Int = 1
private val pageSize = 20
private lateinit var mAdapter: RoomCommonAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var roomCommonViewModel: RoomCommonViewModel? = null
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
val roomCommonViewModel: RoomCommonViewModel by viewModels()
this.roomCommonViewModel = roomCommonViewModel
mAdapter = RoomCommonAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
.setPageSize(20)
.setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomcommonfragment_01)))
.setRefreshLayout(binding.refreshLayout)
.setRecyclerView(binding.recyclerView)
.build()
mAdapter.setOnItemClickListener { _, _, position ->
mAdapter.getItem(position)?.let {
AVRoomActivity.start(context, it.roomUid)
}
}
mAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.recyclerView)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
roomCommonViewModel.commonRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
@SuppressLint("CheckResult")
fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
pageNum = if (isRefresh) 1 else (pageNum + 1)
roomCommonViewModel?.getCommonRoom(tabID, pageNum, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -1,126 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomGameBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.RoomGameAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
companion object {
fun newInstance(): RoomGameFragment {
val args = Bundle()
val fragment = RoomGameFragment()
fragment.arguments = args
return fragment
}
}
private lateinit var roomHotAdapter: RoomGameAdapter
private var page = 1
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val pageSize = 20
private var homeViewModel: HomeViewModel? = null
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
val homeViewModel: HomeViewModel by viewModels()
this.homeViewModel = homeViewModel
roomHotAdapter = RoomGameAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(
EmptyViewHelper.createEmptyTextView(
context,
ResUtil.getString(R.string.home_fragment_roomgamefragment_01)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.setRefreshLayout(binding.refreshLayout)
.setPageSize(pageSize)
.build()
roomHotAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
homeViewModel.gameRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
binding.tvMatch.setOnClickListener {
homeViewModel.fastPickGameRoom()
}
homeViewModel.pickRoomLiveData.observe(this) {
it?.let {
AVRoomActivity.start(mContext, it.uid)
}
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
if (isRefresh) {
page = 1
} else {
page++
}
homeViewModel?.getGameRoom(page, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -1,154 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.appbar.AppBarLayout
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomLikeBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeConcernsAdapter
import com.chwl.app.home.adapter.RoomLikeAdapter
import com.chwl.app.ui.relation.AttentionListActivity
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
companion object {
fun newInstance(): RoomLikeFragment {
val args = Bundle()
val fragment = RoomLikeFragment()
fragment.arguments = args
return fragment
}
}
private lateinit var concernsAdapter : HomeConcernsAdapter
private lateinit var likeRvDelegate: RVDelegate<HomeRoomInfo>
private lateinit var mAdapter : RoomLikeAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var pageNum = 1
private val pageSize = 20
private val homeViewModel: HomeViewModel by activityViewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
binding.appBarLayout.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
binding.refreshLayout.isEnabled = verticalOffset == 0
})
concernsAdapter = HomeConcernsAdapter()
likeRvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(concernsAdapter)
.setRecyclerView(binding.rvLike)
.setLayoutManager(GridLayoutManager(mContext,5, GridLayoutManager.VERTICAL, false))
.build()
homeViewModel.concernsLiveData.observe(this) {
likeRvDelegate.setNewData(it)
val isGone = concernsAdapter.data.isNullOrEmpty()
binding.tvMore.isGone = isGone
binding.tvLike.isGone = isGone
binding.rvLike.isGone = isGone
}
mAdapter = RoomLikeAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
.setPageSize(pageSize)
.setRefreshLayout(binding.refreshLayout)
.setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomlikefragment_01)))
.setRecyclerView(binding.rvCollect)
.build()
homeViewModel.collectLiveData.observe(this) {
rvDelegate.loadData(it)
}
mAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.rvCollect)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
homeViewModel.emptyLiveData.observe(this) {
it?.let {
binding.refreshLayout.isRefreshing = false
binding.clEmpty.isVisible = it
binding.coordinatorLayout.isVisible = !it
}
}
binding.tvGoPlay.setOnClickListener {
(parentFragment as PartyFragment).onItemSelect(1, null)
}
binding.tvMore.setOnClickListener {
AttentionListActivity.start(context)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
binding.refreshLayout.isRefreshing = true
} else {
pageNum++
}
homeViewModel.getCollectRoom(pageNum, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -35,6 +35,8 @@ import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import io.reactivex.Single;
public class OpenRoomHelper {
public static void openRoom(BaseActivity activity) {
@@ -135,6 +137,25 @@ public class OpenRoomHelper {
}
public static Single<RoomInfo> updateRoomInfoRx(RoomInfo roomInfo, int type, long gameId) {
RoomSettingModel roomSettingModel = new RoomSettingModel();
return roomSettingModel.updateRoomInfo(
roomInfo.getTitle(),
roomInfo.getRoomDesc(),
roomInfo.getIntroduction(),
roomInfo.roomPwd,
roomInfo.getRoomTypeLable(),
roomInfo.tagId,
roomInfo.getUid(),
AuthModel.get().getTicket(),
roomInfo.isHasAnimationEffect(),
roomInfo.getAudioQuality(),
roomInfo.getLimitType(),
roomInfo.isPureMode(),
type,
gameId);
}
public static void updateRoomInfo(BaseActivity activity, RoomInfo roomInfo, int type, long gameId, boolean needOpen) {
RoomSettingModel roomSettingModel = new RoomSettingModel();
roomSettingModel.updateRoomInfo(

View File

@@ -15,7 +15,12 @@ import androidx.databinding.DataBindingUtil;
import com.bumptech.glide.request.RequestOptions;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.response.result.TicketResult;
import com.chwl.core.gift.GiftModel;
import com.chwl.library.language.LanguageHelper;
import com.chwl.library.utils.SingleToastUtil;
import com.example.lib_utils.log.LogUtil;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.MainActivity;
@@ -32,6 +37,10 @@ import com.chwl.core.utils.OaidUtil;
import com.chwl.core.utils.SharedPreferenceUtils;
import com.chwl.library.common.util.DeviceUtil;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
/**
* @author xiaoyu
* @date 2017/12/30
@@ -43,8 +52,15 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
private ActivitySplashBinding mBinding;
private SplashComponent mLocalSplashVo;
private CompositeDisposable disposable = new CompositeDisposable();
// ticket状态 -1:加载失败、0:加载中、1:加载成功
private int ticketState = 0;
private volatile boolean needJump = false;
private Runnable jumpRunnable;
public static void start(Context context) {
Intent starter = new Intent(context, SplashActivity.class);
context.startActivity(starter);
@@ -72,9 +88,10 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
// 从堆栈恢复不再重复解析之前的intent
setIntent(new Intent());
}
initiate();
StatusBarUtil.transparencyBar(this);
StatusBarUtil.StatusBarLightMode(this);
initTicket();
initiate();
}
@Override
@@ -145,8 +162,12 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
}
public void jumpActivity(Intent intent) {
AccountInfo currentAccountInfo = DemoCache.readCurrentAccountInfo();
if (currentAccountInfo == null || TextUtils.isEmpty(currentAccountInfo.getAccess_token())) {
jumpRunnable = () -> jumpActivityImpl(intent);
next();
}
public void jumpActivityImpl(Intent intent) {
if (!AuthModel.get().isLogin()) {
NimMiddleActivity.openCommunity = false;
LoginPasswordActivity.start(this);
finish();
@@ -190,4 +211,53 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis
}
private void initTicket() {
ticketState = 0;
if (!AuthModel.get().isLogin()) {
ticketState = -1;
next();
return;
}
AuthModel.get().refreshTicket().subscribe(new SingleObserver<TicketResult>() {
@Override
public void onSubscribe(Disposable d) {
disposable.add(d);
}
@Override
public void onSuccess(TicketResult ticketResult) {
LogUtil.d("SplashActivity", "initTicket onSuccess", false);
onTicketSuccess();
ticketState = 1;
next();
}
@Override
public void onError(Throwable throwable) {
LogUtil.d("SplashActivity", "initTicket throwable:" + throwable.getMessage(), false);
SingleToastUtil.showToast(throwable.getMessage());
AuthModel.get().reset();
ticketState = -1;
next();
}
});
}
private void onTicketSuccess() {
GiftModel.get().tryLoadGiftList();
}
private void next() {
if (ticketState != 0 && jumpRunnable != null) {
jumpRunnable.run();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (disposable != null && !disposable.isDisposed()) {
disposable.dispose();
}
}
}

View File

@@ -15,6 +15,7 @@ import com.chwl.library.common.util.AlbumUtils;
import com.chwl.library.common.util.ExecutorCenter;
import com.chwl.library.utils.ResUtil;
import com.example.matisse.internal.entity.CustomItem;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import java.util.ArrayList;
@@ -192,4 +193,16 @@ public class BigPhotoActivity extends BaseViewBindingActivity<ActivityBigPhotoBi
super.finish();
}
@Override
protected boolean needSteepStateBar() {
return true;
}
@Override
protected void setStatusBar() {
super.setStatusBar();
StatusBarUtil.transparencyBar(this);
StatusBarUtil.StatusBarLightMode(this);
}
}

View File

@@ -0,0 +1,76 @@
package com.chwl.app.photo;
import android.content.Context;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chwl.app.R;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.core.community.bean.DynamicMedia;
import com.chwl.library.utils.ScreenUtils;
import com.chwl.library.utils.config.BasicConfig;
import java.util.List;
import lombok.Setter;
public class DynamicImageAdapter extends BaseQuickAdapter<DynamicMedia, BaseViewHolder> {
private Context context;
@Setter
private int mTwoImageHeight;
@Setter
private int mThreeImageHeight;
private int imageWidth;
private int bigImageWidth;
@Setter
private int singleImageHeight;
public DynamicImageAdapter(int layoutResId, @Nullable List<DynamicMedia> data) {
super(layoutResId, data);
context = BasicConfig.INSTANCE.getAppContext();
imageWidth = UIUtil.getScreenWidth(context) * 2 / 5;
bigImageWidth = UIUtil.getScreenWidth(context);
mTwoImageHeight = (ScreenUtils.getScreenWidth(context) - UIUtil.dip2px(context, 50F)) / 2;
mThreeImageHeight = (ScreenUtils.getScreenWidth(context) - UIUtil.dip2px(context, 60F)) / 3;
}
@Override
protected void convert(BaseViewHolder helper, DynamicMedia item) {
ImageView ivPhoto = helper.getView(R.id.riv_photo);
helper.setGone(R.id.iv_gif_tag, item.isGif());
ViewGroup.LayoutParams layoutParams = ivPhoto.getLayoutParams();
if (helper.itemView instanceof ConstraintLayout && getData().size() > 1) {
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
} else {
switch (getData().size()) {
case 1:
layoutParams.height = singleImageHeight;
ivPhoto.setLayoutParams(layoutParams);
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), bigImageWidth);
break;
case 2:
layoutParams.height = mTwoImageHeight;
ivPhoto.setLayoutParams(layoutParams);
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
break;
case 3:
default:
layoutParams.height = mThreeImageHeight;
ivPhoto.setLayoutParams(layoutParams);
ImageLoadUtilsV2.loadImage(ivPhoto, item.getResUrl(), imageWidth);
break;
}
}
}
}

View File

@@ -42,7 +42,7 @@ class StarFragment : BaseViewBindingFragment<StarFragmentBinding>(), MainTabCont
private var currentUser: StarUser? = null
override fun init() {
FragmentVisibleStateHelper(this) {
FragmentVisibleStateHelper(this).start {
onVisibleChanged(it)
}
initView()

View File

@@ -8,21 +8,23 @@ import androidx.lifecycle.LifecycleOwner
import com.chwl.app.base.BaseFragment
class FragmentVisibleStateHelper(
private val fragment: Fragment,
private val onVisibleChanged: (Boolean) -> Unit
private val fragment: Fragment
) : LifecycleEventObserver {
private var onVisibleChanged: ((Boolean) -> Unit)? = null
private var isRealVisible = false
private var visibleCount = 0
val isVisible get() = isRealVisible
val isFirstVisible get() = isVisible && visibleCount == 1
init {
fun start(onVisibleChanged: (Boolean) -> Unit): FragmentVisibleStateHelper {
this.onVisibleChanged = onVisibleChanged
fragment.lifecycle.addObserver(this)
(fragment as? BaseFragment)?.let {
it.onHiddenChangedListener = Consumer<Boolean> {
checkVisibleState()
}
}
return this
}
fun checkVisibleState() {
@@ -32,12 +34,15 @@ class FragmentVisibleStateHelper(
)
if (isRealVisible != newRealVisible) {
isRealVisible = newRealVisible
if (newRealVisible) {
visibleCount++
}
onVisibleChanged(newRealVisible)
}
}
private fun onVisibleChanged(isVisible: Boolean) {
onVisibleChanged.invoke(isVisible)
onVisibleChanged?.invoke(isVisible)
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {

View File

@@ -3,7 +3,7 @@ package com.chwl.app.support
import androidx.lifecycle.viewModelScope
import com.chwl.app.BuildConfig
import com.chwl.app.base.BaseViewModel
import com.chwl.core.helper.PathHelper
import com.chwl.library.utils.PathHelper
import com.chwl.core.home.model.HomeModel
import com.chwl.library.common.util.SPUtils
import com.chwl.library.download.DownloadException

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