房间更多弹窗增加推荐房间列表

This commit is contained in:
huangjian
2022-04-28 17:51:30 +08:00
parent fa29b0d12b
commit 433aeadd29
14 changed files with 453 additions and 78 deletions

View File

@@ -0,0 +1,24 @@
package com.yizhuan.erban.avroom.adapter
import android.graphics.Color
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtils
import com.yizhuan.erban.ui.widget.LivingIconView
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo
class ExitRoomAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_exit_room) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
ImageLoadUtils.loadImage(mContext, item.avatar, helper.getView(R.id.iv_avatar))
ImageLoadUtils.loadImage(mContext, item.tagPict, helper.getView(R.id.iv_tag))
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
.setText(R.id.tv_title, item.title)
val livingIconView = helper.getView<LivingIconView>(R.id.liv_living_icon)
livingIconView.setColor(Color.WHITE)
livingIconView.start()
}
}

View File

@@ -0,0 +1,199 @@
package com.yizhuan.erban.avroom.dialog
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.widget.ImageView
import android.widget.PopupWindow
import android.widget.TextView
import androidx.core.view.drawToBitmap
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.yizhuan.erban.R
import com.yizhuan.erban.UIHelper
import com.yizhuan.erban.avroom.activity.AVRoomActivity
import com.yizhuan.erban.avroom.adapter.ExitRoomAdapter
import com.yizhuan.erban.avroom.presenter.HomePartyPresenter
import com.yizhuan.erban.common.widget.dialog.DialogManager.LambdaOkDialogListener
import com.yizhuan.erban.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.erban.utils.FastBlur
import com.yizhuan.xchat_android_constants.XChatConstants
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.room.model.AvRoomModel
import com.yizhuan.xchat_android_library.annatation.ActLayoutRes
import io.reactivex.disposables.Disposable
@ActLayoutRes(R.layout.dialog_exit_room)
class ExitRoomPopupWindow(val avRoomActivity: AVRoomActivity, val rootView: View) : PopupWindow() {
companion object {
@JvmStatic
fun newInstance(avRoomActivity: AVRoomActivity, rootView: View): ExitRoomPopupWindow {
return ExitRoomPopupWindow(avRoomActivity, rootView)
}
}
private val recyclerView: RecyclerView
private val llEmpty: View
private val tvReport: TextView
private val tvMiniRoom: TextView
private val tvExitRoom: TextView
private var disposable: Disposable? = null
private val exitRoomAdapter = ExitRoomAdapter()
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
init {
contentView = LayoutInflater.from(avRoomActivity).inflate(R.layout.dialog_exit_room, null)
width = ScreenUtil.dip2px(250f)
height = WindowManager.LayoutParams.MATCH_PARENT
isFocusable = true
recyclerView = contentView.findViewById(R.id.recycler_view)
llEmpty = contentView.findViewById(R.id.ll_empty)
tvReport = contentView.findViewById(R.id.tv_report)
tvMiniRoom = contentView.findViewById(R.id.tv_mini_room)
tvExitRoom = contentView.findViewById(R.id.tv_exit_room)
initView()
isClippingEnabled = false
}
private fun initView() {
animationStyle = R.style.style_anim_right_in_out
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
contentView.findViewById<View>(R.id.tv_more).setOnClickListener {
//HomeMoreRoomActivity.start(context)
}
tvReport.setOnClickListener {
val roomInfo = AvRoomDataManager.get().mCurrentRoomInfo ?: return@setOnClickListener
UIHelper.showReportPage(avRoomActivity, roomInfo.uid, XChatConstants.REPORT_TYPE_ROOM)
dismiss()
}
tvExitRoom.setOnClickListener {
handleExitRoom()
dismiss()
}
tvMiniRoom.setOnClickListener {
if (AvRoomDataManager.get().isSelfGamePlaying) {
avRoomActivity.dialogManager.showOkCancelDialog(
"游戏中最小化房间默认逃跑,确定进行此操作?", false
) {
avRoomActivity.toBack()
dismiss()
}
return@setOnClickListener
}
avRoomActivity.onBackPressed()
dismiss()
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setLayoutManager(LinearLayoutManager(avRoomActivity))
.setRecyclerView(recyclerView)
.setAdapter(exitRoomAdapter)
.build()
exitRoomAdapter.setOnItemClickListener { _, _, position ->
exitRoomAdapter.getItem(position)?.let {
AVRoomActivity.start(avRoomActivity, it.uid)
dismiss()
}
}
disposable = AvRoomModel.get()
.getRecommendRoomList(AvRoomDataManager.get().roomId.toString())
.subscribe(
{
llEmpty.isVisible = it.isNullOrEmpty()
recyclerView.isGone = it.isNullOrEmpty()
rvDelegate.setNewData(it)
},
{
llEmpty.isVisible = true
recyclerView.isVisible = true
}
)
setOnDismissListener {
disposable?.dispose()
}
val bitmap = rootView.drawToBitmap()
val bitmapX = bitmap.width
val bitmapY = bitmap.height
val bitmap1 = Bitmap.createBitmap(
bitmap,
bitmapX - ScreenUtil.dip2px(250f),
0,
ScreenUtil.dip2px(250f),
bitmapY
)
blur(bitmap1, contentView.findViewById(R.id.iv_blur))
}
private fun blur(bkg: Bitmap, view: ImageView) {
val scaleFactor = 8
var overlay =
Bitmap.createScaledBitmap(bkg, bkg.width / scaleFactor, bkg.height / scaleFactor, false)
overlay = FastBlur.blur(overlay, 5, true) //高斯模糊
view.setImageBitmap(overlay)
}
private fun handleExitRoom() {
if (AvRoomDataManager.get().isSelfGamePlaying) {
avRoomActivity.dialogManager.showOkCancelDialog("游戏中退出房间默认逃跑,确定进行此操作?", false,
OkCancelDialogListener { avRoomActivity.toBack() })
return
}
if (AvRoomDataManager.get().isOpenKTV && AvRoomDataManager.get().isOwnerOnMic) {
avRoomActivity.dialogManager.showOkCancelDialog("KTV模式下退出房间会移除您已点的所有歌曲,确定进行此操作?",
false,
OkCancelDialogListener { avRoomActivity.toBack() })
return
}
if ((AvRoomDataManager.get().isQueuingMicro || AvRoomDataManager.get().isOpenPKMode)
&& AvRoomDataManager.get().myIsInQueue
) {
avRoomActivity.dialogManager.showOkCancelDialog("退出房间将会取消你的报名,确定进行此操作?", false,
LambdaOkDialogListener { avRoomActivity.toBack() })
return
}
if (AvRoomDataManager.get().haveStartDragon) {
avRoomActivity.dialogManager.showOkCancelDialog(
"你正在交友匹配中,此操作代表你放弃本局匹配展示,确定进行此操作?",
false,
object : OkCancelDialogListener {
override fun onCancel() {}
@SuppressLint("CheckResult")
override fun onOk() {
avRoomActivity.giveUpDragonBar()
.subscribe { s: String? ->
HomePartyPresenter().cancelDragon()
avRoomActivity.toBack()
}
}
})
} else {
avRoomActivity.toBack()
}
}
}

View File

@@ -3,6 +3,7 @@ package com.yizhuan.erban.avroom.fragment;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewStub;
@@ -25,6 +26,7 @@ import com.yizhuan.erban.UIHelper;
import com.yizhuan.erban.avroom.activity.AVRoomActivity;
import com.yizhuan.erban.avroom.activity.RoomOnlineUserActivity;
import com.yizhuan.erban.avroom.adapter.SelectGameAdapter;
import com.yizhuan.erban.avroom.dialog.ExitRoomPopupWindow;
import com.yizhuan.erban.avroom.presenter.HomePartyPresenter;
import com.yizhuan.erban.avroom.widget.GiftV2View;
import com.yizhuan.erban.base.BaseFragment;
@@ -492,7 +494,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
public void onClick(View v) {
switch (v.getId()) {
case R.id.room_more:
showMoreItems();
View view = requireActivity().findViewById(android.R.id.content);
ExitRoomPopupWindow.newInstance((AVRoomActivity) requireActivity(), view)
.showAtLocation(gameMainBinding.getRoot(), Gravity.END, 0, 0);
break;
case R.id.ll_room_info:
RoomOnlineUserActivity.start(getActivity());
@@ -563,83 +567,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_ROOM_SHARE_CLICK, "语音房_分享");
}
/**
* 房间右上角更多
*/
@SuppressLint("CheckResult")
private void showMoreItems() {
List<ButtonItem> buttonItems = new ArrayList<>();
ButtonItem buttonItem1 = new ButtonItem("退出房间", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
if (AvRoomDataManager.get().isSelfGamePlaying()) {
getDialogManager().showOkCancelDialog("游戏中退出房间默认逃跑,确定进行此操作?", false,
() -> ((AVRoomActivity) getActivity()).toBack());
return;
}
if (AvRoomDataManager.get().isOpenKTV() && AvRoomDataManager.get().isOwnerOnMic()) {
getDialogManager().showOkCancelDialog("KTV模式下退出房间会移除您已点的所有歌曲,确定进行此操作?", false,
() -> ((AVRoomActivity) getActivity()).toBack());
return;
}
if ((AvRoomDataManager.get().isQueuingMicro() || AvRoomDataManager.get().isOpenPKMode())
&& AvRoomDataManager.get().myIsInQueue) {
getDialogManager().showOkCancelDialog("退出房间将会取消你的报名,确定进行此操作?", false,
(DialogManager.LambdaOkDialogListener) () ->
((AVRoomActivity) getActivity()).toBack());
return;
}
if (AvRoomDataManager.get().haveStartDragon) {
getDialogManager().showOkCancelDialog("你正在交友匹配中,此操作代表你放弃本局匹配展示,确定进行此操作?", false, new DialogManager.OkCancelDialogListener() {
@Override
public void onCancel() {
}
@Override
public void onOk() {
((AVRoomActivity) getActivity()).giveUpDragonBar().subscribe(s -> {
new HomePartyPresenter().cancelDragon();
((AVRoomActivity) getActivity()).toBack();
});
}
});
} else {
((AVRoomActivity) getActivity()).toBack();
}
}
});
ButtonItem buttonItem2 = new ButtonItem("最小化房间", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
if (AvRoomDataManager.get().isSelfGamePlaying()) {
getDialogManager().showOkCancelDialog("游戏中最小化房间默认逃跑,确定进行此操作?", false,
() -> ((AVRoomActivity) getActivity()).toBack());
return;
}
getActivity().onBackPressed();
}
});
ButtonItem buttonItem3 = new ButtonItem("举报房间", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) {
return;
}
UIHelper.showReportPage(mContext, roomInfo.getUid(), XChatConstants.REPORT_TYPE_ROOM);
}
});
//buttonItems.add(buttonItem0);
buttonItems.add(buttonItem1);
buttonItems.add(buttonItem2);
buttonItems.add(buttonItem3);
DialogManager dialogManager = ((BaseMvpActivity) getActivity()).getDialogManager();
if (dialogManager != null) {
dialogManager.showCommonPopupDialog(buttonItems, "取消");
}
}
@Override
public void onInAppSharingItemClick() {
shareDialog.dismiss();

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

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

View File

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

View File

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@color/blue">
<ImageView
android:id="@+id/iv_blur"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="250dp"
android:layout_height="100dp"
android:layout_gravity="end"
android:layout_marginTop="52dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_report"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/ic_room_report"
android:drawablePadding="12dp"
android:gravity="center"
android:text="举报房间"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_mini_room"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/ic_room_mini"
android:drawablePadding="12dp"
android:gravity="center"
android:text="收起房间"
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_exit_room"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableTop="@drawable/ic_room_exit"
android:drawablePadding="12dp"
android:gravity="center"
android:text="退出房间"
android:textColor="@color/white"
android:textSize="12sp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_marginTop="152dp"
android:clipToPadding="false"
android:paddingBottom="20dp" />
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="250dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_marginTop="152dp"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="努力寻找中..."
android:textColor="@color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_more"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginTop="13dp"
android:background="@drawable/bg_common_confirm"
android:gravity="center"
android:text="查看更多"
android:visibility="gone"
android:textColor="@color/white"
android:textSize="15sp" />
</LinearLayout>
</FrameLayout>
</layout>

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
tools:background="@color/blue">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_avatar"
android:layout_width="72dp"
android:layout_height="72dp"
android:scaleType="centerCrop"
android:src="@drawable/default_cover"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:riv_corner_radius="8dp" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="10dp"
android:includeFontPadding="false"
android:text="余生点唱歌曲大..."
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="@id/iv_avatar" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title">
<ImageView
android:id="@+id/iv_tag"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:visibility="visible"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/tag_101" />
<com.yizhuan.erban.ui.widget.LivingIconView
android:id="@+id/liv_living_icon"
android:layout_width="6dp"
android:layout_height="8dp"
android:layout_marginStart="12dp"
android:background="@color/transparent" />
<TextView
android:id="@+id/tv_online_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="77" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -561,4 +561,9 @@
<item name="android:textColor">@color/color_black_333333</item>
</style>
<style name="style_anim_right_in_out">
<item name="android:windowEnterAnimation">@anim/anim_right_in</item>
<item name="android:windowExitAnimation">@anim/anim_right_out</item>
</style>
</resources>

View File

@@ -20,6 +20,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo;
import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo;
import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo;
import com.yizhuan.xchat_android_core.level.UserLevelVo;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
@@ -631,4 +632,11 @@ public class AvRoomModel extends RoomBaseModel implements IAvRoomModel {
.compose(RxHelper.handleStringData())
.compose(RxHelper.handleSchAndExce());
}
@Override
public Single<List<HomeRoomInfo>> getRecommendRoomList(String roomId) {
return mRoomService.getRecommendRoomList(roomId)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers());
}
}

View File

@@ -29,6 +29,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo;
import com.yizhuan.xchat_android_core.exception.ErrorThrowable;
import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
import com.yizhuan.xchat_android_core.room.activitytimer.TimerBean;
@@ -1126,6 +1127,14 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel {
Single<ServiceResult<String>> cleanScreen(@Field("roomUid") long roomUid,
@Field("uid") long uid);
/**
* 房内推荐房间列表
*
* @return
*/
@GET("/roominsiderecommend/recommendRoomList")
Single<ServiceResult<List<HomeRoomInfo>>> getRecommendRoomList(@Query("roomId") String roomId);
}
}

View File

@@ -5,6 +5,7 @@ import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomResultData;
import com.yizhuan.xchat_android_core.base.IModel;
import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.home.bean.BannerInfo;
import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo;
import com.yizhuan.xchat_android_core.room.activitytimer.TimerBean;
import com.yizhuan.xchat_android_core.room.bean.BroadcastInfo;
import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
@@ -174,4 +175,6 @@ public interface IAvRoomModel extends IModel {
Single<String> sendRoomBroadcast(String msg, long roomId);
Single<String> cleanScreen(long roomUid, long uid);
Single<List<HomeRoomInfo>> getRecommendRoomList(String roomId);
}