loading 添加点击拦截。

This commit is contained in:
2025-11-07 09:04:08 +08:00
parent 8c23465af3
commit d9cf55b053
25 changed files with 167 additions and 266 deletions

View File

@@ -249,13 +249,6 @@ public class MessageListenerSingleton {
} }
} }
// 等待一段时间确保退出完成
try {
Thread.sleep(200);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// 加入新群组 // 加入新群组
LogUtils.d("MessageListener", "开始加入群组: " + roomId); LogUtils.d("MessageListener", "开始加入群组: " + roomId);
CountDownLatch joinLatch = new CountDownLatch(1); CountDownLatch joinLatch = new CountDownLatch(1);

View File

@@ -207,7 +207,7 @@ public class TimeUtils {
//获取当前日期 //获取当前日期
public static String getCurrentDate2() { public static String getCurrentDate2() {
Date d = new Date(); Date d = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");
return sf.format(d); return sf.format(d);
} }
/** /**

View File

@@ -3,7 +3,7 @@ package com.xscm.moduleutil.utils.config;
public enum EnvironmentEnum { public enum EnvironmentEnum {
// "https://vespa.qxyushen.top/", // "https://vespa.qxyushen.top/",
PRODUCTION(//生产环境 PRODUCTION(//生产环境
"https://vespa.qxyushen.top/", "http://1.13.101.98/",
"KvNmqZc+VMzO4CfGMd5zmG6w6OFwpFO/19TwXUWfHDOBgmnl9DgIuE+kbrjNNnxqhtP3pH7bBrnSaSeFtunr72q6sgpLsfuswcUroMvz2slaTBcNzCaLi+GSnM3gB/GdO47mwLdk+iYBTvPUOCIuT608Z29z09w+vPeUDoMCHJBGXu6uh7Nj6PtV1dfGoUvByk1ZF0WYVjIqKDcb3tXY4jonFh3XAWhzMy8xKwN6F2nuK2IcdIwaSPsvuMZmhatP6f9kOE+vnfweyCHS3RxiG474WIoZGJM8omrl3/pOVqE=", "KvNmqZc+VMzO4CfGMd5zmG6w6OFwpFO/19TwXUWfHDOBgmnl9DgIuE+kbrjNNnxqhtP3pH7bBrnSaSeFtunr72q6sgpLsfuswcUroMvz2slaTBcNzCaLi+GSnM3gB/GdO47mwLdk+iYBTvPUOCIuT608Z29z09w+vPeUDoMCHJBGXu6uh7Nj6PtV1dfGoUvByk1ZF0WYVjIqKDcb3tXY4jonFh3XAWhzMy8xKwN6F2nuK2IcdIwaSPsvuMZmhatP6f9kOE+vnfweyCHS3RxiG474WIoZGJM8omrl3/pOVqE=",
"https://oss-cn-beijing.aliyuncs.com/", "https://oss-cn-beijing.aliyuncs.com/",
"LTAI5tKgrfcFQxH46ZwWYgFW", "LTAI5tKgrfcFQxH46ZwWYgFW",
@@ -14,10 +14,10 @@ public enum EnvironmentEnum {
1600096860, 1600096860,
"3e8f3add448d4692bc1d04c75ffe801b", "3e8f3add448d4692bc1d04c75ffe801b",
"tcp://81.70.45.221", "tcp://81.70.45.221",
"https://vespa.qxyushen.top/h5", "http://1.13.101.98/h5",
0), 0),
TEST(//测试环境 TEST(//测试环境
"https://test.vespa.qxyushen.top/", "https://test.vespa.xscmmidi.site/",
"6rdWuz058oq5OahdbFiGEybUcdahd12J83L34Uc7MrPIrxtFG+rXiwDvRcqNvjwbClbbmvMrmxKVkIysFByBsl0Qe9kqd2w8T/nhK5G6eXXlk2V9AjYCieIU+jRnjZBB+Cfechr6rCGJ2aeBARIsXcRPW7wm9WFK9euh5T+v6Pyte68yNaNdcYCll3+U4/uCEog7HygCnMIbAU+kqoPdmn2H+51YOHW+VsnsHd4w1+I3f8Tt0xLIXGM4GWnQueZ5GR46GTWiSYMy8dCIh9SPIMRyC91GosVcfGPMJSdcXqc=", "6rdWuz058oq5OahdbFiGEybUcdahd12J83L34Uc7MrPIrxtFG+rXiwDvRcqNvjwbClbbmvMrmxKVkIysFByBsl0Qe9kqd2w8T/nhK5G6eXXlk2V9AjYCieIU+jRnjZBB+Cfechr6rCGJ2aeBARIsXcRPW7wm9WFK9euh5T+v6Pyte68yNaNdcYCll3+U4/uCEog7HygCnMIbAU+kqoPdmn2H+51YOHW+VsnsHd4w1+I3f8Tt0xLIXGM4GWnQueZ5GR46GTWiSYMy8dCIh9SPIMRyC91GosVcfGPMJSdcXqc=",
"https://oss-cn-beijing.aliyuncs.com/", "https://oss-cn-beijing.aliyuncs.com/",
"LTAI5tKgrfcFQxH46ZwWYgFW", "LTAI5tKgrfcFQxH46ZwWYgFW",
@@ -28,7 +28,7 @@ public enum EnvironmentEnum {
1600096890, 1600096890,
"02f7339ec98947deaeab173599891932", "02f7339ec98947deaeab173599891932",
"tcp://1.13.181.248", "tcp://1.13.181.248",
"https://test.vespa.qxyushen.top/h5", "https://test.vespa.xscmmidi.site/h5",
1); 1);
private final String serverUrl;//服务器地址 private final String serverUrl;//服务器地址

View File

@@ -80,7 +80,7 @@ public class RoomDefaultWheatView extends BaseWheatView {
"-1".equals(pitNumber) ? "" : "-1".equals(pitNumber) ? "" :
"9".equals(pitNumber) ? "主持位" : "9".equals(pitNumber) ? "主持位" :
"10".equals(pitNumber) ? "嘉宾位" : "10".equals(pitNumber) ? "嘉宾位" :
pitNumber + "" pitNumber + "号位"
); );
//麦位上锁 //麦位上锁
if (showBoss && WHEAT_BOSS.equals(pitNumber)) { if (showBoss && WHEAT_BOSS.equals(pitNumber)) {
@@ -120,20 +120,11 @@ public class RoomDefaultWheatView extends BaseWheatView {
} else { } else {
tv_time_pk.setVisibility(GONE); tv_time_pk.setVisibility(GONE);
} }
// ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mCharmView.getLayoutParams();
// params.width = 35;
// mCharmView.setLayoutParams(params);
} else { } else {
tv_time_pk.setVisibility(GONE); tv_time_pk.setVisibility(GONE);
mCharmView.setVisibility(VISIBLE); mCharmView.setVisibility(VISIBLE);
// ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mCharmView.getLayoutParams();
// params.width = 52;
// mCharmView.setLayoutParams(params);
} }
// setCardiac(pitBean.getPit_number(), 0.0f);
updatePkState(bean); updatePkState(bean);
} }
private void updatePkState(RoomPitBean bean) { private void updatePkState(RoomPitBean bean) {
@@ -163,7 +154,6 @@ public class RoomDefaultWheatView extends BaseWheatView {
long xd = Long.parseLong(value); long xd = Long.parseLong(value);
if (xd > 9999 || xd < -9999) { if (xd > 9999 || xd < -9999) {
tv_time_pk.setText(String.format("%.2fw", xd / 10000.0f)); tv_time_pk.setText(String.format("%.2fw", xd / 10000.0f));
// mBinding.tvValue.setText(String.valueOf(xd));
} else { } else {
tv_time_pk.setText(value); tv_time_pk.setText(value);
} }

View File

@@ -143,8 +143,8 @@ public class WheatLayoutManager {
int firstPitNumber = layoutType == 1 ? 10 : 9; int firstPitNumber = layoutType == 1 ? 10 : 9;
int secondPitNumber = layoutType == 1 ? 9 : 10; int secondPitNumber = layoutType == 1 ? 9 : 10;
addWheatViewItem(row, firstPitNumber, itemWidth * 2, layoutType); addWheatViewItem(row, firstPitNumber, (int)(itemWidth * 1.7), layoutType);
addWheatViewItem(row, secondPitNumber, itemWidth * 2, layoutType); addWheatViewItem(row, secondPitNumber,(int)(itemWidth * 1.7), layoutType);
container.addView(row); container.addView(row);
row = new LinearLayout(context); row = new LinearLayout(context);
@@ -179,20 +179,20 @@ public class WheatLayoutManager {
if (pitNumber == 9 || pitNumber == 10) { if (pitNumber == 9 || pitNumber == 10) {
int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_90); int fixedHeightInPx = context.getResources().getDimensionPixelSize(R.dimen.dp_90);
if (pitNumber == 9) { if (pitNumber == 9) {
params = new LinearLayout.LayoutParams(itemWidth - 40, fixedHeightInPx); params = new LinearLayout.LayoutParams(itemWidth , fixedHeightInPx);
if (layoutType == 1) { if (layoutType == 1) {
params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1); params.rightMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1);
params.setMargins(20, -30, -20, 0); params.setMargins(20, -20, -20, 0);
} else { } else {
params.leftMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1); params.leftMargin = context.getResources().getDimensionPixelSize(R.dimen.dp_1);
params.setMargins(-30, -20, 0, 0); params.setMargins(-30, -20, 0, 0);
} }
} else { } else {
params = new LinearLayout.LayoutParams(itemWidth - 80, fixedHeightInPx); params = new LinearLayout.LayoutParams(itemWidth , fixedHeightInPx);
if (layoutType == 1) { if (layoutType == 1) {
params.setMargins(-30, 10, 0, 0); params.setMargins(-10, 10, 0, 0);
} else { } else {
params.setMargins(0, 10, -30, 0); params.setMargins(0, 10, -10, 0);
} }
} }
} else { } else {
@@ -288,7 +288,7 @@ public class WheatLayoutManager {
}else if (layoutType==1){ }else if (layoutType==1){
wheatView.setTv_time_pk(true); wheatView.setTv_time_pk(true);
} }
wheatView.setSex(bean.getCharm(),true); wheatView.setSex(bean.getCharm(),false);
} }
} }

View File

@@ -17,6 +17,7 @@
android:id="@+id/riv" android:id="@+id/riv"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
android:layout_marginStart="@dimen/dp_12" android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_12" android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_12" android:layout_marginEnd="@dimen/dp_12"
@@ -24,7 +25,6 @@
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@mipmap/room_ic_wheat_default" android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@@ -9,9 +9,11 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false">
<!--说话动态图--> <!--说话动态图-->
<com.xscm.moduleutil.widget.GifAvatarOvalView <com.xscm.moduleutil.widget.CircularImage
android:id="@+id/riv" android:id="@+id/riv"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
@@ -20,6 +22,7 @@
android:layout_marginEnd="@dimen/dp_12" android:layout_marginEnd="@dimen/dp_12"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:scaleType="fitCenter" android:scaleType="fitCenter"
app:layout_constraintDimensionRatio="1:1"
android:src="@mipmap/room_ic_wheat_default" android:src="@mipmap/room_ic_wheat_default"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"

View File

@@ -1,6 +1,7 @@
package com.xscm.modulemain.activity.main.activity; package com.xscm.modulemain.activity.main.activity;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
@@ -29,6 +30,7 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.FragmentUtils; import com.blankj.utilcode.util.FragmentUtils;
import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils; import com.blankj.utilcode.util.ToastUtils;
@@ -83,6 +85,10 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBinding> public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBinding>
implements HomeContacts.View, View.OnClickListener, LocationProvider.LocationCallback { implements HomeContacts.View, View.OnClickListener, LocationProvider.LocationCallback {
@@ -234,10 +240,6 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
// 检查是否有正在播放的房间 // 检查是否有正在播放的房间
if (CommonAppContext.getInstance().isPlaying) { if (CommonAppContext.getInstance().isPlaying) {
// 如果有正在播放的房间,直接退出应用 // 如果有正在播放的房间,直接退出应用
// finish();
// android.os.Process.killProcess(android.os.Process.myPid());
// System.exit(0);
// exitApp();
clearAllOtherTasksAndRestart(); clearAllOtherTasksAndRestart();
return true; return true;
} }
@@ -260,16 +262,6 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
// 最推荐的方法 // 最推荐的方法
private void clearAllOtherTasksAndRestart() { private void clearAllOtherTasksAndRestart() {
// Intent intent = new Intent(this, MainActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
// intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
// startActivity(intent);
// 可选finish当前Activity
// if (!isFinishing()) {
// finish();
// }
// 可选:如果上面的方法不够彻底,可以配合使用 // 可选:如果上面的方法不够彻底,可以配合使用
Runtime.getRuntime().gc(); // 建议垃圾回收 Runtime.getRuntime().gc(); // 建议垃圾回收
@@ -538,8 +530,7 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
)) { )) {
// 展示自定义的解释对话框 // 展示自定义的解释对话框
showPermissionExplanationDialog(); showPermissionExplanationDialog();
} } else {
else {
// 首次请求,或用户选择了"不再询问",直接请求权限 // 首次请求,或用户选择了"不再询问",直接请求权限
directlyRequestPermissions(); directlyRequestPermissions();
} }
@@ -1077,18 +1068,25 @@ public class MainActivity extends BaseMvpActivity<HomePresenter, ActivityMainBin
} }
} }
@SuppressLint("CheckResult")
public void isShowLoading(boolean isShow) { public void isShowLoading(boolean isShow) {
if (isShow) { if (isShow) {
mBinding.coolWaitView.setVisibility(View.VISIBLE); mBinding.coolWaitView.setVisibility(View.VISIBLE);
} else { } else {
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE); mBinding.coolWaitView.setVisibility(View.GONE);
});
} }
} }
@SuppressLint("CheckResult")
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE); mBinding.coolWaitView.setVisibility(View.GONE);
});
} }
private SystemLocationProvider locationProvider; private SystemLocationProvider locationProvider;

View File

@@ -23,6 +23,10 @@ import com.xscm.moduleutil.utils.ClickUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
/** /**
* @Description: 热门房间 * @Description: 热门房间
@@ -96,7 +100,9 @@ public class PopularRoomActivity extends BaseMvpActivity<VoiceCategoryPresenter,
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE); mBinding.coolWaitView.setVisibility(View.GONE);
});
} }
@Override @Override

View File

@@ -244,6 +244,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
override fun doDone() { override fun doDone() {
Log.e("AAAAAAAAAAA", "C " + com.xscm.moduleutil.utils.TimeUtils.getCurrentDate2())
isOnline = intent.getBooleanExtra("isOnline", false) isOnline = intent.getBooleanExtra("isOnline", false)
password = intent.getStringExtra("password") password = intent.getStringExtra("password")
roomId = intent.getStringExtra("roomId") roomId = intent.getStringExtra("roomId")
@@ -276,9 +277,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
// 在super.onCreate之前设置主题以避免闪白屏 // 在super.onCreate之前设置主题以避免闪白屏
setTheme(com.xscm.moduleutil.R.style.BaseAppTheme) // 设置你的主主题 // setTheme(com.xscm.moduleutil.R.style.BaseAppTheme) // 设置你的主主题
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// // 进入房间10s后检查是否显示提示上麦对话框 // // 进入房间10s后检查是否显示提示上麦对话框
LogUtils.e("RoomActivity", "onCreate") LogUtils.e("RoomActivity", "onCreate")
isSave = false isSave = false
sDestroied = false sDestroied = false
@@ -304,7 +306,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
appStateListener?.onRoomActivityCreated(this) appStateListener?.onRoomActivityCreated(this)
} }
MessageListenerSingleton.getInstance().joinGroup(roomId)
// 处理房间数据 // 处理房间数据
SpUtil.saveMyRoomId(roomId) SpUtil.saveMyRoomId(roomId)
// 检查是否从最小化状态恢复 // 检查是否从最小化状态恢复
@@ -322,7 +323,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
// 初始化礼物管理器 // 初始化礼物管理器
GiftDisplayManager.getInstance().setupDisplayView(mBinding!!.giftContainer) GiftDisplayManager.getInstance().setupDisplayView(mBinding!!.giftContainer)
initPublicScreenFragment() initPublicScreenFragment()
} }
@@ -878,7 +878,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
this.mRoomOwnerBean = resp.room_owner this.mRoomOwnerBean = resp.room_owner
this.mPitList = mRoomBean?.pit_list ?: ArrayList() this.mPitList = mRoomBean?.pit_list ?: ArrayList()
this.roomId = roomBean.room_id this.roomId = roomBean.room_id
MessageListenerSingleton.getInstance().joinGroup(roomId) //加入房间im
ImageUtils.loadHeadCC(resp.room_info.room_cover, mBinding!!.roomTop.avatar) ImageUtils.loadHeadCC(resp.room_info.room_cover, mBinding!!.roomTop.avatar)
mBinding!!.roomTop.name.text = roomBean.room_name mBinding!!.roomTop.name.text = roomBean.room_name
mBinding!!.roomTop.idVal.text = "ID:" + roomBean.room_number mBinding!!.roomTop.idVal.text = "ID:" + roomBean.room_number
@@ -2922,8 +2922,10 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
} }
} }
// TODO: 2025/8/26 加入房间 // TODO:不进入 2025/8/26 加入房间
override fun roomInfo(resp: RoomInfoResp) { override fun roomInfo(resp: RoomInfoResp) {
if (true)
return
AppStateManager.getInstance().roomInfo = resp AppStateManager.getInstance().roomInfo = resp
val roomBean = resp.room_info val roomBean = resp.room_info
this.mRoomBean = roomBean this.mRoomBean = roomBean
@@ -3879,6 +3881,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
override fun finish() { override fun finish() {
LogUtils.e("RoomActivity", "finish") LogUtils.e("RoomActivity", "finish")
CommonAppContext.getInstance().playId = null
// 只有在真正退出房间时才清理最小化状态 // 只有在真正退出房间时才清理最小化状态
if (!isMinimized) { if (!isMinimized) {
clearMinimizeState() clearMinimizeState()

View File

@@ -1,6 +1,7 @@
package com.xscm.modulemain.activity.room.fragment; package com.xscm.modulemain.activity.room.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -23,6 +24,7 @@ import com.xscm.moduleutil.bean.room.RoomInfoResp;
import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.listener.MessageListenerSingleton;
import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ClickUtils; import com.xscm.moduleutil.utils.ClickUtils;
import com.xscm.moduleutil.utils.TimeUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -123,7 +125,6 @@ public class HotListFragment extends BaseMvpFragment<HotListPresenter, FragmentH
} }
TopRoom item = mAdapter.getItem(position); TopRoom item = mAdapter.getItem(position);
if (item != null ) { if (item != null ) {
MessageListenerSingleton.getInstance().joinGroup(item.getRoom_id());
RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), item.getRoom_id(), "",null); RoomManager.getInstance().fetchRoomDataAndEnter(getActivity(), item.getRoom_id(), "",null);
} }
}); });

View File

@@ -380,11 +380,6 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
private List<RoomTypeModel> list; private List<RoomTypeModel> list;
// public MyFragmentPagerAdapter(FragmentManager fm, List<RoomTypeModel> list) {
// super(fm);
// this.list = list;
// }
public MyFragmentPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<RoomTypeModel> list) { public MyFragmentPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<RoomTypeModel> list) {
super(fragmentActivity); super(fragmentActivity);
this.list = list; this.list = list;
@@ -402,23 +397,5 @@ public class VoiceCategoryFragment extends BaseMvpFragment<VoiceCategoryPresente
public int getItemCount() { public int getItemCount() {
return list.size(); return list.size();
} }
// @Override
// public Fragment getItem(int position) {
// RoomTypeModel model = list.get(position);
// return HotListFragment.newInstance(model.getId(), TYPE_INDEX);
// }
//
// @Override
// public int getCount() {
// return list.size();
// }
//
// @Nullable
// @Override
// public CharSequence getPageTitle(int position) {
// RoomTypeModel model = list.get(position);
// return model.getLabel_name();
// }
} }
} }

View File

@@ -1,5 +1,6 @@
package com.xscm.modulemain.activity.room.fragment; package com.xscm.modulemain.activity.room.fragment;
import android.annotation.SuppressLint;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.view.View; import android.view.View;
@@ -26,6 +27,10 @@ import com.xscm.moduleutil.utils.SpUtil;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoiceBinding> implements VoiceContacts.View { public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoiceBinding> implements VoiceContacts.View {
@@ -53,8 +58,15 @@ public class VoiceFragment extends BaseMvpFragment<VoicePresenter, FragmentVoice
isShowLoading(false); isShowLoading(false);
} }
@SuppressLint("CheckResult")
public void isShowLoading(boolean isShowLoading){ public void isShowLoading(boolean isShowLoading){
mBinding.coolWaitView.setVisibility(isShowLoading? View.VISIBLE:View.GONE); if (isShowLoading) {
mBinding.coolWaitView.setVisibility(View.VISIBLE);
} else {
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE);
});
}
} }
@Override @Override

View File

@@ -28,6 +28,10 @@ import com.xscm.moduleutil.utils.ColorManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
/** /**
* @author qx * @author qx
@@ -165,7 +169,9 @@ public class DailyTasksActivity extends BaseMvpActivity<DailyTasksPresenter, Act
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE); mBinding.coolWaitView.setVisibility(View.GONE);
});
} }
@Override @Override

View File

@@ -46,6 +46,10 @@ import com.xscm.moduleutil.widget.CustomTopBar;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
/** /**
* @author * @author
@@ -224,7 +228,9 @@ public class MyRoomActivity extends BaseMvpActivity<MyRoomPresenter, RoomActivit
if (b) { if (b) {
mBinding.coolWaitView.setVisibility(View.VISIBLE); mBinding.coolWaitView.setVisibility(View.VISIBLE);
} else { } else {
Observable.timer(5, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
mBinding.coolWaitView.setVisibility(View.GONE); mBinding.coolWaitView.setVisibility(View.GONE);
});
} }
} }

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.ActivityUtils;
@@ -22,6 +23,7 @@ import com.xscm.moduleutil.listener.MessageListenerSingleton;
import com.xscm.moduleutil.rtc.AgoraManager; import com.xscm.moduleutil.rtc.AgoraManager;
import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.SpUtil;
import com.xscm.moduleutil.utils.TimeUtils;
import com.xscm.moduleutil.utils.logger.Logger; import com.xscm.moduleutil.utils.logger.Logger;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
@@ -58,53 +60,6 @@ public class RoomManager {
return instance; return instance;
} }
/**
* 进入房间 - 自动获取房间数据
*
* @param context 上下文
* @param roomId 房间ID
*/
public void enterRoom(Context context, String roomId) {
enterRoom(context, roomId, null, null);
}
/**
* 进入房间 - 使用密码
*
* @param context 上下文
* @param roomId 房间ID
* @param password 房间密码
*/
public void enterRoom(Context context, String roomId, String password) {
enterRoom(context, roomId, password, null);
}
/**
* 进入房间 - 使用缓存数据
*
* @param context 上下文
* @param roomId 房间ID
* @param password 房间密码
* @param cachedData 缓存的房间数据
*/
public void enterRoom(Context context, String roomId, String password, RoomInfoResp cachedData) {
if (TextUtils.isEmpty(roomId)) {
ToastUtils.showShort("房间ID不能为空");
return;
}
// 检查是否有有效的缓存数据
RoomInfoResp roomInfo = cachedData != null ? cachedData : getCachedRoomData(roomId);
if (roomInfo != null) {
// 使用缓存数据直接进入房间
navigateToRoom(context, roomId, password, roomInfo, false, null);
} else {
// 获取房间数据后进入房间
fetchRoomDataAndEnter(context, roomId, password, null);
}
}
/** /**
* 获取房间数据并进入房间 * 获取房间数据并进入房间
* *
@@ -121,8 +76,8 @@ public class RoomManager {
CommonAppContext.getInstance().isRoomJoininj = true; CommonAppContext.getInstance().isRoomJoininj = true;
// 检查是否有有效的缓存数据 // 检查是否有有效的缓存数据
RoomInfoResp roomInfo = getCachedRoomData(roomId); RoomInfoResp roomInfo = getCachedRoomData(roomId);
// 检查是否是当前房间且用户在线 //加入房间
// boolean isCurrentRoom = isCurrentRoom(roomId); MessageListenerSingleton.getInstance().joinGroup(roomId);
if (CommonAppContext.getInstance().playId == null) { if (CommonAppContext.getInstance().playId == null) {
fetchAndJoinRoom(context, roomId, password, taskId); fetchAndJoinRoom(context, roomId, password, taskId);
} else { } else {
@@ -155,7 +110,6 @@ public class RoomManager {
navigateToRoom(context, roomId, password, roomInfoResp, false, taskId); navigateToRoom(context, roomId, password, roomInfoResp, false, taskId);
} }
}); });
// navigateToRoom(context, roomId, password, null, true, taskId);
} else { } else {
fetchAndJoinRoom(context, roomId, password, taskId); fetchAndJoinRoom(context, roomId, password, taskId);
} }
@@ -207,28 +161,6 @@ public class RoomManager {
}); });
} }
/**
* 检查是否是当前房间
*
* @param roomId 房间ID
* @return true表示是当前房间false表示不是
*/
private boolean isCurrentRoom(String roomId) {
// 这里应该实现检查是否是当前房间的逻辑
// 可以通过检查当前Activity或者通过全局变量等方式实现
// 目前返回false需要根据实际需求实现具体逻辑
RoomInfoResp roomInfo = getCachedRoomData(roomId);
if (roomInfo != null) {
if (roomInfo.getRoom_info().getRoom_id().equals(roomId)) {
return true;
} else {
return false;
}
}
return false;
}
/** /**
* 跳转到房间页面 * 跳转到房间页面
@@ -239,7 +171,6 @@ public class RoomManager {
* @param roomInfo 房间信息 * @param roomInfo 房间信息
*/ */
private void navigateToRoom(Context context, String roomId, String password, RoomInfoResp roomInfo, boolean isOnline, String taskId) { private void navigateToRoom(Context context, String roomId, String password, RoomInfoResp roomInfo, boolean isOnline, String taskId) {
try { try {
// 构建跳转参数 // 构建跳转参数
Intent intent = new Intent(ActivityUtils.getTopActivity(), RoomActivity.class); Intent intent = new Intent(ActivityUtils.getTopActivity(), RoomActivity.class);
@@ -376,14 +307,6 @@ public class RoomManager {
} }
} }
/**
* 清除所有房间缓存数据
*/
public void clearAllRoomCache() {
roomDataCache.clear();
cacheTimestamps.clear();
}
/** /**
* 退出房间 * 退出房间
* *
@@ -410,46 +333,4 @@ public class RoomManager {
Logger.d(TAG, "退出房间: " + roomId); Logger.d(TAG, "退出房间: " + roomId);
} }
/**
* 批量退出房间
*
* @param roomIds 房间ID列表
*/
public void exitRooms(String... roomIds) {
if (roomIds != null) {
for (String roomId : roomIds) {
exitRoom(roomId);
}
}
}
/**
* 获取房间缓存状态
*
* @param roomId 房间ID
* @return 缓存状态信息
*/
public String getRoomCacheStatus(String roomId) {
if (TextUtils.isEmpty(roomId)) {
return "无效的房间ID";
}
Long timestamp = cacheTimestamps.get(roomId);
if (timestamp == null) {
return "未缓存";
}
long elapsed = System.currentTimeMillis() - timestamp;
if (elapsed > CACHE_DURATION) {
return "缓存已过期";
}
RoomInfoResp data = roomDataCache.get(roomId);
if (data == null) {
return "缓存数据为空";
}
return String.format("已缓存 (%d秒前)", elapsed / 1000);
}
} }

View File

@@ -17,6 +17,7 @@ import com.opensource.svgaplayer.SVGAVideoEntity
import com.xscm.moduleutil.R import com.xscm.moduleutil.R
import com.xscm.moduleutil.bean.RoomMessageEvent import com.xscm.moduleutil.bean.RoomMessageEvent
import com.xscm.moduleutil.bean.room.RoomPitBean import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.widget.CircularImage
import com.xscm.moduleutil.widget.GifAvatarOvalView import com.xscm.moduleutil.widget.GifAvatarOvalView
import com.xscm.moduleutil.widget.RoomMakeWheatView import com.xscm.moduleutil.widget.RoomMakeWheatView
import com.xscm.moduleutil.widget.RoomSingSongWheatView import com.xscm.moduleutil.widget.RoomSingSongWheatView
@@ -110,7 +111,7 @@ class WheatLayoutSingManager private constructor(
*/ */
private fun setupViewListeners(wheatView: RoomSingSongWheatView, pitNumber: Int) { private fun setupViewListeners(wheatView: RoomSingSongWheatView, pitNumber: Int) {
// 头像点击事件 // 头像点击事件
val avatarView = wheatView.mRiv as GifAvatarOvalView val avatarView = wheatView.mRiv as CircularImage
avatarView.setOnClickListener { avatarView.setOnClickListener {
// 直接使用当前的 wheatClickListener可能已被外部设置 // 直接使用当前的 wheatClickListener可能已被外部设置
wheatClickListener?.onWheatClick(wheatView, pitNumber) wheatClickListener?.onWheatClick(wheatView, pitNumber)

View File

@@ -95,18 +95,24 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<app.dinus.com.loadingdrawable.LoadingView <RelativeLayout
android:id="@+id/cool_wait_view" android:id="@+id/cool_wait_view"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:visibility="gone" android:visibility="gone"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:background="@drawable/ps_ic_shadow_bg" android:background="@drawable/ps_ic_shadow_bg"
app:loading_renderer="CoolWaitLoadingRenderer" /> app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -250,14 +250,22 @@
app:pointsPosition="CENTER" app:pointsPosition="CENTER"
app:pointsVisibility="true" /> app:pointsVisibility="true" />
<app.dinus.com.loadingdrawable.LoadingView <RelativeLayout
android:id="@+id/cool_wait_view" android:id="@+id/cool_wait_view"
android:visibility="gone"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100" android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100" android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:background="@drawable/ps_ic_shadow_bg" android:background="@drawable/ps_ic_shadow_bg"
android:visibility="gone"
app:loading_renderer="CoolWaitLoadingRenderer" /> app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout> </RelativeLayout>
</RelativeLayout>
</layout> </layout>

View File

@@ -43,17 +43,24 @@
tools:listitem="@layout/item_popular_room"/> tools:listitem="@layout/item_popular_room"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
<app.dinus.com.loadingdrawable.LoadingView
<RelativeLayout
android:id="@+id/cool_wait_view" android:id="@+id/cool_wait_view"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:visibility="gone" android:visibility="gone"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:background="@drawable/ps_ic_shadow_bg" android:background="@drawable/ps_ic_shadow_bg"
app:loading_renderer="CoolWaitLoadingRenderer" /> app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>

View File

@@ -5,13 +5,13 @@
<com.scwang.smartrefresh.layout.SmartRefreshLayout <com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/smart_refresh_layout" android:id="@+id/smart_refresh_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
app:srlEnableLoadMore="true" app:srlEnableLoadMore="true"
app:srlEnableRefresh="true"> app:srlEnableRefresh="true">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:id="@+id/tv_hot" android:id="@+id/tv_hot"
@@ -28,9 +28,10 @@
android:id="@+id/recycle_view" android:id="@+id/recycle_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingLeft="@dimen/dp_6" android:paddingLeft="@dimen/dp_6"
android:paddingRight="@dimen/dp_6" android:paddingRight="@dimen/dp_6"
android:paddingBottom="@dimen/dp_80" /> android:paddingBottom="@dimen/dp_40" />
</LinearLayout> </LinearLayout>

View File

@@ -57,7 +57,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_320" android:layout_height="@dimen/dp_320"
android:layout_marginTop="@dimen/dp_8" android:layout_marginTop="@dimen/dp_8"
android:layout_marginEnd="@dimen/dp_6" android:layout_marginEnd="@dimen/dp_3"
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bt_sta"> app:layout_constraintTop_toBottomOf="@+id/bt_sta">
@@ -67,7 +67,6 @@
android:id="@+id/cl_left" android:id="@+id/cl_left"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginEnd="@dimen/dp_4"
android:layout_weight="1" android:layout_weight="1"
android:background="@mipmap/pk_left" android:background="@mipmap/pk_left"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -107,6 +106,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:layout_marginStart="@dimen/dp_3"
android:background="@mipmap/pk_right" android:background="@mipmap/pk_right"
app:layout_constraintStart_toEndOf="@+id/cl_left" app:layout_constraintStart_toEndOf="@+id/cl_left"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">

View File

@@ -113,13 +113,19 @@
</LinearLayout> </LinearLayout>
<app.dinus.com.loadingdrawable.LoadingView <RelativeLayout
android:id="@+id/cool_wait_view" android:id="@+id/cool_wait_view"
android:visibility="gone"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100" android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100" android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true" android:layout_centerInParent="true"
android:visibility="gone"
android:background="@drawable/ps_ic_shadow_bg" android:background="@drawable/ps_ic_shadow_bg"
app:loading_renderer="CoolWaitLoadingRenderer" /> app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout> </RelativeLayout>
</RelativeLayout>
</layout> </layout>

View File

@@ -276,18 +276,6 @@
app:tabIndicatorColor="@android:color/transparent" app:tabIndicatorColor="@android:color/transparent"
app:tabTextAppearance="@style/CustomTabTextAppearance" app:tabTextAppearance="@style/CustomTabTextAppearance"
app:tabTextColor="#F1ECFF" /> app:tabTextColor="#F1ECFF" />
<!-- app:tl_indicator_corner_radius="@dimen/dp_3"-->
<!-- app:tl_indicator_drawable="@mipmap/tab_dy"-->
<!-- app:tl_indicator_height="@dimen/dp_6"-->
<!-- app:tl_indicator_margin_bottom="@dimen/dp_3"-->
<!-- app:tl_indicator_width="@dimen/dp_28"-->
<!-- app:tl_showCateIndicator="true"-->
<!-- app:tl_tab_width="@dimen/dp_50"-->
<!-- app:tl_textBold="SELECT"-->
<!-- app:tl_textSelectColor="@color/white"-->
<!-- app:tl_textSelectedSize="@dimen/sp_14"-->
<!-- app:tl_textUnselectColor="#F1ECFF"-->
<!-- app:tl_textsize="@dimen/sp_12" />-->
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>

View File

@@ -237,17 +237,25 @@
android:src="@mipmap/icon_guanbi" /> android:src="@mipmap/icon_guanbi" />
</com.xscm.moduleutil.widget.DropView> </com.xscm.moduleutil.widget.DropView>
<app.dinus.com.loadingdrawable.LoadingView
<RelativeLayout
android:id="@+id/cool_wait_view" android:id="@+id/cool_wait_view"
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:visibility="gone" android:visibility="gone"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<app.dinus.com.loadingdrawable.LoadingView
android:layout_width="@dimen/dp_100"
android:layout_height="@dimen/dp_100"
android:layout_centerInParent="true"
android:background="@drawable/ps_ic_shadow_bg" android:background="@drawable/ps_ic_shadow_bg"
app:loading_renderer="CoolWaitLoadingRenderer" /> app:loading_renderer="CoolWaitLoadingRenderer" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>