newMemberList) {
+ mOldMemberList = oldMemberList;
+ mNewMemberList = newMemberList;
+ }
+
+ @Override
+ public int getOldListSize() {
+ return mOldMemberList == null ? 0 : mOldMemberList.size();
+ }
+
+ @Override
+ public int getNewListSize() {
+ return mNewMemberList == null ? 0 : mNewMemberList.size();
+ }
+
+ @Override
+ public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
+ return Objects.equals(mOldMemberList.get(oldItemPosition).getAccount(),
+ mNewMemberList.get(newItemPosition).getAccount());
+ }
+
+ @Override
+ public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
+ ChatRoomMember oldItem = mOldMemberList.get(oldItemPosition);
+ ChatRoomMember newItem = mNewMemberList.get(newItemPosition);
+ return Objects.equals(oldItem.getAccount(), newItem.getAccount())
+ && Objects.equals(oldItem.getNick(), newItem.getNick());
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/SoftKeyBoardListener.java b/app/src/main/java/com/yizhuan/erban/avroom/SoftKeyBoardListener.java
new file mode 100644
index 000000000..2ed71337d
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/SoftKeyBoardListener.java
@@ -0,0 +1,80 @@
+package com.yizhuan.erban.avroom;
+
+import android.app.Activity;
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewTreeObserver;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * 该类用于监听软键盘是否显示并获取其高度
+ *
+ * Success is the sum of small efforts, repeated day in and day out.
+ * 成功就是日复一日那一点点小小努力的积累。
+ * AndroidGroup:158423375
+ * Author:Johnny
+ * AuthorQQ:956595454
+ * AuthorWX:Qiang_it
+ * AuthorPhone:nothing
+ * Created by 2016/9/22.
+ */
+public class SoftKeyBoardListener {
+
+ private View rootView;/*activity的根视图*/
+ private int rootViewVisibleHeight;/*纪录根视图的显示高度*/
+ private WeakReference mReference;
+// private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;
+
+ public SoftKeyBoardListener(Activity activity) {
+ /*获取activity的根视图*/
+ rootView = activity.getWindow().getDecorView();
+ /*监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变*/
+ rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener = mReference.get();
+ if (onSoftKeyBoardChangeListener == null) return;
+ /*获取当前根视图在屏幕上显示的大小*/
+ Rect r = new Rect();
+ rootView.getWindowVisibleDisplayFrame(r);
+ int visibleHeight = r.height();
+ if (rootViewVisibleHeight == 0) {
+ rootViewVisibleHeight = visibleHeight;
+ return;
+ }
+ /*根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变*/
+ if (rootViewVisibleHeight == visibleHeight) {
+ return;
+ }
+ /*根视图显示高度变小超过200,可以看作软键盘显示了*/
+ if (rootViewVisibleHeight - visibleHeight > 200) {
+ onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);
+ rootViewVisibleHeight = visibleHeight;
+ return;
+ }
+ /*根视图显示高度变大超过200,可以看作软键盘隐藏了*/
+ if (visibleHeight - rootViewVisibleHeight > 200) {
+ onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);
+ rootViewVisibleHeight = visibleHeight;
+ }
+ }
+ });
+ }
+
+ private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
+ mReference = new WeakReference<>(onSoftKeyBoardChangeListener);
+// this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;
+ }
+
+ public interface OnSoftKeyBoardChangeListener {
+ void keyBoardShow(int height);
+
+ void keyBoardHide(int height);
+ }
+
+ public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
+ SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);
+ softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/UserCardButtonManager.java b/app/src/main/java/com/yizhuan/erban/avroom/UserCardButtonManager.java
new file mode 100644
index 000000000..5972731a0
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/UserCardButtonManager.java
@@ -0,0 +1,18 @@
+package com.yizhuan.erban.avroom;
+
+import android.content.Context;
+import android.util.SparseArray;
+
+import com.yizhuan.erban.avroom.widget.ViewItem;
+import com.yizhuan.erban.ui.widget.GiftDialog;
+
+/**
+ * 用户卡片的管理
+ * Created by lvzebiao on 2018/11/12.
+ */
+
+public class UserCardButtonManager {
+
+
+
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java
new file mode 100644
index 000000000..6217298d9
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java
@@ -0,0 +1,1371 @@
+package com.yizhuan.erban.avroom.activity;
+
+
+import android.annotation.SuppressLint;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.view.ViewPager;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewStub;
+import android.view.WindowManager;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.netease.nim.uikit.common.util.log.LogUtil;
+import com.netease.nimlib.sdk.NIMSDK;
+import com.netease.nimlib.sdk.Observer;
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
+import com.netease.nimlib.sdk.msg.model.BroadcastMessage;
+import com.opensource.svgaplayer.SVGADrawable;
+import com.opensource.svgaplayer.SVGAImageView;
+import com.opensource.svgaplayer.SVGAParser;
+import com.opensource.svgaplayer.SVGAVideoEntity;
+import com.orhanobut.logger.Logger;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.fragment.AbsRoomFragment;
+import com.yizhuan.erban.avroom.fragment.HomePartyFragment;
+import com.yizhuan.erban.avroom.fragment.InputPwdDialogFragment;
+import com.yizhuan.erban.avroom.game.PlayGameActivity;
+import com.yizhuan.erban.avroom.presenter.AvRoomPresenter;
+import com.yizhuan.erban.avroom.presenter.HomePartyPresenter;
+import com.yizhuan.erban.avroom.view.IAvRoomView;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.base.TitleBar;
+import com.yizhuan.erban.common.widget.CircleImageView;
+import com.yizhuan.erban.common.widget.CustomImageSpan;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.erban.home.adapter.FragmentViewPagerAdapter;
+import com.yizhuan.erban.monsterhunting.MonsterHuntingActivity;
+import com.yizhuan.erban.treasure_box.service.OpenHonourBoxService;
+import com.yizhuan.erban.ui.patriarch.help.LimitEnterRoomHelper;
+import com.yizhuan.erban.treasure_box.service.OpenBoxService;
+import com.yizhuan.erban.ui.pay.ChargeActivity;
+import com.yizhuan.erban.ui.user.UserInfoActivity;
+import com.yizhuan.erban.ui.utils.ImageLoadUtils;
+import com.yizhuan.erban.ui.widget.LoadingDialog;
+import com.yizhuan.erban.ui.widget.NobleOpenNoticeView;
+import com.yizhuan.erban.ui.widget.dialog.AllServiceGiftDialog;
+import com.yizhuan.erban.ui.widget.dialog.AllServiceGiftLevelOneDialog;
+import com.yizhuan.erban.ui.widget.dialog.AllServiceGiftLevelThreeDialog;
+import com.yizhuan.erban.ui.widget.dialog.AllServiceGiftLevelTwoDialog;
+import com.yizhuan.erban.ui.widget.dialog.MonsterDialog;
+import com.yizhuan.erban.ui.widget.marqueeview.Utils;
+import com.yizhuan.xchat_android_core.Constants;
+import com.yizhuan.xchat_android_core.DemoCache;
+import com.yizhuan.xchat_android_core.auth.AuthModel;
+import com.yizhuan.xchat_android_core.auth.event.LogoutEvent;
+import com.yizhuan.xchat_android_core.bean.BaseProtocol;
+import com.yizhuan.xchat_android_core.im.game.ImGameMode;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
+import com.yizhuan.xchat_android_core.manager.RoomEvent;
+import com.yizhuan.xchat_android_core.manager.RtcEngineManager;
+import com.yizhuan.xchat_android_core.mentoring_relationship.event.MentoringStartCountingEvent;
+import com.yizhuan.xchat_android_core.mentoring_relationship.event.MentoringStopCountingEvent;
+import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterHuntingResult;
+import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterInfo;
+import com.yizhuan.xchat_android_core.monsterhunting.bean.MonsterProtocol;
+import com.yizhuan.xchat_android_core.monsterhunting.manager.MonsterDataManager;
+import com.yizhuan.xchat_android_core.noble.AllServiceGiftProtocol;
+import com.yizhuan.xchat_android_core.noble.NobleInfo;
+import com.yizhuan.xchat_android_core.noble.NobleResourceType;
+import com.yizhuan.xchat_android_core.noble.NobleUtil;
+import com.yizhuan.xchat_android_core.patriarch.event.CloseMinRoomEvent;
+import com.yizhuan.xchat_android_core.patriarch.event.ImPushMsgPmLimitTimeEvent;
+import com.yizhuan.xchat_android_core.patriarch.event.PmDismissAllLimitDialogEvent;
+import com.yizhuan.xchat_android_core.patriarch.exception.PmRoomLimitException;
+import com.yizhuan.xchat_android_core.redPacket.bean.ActionDialogInfo;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_core.room.bean.SimplePartyRoomInfo;
+import com.yizhuan.xchat_android_core.room.dragonball.DragonBallModel;
+import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent;
+import com.yizhuan.xchat_android_core.room.game.GameInfo;
+import com.yizhuan.xchat_android_core.room.game.GameModel;
+import com.yizhuan.xchat_android_core.room.pk.event.PKStateEvent;
+
+import com.yizhuan.xchat_android_core.statistic.StatisticManager;
+import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
+import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil;
+
+import com.yizhuan.xchat_android_core.super_admin.util.SAdminOptUtil;
+
+import com.yizhuan.xchat_android_core.user.UserModel;
+import com.yizhuan.xchat_android_core.user.bean.UserInfo;
+import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
+import com.yizhuan.xchat_android_core.utils.StringUtils;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.utils.JavaUtil;
+import com.yizhuan.xchat_android_library.utils.UIUtils;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.lang.ref.WeakReference;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+import io.reactivex.Single;
+import io.reactivex.SingleObserver;
+import io.reactivex.disposables.Disposable;
+
+import static android.view.View.VISIBLE;
+import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT;
+import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT;
+
+/**
+ * 房间入口
+ *
+ * @author Administrator
+ */
+@CreatePresenter(AvRoomPresenter.class)
+public class AVRoomActivity extends BaseMvpActivity
+ implements View.OnClickListener, IAvRoomView {
+
+ private static final String TAG = "AVRoomActivity";
+ private static final String GAME_INFO = "gameInfo";
+ private static final String GAME_URL = "gameUrl";
+ private static final String AI_UID = "aiUid";
+ private static final String SHOW_PARTY_ROOM_FIRST_ENTER_TIP = "show_party_room_first_enter_tip";
+
+ private SVGAImageView svgaRoomBg;
+ private RelativeLayout finishLayout;
+ private ViewStub mVsRoomOffline;
+ private ViewStub mVsPartyRoomTip;
+ private ImageView avatarBg;
+ private TextView nick;
+ private CircleImageView avatar;
+ private SVGAParser mSVGAParser;
+
+ private ViewStub mVsNobleOpen;
+ private NobleOpenNoticeView mNobleOpenNoticeView;
+
+ private long roomUid;
+ private AbsRoomFragment mCurrentFragment;
+
+ private InputPwdDialogFragment mPwdDialogFragment;
+
+ private RoomInfo mRoomInfo;
+ private ImageView ivHeadWear;
+ private View shade;
+ private MonsterDialog monsterDialog;
+
+ private ViewPager viewpager;
+ private List fragmentList;
+ private FragmentViewPagerAdapter mAdapter;
+ private int pos = 0;
+ boolean isLast = true;
+ private LoadingDialog mLoadingDialog;
+
+ /**
+ * 管理限制进房
+ */
+ LimitEnterRoomHelper limitEnterRoomHelper;
+
+ public static void start(Context context, long roomUid) {
+ Intent intent = new Intent(context, AVRoomActivity.class);
+ intent.putExtra(Constants.ROOM_UID, roomUid);
+ AvRoomDataManager.get().setIsParty(false);
+ //bug-fixed java.lang.RuntimeException:Unable to start receiver com.yizhuan.erban.reciever.NotificationClickReceiver: android.util.AndroidRuntimeException
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ public static void start(Context context, long roomUid, GameInfo gameInfo, String gameUrl, long aiUid) {
+ Intent intent = new Intent(context, AVRoomActivity.class);
+ intent.putExtra(Constants.ROOM_UID, roomUid);
+ intent.putExtra(GAME_INFO, gameInfo);
+ intent.putExtra(GAME_URL, gameUrl);
+ intent.putExtra(AI_UID, aiUid);
+ AvRoomDataManager.get().setIsParty(false);
+ //bug-fixed java.lang.RuntimeException:Unable to start receiver com.yizhuan.erban.reciever.NotificationClickReceiver: android.util.AndroidRuntimeException
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ public static void start(Context context, long roomUid, int roomType) {
+ Intent intent = new Intent(context, AVRoomActivity.class);
+ intent.putExtra(Constants.ROOM_UID, roomUid);
+ intent.putExtra(Constants.ROOM_TYPE, roomType);
+ AvRoomDataManager.get().setIsParty(false);
+ //bug-fixed java.lang.RuntimeException:Unable to start receiver com.yizhuan.erban.reciever.NotificationClickReceiver: android.util.AndroidRuntimeException
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ public static void start(Context context, boolean isParty) {
+ Intent intent = new Intent(context, AVRoomActivity.class);
+ intent.putExtra(Constants.IS_PARTY, isParty);
+ AvRoomDataManager.get().setIsParty(true);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ /**
+ * 师徒任务中特殊的分享跳转
+ */
+ public static void startForMentoring(Context context, long roomUid) {
+ Intent intent = new Intent(context, AVRoomActivity.class);
+ intent.putExtra(Constants.ROOM_UID, roomUid);
+ // 缓存起来,后面在 HomePartyRoomFragment 里拿出来判断使用
+ AvRoomDataManager.get().setFromMentoring(true);
+ AvRoomDataManager.get().setMasterUid(roomUid);
+ AvRoomDataManager.get().setIsParty(false);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ setIntent(intent);
+ // 如果是同一个房间,则只更新房间的信息
+ long newRoomUid = intent.getLongExtra(Constants.ROOM_UID, 0);
+ boolean isParty = getIntent().getBooleanExtra(Constants.IS_PARTY, false);
+ //从嗨聊房进入
+ if (isParty) {
+ if (AvRoomDataManager.get().getRoomUidList() != null) {
+ List list = AvRoomDataManager.get().getRoomUidList();
+ if (list.size() > 0) {
+ AvRoomDataManager.get().setIsParty(true);
+ roomUid = list.get(0).getUid();
+ if (mCurrentFragment != null) {
+ mCurrentFragment = null;
+ }
+ if (roomUid != AuthModel.get().getCurrentUid()) {
+ StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_ENTERROOM, "进入别人房间");
+ }
+ updateRoomInfo();
+ return;
+ } else {
+ AvRoomDataManager.get().setIsParty(false);
+ }
+ } else {
+ AvRoomDataManager.get().setIsParty(false);
+ }
+ }
+
+ if (newRoomUid != 0 && newRoomUid == roomUid) {
+ updateRoomInfo();
+ return;
+ }
+ // 师徒任务三判定
+ if (AvRoomDataManager.get().isFromMentoring() && Objects.equals(AvRoomDataManager.get().getMasterUid(),
+ AvRoomDataManager.get().mCurrentRoomInfo.getUid())) {
+ // 只有从任务三分享房间链接进来的时候才开始倒计时
+ EventBus.getDefault().post(new MentoringStartCountingEvent());
+ } else {
+ EventBus.getDefault().post(new MentoringStopCountingEvent());
+ }
+ roomUid = newRoomUid;
+ if (roomUid != AuthModel.get().getCurrentUid()) {
+ StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_ENTERROOM, "进入别人房间");
+ }
+ if (mCurrentFragment != null) {
+ mCurrentFragment = null;
+ }
+ // 相同类型的房间,但是是不同人的房间
+ if (AvRoomDataManager.get().isFirstEnterRoomOrChangeOtherRoom(roomUid)) {
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(View.INVISIBLE);
+ getDialogManager().showProgressDialog(this, getString(R.string.waiting_text), true);
+ updateRoomInfo();
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_chat_room);
+
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ roomUid = getIntent().getLongExtra(Constants.ROOM_UID, 0);
+ boolean isParty = getIntent().getBooleanExtra(Constants.IS_PARTY, false);
+ //如果是嗨聊房入口roomUid就不从intent中取值
+ if (isParty) {
+ List roomUidList = AvRoomDataManager.get().getRoomUidList();
+ if (roomUidList != null && roomUidList.size() > 0) {
+ roomUid = roomUidList.get(0).getUid();
+ }
+ }
+ fragmentList = new ArrayList<>();
+
+ svgaRoomBg = findViewById(R.id.svga_image_view_bg);
+ mVsRoomOffline = findViewById(R.id.vs_room_offline);
+ mVsNobleOpen = findViewById(R.id.vs_noble_open_notice);
+ mVsPartyRoomTip = findViewById(R.id.vs_hiparty_room_tips);
+ viewpager = findViewById(R.id.viewpager);
+ shade = findViewById(R.id.view);
+ mSVGAParser = new SVGAParser(this);
+
+ RtcEngineManager.get().setOpenAVRoomActivity(true);
+
+ IMNetEaseManager.get().getChatRoomEventObservable()
+ .compose(bindToLifecycle())
+ .subscribe(this::onRoomEventReceive);
+
+ if (roomUid != AuthModel.get().getCurrentUid()) {
+ StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_ENTERROOM, "进入别人房间");
+ }
+
+ EventBus.getDefault().register(this);
+
+ mAdapter = new FragmentViewPagerAdapter(getSupportFragmentManager(), fragmentList);
+ viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ dismissLoadingDialog();
+ pos = position;
+ List roomUidList = AvRoomDataManager.get().getRoomUidList();
+ if (fragmentList != null && fragmentList.size() > 0
+ && roomUidList != null && roomUidList.size() > 0) {
+ showLoadingDialog();
+ mCurrentFragment = (AbsRoomFragment) fragmentList.get(position);
+
+ //嗨聊房切换时清除公屏信息
+ EventBus.getDefault().post(new RoomClearScreenEvent());
+
+ roomUid = roomUidList.get(position).getUid();
+ StatisticManager.Instance().onEvent(StatisticsProtocol.Event.room_hiparty_slide, "房间内-滑动切换嗨聊房");
+ updateRoomInfo();
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ if (state == 2) {
+ isLast = false;
+ } else if (state == 0 && isLast) {
+ //此处为你需要的情况,再加入当前页码判断可知道是第一页还是最后一页
+ if (fragmentList.size() != 1 && pos == (fragmentList.size() - 1)) {
+ showLoadingDialog();
+ viewpager.setCurrentItem(0);
+ } else if (fragmentList.size() != 1 && pos == 0) {
+ showLoadingDialog();
+ viewpager.setCurrentItem(fragmentList.size() - 1);
+ }
+ } else {
+ isLast = true;
+ }
+ }
+ });
+ viewpager.setAdapter(mAdapter);
+
+ //第一次进来
+ if (AvRoomDataManager.get().isFirstEnterRoomOrChangeOtherRoom(roomUid)) {
+ getDialogManager().showProgressDialog(this, getString(R.string.waiting_text), false);
+ updateRoomInfo();
+ return;
+ }
+
+ addRoomFragment(true);
+
+ }
+
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ AvRoomDataManager.get().roomNoDestory = true;
+
+ registerGiftBroadcastMessage(true);
+ if (giftList != null) {
+ giftList.clear();
+ }
+ isResume = true;
+
+ }
+
+ private void onRoomEventReceive(RoomEvent roomEvent) {
+ if (roomEvent == null || roomEvent.getEvent() == RoomEvent.NONE) return;
+ int event = roomEvent.getEvent();
+ switch (event) {
+ case RoomEvent.ENTER_ROOM:
+ onEnterRoom();
+ break;
+ case RoomEvent.KICK_OUT_ROOM:
+ if (AvRoomDataManager.get().haveStartDragon && AvRoomDataManager.get().isOwner(roomEvent.getAccount())) {
+ giveUpDragonBar().subscribe(s -> onKickMember(roomEvent.getReason()));
+ } else {
+ onKickMember(roomEvent.getReason());
+ }
+ break;
+ case RoomEvent.ROOM_MANAGER_ADD:
+ case RoomEvent.ROOM_MANAGER_REMOVE:
+ if (AvRoomDataManager.get().isOwner(roomEvent.getAccount())) {
+ if (roomEvent.getEvent() == RoomEvent.ROOM_MANAGER_ADD) {
+ toast(R.string.set_room_manager);
+ } else if (roomEvent.getEvent() == RoomEvent.ROOM_MANAGER_REMOVE) {
+ toast(R.string.remove_room_manager);
+ }
+ }
+ break;
+ case RoomEvent.RTC_ENGINE_NETWORK_BAD:
+ toast("当前网络不稳定,请检查网络");
+ break;
+ case RoomEvent.RTC_ENGINE_NETWORK_CLOSE:
+ toast("当前网络异常,与服务器断开连接,请检查网络");
+ break;
+ case RoomEvent.ON_OPEN_NOBLE_NOTICE:
+ if (roomEvent.mRoomNobleMsgAttachment != null) {
+ NobleInfo nobleInfo = roomEvent.mRoomNobleMsgAttachment.nobleInfo;
+ if (nobleInfo == null) return;
+ if (mNobleOpenNoticeView == null)
+ mNobleOpenNoticeView = (NobleOpenNoticeView) mVsNobleOpen.inflate();
+ mNobleOpenNoticeView.setVisibility(VISIBLE);
+ mNobleOpenNoticeView.setData(nobleInfo, roomEvent.mRoomNobleMsgAttachment.nick,
+ roomEvent.mRoomNobleMsgAttachment.type);
+ }
+ break;
+ case RoomEvent.ROOM_INFO_UPDATE:
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null)
+ setBackBg(this, roomInfo, svgaRoomBg, bgPicture, shade);
+ break;
+ case RoomEvent.GIFT_OUT_OF_DATE:
+ onGiftOutOfDate();
+ break;
+ case RoomEvent.RECHARGE:
+ onNeedRecharge();
+ break;
+ case RoomEvent.RADISH_NOT_ENOUGH:
+ //已经在base弹出过,修复同时弹出2个弹窗的bug
+ //2019/8/20 @lzb
+ break;
+ case RoomEvent.MONSTER_STATUS_CHANGED:
+ MonsterProtocol.DataBean dataBean = roomEvent.getMonsterStatusAttachment().getDataBean();
+ Log.e(TAG, "onRoomEventReceive: monster status changed: " + dataBean);
+ RoomInfo myRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ // 当前为房间页面并且当前房间为怪兽出现房间时才出现通知
+ if (UIUtils.isTopActivity(AVRoomActivity.this) && myRoomInfo != null &&
+ myRoomInfo.getUid() == dataBean.getAppearRoomUid()) {
+ switch (dataBean.getMonsterStatus()) {
+ case MonsterInfo.MONSTER_STATUS_WILL_APPEAR:
+ if (dataBean.getBeforeAppearSeconds() <= 3 * 60 &&
+ dataBean.getBeforeAppearSeconds() >= 45) {
+ if (monsterDialog != null && monsterDialog.isShowing()) {
+ monsterDialog.dismiss();
+ }
+ monsterDialog = new MonsterDialog(AVRoomActivity.this, dataBean);
+ monsterDialog.show();
+ } else if (dataBean.getBeforeAppearSeconds() < 15) {
+ if (monsterDialog != null && monsterDialog.isShowing()) {
+ monsterDialog.dismiss();
+ }
+ monsterDialog = new MonsterDialog(AVRoomActivity.this, dataBean);
+ monsterDialog.show();
+ }
+ break;
+
+ case MonsterInfo.MONSTER_STATUS_DID_APPEAR:
+ if (dataBean.getAppearRoomUid() == AvRoomDataManager.get().mCurrentRoomInfo.getUid() &&
+ UIUtils.isTopActivity(AVRoomActivity.this)) {
+ getMvpPresenter().getMonster();
+ }
+ break;
+
+ case MonsterInfo.MONSTER_STATUS_DID_LEAVE:
+ if (monsterDialog != null && monsterDialog.isShowing()) {
+ monsterDialog.dismiss();
+ }
+ monsterDialog = new MonsterDialog(AVRoomActivity.this, dataBean);
+ monsterDialog.show();
+ break;
+ }
+ }
+ break;
+ case RoomEvent.MONSTER_HUNTING_RESULT:
+ MonsterHuntingResult monsterHuntingResult = roomEvent.getMonsterHuntingResultAttachment().getResult();
+ Log.e(TAG, "onRoomEventReceive: monster result has come: " + monsterHuntingResult);
+ RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ // 当前为房间页面并且当前房间为怪兽出现房间时才出现通知
+ if (UIUtils.isTopActivity(AVRoomActivity.this) && currentRoomInfo != null &&
+ currentRoomInfo.getUid() == monsterHuntingResult.getMonster().getAppearRoomUid()) {
+ MonsterProtocol.DataBean monsterInfo = monsterHuntingResult.getMonster();
+ if (monsterDialog != null && monsterDialog.isShowing()) {
+ monsterDialog.dismiss();
+ }
+ monsterDialog = new MonsterDialog(AVRoomActivity.this, monsterInfo);
+ monsterDialog.show();
+ }
+ break;
+ case RoomEvent.MY_SELF_KICK_OUT_ROOM_BY_S_ADMIN:
+ toBack(true);
+ break;
+ default:
+ }
+ }
+
+
+ private void onKickMember(ChatRoomKickOutEvent reason) {
+ if (reason == null) return;
+ ChatRoomKickOutEvent.ChatRoomKickOutReason reasonReason = reason.getReason();
+ getDialogManager().dismissDialog();
+ if (reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.BE_BLACKLISTED) {
+ if (SAdminOptUtil.isOptBySAdmin(reason)) {
+ toast(R.string.add_to_room_black_list_by_s_admin);
+ } else {
+ toast(getString(R.string.add_black_list));
+ }
+ finish();
+ } else if (reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.CHAT_ROOM_INVALID) {
+ showLiveFinishView();
+ } else if (reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.KICK_OUT_BY_MANAGER) {
+ if (SAdminOptUtil.isOptBySAdmin(reason)) {
+ toast(R.string.kick_out_room_by_s_admin);
+ } else {
+ toast(getString(R.string.kick_member_by_manager));
+ }
+ finish();
+ } else {
+ finish();
+ }
+ }
+
+ private void onEnterRoom() {
+ mRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ Logger.i("进入房间成功:" + mRoomInfo.getRoomId());
+ dismissDialog();
+ getMvpPresenter().getMonster();
+
+ startGame();
+ }
+
+ private void startGame() {
+ String url = getIntent().getStringExtra(GAME_URL);
+ LogUtil.e("游戏地址" + url);
+ if (!TextUtils.isEmpty(url)) {
+ long aiUid = getIntent().getLongExtra(AI_UID, 0);
+ GameInfo gameInfo = (GameInfo) getIntent().getSerializableExtra(GAME_INFO);
+ PlayGameActivity.start(this, url, aiUid);
+ GameModel.get().updateGameStatus(
+ AvRoomDataManager.get().getRoomUid(),
+ GameModel.PLAYING,
+ gameInfo.getGameId(),
+ gameInfo.getGameName(),
+ false)
+ .subscribe();
+ if (aiUid == 0) {
+ GameModel.get().sendGameStartMsg(gameInfo);
+ } else {
+ if (AvRoomDataManager.get().findFreePositionNoOwner() == 0) {
+ getMvpPresenter().upAiMicroPhone(0, aiUid + "");
+ } else {
+ getMvpPresenter().upAiMicroPhone(AvRoomDataManager.get().findFreePosition(), aiUid + "");
+ }
+ }
+ }
+ }
+
+ /**
+ * @param isRoomMin 如果是最小化,则传ture
+ */
+ private void addRoomFragment(boolean isRoomMin) {
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null) {
+ setBackBg(this, roomInfo, svgaRoomBg, bgPicture, shade);
+ int roomType = roomInfo.getType();
+ if ((roomType == RoomInfo.ROOMTYPE_HOME_PARTY || roomType == RoomInfo.ROOMTYPE_CP) &&
+ !(mCurrentFragment instanceof HomePartyFragment)) {
+ fragmentList.clear();
+ List roomUidList = AvRoomDataManager.get().getRoomUidList();
+ if (AvRoomDataManager.get().isParty()) {
+ for (int i = 0; i < roomUidList.size(); i++) {
+ HomePartyFragment homePartyFragment = HomePartyFragment.newInstance(roomUidList.get(i).getUid(), isRoomMin);
+ if (i == 0) {
+ mCurrentFragment = homePartyFragment;
+ }
+ fragmentList.add(homePartyFragment);
+ }
+ showPartyRoomTip();
+ } else {
+ mCurrentFragment = HomePartyFragment.newInstance(roomUid, isRoomMin);
+ SimplePartyRoomInfo simplePartyRoomInfo = new SimplePartyRoomInfo();
+ simplePartyRoomInfo.setUid(roomUid);
+ roomUidList.add(simplePartyRoomInfo);
+ fragmentList.add(mCurrentFragment);
+ }
+ }
+ if (fragmentList != null && fragmentList.size() > 0) {
+ mAdapter.setmFragmentList(fragmentList);
+ mAdapter.notifyDataSetChanged();
+ }
+
+ getMvpPresenter().getActionDialog(2);
+ }
+
+
+ if (isRoomMin) {
+ getMvpPresenter().judgeIsLimitEnter();
+ }
+
+ }
+
+ private String[] bgPicture = new String[]{""};
+
+ public static void setBackBg(Context context, RoomInfo roomInfo, SVGAImageView svgaRoomBg, String[] bgPicture, View shade) {
+ if (roomInfo != null) {
+ if (!StringUtils.isBlank(roomInfo.getBackPic())) {
+ int resourceType = NobleUtil.getResourceType(roomInfo.getBackPic());
+ if (resourceType == NobleResourceType.URLS) {
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(View.VISIBLE);
+ if (!roomInfo.getBackPic().equals(bgPicture[0])) {
+ bgPicture[0] = roomInfo.getBackPic();
+ ImageLoadUtils.loadRoomBgBackground(context, bgPicture[0], svgaRoomBg);
+ }
+ } else if (resourceType == NobleResourceType.SVGAS) {
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(View.VISIBLE);
+ if (!roomInfo.getBackPic().equals(bgPicture[0])) {
+ bgPicture[0] = roomInfo.getBackPic();
+ try {
+ SVGAParser mSVGAParser = new SVGAParser(context);
+ mSVGAParser.parse(new URL(bgPicture[0]), new SVGAParser.ParseCompletion() {
+ @Override
+ public void onComplete(SVGAVideoEntity svgaVideoEntity) {
+ svgaRoomBg.setVisibility(View.VISIBLE);
+ SVGADrawable drawable = new SVGADrawable(svgaVideoEntity);
+ svgaRoomBg.setImageDrawable(drawable);
+ svgaRoomBg.startAnimation();
+ }
+
+ @Override
+ public void onError() {
+ svgaRoomBg.setVisibility(View.GONE);
+ }
+ });
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ } else {
+ bgPicture[0] = "";
+ if (roomInfo.getType() == RoomInfo.ROOMTYPE_CP) {
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(VISIBLE);
+ shade.setVisibility(View.GONE);
+ if (roomInfo.isOpenGame) {
+ svgaRoomBg.setImageResource(R.drawable.room_cp_game_bg);
+ } else {
+ svgaRoomBg.setImageResource(R.drawable.bg_room_cp);
+ }
+ } else {
+ //不再使用头像作为房间默认背景
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(VISIBLE);
+ if (isPKModel) {
+ svgaRoomBg.setImageResource(R.drawable.bg_room_pk);
+ } else
+ svgaRoomBg.setImageResource(R.drawable.bg_room_normal_default_pic);
+ }
+
+ }
+ } else {
+ svgaRoomBg.clearAnimation();
+ svgaRoomBg.setVisibility(View.GONE);
+ }
+ }
+
+ private void showLiveFinishView() {
+ if (mCurrentFragment instanceof HomePartyFragment) {
+ ((HomePartyFragment) mCurrentFragment).dismissGiftDialog();
+ }
+ if (mRoomInfo != null) {
+ if (finishLayout == null) {
+ finishLayout = (RelativeLayout) mVsRoomOffline.inflate();
+ ivHeadWear = finishLayout.findViewById(R.id.iv_head_wear);
+ avatar = finishLayout.findViewById(R.id.avatar);
+ avatarBg = finishLayout.findViewById(R.id.avatar_bg);
+ nick = finishLayout.findViewById(R.id.nick);
+ }
+ //防止点击到底下的操作按钮
+ finishLayout.setOnClickListener(null);
+ finishLayout.setVisibility(VISIBLE);
+ finishLayout.findViewById(R.id.home_page_btn).setOnClickListener(this);
+ finishLayout.findViewById(R.id.back_btn).setOnClickListener(this);
+
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null) {
+ setBackBg(this, roomInfo, svgaRoomBg, bgPicture, shade);
+ }
+
+ UserModel.get().getUserInfo(mRoomInfo.getUid()).subscribe(new SingleObserver() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ mCompositeDisposable.add(d);
+ }
+
+ @Override
+ public void onSuccess(UserInfo userInfo) {
+ setUserInfo(userInfo);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+ });
+
+ } else {
+
+ finish();
+ }
+ AvRoomDataManager.get().release();
+ }
+
+ private void showPartyRoomTip() {
+ boolean isFirst = (boolean) SharedPreferenceUtils.get(SHOW_PARTY_ROOM_FIRST_ENTER_TIP, true);
+ if (isFirst) {
+ LinearLayout layout = (LinearLayout) mVsPartyRoomTip.inflate();
+ layout.setOnClickListener(view -> {
+ mVsPartyRoomTip.setVisibility(View.GONE);
+ SharedPreferenceUtils.put(SHOW_PARTY_ROOM_FIRST_ENTER_TIP, false);
+ });
+ mVsPartyRoomTip.setVisibility(View.VISIBLE);
+ } else {
+ mVsPartyRoomTip.setVisibility(View.GONE);
+ }
+ }
+
+ private void setUserInfo(UserInfo userInfo) {
+ if (avatarBg == null || avatar == null || nick == null) return;
+ if (userInfo != null) {
+ ImageLoadUtils.loadImageWithBlurTransformation(this, userInfo.getAvatar(), avatarBg);
+ ImageLoadUtils.loadBigAvatar(this, userInfo.getAvatar(), avatar, false);
+ Drawable badgeDrawable = null;
+ if (userInfo.getNobleInfo() != null) {
+ // 勋章
+ String badge = userInfo.getNobleInfo().getBadge();
+ badgeDrawable = NobleUtil.getDrawable(this, badge);
+ // 头饰
+ String headWear = userInfo.getNobleInfo().getHeadWear();
+ NobleUtil.loadResource(headWear, ivHeadWear);
+ }
+ String nick = (badgeDrawable == null ? "" : " ") + userInfo.getNick();
+ SpannableStringBuilder builder = new SpannableStringBuilder(nick);
+ if (badgeDrawable != null) {
+ badgeDrawable.setBounds(0, 0, Utils.dip2px(this, 18), Utils.dip2px(this, 18));
+ CustomImageSpan imageSpan = new CustomImageSpan(badgeDrawable);
+ builder.setSpan(imageSpan, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
+ }
+ Drawable drawable = ContextCompat.getDrawable(this,
+ userInfo.getGender() == 1 ? R.drawable.ic_male : R.drawable.ic_female);
+ this.nick.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
+ this.nick.setText(builder);
+ } else {
+ avatar.setImageResource(R.drawable.default_user_head);
+ }
+ }
+
+ private void updateRoomInfo() {
+ getMvpPresenter().requestRoomInfoFromService(String.valueOf(roomUid));
+ }
+
+ private void showRoomPwdDialog(final RoomInfo roomInfo) {
+ if (!isValid()) return;
+ // fix bugs
+ if (afterOnSavedInstanceState) {
+ finish();
+ return;
+ }
+ mPwdDialogFragment = InputPwdDialogFragment.newInstance(getString(R.string.input_pwd),
+ getString(R.string.ok),
+ getString(R.string.cancel),
+ roomInfo.getRoomPwd());
+ mPwdDialogFragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.TranslucentNoTitle);
+ if (getSupportFragmentManager() == null) return;
+ mPwdDialogFragment.show(getSupportFragmentManager(), "pwdDialog");
+
+ mPwdDialogFragment.setOnDialogBtnClickListener(new InputPwdDialogFragment.OnDialogBtnClickListener() {
+ @Override
+ public void onBtnConfirm() {
+ getMvpPresenter().enterRoom(roomInfo);
+ }
+
+ @Override
+ public void onBtnCancel() {
+ mPwdDialogFragment.dismiss();
+ finish();
+ }
+ });
+ }
+
+
+ @Override
+ public void onGetActionDialog(List dialogInfo) {
+ if (mCurrentFragment != null && mCurrentFragment.isVisible()) {
+ mCurrentFragment.onShowActivity(dialogInfo);
+ }
+ }
+
+ @Override
+ public void onGetActionDialogError(String error) {
+ }
+
+ @Override
+ public void exitRoom(RoomInfo currentRoomInfo) {
+ if (OpenBoxService.isAutoOpenBox) {
+ OpenBoxService.stop(this);
+ }
+ if (OpenHonourBoxService.isAutoOpenBox) {
+ OpenHonourBoxService.stop(this);
+ }
+ if (currentRoomInfo != null && currentRoomInfo.getUid() == roomUid) {
+ finish();
+ }
+ }
+
+ @Override
+ public void onRoomOnlineNumberSuccess(int onlineNumber) {
+ if (mCurrentFragment != null)
+ mCurrentFragment.onRoomOnlineNumberSuccess(onlineNumber);
+ }
+
+ @Override
+ public void getMonsterInfoSuccess(MonsterInfo monsterInfo) {
+ // 把请求回来的数据缓存到内存里
+ MonsterDataManager.get().setMonsterInfo(monsterInfo.getAppearRoomUid(), monsterInfo);
+ switch (monsterInfo.getMonsterStatus()) {
+ case MonsterInfo.MONSTER_STATUS_DID_APPEAR:
+ if (monsterInfo.getBeforeDisappearSeconds() >= 0) {
+ if (monsterDialog != null && monsterDialog.isShowing()) {
+ monsterDialog.dismiss();
+ }
+ MonsterHuntingActivity.start(this);
+ }
+ break;
+ }
+ }
+
+ @Override
+ public void getMonsterInfoFail(String error) {
+ toast(error);
+ }
+
+ private void onGiftOutOfDate() {
+ toast("该礼物已过期");
+ }
+
+ public void onNeedRecharge() {
+
+ getDialogManager().showOkCancelDialog("余额不足,是否充值", true,
+ new DialogManager.AbsOkDialogListener() {
+ @Override
+ public void onOk() {
+
+ StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_NOT_ENOUGH_TO_RECHARGE,
+ "余额不足_去充值:送礼物");
+ ChargeActivity.start(AVRoomActivity.this);
+ }
+ });
+ }
+
+ public void toBack() {
+ toBack(false);
+ }
+
+ /**
+ * @param justClosePage ture的话 表示 退出聊天室的方法不调用,关闭当前界面就行
+ * 把退出聊天室交给Main执行
+ */
+ public void toBack(boolean justClosePage) {
+ //陪伴房的弹框提示去掉,直接关闭即可
+ cancelGame();
+ if (!justClosePage) {
+ getMvpPresenter().exitRoom();
+ }
+ finish();
+ }
+
+ @Override
+ protected int setBgColor() {
+ return R.color.black;
+ }
+
+ @Override
+ protected boolean needSteepStateBar() {
+ return false;
+ }
+
+ @Override
+ protected void onDestroy() {
+
+ // 确保关闭 dialog,避免出现 leak window 异常
+ getDialogManager().dismissDialog();
+ if (AvRoomDataManager.get().haveStartDragon) {
+ giveUpDragonBar();
+ }
+
+ // 避免 ISE
+ if (mPwdDialogFragment != null && mPwdDialogFragment.isAdded()
+ && !isFinishing()) {
+ mPwdDialogFragment.dismiss();
+ mPwdDialogFragment = null;
+ }
+ if (monsterDialog != null) {
+ monsterDialog.cancelCountDownTimer();
+ monsterDialog.dismiss();
+ monsterDialog = null;
+ }
+ if (svgaRoomBg.isAnimating()) {
+ svgaRoomBg.clearAnimation();
+ }
+ EventBus.getDefault().unregister(this);
+ RtcEngineManager.get().setOpenAVRoomActivity(false);
+ super.onDestroy();
+
+ if (giftDialog != null && giftDialog.isShowing()) {
+ giftDialog.setOnDismissListener(null);
+ giftDialog.dismiss();
+ giftDialog = null;
+ }
+
+ if (limitEnterRoomHelper != null) {
+ limitEnterRoomHelper.release();
+ }
+
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.home_page_btn:
+ if (mRoomInfo != null) {
+ UserInfoActivity.Companion.start(this, mRoomInfo.getUid());
+ finish();
+ }
+ break;
+ case R.id.back_btn:
+ finish();
+ break;
+ default:
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (DemoCache.readFirstExitRoom() && ImGameMode.get().exitCancelGame(false)) {
+ DemoCache.saveFirstExitRoom();
+ getDialogManager().showOkCancelDialog("最小化房间会取消当前游戏发起", false, new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+ }
+
+ @Override
+ public void onOk() {
+ minRoomCode();
+ }
+ });
+ } else if (mNobleOpenNoticeView != null && mNobleOpenNoticeView.getVisibility() == VISIBLE) {
+ mNobleOpenNoticeView.setVisibility(View.GONE);
+ } else if (AvRoomDataManager.get().haveStartDragon) {
+ getDialogManager().showOkCancelDialog("你正在交友匹配中,此操作代表你放弃本局匹配展示,确定进行此操作?", false, new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+ }
+
+ @SuppressLint("CheckResult")
+ @Override
+ public void onOk() {
+
+ //noinspection ResultOfMethodCallIgnored
+ giveUpDragonBar().subscribe(s -> {
+ new HomePartyPresenter().cancelDragon();
+ minRoomCode();
+ });
+
+ }
+ });
+ } else {
+ minRoomCode();
+ }
+ }
+
+ /**
+ * 最小化房间的代码,放在一处
+ */
+ private void minRoomCode() {
+ cancelGame();
+ ImGameMode.get().exitCancelGame(true);
+ AvRoomDataManager.get().roomNoDestory = false;
+ super.onBackPressed();
+ }
+
+ private void cancelGame() {
+
+ if (GameModel.get().prepareGame()) {
+ GameModel.get().updateGameStatus(
+ AvRoomDataManager.get().getRoomUid(),
+ GameModel.SELECTING,
+ GameModel.get().getGameId(),
+ GameModel.get().getGameName(), false)
+ .subscribe(s -> GameModel.get().sendCancelPrepare());
+ GameModel.get().removePool(GameModel.get().getGameId()).subscribe();
+ }
+ }
+
+ @Override
+ public void requestRoomInfoSuccessView(RoomInfo roomInfo) {
+ mRoomInfo = roomInfo;
+
+ // 超管绕过密码直接进房
+ if (SuperAdminUtil.isSuperAdmin()) {
+ getMvpPresenter().enterRoom(roomInfo);
+ return;
+ }
+
+ if (!AvRoomDataManager.get().isFirstEnterRoomOrChangeOtherRoom(roomInfo.getUid())
+ || TextUtils.isEmpty(roomInfo.getRoomPwd())
+ || roomInfo.getUid() == AuthModel.get().getCurrentUid()) {
+ if (AvRoomDataManager.get().isCpRoom() && AvRoomDataManager.get().isRoomOwner()) {
+ getDialogManager().showOkCancelDialog("切换房间后,房间将关闭,确认切换吗?", false, new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+ // cp房切换嗨聊房,弹框点击拒绝:防止从首页小图标重新进入cp房循环展示切换房间弹框;
+ AvRoomDataManager.get().setIsParty(false);
+
+ finish();
+ }
+
+ @Override
+ public void onOk() {
+ // cp房切换嗨聊房,弹框点击确定:清屏并重置公屏数据;
+ // 普通房切嗨聊房直接清屏(清屏调用在homePartyFragment 随机切换嗨聊房 监听),
+ // cp房切换嗨聊房不会先清屏,防止用户点击取消按钮,不进行切换房间操作,但是公屏被清的情况;
+ EventBus.getDefault().post(new RoomClearScreenEvent());
+
+ getMvpPresenter().enterRoom(roomInfo);
+ }
+ });
+ } else {
+ getMvpPresenter().enterRoom(roomInfo);
+ }
+ } else {
+ if (isFinishing()) {
+ return;
+ }
+ showRoomPwdDialog(roomInfo);
+ }
+ }
+
+ @Override
+ public void requestRoomInfoFailView(Throwable throwable) {
+ dismissLoadingDialog();
+ getDialogManager().dismissDialog();
+ if (throwable instanceof PmRoomLimitException) {
+ getLimitEnterRoomHelper().handleThisContext(context, throwable.getMessage(), false, () -> {
+ finish();
+ //如果本身房间存在,这个时候直接finish,没有退出房间,应当退出
+ EventBus.getDefault().post(new CloseMinRoomEvent());
+ });
+ return;
+ }
+ toast(throwable.getMessage());
+ finish();
+ }
+
+ @Override
+ public void enterRoomSuccess() {
+ addRoomFragment(false);
+ //获取管理员
+ getMvpPresenter().getNormalChatMember();
+ dismissLoadingDialog();
+ }
+
+ @Override
+ public void enterRoomFail(int code, String error) {
+ dismissDialog();
+ dismissLoadingDialog();
+ AvRoomDataManager.get().release();
+ toast(error);
+ finish();
+ }
+
+ @Override
+ public void showFinishRoomView() {
+ dismissLoadingDialog();
+ dismissDialog();
+ showLiveFinishView();
+ }
+
+ @Override
+ public void showBlackEnterRoomView() {
+ dismissLoadingDialog();
+ dismissDialog();
+ AvRoomDataManager.get().release();
+ toast(getString(R.string.add_black_list));
+ finish();
+ }
+
+ @Override
+ public void dismissLoadingDialog() {
+ if (mLoadingDialog != null && mLoadingDialog.isShowing()) {
+ mLoadingDialog.dismiss();
+ }
+ }
+
+ public void showLoadingDialog() {
+ if (mLoadingDialog == null) {
+ mLoadingDialog = new LoadingDialog(AVRoomActivity.this);
+ }
+ mLoadingDialog.show();
+ }
+
+ private void dismissDialog() {
+ getDialogManager().dismissDialog();
+ if (mPwdDialogFragment != null) {
+ mPwdDialogFragment.dismiss();
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onLogoutEvent(LogoutEvent event) {
+ finish();
+ }
+
+ public static boolean isPKModel = false;
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onPKStateEvent(PKStateEvent event) {
+ isPKModel = event != null && event.isCreate();
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null)
+ setBackBg(this, roomInfo, svgaRoomBg, bgPicture, shade);
+ }
+
+ public Single giveUpDragonBar() {
+ return DragonBallModel.get()
+ .clearDragonBar()
+ .compose(bindToLifecycle())
+ .doOnError(throwable -> toast(throwable.getMessage()))
+ .doOnSuccess(s -> {
+ AvRoomDataManager.get().haveStartDragon = false;
+ });
+ }
+
+
+ /*********************************显示全服礼物***************************************/
+
+ private GiftBroadcastObserver giftObserver;
+
+ protected void registerGiftBroadcastMessage(boolean register) {
+ if (giftObserver == null) {
+ giftObserver = new GiftBroadcastObserver(this);
+ }
+ NIMSDK.getMsgServiceObserve().observeBroadcastMessage(giftObserver, register);
+ }
+
+ private static class GiftBroadcastObserver implements Observer {
+ private WeakReference mReference;
+
+ GiftBroadcastObserver(AVRoomActivity activity) {
+ mReference = new WeakReference<>(activity);
+ }
+
+ @Override
+ public void onEvent(BroadcastMessage broadcastMessage) {
+ if (broadcastMessage != null) {
+ String contentStr = broadcastMessage.getContent();
+ Logger.i("全服礼物全局广播:" + contentStr);
+ if (TextUtils.isEmpty(contentStr)) return;
+ AVRoomActivity activity = mReference.get();
+ if (activity == null) return;
+ if (activity.isValid()) {
+ JSONObject jsonObject;
+ try {
+ jsonObject = JSON.parseObject(contentStr);
+ } catch (Exception e) {
+ jsonObject = null;
+ }
+ if (jsonObject == null) return;
+ if (jsonObject.containsKey("body")) {
+ String body = jsonObject.getString("body");
+ if (TextUtils.isEmpty(body)) return;
+ activity.onReceivedGiftBroadcastMessage(body);
+ }
+ }
+ }
+ }
+ }
+
+ private Dialog giftDialog;
+ private LinkedList giftList;
+ private boolean isResume = true;
+
+ /**
+ * 接收到全局广播信息
+ *
+ * @param body 信息实体
+ */
+ protected void onReceivedGiftBroadcastMessage(String body) {
+ BaseProtocol baseProtocol;
+ try {
+ baseProtocol = JSON.parseObject(body, BaseProtocol.class);
+ } catch (Exception e) {
+ baseProtocol = null;
+ }
+ if (baseProtocol == null) return;
+
+ switch (baseProtocol.getFirst()) {
+ case CUSTOM_MSG_HEADER_TYPE_GIFT:
+// if (!isResume) return;
+ if (giftList == null) {
+ giftList = new LinkedList<>();
+ }
+ int second2 = baseProtocol.getSecond();
+ AllServiceGiftProtocol.DataBean data = JSON.parseObject(String.valueOf(baseProtocol.getData()), AllServiceGiftProtocol.DataBean.class);
+ if (data == null || (data.getGiftUrl()) == null)
+ return;
+ giftList.add(data);
+ if (second2 == CUSTOM_MSG_ALL_SERVICE_GIFT) {
+ if (giftDialog != null && giftDialog.isShowing()) {
+ // 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个
+ AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
+ if (dataBean != null) {
+ return;
+ } else {
+ if (isValid()) {
+ giftDialog.dismiss();
+ }
+ }
+ } else {
+ showGiftDialog();
+ }
+ }
+ break;
+ default:
+ }
+ }
+
+ private void showGiftDialog() {
+ if (giftList.size() == 0) return;
+ giftDialog = generateAllServiceGiftDialog(this, giftList.peekFirst());
+ giftDialog.setOnDismissListener(dialog -> {
+ giftList.pollFirst();
+ AllServiceGiftProtocol.DataBean dataBean = giftList.peekFirst();
+ if (dataBean != null) {
+ if (isValid()) {
+ showGiftDialog();
+ } else {
+ giftList.clear();
+ }
+ }
+ });
+ giftDialog.show();
+ }
+
+ private AllServiceGiftDialog generateAllServiceGiftDialog(Context context, AllServiceGiftProtocol.DataBean dataBean) {
+ switch (JavaUtil.str2int(dataBean.getLevelNum())) {
+ default:
+ case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_1:
+ return new AllServiceGiftLevelOneDialog(context, dataBean);
+
+ case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_2:
+
+ return new AllServiceGiftLevelTwoDialog(context, dataBean);
+
+ case AllServiceGiftDialog.ALL_SERVICE_GIFT_LEVEL_3:
+ return new AllServiceGiftLevelThreeDialog(context, dataBean);
+ }
+ }
+
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ registerGiftBroadcastMessage(false);
+ isResume = false;
+ }
+
+ private int gvTipsIndex = 0;
+
+ public void handleGiftValueStartTips() {
+ String key_first_open_gift_value_tips = "first_open_gift_value_tips";
+ Boolean firstOpen = (Boolean) SharedPreferenceUtils.get(key_first_open_gift_value_tips, true);
+ if (firstOpen != null && !firstOpen) {
+ //不是首次打开,不提示
+ return;
+ }
+ gvTipsIndex = 0;
+ SharedPreferenceUtils.put(key_first_open_gift_value_tips, false);
+ final int[] topRes = new int[]{R.drawable.icon_gv_start_top_1, R.drawable.icon_gv_start_top_2};
+ //因为0和1是一张图,
+ final int[] bottomRes = new int[]{R.drawable.icon_gv_start_bottom_0, R.drawable.icon_gv_start_bottom_2};
+ ViewStub vs_gift_value_tips = findViewById(R.id.vs_gift_value_tips);
+ View parent = vs_gift_value_tips.inflate();
+ parent.setVisibility(VISIBLE);
+ View iv_gv_status_bar = parent.findViewById(R.id.iv_gv_status_bar);
+ final ImageView iv_gv_top = parent.findViewById(R.id.iv_gv_top);
+ iv_gv_status_bar.getLayoutParams().height = TitleBar.getStatusBarHeight();
+ final TextView tv_skip_guide = parent.findViewById(R.id.tv_skip_guide);
+ tv_skip_guide.setOnClickListener(v -> parent.setVisibility(View.GONE));
+ tv_skip_guide.setVisibility(VISIBLE);
+ ImageView iv_gv_bottom = parent.findViewById(R.id.iv_gv_bottom);
+ parent.setOnClickListener(v -> {
+ if (gvTipsIndex < topRes.length) {
+ iv_gv_top.setImageResource(topRes[gvTipsIndex]);
+ if (gvTipsIndex == topRes.length - 1) {
+ tv_skip_guide.setVisibility(View.GONE);
+ } else {
+ tv_skip_guide.setVisibility(VISIBLE);
+ }
+ } else {
+ parent.setVisibility(View.GONE);
+ }
+ if (gvTipsIndex < bottomRes.length) {
+ iv_gv_bottom.setImageResource(bottomRes[gvTipsIndex]);
+ }
+ gvTipsIndex++;
+ });
+ }
+
+ private void handlePmExitRoom() {
+ EventBus.getDefault().post(new PmDismissAllLimitDialogEvent());
+ getMvpPresenter().exitRoom();
+ }
+
+ public LimitEnterRoomHelper getLimitEnterRoomHelper() {
+ if (limitEnterRoomHelper == null) {
+ limitEnterRoomHelper = new LimitEnterRoomHelper();
+ }
+ return limitEnterRoomHelper;
+ }
+
+ @Override
+ public void recoverRoomMinWhenPmLimit(Throwable throwable) {
+ getLimitEnterRoomHelper().handleThisContext(this, throwable.getMessage(), true,
+ this::handlePmExitRoom);
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onImPushMsgPmLimitTimeEvent(ImPushMsgPmLimitTimeEvent event) {
+ //时间到限制时间段之后,后台推送im消息
+ getLimitEnterRoomHelper().handleThisContext(this, event.getData(), true, this::handlePmExitRoom);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/CpRoomInviteActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/CpRoomInviteActivity.java
new file mode 100644
index 000000000..561c20ea4
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/CpRoomInviteActivity.java
@@ -0,0 +1,149 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.fragment.InviteFriendListFragment;
+import com.yizhuan.erban.base.BaseBindingActivity;
+import com.yizhuan.erban.databinding.ActivityCpRoomInviteBinding;
+import com.yizhuan.erban.friend.view.SelectFriendActivity;
+import com.yizhuan.erban.public_chat_hall.event.AitFriendEvent;
+import com.yizhuan.erban.public_chat_hall.fragment.PublicChatHallFriendListFragment;
+import com.yizhuan.erban.ui.im.friend.FriendListFragment;
+import com.yizhuan.xchat_android_core.auth.AuthModel;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_core.room.model.RoomSettingModel;
+import com.yizhuan.xchat_android_core.share.bean.SessionType;
+import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver;
+import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
+import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
+import com.yizhuan.xchat_android_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 io.reactivex.Single;
+import io.reactivex.SingleSource;
+import io.reactivex.functions.Consumer;
+import io.reactivex.functions.Function;
+
+@ActLayoutRes(R.layout.activity_cp_room_invite)
+public class CpRoomInviteActivity extends BaseBindingActivity {
+
+ private List uids = new ArrayList<>();
+ private List userNames = new ArrayList<>();
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ EventBus.getDefault().unregister(this);
+ }
+
+ @Override
+ protected void init() {
+ EventBus.getDefault().register(this);
+ initTitleBar("选择好友(0/20)");
+ getSupportFragmentManager().beginTransaction().add(R.id.content, new InviteFriendListFragment(), null).commitAllowingStateLoss();
+
+ mBinding.tvInvite.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (AvRoomDataManager.get().mCurrentRoomInfo == null) return;
+ if (uids.size() == 0) {
+ toast("要选择好友才可以邀请哦!");
+ return;
+ }
+ String uid = "";
+ for (int i = 0; i < uids.size(); i++) {
+ String targetUid = uids.get(i);
+ String nick = userNames.get(i);
+ uid += uids.get(i) + ",";
+ int sessionType = SessionType.P2P;
+ IMNetEaseManager.get().sendSharingRoomMessage(sessionType, targetUid);
+ }
+
+ RoomSettingModel model = new RoomSettingModel();
+
+ model.invite(AvRoomDataManager.get().mCurrentRoomInfo.getUid(), uid)
+ .flatMap((Function>) s -> updateRoomInfo("", RoomInfo.IS_INVITE))
+ .subscribe(new DontWarnObserver() {
+ @Override
+ public void accept(RoomInfo roomInfo, String error) {
+ super.accept(roomInfo, error);
+ if (error != null) {
+ toast(error);
+ } else {
+ toast("邀请成功");
+ finish();
+ }
+ }
+ });
+ }
+ });
+ }
+
+ private Single updateRoomInfo(String encryptPwd, String limitType) {
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo == null) {
+ return Single.error(new Throwable("房间信息空"));
+ }
+ //更新房间接口调用成功后,会发事件RoomEvent.ROOM_INFO_UPDATE
+ RoomSettingModel model = new RoomSettingModel();
+ if (AvRoomDataManager.get().isRoomOwner()) {
+ return model.updateRoomInfo(roomInfo.title,
+ roomInfo.getRoomDesc(),
+ roomInfo.getIntroduction(),
+ encryptPwd,
+ roomInfo.getRoomTag(),
+ roomInfo.tagId,
+ AuthModel.get().getCurrentUid(),
+ AuthModel.get().getTicket(),
+ roomInfo.isHasAnimationEffect(),
+ roomInfo.getAudioQuality(),
+ limitType,
+ roomInfo.isPureMode());
+ } else {
+ return model.updateByAdmin(roomInfo.getUid(), roomInfo.title,
+ roomInfo.getRoomDesc(),
+ roomInfo.getIntroduction(),
+ encryptPwd,
+ roomInfo.getRoomTag(),
+ roomInfo.tagId,
+ AuthModel.get().getCurrentUid(),
+ AuthModel.get().getTicket(),
+ roomInfo.isHasAnimationEffect(),
+ roomInfo.getAudioQuality(),
+ roomInfo.isPureMode());
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void countingAitFriends(AitFriendEvent event) {
+ switch (event.getType()) {
+ case AitFriendEvent.TYPE_ADD:
+ if (uids.size() == 20) {
+ toast("最多只能选择20个好友哦");
+ return;
+ }
+ if (!uids.contains(event.getUid())) {
+ uids.add(event.getUid());
+ userNames.add(event.getNick());
+ }
+ break;
+
+ case AitFriendEvent.TYTPE_REMOVE:
+ if (uids.contains(event.getUid())) {
+ uids.remove(event.getUid());
+ userNames.remove(event.getNick());
+ }
+ break;
+ }
+ initTitleBar("选择好友(" + uids.size() + "/20)");
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/CreatePKActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/CreatePKActivity.java
new file mode 100644
index 000000000..8765f7e3d
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/CreatePKActivity.java
@@ -0,0 +1,450 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.GridLayout;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.TextView;
+
+import com.netease.nim.uikit.support.glide.GlideApp;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.dialog.PKSelectPeopleDialog;
+import com.yizhuan.erban.avroom.dialog.PKTimePickerDialog;
+import com.yizhuan.erban.avroom.presenter.CreatePKPresenter;
+import com.yizhuan.erban.avroom.view.ICreatePKView;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.base.TitleBar;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.room.pk.bean.PKMemberInfo;
+import com.yizhuan.xchat_android_core.room.pk.bean.PKTeamInfo;
+import com.yizhuan.xchat_android_core.room.pk.model.PkModel;
+import com.yizhuan.xchat_android_core.statistic.StatisticManager;
+import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
+import com.yizhuan.xchat_android_core.user.bean.UserInfo;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+
+import io.reactivex.Single;
+import io.reactivex.SingleObserver;
+import io.reactivex.disposables.Disposable;
+
+/**
+ * @author jack
+ * @Description
+ * @Date 2018/12/28
+ */
+@CreatePresenter(CreatePKPresenter.class)
+public class CreatePKActivity extends BaseMvpActivity
+ implements ICreatePKView {
+
+ private GridLayout glRedTeam;
+ private GridLayout glBlueTeam;
+ private ImageView ivRedAvatar1;
+ private TextView tvRedName1;
+ private ImageView ivRedAvatar2;
+ private TextView tvRedName2;
+ private ImageView ivRedAvatar3;
+ private TextView tvRedName3;
+ private ImageView ivRedAvatar4;
+ private TextView tvRedName4;
+ private ImageView ivBlueAvatar1;
+ private TextView tvBlueName1;
+ private ImageView ivBlueAvatar2;
+ private TextView tvBlueName2;
+ private ImageView ivBlueAvatar3;
+ private TextView tvBlueName3;
+ private ImageView ivBlueAvatar4;
+ private TextView tvBlueName4;
+ private RadioButton rbVoteTypeGiftValue;
+ private RadioButton rbVoteTypeGiftMember;
+ private LinearLayout llSelectTime;
+ private TextView tvPkTime;
+ private TextView okBtn;
+ private LinearLayout llInPk;
+ private TextView tvRecreateBtn;
+ private TextView tvClosePkMode;
+
+ private List redTeamAvatar = new ArrayList<>();
+ private List redTeamName = new ArrayList<>();
+
+ private List blueTeamAvatar = new ArrayList<>();
+ private List blueTeamName = new ArrayList<>();
+
+ private List redTeamMember = new ArrayList<>();
+ private List blueTeamMember = new ArrayList<>();
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, CreatePKActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_create_pk);
+
+
+ glRedTeam = (GridLayout) findViewById(R.id.gl_red_team);
+ glBlueTeam = (GridLayout) findViewById(R.id.gl_blue_team);
+
+ ivRedAvatar1 = (ImageView) findViewById(R.id.iv_red_avatar_1);
+ tvRedName1 = (TextView) findViewById(R.id.tv_red_name_1);
+ ivRedAvatar2 = (ImageView) findViewById(R.id.iv_red_avatar_2);
+ tvRedName2 = (TextView) findViewById(R.id.tv_red_name_2);
+ ivRedAvatar3 = (ImageView) findViewById(R.id.iv_red_avatar_3);
+ tvRedName3 = (TextView) findViewById(R.id.tv_red_name_3);
+ ivRedAvatar4 = (ImageView) findViewById(R.id.iv_red_avatar_4);
+ tvRedName4 = (TextView) findViewById(R.id.tv_red_name_4);
+ ivBlueAvatar1 = (ImageView) findViewById(R.id.iv_blue_avatar_1);
+ tvBlueName1 = (TextView) findViewById(R.id.tv_blue_name_1);
+ ivBlueAvatar2 = (ImageView) findViewById(R.id.iv_blue_avatar_2);
+ tvBlueName2 = (TextView) findViewById(R.id.tv_blue_name_2);
+ ivBlueAvatar3 = (ImageView) findViewById(R.id.iv_blue_avatar_3);
+ tvBlueName3 = (TextView) findViewById(R.id.tv_blue_name_3);
+ ivBlueAvatar4 = (ImageView) findViewById(R.id.iv_blue_avatar_4);
+ tvBlueName4 = (TextView) findViewById(R.id.tv_blue_name_4);
+ rbVoteTypeGiftValue = (RadioButton) findViewById(R.id.rb_vote_type_gift_value);
+ rbVoteTypeGiftMember = (RadioButton) findViewById(R.id.rb_vote_type_gift_member);
+ llSelectTime = (LinearLayout) findViewById(R.id.ll_select_time);
+ tvPkTime = (TextView) findViewById(R.id.tv_pk_time);
+ okBtn = (TextView) findViewById(R.id.ok_btn);
+ llInPk = (LinearLayout) findViewById(R.id.ll_in_pk);
+ tvRecreateBtn = (TextView) findViewById(R.id.tv_recreate_btn);
+ tvClosePkMode = (TextView) findViewById(R.id.tv_close_pk_mode);
+
+ redTeamAvatar.add(ivRedAvatar1);
+ redTeamAvatar.add(ivRedAvatar2);
+ redTeamAvatar.add(ivRedAvatar3);
+ redTeamAvatar.add(ivRedAvatar4);
+ redTeamName.add(tvRedName1);
+ redTeamName.add(tvRedName2);
+ redTeamName.add(tvRedName3);
+ redTeamName.add(tvRedName4);
+
+ blueTeamAvatar.add(ivBlueAvatar1);
+ blueTeamAvatar.add(ivBlueAvatar2);
+ blueTeamAvatar.add(ivBlueAvatar3);
+ blueTeamAvatar.add(ivBlueAvatar4);
+ blueTeamName.add(tvBlueName1);
+ blueTeamName.add(tvBlueName2);
+ blueTeamName.add(tvBlueName3);
+ blueTeamName.add(tvBlueName4);
+
+
+ rbVoteTypeGiftValue.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ getMvpPresenter().setPkVoteMode(PkModel.PK_VOTE_MODE_GIFT_VALUE);
+ }
+ }
+ });
+ rbVoteTypeGiftMember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked) {
+ getMvpPresenter().setPkVoteMode(PkModel.PK_VOTE_MODE_PEOPLE_COUNT);
+ }
+ }
+ });
+ llSelectTime.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showSelectTimeDialog();
+ }
+ });
+
+ okBtn.setOnClickListener(v -> {
+ //提交pk
+ if (AvRoomDataManager.get().isQueuingMicro()) {
+ getDialogManager().showOkCancelDialog("当前正在排麦模式,确认切换为PK模式吗?",
+ true,
+ new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ createPk();
+ }
+ });
+
+ return;
+ }
+ createPk();
+
+ });
+
+ glRedTeam.setOnClickListener(v -> {
+ PKSelectPeopleDialog dialog = new PKSelectPeopleDialog(this, PKTeamInfo.TEAM_RED, getPKMemberList());
+ dialog.setOnSelectPeopleListener(new PKSelectPeopleDialog.OnSelectPeopleListener() {
+ @Override
+ public void onSelectPeople(List micEntityList) {
+ List userInfoList = new ArrayList<>();
+ for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
+ if (micEntity.isSelect) {
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUid(Long.parseLong(micEntity.uid));
+ userInfo.setAvatar(micEntity.avatar);
+ userInfo.setNick(micEntity.nick);
+ userInfo.setGender(micEntity.gender);
+ userInfo.setGroupType(PKTeamInfo.TEAM_RED);
+ userInfoList.add(userInfo);
+ }
+ }
+ redTeamMember = userInfoList;
+ for (int i = 0; i < redTeamAvatar.size(); i++) {
+ if (i < userInfoList.size()) {
+ GlideApp.with(CreatePKActivity.this)
+ .load(userInfoList.get(i).getAvatar())
+ .placeholder(R.drawable.default_avatar)
+ .dontAnimate()
+ .into(redTeamAvatar.get(i));
+ redTeamName.get(i).setText(userInfoList.get(i).getNick());
+ } else {
+ redTeamAvatar.get(i).setImageResource(R.mipmap.ic_red_seat);
+ redTeamName.get(i).setText(R.string.wait_for_mic);
+ }
+ }
+
+
+ }
+ });
+ dialog.show();
+ });
+
+ glBlueTeam.setOnClickListener(v -> {
+ PKSelectPeopleDialog dialog = new PKSelectPeopleDialog(this, PKTeamInfo.TEAM_BLUE, getPKMemberList());
+ dialog.setOnSelectPeopleListener(new PKSelectPeopleDialog.OnSelectPeopleListener() {
+ @Override
+ public void onSelectPeople(List micEntityList) {
+ List userInfoList = new ArrayList<>();
+ for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
+ if (micEntity.isSelect) {
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUid(Long.parseLong(micEntity.uid));
+ userInfo.setAvatar(micEntity.avatar);
+ userInfo.setNick(micEntity.nick);
+ userInfo.setGender(micEntity.gender);
+ userInfo.setGroupType(PKTeamInfo.TEAM_BLUE);
+ userInfoList.add(userInfo);
+ }
+ }
+ blueTeamMember = userInfoList;
+ for (int i = 0; i < blueTeamAvatar.size(); i++) {
+ if (i < userInfoList.size()) {
+ GlideApp.with(CreatePKActivity.this)
+ .load(userInfoList.get(i).getAvatar())
+ .placeholder(R.drawable.default_avatar)
+ .dontAnimate()
+ .into(blueTeamAvatar.get(i));
+ blueTeamName.get(i).setText(userInfoList.get(i).getNick());
+ } else {
+ blueTeamAvatar.get(i).setImageResource(R.mipmap.ic_blue_seat);
+ blueTeamName.get(i).setText(R.string.wait_for_mic);
+ }
+ }
+ }
+ });
+ dialog.show();
+ });
+
+ if (AvRoomDataManager.get().isOpenPKMode()) {
+ llInPk.setVisibility(View.VISIBLE);
+ tvRecreateBtn.setOnClickListener(v -> {
+ getDialogManager().showOkCancelDialog(
+ "创建此Pk,会覆盖现在进行的PK,\n确定覆盖当前Pk吗?",
+ true,
+ new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ getDialogManager().showProgressDialog(CreatePKActivity.this);
+ getMvpPresenter().createPKAgain(
+ redTeamMember,
+ blueTeamMember
+ )
+ .subscribe(new SingleObserver() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ mCompositeDisposable.add(d);
+ }
+
+ @Override
+ public void onSuccess(String s) {
+ StatisticManager.Instance().onEvent(
+ CreatePKActivity.this,
+ StatisticsProtocol.Event.ROOM_CREATE_A_PK_AGAIN,
+ "再次创建",
+ null);
+
+ toast(s);
+ getDialogManager().dismissDialog();
+ finish();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ getDialogManager().dismissDialog();
+ toast(e.getMessage());
+ }
+ });
+ }
+ });
+ });
+
+ tvClosePkMode.setOnClickListener(v -> {
+ //关闭pk 模式
+ getDialogManager().showOkCancelDialog("结束PK,会关闭现在进行的PK并恢复普通房间模式,确定关闭当前PK吗?",
+ true,
+ new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ getDialogManager().showProgressDialog(CreatePKActivity.this);
+ getMvpPresenter().closePkMode()
+ .subscribe(new SingleObserver() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ mCompositeDisposable.add(d);
+ }
+
+ @Override
+ public void onSuccess(String s) {
+ toast(s);
+ getDialogManager().dismissDialog();
+ finish();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ toast(e.getMessage());
+ getDialogManager().dismissDialog();
+ }
+ });
+ }
+ });
+ });
+ } else {
+ llInPk.setVisibility(View.GONE);
+ }
+
+ }
+
+ private void createPk() {
+ getDialogManager().showProgressDialog(CreatePKActivity.this);
+ getMvpPresenter().createPK(
+ redTeamMember,
+ blueTeamMember
+ )
+ .subscribe(new SingleObserver() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ mCompositeDisposable.add(d);
+ }
+
+ @Override
+ public void onSuccess(String s) {
+ StatisticManager.Instance().onEvent(
+ CreatePKActivity.this,
+ StatisticsProtocol.Event.ROOM_CREATE_A_PK,
+ "创建PK",
+ null);
+
+ toast(s);
+ getDialogManager().dismissDialog();
+ finish();
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ getDialogManager().dismissDialog();
+ toast(e.getMessage());
+ }
+ });
+ }
+
+ private List getPKMemberList() {
+ List pkMemberInfoList = new ArrayList<>();
+ for (UserInfo userInfo : redTeamMember) {
+ PKMemberInfo pkMemberInfo = new PKMemberInfo();
+ pkMemberInfo.setTeamId(PKTeamInfo.TEAM_RED);
+ pkMemberInfo.setUserInfo(userInfo);
+ pkMemberInfoList.add(pkMemberInfo);
+ }
+ for (UserInfo userInfo : blueTeamMember) {
+ PKMemberInfo pkMemberInfo = new PKMemberInfo();
+ pkMemberInfo.setTeamId(PKTeamInfo.TEAM_BLUE);
+ pkMemberInfo.setUserInfo(userInfo);
+ pkMemberInfoList.add(pkMemberInfo);
+ }
+ return pkMemberInfoList;
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (getMvpPresenter().getPkMode() == -1) {
+ getMvpPresenter().setPkMode(PkModel.PK_MODE_TEAM);
+ }
+ if (getMvpPresenter().getPkVoteMode() == -1) {
+ getMvpPresenter().setPkVoteMode(PkModel.PK_VOTE_MODE_GIFT_VALUE);
+ rbVoteTypeGiftValue.setChecked(true);
+ }
+ if (getMvpPresenter().getPkDuration() == -1) {
+ getMvpPresenter().setPkDuration(30);
+ tvPkTime.setText(30 + "秒");
+ }
+ }
+
+ private void showSelectTimeDialog() {
+ PKTimePickerDialog pkTimePickerDialog = new PKTimePickerDialog(this);
+ pkTimePickerDialog.setOnSelectTime(new PKTimePickerDialog.OnSelectTime() {
+ @Override
+ public void selectTime(long timeSecond) {
+ if (timeSecond < 30 || timeSecond > 1800) {
+ toast("PK的时间大于等于30秒,小于等于30分钟");
+ return;
+ }
+ tvPkTime.setText((timeSecond / 60) + "分" + (timeSecond % 60) + "秒");
+ getMvpPresenter().setPkDuration(timeSecond);
+ }
+ });
+ pkTimePickerDialog.show();
+
+ }
+
+ @Override
+ public void initTitleBar() {
+ super.initTitleBar(getString(R.string.create_PK));
+ mTitleBar.setActionTextColor(getResources().getColor(R.color.color_999999));
+ mTitleBar.addAction(new TitleBar.TextAction(getString(R.string.PK_record)) {
+ @Override
+ public void performAction(View view) {
+ RecordForPKActivity.start(CreatePKActivity.this);
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/OpenRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/OpenRoomActivity.java
new file mode 100644
index 000000000..b3e4be2a0
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/OpenRoomActivity.java
@@ -0,0 +1,292 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.jph.takephoto.app.TakePhotoActivity;
+import com.jph.takephoto.compress.CompressConfig;
+import com.jph.takephoto.model.TResult;
+import com.netease.nim.uikit.common.util.string.StringUtil;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.common.permission.PermissionActivity;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.erban.ui.utils.ImageLoadUtils;
+import com.yizhuan.erban.ui.widget.ButtonItem;
+import com.yizhuan.xchat_android_core.auth.AuthModel;
+import com.yizhuan.xchat_android_core.file.FileModel;
+import com.yizhuan.xchat_android_core.room.IRoomCoreClient;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
+import com.yizhuan.xchat_android_library.coremanager.CoreEvent;
+import com.yizhuan.xchat_android_library.utils.file.JXFileUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by zhouxiangfeng on 2017/6/1.
+ */
+@Deprecated
+public class OpenRoomActivity extends TakePhotoActivity implements View.OnClickListener {
+
+ private static final String TAG = "OpenRoomActivity";
+ /**
+ * 基本权限管理
+ */
+ private final String[] BASIC_PERMISSIONS = new String[]{
+ Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO
+ };
+
+ // Content View Elements
+ private ImageView mIv_close;
+ private ImageView mIv_cover;
+ private EditText mEt_title;
+ private EditText mEt_noti;
+ private TextView pageTitle;
+ private Button mBtn_open_room;
+ private String roomCoverUrl;
+ private int type;
+
+ //开启竞拍房
+ public static void startAuction(Context context) {
+ Intent intent = new Intent(context, OpenRoomActivity.class);
+ intent.putExtra("type", RoomInfo.ROOMTYPE_AUCTION);
+ context.startActivity(intent);
+
+ }
+
+ //开启轻聊房
+ public static void startHomeParty(Context context) {
+ Intent intent = new Intent(context, OpenRoomActivity.class);
+ intent.putExtra("type", RoomInfo.ROOMTYPE_LIGHT_CHAT);
+ context.startActivity(intent);
+ }
+
+ //开启游戏房
+ public static void startGame(Context context) {
+ Intent intent = new Intent(context, OpenRoomActivity.class);
+ intent.putExtra("type", RoomInfo.ROOMTYPE_HOME_PARTY);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_open_room);
+ bindViews();
+ onSetListener();
+ init();
+ }
+
+ private void init() {
+ type = getIntent().getIntExtra("type", 0);
+ if (type == RoomInfo.ROOMTYPE_AUCTION) {
+ pageTitle.setText("竞拍房");
+ } else if (type == RoomInfo.ROOMTYPE_LIGHT_CHAT) {
+ pageTitle.setText("轻聊房");
+ } else if (type == RoomInfo.ROOMTYPE_HOME_PARTY) {
+ pageTitle.setText("轰趴房");
+ }
+ }
+
+ private void onSetListener() {
+ mBtn_open_room.setOnClickListener(this);
+ mIv_close.setOnClickListener(this);
+ mIv_cover.setOnClickListener(this);
+ }
+
+ // End Of Content View Elements
+ private void bindViews() {
+ mIv_close = (ImageView) findViewById(R.id.iv_close);
+ mIv_cover = (ImageView) findViewById(R.id.iv_cover);
+ mEt_title = (EditText) findViewById(R.id.et_title);
+ mEt_noti = (EditText) findViewById(R.id.et_noti);
+ mBtn_open_room = (Button) findViewById(R.id.btn_open_room);
+ pageTitle = (TextView) findViewById(R.id.title);
+ }
+
+ private void checkPermissionAndStartCamera() {
+ //低版本授权检查
+ checkPermission(checkPermissionListener, R.string.ask_camera, Manifest.permission.CAMERA);
+// checkPermission(checkPermissionListener, R.string.ask_again, android.Manifest.permission.CAMERA);
+ }
+
+ PermissionActivity.CheckPermListener checkPermissionListener = new PermissionActivity.CheckPermListener() {
+ @Override
+ public void superPermission() {
+ takePhoto();
+ }
+ };
+
+ private void takePhoto() {
+ File cameraOutFile = JXFileUtils.getTempFile(this, "picture_" + System.currentTimeMillis() + ".jpg");
+ if (!cameraOutFile.getParentFile().exists()) {
+ cameraOutFile.getParentFile().mkdirs();
+ }
+ Uri uri = Uri.fromFile(cameraOutFile);
+ CompressConfig compressConfig = new CompressConfig.Builder().create();
+ getTakePhoto().onEnableCompress(compressConfig, false);
+ getTakePhoto().onPickFromCapture(uri);
+ }
+
+ /**
+ * 开房权限检查
+ */
+ PermissionActivity.CheckPermListener loginCheckPermissionListener = new PermissionActivity.CheckPermListener() {
+ @SuppressLint("CheckResult")
+ @Override
+ public void superPermission() {
+ getDialogManager().showProgressDialog(OpenRoomActivity.this, "进入房间...");
+ AvRoomModel.get().openRoom(
+ AuthModel.get().getCurrentUid(), type,
+ mEt_title.getText().toString(), mEt_noti.getText().toString(),
+ roomCoverUrl, null)
+ .compose(bindToLifecycle())
+ .subscribe((roomResult, throwable) -> {
+ if (throwable != null) {
+ onOpenRoomFail(throwable.getMessage());
+ } else if (roomResult != null && roomResult.isSuccess()) {
+ onOpenRoom(roomResult.getData());
+ } else if (roomResult != null && !roomResult.isSuccess()) {
+ if (roomResult.getCode() == 1500) {
+ onAlreadyOpenedRoom();
+ } else {
+ onOpenRoomFail(roomResult.getError());
+ }
+ } else {
+ onOpenRoomFail("未知错误");
+ }
+ });
+ }
+ };
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.btn_open_room:
+ checkPermission(loginCheckPermissionListener, R.string.ask_again, Manifest.permission.RECORD_AUDIO);
+ break;
+ case R.id.iv_close:
+ finish();
+ break;
+ case R.id.iv_cover:
+ ButtonItem upItem = new ButtonItem("拍照上传", new ButtonItem.OnClickListener() {
+ @Override
+ public void onClick() {
+ checkPermissionAndStartCamera();
+ }
+ });
+ ButtonItem localItem = new ButtonItem("本地相册", new ButtonItem.OnClickListener() {
+ @Override
+ public void onClick() {
+ CompressConfig compressConfig = new CompressConfig.Builder().create();
+ getTakePhoto().onEnableCompress(compressConfig, true);
+ getTakePhoto().onPickFromGallery();
+ }
+ });
+ List buttonItemList = new ArrayList<>();
+ buttonItemList.add(upItem);
+ buttonItemList.add(localItem);
+ getDialogManager().showCommonPopupDialog(buttonItemList, "取消", false);
+ break;
+ default:
+ }
+ }
+
+ @CoreEvent(coreClientClass = IRoomCoreClient.class)
+ public void onGetRoomInfo(RoomInfo roomInfo) {
+ getDialogManager().dismissDialog();
+ mEt_title.setText(roomInfo.getTitle());
+ mEt_noti.setText(roomInfo.getRoomDesc());
+
+ if (!StringUtil.isEmpty(roomInfo.getBackPic())) {
+ roomCoverUrl = roomInfo.getBackPic();
+ ImageLoadUtils.loadAvatar(this, roomCoverUrl, mIv_cover);
+ }
+
+ }
+
+ @CoreEvent(coreClientClass = IRoomCoreClient.class)
+ public void onGetRoomInfoFail(String error) {
+ getDialogManager().dismissDialog();
+ }
+
+ public void onOpenRoom(RoomInfo roomInfo) {
+ getDialogManager().dismissDialog();
+ AVRoomActivity.start(this, roomInfo.getUid());
+ finish();
+ }
+
+ public void onOpenRoomFail(String error) {
+ toast(error);
+ getDialogManager().dismissDialog();
+ }
+
+ @CoreEvent(coreClientClass = IRoomCoreClient.class)
+ public void onAlreadyOpenedRoom() {
+ getDialogManager().showOkCancelDialog("您的房间已开启,是否立即进入?", true, new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ long uid = AuthModel.get().getCurrentUid();
+ AVRoomActivity.start(OpenRoomActivity.this, uid);
+ finish();
+ }
+ });
+ }
+
+ public void onUpload(String url) {
+ roomCoverUrl = url;
+ Log.d(TAG, "onUpload: 这是开房间的上传");
+// Glide.with(OpenRoomActivity.this).load(roomCoverUrl).into(mIv_cover);
+ ImageLoadUtils.loadImage(this, roomCoverUrl, mIv_cover, 0);
+ getDialogManager().dismissDialog();
+ }
+
+ public void onUploadFail() {
+ toast("上传失败");
+ getDialogManager().dismissDialog();
+ }
+
+ @SuppressLint("CheckResult")
+ @Override
+ public void takeSuccess(TResult result) {
+ getDialogManager().showProgressDialog(OpenRoomActivity.this, "正在上传请稍后...");
+ FileModel.get()
+ .uploadFile(result.getImage().getCompressPath())
+ .compose(bindToLifecycle())
+ .subscribe((url, throwable) -> {
+ if (throwable != null) {
+ onUploadFail();
+ } else {
+ onUpload(url);
+ }
+ });
+ }
+
+ @Override
+ public void takeFail(TResult result, String msg) {
+ toast(msg);
+ }
+
+ @Override
+ public void takeCancel() {
+ }
+
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RecordForPKActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RecordForPKActivity.java
new file mode 100644
index 000000000..e4274f2db
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RecordForPKActivity.java
@@ -0,0 +1,138 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+
+import com.trello.rxlifecycle2.android.ActivityEvent;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.adapter.RecordForPKAdapter;
+import com.yizhuan.erban.avroom.presenter.RecordForPKPresenter;
+import com.yizhuan.erban.avroom.view.IRecordForPKView;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.ui.widget.marqueeview.Utils;
+import com.yizhuan.erban.ui.widget.recyclerview.decoration.ColorDecoration;
+import com.yizhuan.xchat_android_core.room.pk.bean.PKRecordInfo;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.utils.ListUtils;
+
+import java.util.List;
+
+import io.reactivex.SingleObserver;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.Action;
+
+/**
+ * @author jack
+ * @Description
+ * @Date 2018/12/29
+ */
+@CreatePresenter(RecordForPKPresenter.class)
+public class RecordForPKActivity extends BaseMvpActivity
+ implements IRecordForPKView {
+
+
+ private SwipeRefreshLayout srlRefreshContainer;
+ private RecyclerView rvList;
+ private RecordForPKAdapter adapter;
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RecordForPKActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_record_for_pk);
+
+ srlRefreshContainer = (SwipeRefreshLayout) findViewById(R.id.srl_refresh_container);
+ rvList = (RecyclerView) findViewById(R.id.rv_list);
+
+ srlRefreshContainer.setOnRefreshListener(this::refreshData);
+
+ rvList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
+ rvList.addItemDecoration(new ColorDecoration(Color.TRANSPARENT, 0, Utils.dip2px(this, 10), true));
+ adapter = new RecordForPKAdapter(this, null);
+ adapter.setEnableLoadMore(true);
+ adapter.setOnLoadMoreListener(this::loadMoreData, rvList);
+ rvList.setAdapter(adapter);
+
+ srlRefreshContainer.setRefreshing(true);
+ refreshData();
+ }
+
+ @Override
+ public void onReloadDate() {
+ super.onReloadDate();
+ refreshData();
+ }
+
+ @Override
+ public void initTitleBar() {
+ super.initTitleBar(getString(R.string.PK_record));
+ }
+
+ public void refreshData() {
+ getMvpPresenter().refreshData()
+ .compose(bindUntilEvent(ActivityEvent.DESTROY))
+ .subscribe(new SingleObserver>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onSuccess(List pkRecordInfos) {
+ srlRefreshContainer.setRefreshing(false);
+ if (ListUtils.isListEmpty(pkRecordInfos)) {
+ showNoData(R.drawable.icon_common_failure, "没有PK记录");
+ return;
+ }
+ adapter.setNewData(pkRecordInfos);
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ srlRefreshContainer.setRefreshing(false);
+ showNetworkErr();
+ toast(e.getMessage());
+
+ }
+ });
+ }
+
+ private void loadMoreData() {
+ getMvpPresenter().loadMoreData()
+ .compose(bindUntilEvent(ActivityEvent.DESTROY))
+ .subscribe(new SingleObserver>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onSuccess(List pkRecordInfos) {
+ adapter.loadMoreComplete();
+ if (!ListUtils.isListEmpty(pkRecordInfos)) {
+ adapter.addData(pkRecordInfos);
+ } else {
+ adapter.loadMoreEnd(true);
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ adapter.loadMoreComplete();
+ toast(e.getMessage());
+ }
+ });
+ }
+
+
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomBlackListActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomBlackListActivity.java
new file mode 100644
index 000000000..ddb4f7c6c
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomBlackListActivity.java
@@ -0,0 +1,194 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
+import com.trello.rxlifecycle2.android.ActivityEvent;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.adapter.RoomNormalListAdapter;
+import com.yizhuan.erban.avroom.presenter.RoomBlackPresenter;
+import com.yizhuan.erban.avroom.view.IRoomBlackView;
+import com.yizhuan.xchat_android_core.auth.AuthModel;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
+import com.yizhuan.xchat_android_core.super_admin.model.SuperAdminModel;
+import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil;
+import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.utils.JavaUtil;
+import com.yizhuan.xchat_android_library.utils.ListUtils;
+import com.yizhuan.xchat_android_core.im.room.IIMRoomCoreClient;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_library.coremanager.CoreEvent;
+
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Objects;
+
+import io.reactivex.Single;
+
+/**
+ * 黑名单
+ *
+ * @author chenran
+ * @date 2017/10/11
+ */
+@CreatePresenter(RoomBlackPresenter.class)
+public class RoomBlackListActivity extends BaseMvpActivity
+ implements RoomNormalListAdapter.OnRoomNormalListOperationClickListener, IRoomBlackView {
+ private TextView count;
+ private RecyclerView recyclerView;
+ private RoomNormalListAdapter normalListAdapter;
+
+ private SuperAdminModel mSuperAdminModel;
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RoomBlackListActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_room_black_list);
+ initTitleBar("黑名单");
+ initView();
+
+ showLoading();
+ loadData();
+
+ mSuperAdminModel = new SuperAdminModel();
+ }
+
+ private void loadData() {
+ getMvpPresenter().queryBlackList(500);
+ }
+
+ private void initView() {
+ count = (TextView) findViewById(R.id.count);
+ recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ normalListAdapter = new RoomNormalListAdapter(this);
+ normalListAdapter.setListOperationClickListener(this);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setAdapter(normalListAdapter);
+ }
+
+ @Override
+ public void onRemoveOperationClick(final ChatRoomMember chatRoomMember) {
+ getDialogManager().showOkCancelDialog(
+ "是否将" + chatRoomMember.getNick() + "移除黑名单列表?",
+ true,
+ new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ //如果登录用户是超管
+ if (SuperAdminUtil.isSuperAdmin()) {
+ //使用接口移除
+ AvRoomModel.get().removeBlack(JavaUtil.str2long(chatRoomMember.getAccount()))
+ .compose(bindUntilEvent(ActivityEvent.DESTROY))
+ .subscribe(new DontWarnObserver() {
+ @Override
+ public void accept(String s, String error) {
+ super.accept(s, error);
+ if (error == null) {
+ toast("操作成功");
+ loadData();
+ } else {
+ toast(error);
+ }
+ }
+ });
+ mSuperAdminModel.roomOperate(SuperAdminModel.REMOVE_BLACK_LIST, JavaUtil.str2long(chatRoomMember.getAccount())).subscribe();
+ return;
+ }
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null) {
+ getMvpPresenter().markBlackList(roomInfo.getRoomId(),
+ chatRoomMember.getAccount(), false);
+ }
+
+ }
+ });
+ }
+
+ @Override
+ public View.OnClickListener getLoadListener() {
+ return new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showLoading();
+ loadData();
+ }
+ };
+ }
+
+ @CoreEvent(coreClientClass = IIMRoomCoreClient.class)
+ public void onMemberBeRemoveManager(String account) {
+ long uid = AuthModel.get().getCurrentUid();
+ if (uid == Long.valueOf(account)) {
+ finish();
+ toast(R.string.remove_room_manager);
+ }
+ }
+
+ @Override
+ public void queryBlackListSuccess(List chatRoomMemberList) {
+ hideStatus();
+ if (chatRoomMemberList != null && chatRoomMemberList.size() > 0) {
+ normalListAdapter.setNormalList(chatRoomMemberList);
+ normalListAdapter.notifyDataSetChanged();
+ count.setText("黑名单" + chatRoomMemberList.size() + "人");
+ } else {
+ showNoData("暂没有设置黑名单");
+ count.setText("黑名单0人");
+ }
+ }
+
+ @Override
+ public void queryBlackListFail() {
+ showNetworkErr();
+ }
+
+ @Override
+ public void makeBlackListSuccess(ChatRoomMember chatRoomMember, boolean mark) {
+ if (chatRoomMember == null) return;
+ List normalList = normalListAdapter.getNormalList();
+ if (!ListUtils.isListEmpty(normalList)) {
+ hideStatus();
+ ListIterator iterator = normalList.listIterator();
+ for (; iterator.hasNext(); ) {
+ if (Objects.equals(iterator.next().getAccount(), chatRoomMember.getAccount())) {
+ iterator.remove();
+ }
+ }
+ normalListAdapter.notifyDataSetChanged();
+ count.setText("黑名单" + normalList.size() + "人");
+ if (normalList.size() == 0) {
+ showNoData("暂没有设置黑名单");
+ }
+ } else {
+ showNoData("暂没有设置黑名单");
+ count.setText("黑名单0人");
+ }
+ toast("操作成功");
+
+ }
+
+ @Override
+ public void makeBlackListFail(int code, String error, boolean mark) {
+// toast("操作失败,请重试");
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomInviteActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomInviteActivity.java
new file mode 100644
index 000000000..24b9822a9
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomInviteActivity.java
@@ -0,0 +1,199 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+import com.netease.nim.uikit.common.util.sys.NetworkUtil;
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
+import com.scwang.smartrefresh.layout.SmartRefreshLayout;
+import com.scwang.smartrefresh.layout.api.RefreshLayout;
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadmoreListener;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.adapter.RoomInviteAdapter;
+import com.yizhuan.erban.avroom.presenter.RoomInvitePresenter;
+import com.yizhuan.erban.avroom.view.IRoomInviteView;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.xchat_android_core.noble.NobleResourceType;
+import com.yizhuan.xchat_android_core.user.bean.UserInfo;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.utils.ListUtils;
+import com.yizhuan.xchat_android_core.Constants;
+import com.yizhuan.xchat_android_core.room.bean.OnlineChatMember;
+import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 抱人上麦
+ *
+ * @author jiahui
+ * @date 2017/12/21
+ */
+@CreatePresenter(RoomInvitePresenter.class)
+public class RoomInviteActivity extends BaseMvpActivity
+ implements IRoomInviteView, RoomInviteAdapter.OnItemClickListener, RoomInviteAdapter.OnRoomOnlineNumberChangeListener {
+ private RoomInviteAdapter mRoomInviteAdapter;
+ private SmartRefreshLayout mRefreshLayout;
+ private RecyclerView mRecyclerView;
+
+ private int mPage = Constants.PAGE_START;
+ private int micPosition;
+
+ public static void openActivity(FragmentActivity fragmentActivity, int micPosition) {
+ Intent intent = new Intent(fragmentActivity, RoomInviteActivity.class);
+ intent.putExtra(Constants.KEY_POSITION, micPosition);
+ fragmentActivity.startActivityForResult(intent, 200);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_room_invite);
+ mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ mRefreshLayout = (SmartRefreshLayout) findViewById(R.id.refresh_layout);
+ initTitleBar(getString(R.string.title_online));
+ Intent intent = getIntent();
+ if (intent != null)
+ micPosition = intent.getIntExtra(Constants.KEY_POSITION, Integer.MIN_VALUE);
+
+ mRoomInviteAdapter = new RoomInviteAdapter(this, this);
+ mRecyclerView.setAdapter(mRoomInviteAdapter);
+ mRoomInviteAdapter.setOnRoomOnlineNumberChangeListener(this);
+ mRefreshLayout.setOnRefreshLoadmoreListener(new OnRefreshLoadmoreListener() {
+ @Override
+ public void onLoadmore(RefreshLayout refreshLayout) {
+ if (!NetworkUtil.isNetAvailable(RoomInviteActivity.this)) {
+ mRefreshLayout.finishLoadmore();
+ return;
+ }
+ List data = mRoomInviteAdapter.getChatRoomMemberList();
+ if (ListUtils.isListEmpty(data)) {
+ mRefreshLayout.finishLoadmore();
+ return;
+ }
+ loadData(data.get(data.size() - 1).getEnterTime());
+ }
+
+ @Override
+ public void onRefresh(RefreshLayout refreshLayout) {
+ if (!NetworkUtil.isNetAvailable(RoomInviteActivity.this)) {
+ mRefreshLayout.finishRefresh();
+ return;
+ }
+ firstLoad();
+ }
+ });
+ showLoading();
+ firstLoad();
+ }
+
+ public void firstLoad() {
+ mPage = Constants.PAGE_START;
+ loadData(0);
+ }
+
+ private void loadData(long time) {
+ getMvpPresenter().requestChatMemberByPage(mPage, time);
+ }
+
+ @Override
+ public void onRequestChatMemberByPageSuccess(List memberList, int page) {
+
+ }
+
+ @Override
+ public void onRequestChatMemberByPageFail(String errorStr, int page) {
+ mPage = page;
+ if (mPage == Constants.PAGE_START) {
+ mRefreshLayout.finishRefresh(0);
+ showNoData(getString(R.string.data_error));
+ } else {
+ mRefreshLayout.finishLoadmore(0);
+ }
+ }
+
+ @Override
+ public void onMemberInRefresh() {
+
+ }
+
+ @Override
+ public void onRequestMemberByPageSuccess(List memberList, int page) {
+ mPage = page;
+ if (mPage == Constants.PAGE_START) {
+ List chatRoomMemberList = mRoomInviteAdapter.getChatRoomMemberList();
+ if (!ListUtils.isListEmpty(chatRoomMemberList))
+ chatRoomMemberList.clear();
+ mRefreshLayout.finishRefresh(0);
+ if (ListUtils.isListEmpty(memberList)) {
+ showNoData("暂无可抱用户");
+ } else {
+ hideStatus();
+ mRoomInviteAdapter.addChatRoomMemberList(memberList);
+ }
+ } else {
+ mRefreshLayout.finishLoadmore(0);
+ if (!ListUtils.isListEmpty(memberList)) {
+ mRoomInviteAdapter.addChatRoomMemberList(memberList);
+ }
+ }
+ }
+
+ @Override
+ public void onClick(ChatRoomMember chatRoomMember) {
+ if (chatRoomMember == null) return;
+
+ boolean isRobot = true;
+ Map extension = (Map) chatRoomMember.getExtension();
+ if (extension != null) {
+ Map map = (Map) extension.get(chatRoomMember.getAccount());
+ if (map != null) {
+ String defUser = map.get(UserInfo.DEF_USER) == null ? null : map.get(UserInfo.DEF_USER) + "";
+ String resource = map.get(NobleResourceType.KEY_LEVEL) == null ? null : map.get(NobleResourceType.KEY_LEVEL) + "";
+ if ((!TextUtils.isEmpty(defUser) && Integer.parseInt(defUser) != UserInfo.USER_TYPE_ROBOT)
+ || (!TextUtils.isEmpty(resource) && Integer.parseInt(resource) > 0)) {
+ isRobot = false;
+ }
+ }
+ }
+ if (isRobot) {
+// Toast.makeText(context, context.getResources().getString(R.string.unable_to_up_mic_by_level), Toast.LENGTH_SHORT).show();
+ SingleToastUtil.showToastShort(R.string.unable_to_up_mic_by_level);
+ return;
+ }
+
+ Intent intent = new Intent();
+ intent.putExtra("account", chatRoomMember.getAccount());
+ String nick = chatRoomMember.getNick();
+ intent.putExtra("nick", nick == null ? "" : nick);
+ intent.putExtra(Constants.KEY_POSITION, micPosition);
+ setResult(100, intent);
+ finish();
+ }
+
+ @Override
+ public void onReloadDate() {
+ super.onReloadDate();
+ showLoading();
+ firstLoad();
+ }
+
+ @Override
+ public void onRoomOnlineNumberChange(int number) {
+ if (number == 0) {
+ showNoData();
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mRoomInviteAdapter != null)
+ mRoomInviteAdapter.onRelease();
+ super.onDestroy();
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomManagerListActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomManagerListActivity.java
new file mode 100644
index 000000000..58df52fc9
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomManagerListActivity.java
@@ -0,0 +1,147 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.adapter.RoomNormalListAdapter;
+import com.yizhuan.erban.avroom.presenter.RoomManagerPresenter;
+import com.yizhuan.erban.avroom.view.IRoomManagerView;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.utils.ListUtils;
+
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Objects;
+
+/**
+ * 房间管理员列表
+ *
+ * @author chenran
+ * @date 2017/10/11
+ */
+@CreatePresenter(RoomManagerPresenter.class)
+public class RoomManagerListActivity extends BaseMvpActivity
+ implements RoomNormalListAdapter.OnRoomNormalListOperationClickListener, IRoomManagerView {
+ private TextView count;
+ private RecyclerView recyclerView;
+ private RoomNormalListAdapter normalListAdapter;
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RoomManagerListActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_room_manager_list);
+ initTitleBar("管理员");
+ initView();
+
+ showLoading();
+ loadData();
+ }
+
+ private void loadData() {
+ getMvpPresenter().queryManagerList(500);
+ }
+
+ private void initView() {
+ count = (TextView) findViewById(R.id.count);
+ recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+ normalListAdapter = new RoomNormalListAdapter(this);
+ normalListAdapter.setListOperationClickListener(this);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setAdapter(normalListAdapter);
+ }
+
+ @Override
+ public void onRemoveOperationClick(final ChatRoomMember chatRoomMember) {
+ getDialogManager().showOkCancelDialog("是否将" + chatRoomMember.getNick() + "移除管理员列表?",
+ true, new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo != null) {
+ getMvpPresenter().markManagerList(roomInfo.getRoomId(), chatRoomMember.getAccount(), false);
+ }
+ }
+ });
+ }
+
+ @Override
+ public View.OnClickListener getLoadListener() {
+ return new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showLoading();
+ loadData();
+ }
+ };
+ }
+
+ @Override
+ public void queryManagerListSuccess(List chatRoomMemberList) {
+
+ hideStatus();
+ if (chatRoomMemberList != null && chatRoomMemberList.size() > 0) {
+ normalListAdapter.setNormalList(chatRoomMemberList);
+ normalListAdapter.notifyDataSetChanged();
+ count.setText("管理员" + chatRoomMemberList.size() + "人");
+ } else {
+ showNoData("暂没有设置管理员");
+ count.setText("管理员0人");
+ }
+ }
+
+ @Override
+ public void queryManagerListFail() {
+ showNetworkErr();
+ }
+
+ @Override
+ public void markManagerListSuccess(ChatRoomMember chatRoomMember) {
+ if (chatRoomMember == null) return;
+ List list = normalListAdapter.getNormalList();
+ if (!ListUtils.isListEmpty(list)) {
+ hideStatus();
+ ListIterator iterator = list.listIterator();
+ for (; iterator.hasNext(); ) {
+ if (Objects.equals(iterator.next().getAccount(), chatRoomMember.getAccount())) {
+ iterator.remove();
+ }
+ }
+ normalListAdapter.notifyDataSetChanged();
+ count.setText("管理员" + list.size() + "人");
+ if (list.size() == 0) {
+ showNoData("暂没有设置管理员");
+ }
+ } else {
+ showNoData("暂没有设置管理员");
+ count.setText("管理员0人");
+ }
+ toast("操作成功");
+// loadData();
+ }
+
+ @Override
+ public void markManagerListFail(int code, String error) {
+// toast("操作失败,请重试");
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomOnlineUserActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomOnlineUserActivity.java
new file mode 100644
index 000000000..934dd80f2
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomOnlineUserActivity.java
@@ -0,0 +1,59 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.fragment.OnlineUserFragment;
+import com.yizhuan.erban.base.BaseBindingActivity;
+import com.yizhuan.erban.base.TitleBar;
+import com.yizhuan.erban.databinding.ActivityRoomOnlineUserBinding;
+import com.yizhuan.xchat_android_core.Constants;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
+
+@ActLayoutRes(R.layout.activity_room_online_user)
+public class RoomOnlineUserActivity extends BaseBindingActivity {
+
+ private String [] bgPicture = new String[]{""};
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RoomOnlineUserActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void init() {
+ initTitleBar("在线列表");
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ AVRoomActivity.setBackBg(this, roomInfo, mBinding.svgaImageViewBg, bgPicture, mBinding.view);
+ getSupportFragmentManager().beginTransaction()
+ .add(R.id.fragment_container,
+ new OnlineUserFragment(),
+ OnlineUserFragment.class.getSimpleName())
+ .commitAllowingStateLoss();
+ }
+
+ public void initTitleBar(String title) {
+ mTitleBar = (TitleBar) findViewById(R.id.title_bar);
+ if (mTitleBar != null) {
+ mTitleBar.setTitle(title);
+ mTitleBar.setImmersive(false);
+ mTitleBar.setTitleColor(getResources().getColor(R.color.white));
+ mTitleBar.setLeftImageResource(R.drawable.arrow_left_white);
+ mTitleBar.setLeftClickListener(v -> onLeftClickListener());
+ mTitleBar.setCommonBackgroundColor(getResources().getColor(R.color.transparent));
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mBinding.svgaImageViewBg.isAnimating()) {
+ mBinding.svgaImageViewBg.clearAnimation();
+ }
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomRankListActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomRankListActivity.java
new file mode 100644
index 000000000..fd59c291d
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomRankListActivity.java
@@ -0,0 +1,110 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.NonNull;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.chad.library.adapter.base.entity.MultiItemEntity;
+import com.orhanobut.logger.Logger;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.fragment.RoomCharmListFragment;
+import com.yizhuan.erban.avroom.fragment.RoomContributeListFragment;
+import com.yizhuan.erban.base.BaseBindingActivity;
+import com.yizhuan.erban.base.BaseFragment;
+import com.yizhuan.erban.databinding.ActivityRoomRankListBinding;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_library.annatation.ActLayoutRes;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 房间排行榜,(魅力榜+贡献榜)
+ */
+@ActLayoutRes(R.layout.activity_room_rank_list)
+public class RoomRankListActivity extends BaseBindingActivity {
+
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RoomRankListActivity.class);
+ context.startActivity(intent);
+ }
+
+ private String [] bgPicture = new String[]{""};
+
+ @Override
+ protected void init() {
+ mBinding.setClick(this);
+ List list = new ArrayList<>();
+ list.add(RoomCharmListFragment.newInstance());
+ list.add(new RoomContributeListFragment());
+ mBinding.viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {
+ @Override
+ public Fragment getItem(int position) {
+ return list.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return list.size();
+ }
+ });
+ mBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ mBinding.setPosition(position);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ AVRoomActivity.setBackBg(this, roomInfo, mBinding.svgaImageViewBg, bgPicture, mBinding.view);
+ }
+
+ @Override
+ public void onClick(View v) {
+ super.onClick(v);
+ switch (v.getId()) {
+ case R.id.iv_back:
+ finish();
+ break;
+ case R.id.tv_charm_tab:
+ mBinding.viewPager.setCurrentItem(0);
+ break;
+ case R.id.tv_contribute_tab:
+ mBinding.viewPager.setCurrentItem(1);
+ break;
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mBinding.svgaImageViewBg.isAnimating()) {
+ mBinding.svgaImageViewBg.clearAnimation();
+ }
+ }
+}
diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomSettingActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomSettingActivity.java
new file mode 100644
index 000000000..c1871c9f4
--- /dev/null
+++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/RoomSettingActivity.java
@@ -0,0 +1,797 @@
+package com.yizhuan.erban.avroom.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.databinding.DataBindingUtil;
+import android.os.Bundle;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+
+import com.donkingliang.labels.LabelsView;
+import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
+import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
+import com.yizhuan.erban.R;
+import com.yizhuan.erban.avroom.presenter.RoomSettingPresenter;
+import com.yizhuan.erban.avroom.view.IRoomSettingView;
+import com.yizhuan.erban.avroom.widget.EditRoomTitleDialog;
+import com.yizhuan.erban.base.BaseMvpActivity;
+import com.yizhuan.erban.common.widget.dialog.DialogManager;
+import com.yizhuan.erban.databinding.ActivityRoomSettingBinding;
+import com.yizhuan.erban.ui.webview.CommonWebViewActivity;
+import com.yizhuan.erban.utils.RegexUtil;
+import com.yizhuan.xchat_android_core.UriProvider;
+import com.yizhuan.xchat_android_core.auth.AuthModel;
+import com.yizhuan.xchat_android_core.auth.event.KickOutEvent;
+import com.yizhuan.xchat_android_core.bean.RoomQueueInfo;
+import com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment;
+import com.yizhuan.xchat_android_core.im.custom.bean.RoomNoticeAttachment;
+import com.yizhuan.xchat_android_core.kick.KickModel;
+import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
+import com.yizhuan.xchat_android_core.manager.IMNetEaseManager;
+import com.yizhuan.xchat_android_core.manager.RoomEvent;
+import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
+import com.yizhuan.xchat_android_core.room.bean.RoomMessageViewNoticeInfo;
+import com.yizhuan.xchat_android_core.room.bean.RoomSettingTabInfo;
+import com.yizhuan.xchat_android_core.room.giftvalue.GiftValueModel;
+import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg;
+import com.yizhuan.xchat_android_core.room.model.AvRoomModel;
+import com.yizhuan.xchat_android_core.room.model.HomePartyModel;
+import com.yizhuan.xchat_android_core.room.model.RoomSettingModel;
+import com.yizhuan.xchat_android_core.statistic.StatisticManager;
+import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
+import com.yizhuan.xchat_android_core.utils.net.BeanObserver;
+import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
+import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack;
+import com.yizhuan.xchat_android_library.utils.JavaUtil;
+import com.yizhuan.xchat_android_library.utils.ListUtils;
+import com.yizhuan.xchat_android_library.utils.codec.DESUtils;
+import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
+
+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.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+
+/**
+ * @author chenran
+ * @date 2017/9/26
+ */
+@CreatePresenter(RoomSettingPresenter.class)
+public class RoomSettingActivity extends BaseMvpActivity
+ implements LabelsView.OnLabelClickListener, View.OnClickListener, IRoomSettingView {
+
+ private EditText pwdEdit;
+ private LabelsView labelsView;
+ private List labels;
+ private String selectLabel;
+ private RelativeLayout managerLayout;
+ private RelativeLayout blackLayout;
+ private RelativeLayout mRoomBgLayout;
+
+ private RoomInfo roomInfo;
+
+ private View selectLabelView;
+
+ private RoomSettingTabInfo mSelectTabInfo;
+ private List mTabInfoList;
+ private ActivityRoomSettingBinding binding;
+
+ public static void start(Context context) {
+ Intent intent = new Intent(context, RoomSettingActivity.class);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ binding = DataBindingUtil.setContentView(this,R.layout.activity_room_setting);
+ initTitleBar(getString(R.string.room_setting));
+ binding.setClick(this);
+ EventBus.getDefault().register(this);
+// TitleBar titleBar = (TitleBar) findViewById(R.id.title_bar);
+// titleBar.addAction(new TitleBar.TextAction(getString(R.string.save)) {
+// @Override
+// public void performAction(View view) {
+// save(null);
+// }
+// });
+ roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo == null) {
+ toast("房间信息为空");
+ return;
+ }
+ initView();
+ initLeaveMode();
+ getMvpPresenter().requestRoomInfo(roomInfo.getUid());
+ mRoomBgLayout.setVisibility(View.GONE);
+ if (!AvRoomDataManager.get().isRoomOwner(String.valueOf(AuthModel.get().getCurrentUid()))) {
+ managerLayout.setVisibility(View.GONE);
+ } else {
+ managerLayout.setVisibility(View.VISIBLE);
+ if (AvRoomDataManager.get().isRoomOwner()) {
+ mRoomBgLayout.setVisibility(View.VISIBLE);
+ }
+ }
+ if (AvRoomDataManager.get().isCpRoom()) {
+ binding.queuingMicroModeLayout.setVisibility(View.GONE);
+ }
+ //调用更改房间信息接口后,会发消息ROOM_INFO_UPDATE,在此处接收ui改动
+ IMNetEaseManager.get().getChatRoomEventObservable()
+ .compose(bindToLifecycle())
+ .filter(roomEvent -> roomEvent.getEvent() == RoomEvent.ROOM_INFO_UPDATE)
+ .subscribe(roomEvent -> updateRoomInfoView());
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ EventBus.getDefault().unregister(this);
+ }
+
+ /**
+ * 隐藏虚拟键盘
+ */
+ public void hideKeyboard(View v) {
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null && imm.isActive()) {
+ imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
+
+ }
+ }
+
+ private void initView() {
+ pwdEdit = (EditText) findViewById(R.id.pwd_edit);
+ managerLayout = (RelativeLayout) findViewById(R.id.manager_layout);
+ blackLayout = (RelativeLayout) findViewById(R.id.black_layout);
+ mRoomBgLayout = (RelativeLayout) findViewById(R.id.room_bg_layout);
+
+ managerLayout.setOnClickListener(this);
+ blackLayout.setOnClickListener(this);
+ mRoomBgLayout.setOnClickListener(this);
+
+ binding.switchAudio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked){
+ getDialogManager().showOkCancelWithTitleDialog("提示",
+ new SpannableString("开启高品质音效效果将导致声音较大延迟,请慎重选择"),
+ "确定", "取消", new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+ binding.switchAudio.setChecked(false);
+ }
+
+ @Override
+ public void onOk() {
+ binding.switchAudio.setChecked(true);
+ }
+ });
+ }
+ }
+ });
+ updateRoomInfoView();
+ }
+
+ /**
+ * 非cp房,牌照房,房主可设置离开模式
+ */
+ private void initLeaveMode() {
+
+ if (AvRoomDataManager.get().isRoomOwner() && !AvRoomDataManager.get().isCpRoom() && roomInfo.getIsPermitRoom() == 1) {
+ binding.leaveModeLayout.setVisibility(View.VISIBLE);
+ } else {
+ binding.leaveModeLayout.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 更改房间设置的消息
+ */
+ private void updateRoomInfoView() {
+ if (AvRoomDataManager.get().mCurrentRoomInfo == null) {
+ return;
+ }
+ roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ binding.tvRoomName.setText(RegexUtil.getPrintableString(roomInfo.getTitle()));
+
+
+ selectLabel = roomInfo.getRoomTag();
+ if (selectLabel == null) {
+ selectLabel = "";
+ }
+ binding.tvRoomLabel.setText(selectLabel);
+ binding.switchAudio.setChecked(roomInfo.getAudioQuality() == 2);
+ if (TextUtils.isEmpty(roomInfo.getRoomPwd())) {
+ binding.layoutPwdResult.setVisibility(View.GONE);
+ binding.ivRoomLock.setSelected(false);
+ binding.ivRoomLock.setImageResource(R.drawable.icon_room_set_lock_false);
+ } else {
+ binding.layoutPwdResult.setVisibility(View.VISIBLE);
+ try {
+ binding.tvPassword.setText(DESUtils.DESAndBase64Decrypt(roomInfo.getRoomPwd()));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ binding.ivRoomLock.setSelected(true);
+ binding.ivRoomLock.setImageResource(R.drawable.icon_room_set_lock_true);
+ }
+ setupSwitch(roomInfo);
+ if (roomInfo.getType() == RoomInfo.ROOMTYPE_CP) {
+ binding.rlPwd.setVisibility(View.GONE);
+ binding.layoutPwdResult.setVisibility(View.GONE);
+ }
+ }
+
+ private void save(final String name, final String pwd, String label) {
+ save(name, pwd, label, false,
+ roomInfo.isHasAnimationEffect());
+ }
+
+ /**
+ * 保存用户信息,不需要改动的传null
+ * @param name 房间名字
+ * @param pwd 房间密码
+ * @param label 房间标签
+ * @param isUpdateGiftEffect 是否改动了礼物特效
+ * @param giftEffect 是否开启礼物特效
+ */
+ private void save(final String name, final String pwd, String label, boolean isUpdateGiftEffect,
+ boolean giftEffect) {
+ String desc = null;
+ getDialogManager().showProgressDialog(this, "请稍后...");
+ int id = roomInfo.tagId;
+ if (mSelectTabInfo != null) {
+ id = mSelectTabInfo.getId();
+ }
+ //更新房间接口调用成功后,会发事件RoomEvent.ROOM_INFO_UPDATE
+ RoomSettingModel model = new RoomSettingModel();
+ BeanObserver observer = new BeanObserver() {
+ @Override
+ public void onErrorMsg(String error) {
+ toast(error);
+ getDialogManager().dismissDialog();
+ }
+
+ @Override
+ public void onSuccess(RoomInfo info) {
+ getDialogManager().dismissDialog();
+ if (isUpdateGiftEffect && !giftEffect) {
+ getMvpPresenter().updateGiftEffect(info);
+ }
+ }
+ };
+ if (AvRoomDataManager.get().isRoomOwner()) {
+ model.updateRoomInfo(name, desc, roomInfo.getIntroduction(), pwd, label, id,
+ AuthModel.get().getCurrentUid(),
+ AuthModel.get().getTicket(),
+ giftEffect,
+ binding.switchAudio.isChecked() ? 2 : 1,
+ roomInfo.getLimitType(),roomInfo.isPureMode())
+ .compose(bindToLifecycle())
+ .subscribe(observer);
+ StatisticManager.Instance().sortLogFileByLastModified();
+
+ } else if (AvRoomDataManager.get().isRoomAdmin()) {
+ model.updateByAdmin(roomInfo.getUid(), name, desc, roomInfo.getIntroduction(), pwd, label, id,
+ AuthModel.get().getCurrentUid(),
+ AuthModel.get().getTicket(),
+ giftEffect,
+ binding.switchAudio.isChecked() ? 2 : 1,
+ roomInfo.isPureMode())
+ .compose(bindToLifecycle())
+ .subscribe(observer);
+ }
+ }
+
+ @Override
+ public void onLabelClick(View label, String labelText, int position) {
+ if (!ListUtils.isListEmpty(mTabInfoList)) {
+ mSelectTabInfo = mTabInfoList.get(position);
+ }
+ selectLabel = labelText;
+ labelsView.setSelects(position);
+ }
+
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.manager_layout:
+ RoomManagerListActivity.start(this);
+ break;
+ case R.id.black_layout:
+ RoomBlackListActivity.start(this);
+ break;
+ case R.id.room_bg_layout:
+ CommonWebViewActivity.start(this, UriProvider.getRoomBg());
+ break;
+
+ case R.id.layout_room_name_edit:
+ EditRoomTitleDialog nameDialog = new EditRoomTitleDialog(this,
+ EditRoomTitleDialog.TYPE_EDIT_NAME, binding.tvRoomName.getText().toString());
+ nameDialog.show();
+ nameDialog.setOnEditTitleListner(new EditRoomTitleDialog.OnEditTitleListner() {
+ @Override
+ public void onEditTitleListner(String newName) {
+ if (newName.equals(roomInfo.getTitle())) {
+ return;
+ }
+ save(newName, null, null);
+ }
+ });
+ break;
+ case R.id.iv_room_lock:
+ if (binding.ivRoomLock.isSelected()) {
+ //直接调接口取消密码
+ save(null, "", null);
+ break;
+ }
+ //不break调,走编辑密码的逻辑
+ case R.id.tv_password:
+ EditRoomTitleDialog pwdDialog = new EditRoomTitleDialog(this,
+ EditRoomTitleDialog.TYPE_EDIT_PASSWORD, binding.tvPassword.getText().toString());
+ pwdDialog.setOnEditTitleListner(new EditRoomTitleDialog.OnEditTitleListner() {
+ @Override
+ public void onEditPwdListner(String newPwd) {
+ String encryptPwd = DESUtils.DESAndBase64(newPwd);
+ if (encryptPwd.equals(roomInfo.getRoomPwd())) {
+ return;
+ }
+ save(null, encryptPwd, null);
+ }
+ });
+ pwdDialog.show();
+ break;
+ case R.id.layout_label:
+ if (selectLabelView == null) {
+ selectLabelView = binding.vsLabels.getViewStub().inflate();
+ labelsView = selectLabelView.findViewById(R.id.labels_view);
+ }
+ selectLabelView.setVisibility(View.VISIBLE);
+ selectLabelView.findViewById(R.id.iv_close_label).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ selectLabelView.setVisibility(View.GONE);
+ }
+ });
+ selectLabelView.findViewById(R.id.tv_select_lable).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ selectLabelView.setVisibility(View.GONE);
+ //选择的是同一个则不处理
+ if (TextUtils.isEmpty(selectLabel) || selectLabel.equals(roomInfo.getRoomTag())) {
+ return;
+ }
+// StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_ROOM_LIST_LABEL,
+// "区分房间标签:" + selectLabel);
+ save(null, null, selectLabel);
+ }
+ });
+ labelsView.setOnLabelClickListener(this);
+ getMvpPresenter().requestTagAll();
+ break;
+ case R.id.switch_gift:
+ if (binding.switchGift.isSelected()) {
+ getDialogManager().showOkCancelWithTitleDialog("提示",
+ new SpannableString("关闭后将看不到礼物特效,运作更加流畅,是否确认关闭礼物特效"),
+ "确定", "取消", new DialogManager.OkCancelDialogListener() {
+ @Override
+ public void onCancel() {
+
+ }
+
+ @Override
+ public void onOk() {
+ save(null, null, null, true, false);
+
+ StatisticManager.Instance().onEvent(BasicConfig.INSTANCE.getAppContext(),
+ StatisticsProtocol.Event.EVENT_ROOM_CLOSE_GIFT_EFFECTS_CLICK, "关闭礼物特效", null);
+ }
+ });
+ return;
+ }
+ //开启礼物特效
+ save(null, null, null, true, true);
+ break;
+ case R.id.switch_screen:
+ RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
+ if (roomInfo == null) return;
+ getDialogManager().showProgressDialog(this, "请稍后...");
+ AvRoomModel.get().closeScreen(roomInfo.getRoomId(),
+ !roomInfo.isCloseScreen())
+ .compose(bindToLifecycle())
+ .flatMap(data -> IMNetEaseManager.get().closeOpenScreen(
+ data.getRoomId(), data))
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new SingleObserver