942 lines
35 KiB
Java
942 lines
35 KiB
Java
package com.chwl.app;
|
||
|
||
import static com.chwl.core.channel_page.model.ChannelPageModel.KEY_FLAG_VALID_CHANNEL_PAGE;
|
||
|
||
import android.animation.ObjectAnimator;
|
||
import android.annotation.SuppressLint;
|
||
import android.app.Activity;
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.graphics.Color;
|
||
import android.os.Bundle;
|
||
import android.os.Handler;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
import android.util.SparseArray;
|
||
import android.view.KeyEvent;
|
||
import android.view.MotionEvent;
|
||
import android.view.View;
|
||
import android.view.animation.LinearInterpolator;
|
||
|
||
import androidx.annotation.Nullable;
|
||
import androidx.fragment.app.Fragment;
|
||
import androidx.fragment.app.FragmentTransaction;
|
||
import androidx.lifecycle.ViewModelProvider;
|
||
|
||
import com.chwl.app.base.GlobalViewModelOwner;
|
||
import com.chwl.app.common.widget.dialog.DialogManager;
|
||
import com.chwl.app.community.square.SquareFragment;
|
||
import com.chwl.app.game.core.GameStateAbility;
|
||
import com.chwl.app.game.data.GameModel2;
|
||
import com.chwl.app.game.ui.game.GameActivity;
|
||
import com.chwl.app.game.ui.game.GameIntent;
|
||
import com.chwl.app.game.ui.home.GameHomeFragment;
|
||
import com.chwl.app.star.StarFragment;
|
||
import com.chwl.app.support.PreloadResourceViewModel;
|
||
import com.chwl.app.ui.login.LoginPasswordActivity;
|
||
import com.chwl.core.home.bean.MainTabInfo;
|
||
import com.chwl.core.settings.SettingsModel;
|
||
import com.chwl.library.utils.JavaUtil;
|
||
import com.netease.nim.uikit.StatusBarUtil;
|
||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||
import com.netease.nim.uikit.common.util.string.StringUtil;
|
||
import com.netease.nimlib.sdk.NIMClient;
|
||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
|
||
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
|
||
import com.netease.nimlib.sdk.msg.model.RecentContact;
|
||
import com.netease.nimlib.sdk.team.TeamService;
|
||
import com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum;
|
||
import com.netease.nimlib.sdk.team.model.Team;
|
||
import com.orhanobut.logger.Logger;
|
||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||
import com.chwl.app.application.IReportConstants;
|
||
import com.chwl.app.application.ReportManager;
|
||
import com.chwl.app.application.App;
|
||
import com.chwl.app.avroom.activity.AVRoomActivity;
|
||
import com.chwl.app.base.BaseMvpActivity;
|
||
import com.chwl.app.common.widget.CircleImageView;
|
||
import com.chwl.app.common.widget.DragLayout;
|
||
import com.chwl.app.home.HomeViewModel;
|
||
import com.chwl.app.home.dialog.NewUserHelloDialog;
|
||
import com.chwl.app.home.dialog.ProtocolUpdateDialog;
|
||
import com.chwl.app.home.fragment.ContactsListFragment;
|
||
import com.chwl.app.home.fragment.HomeFragment;
|
||
import com.chwl.app.home.fragment.MeFragment;
|
||
import com.chwl.app.home.presenter.MainPresenter;
|
||
import com.chwl.app.home.view.IMainView;
|
||
import com.chwl.app.home.widget.AnchorCardView;
|
||
import com.chwl.app.module.Extras;
|
||
import com.chwl.app.module_hall.secretcode.PwdCodeMgr;
|
||
import com.chwl.app.service.DaemonService;
|
||
import com.chwl.app.ui.im.ImInitHelper;
|
||
import com.chwl.app.ui.im.avtivity.NimP2PMessageActivity;
|
||
import com.chwl.app.ui.login.BindPhoneActivity;
|
||
import com.chwl.app.ui.login.fragment.AddUserInfoFragment;
|
||
import com.chwl.app.ui.patriarch.help.LimitEnterRoomHelper;
|
||
import com.chwl.app.ui.patriarch.help.PmDialogShowMrg;
|
||
import com.chwl.app.ui.utils.ImageLoadUtils;
|
||
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
|
||
import com.chwl.app.ui.webview.CommonWebViewActivity;
|
||
import com.chwl.app.ui.widget.LivingIconView;
|
||
import com.chwl.app.ui.widget.MainTabLayout;
|
||
import com.chwl.app.utils.CleanLeakUtils;
|
||
import com.chwl.app.utils.PushMessageHandler;
|
||
import com.chwl.core.Constants;
|
||
import com.chwl.core.DemoCache;
|
||
import com.chwl.core.UriProvider;
|
||
import com.chwl.core.auth.AuthModel;
|
||
import com.chwl.core.auth.event.KickOutEvent;
|
||
import com.chwl.core.auth.event.LoginEvent;
|
||
import com.chwl.core.auth.event.LogoutEvent;
|
||
import com.chwl.core.channel_page.model.ChannelPageModel;
|
||
import com.chwl.core.community.event.SquareTaskEvent;
|
||
import com.chwl.core.community.event.UnReadCountEvent;
|
||
import com.chwl.core.home.bean.MainTabType;
|
||
import com.chwl.core.home.event.VisitorUnreadCountEvent;
|
||
import com.chwl.core.home.model.GameHomeModel;
|
||
import com.chwl.core.home.model.HomeModel;
|
||
import com.chwl.core.initial.InitialModel;
|
||
import com.chwl.core.linked.LinkedModel;
|
||
import com.chwl.core.linked.bean.LinkedInfo;
|
||
import com.chwl.core.manager.AvRoomDataManager;
|
||
import com.chwl.core.manager.IMBroadcastManager;
|
||
import com.chwl.core.manager.IMMessageManager;
|
||
import com.chwl.core.manager.RoomEvent;
|
||
import com.chwl.core.patriarch.event.CloseMinRoomEvent;
|
||
import com.chwl.core.patriarch.event.ImPushMsgPmLimitTimeEvent;
|
||
import com.chwl.core.patriarch.event.PmDismissAllLimitDialogEvent;
|
||
import com.chwl.core.room.bean.RoomInfo;
|
||
import com.chwl.core.user.UserModel;
|
||
import com.chwl.core.user.bean.UserInfo;
|
||
import com.chwl.core.user.event.LoadLoginUserInfoEvent;
|
||
import com.chwl.core.user.event.LoginUserInfoUpdateEvent;
|
||
import com.chwl.core.user.event.NeedBindPhoneEvent;
|
||
import com.chwl.core.user.event.NeedCompleteInfoEvent;
|
||
import com.chwl.core.utils.SharedPreferenceUtils;
|
||
import com.chwl.core.utils.StringFormatUtils;
|
||
import com.chwl.library.base.factory.CreatePresenter;
|
||
import com.chwl.library.threadmgr.ThreadPoolManager;
|
||
import com.chwl.library.utils.ResUtil;
|
||
|
||
import org.greenrobot.eventbus.EventBus;
|
||
import org.greenrobot.eventbus.Subscribe;
|
||
import org.greenrobot.eventbus.ThreadMode;
|
||
import org.jetbrains.annotations.NotNull;
|
||
|
||
import java.lang.ref.WeakReference;
|
||
import java.util.HashMap;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* @author Administrator
|
||
*/
|
||
@CreatePresenter(MainPresenter.class)
|
||
public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
||
implements MainTabLayout.OnTabClickListener, IMainView, View.OnClickListener {
|
||
|
||
public static final String MSG_TAB = "msgTab";
|
||
private static final String TAG = "MainActivity";
|
||
private static final String EXTRA_APP_QUIT = "APP_QUIT";
|
||
private final SparseArray<Fragment> fragmentArray = new SparseArray<>();
|
||
private View avatarLayout;
|
||
private CircleImageView avatarImage;
|
||
private LivingIconView userLivingView;
|
||
private MainTabLayout mMainTabLayout;
|
||
private AnchorCardView anchorCardView;
|
||
private View viewClose;
|
||
private int mCurrentTabType = MainTabType.TAB_TYPE_HOME;
|
||
/**
|
||
* 房间最小化动画,换成属性动画,原先的补间动画影响了activity的生命周期
|
||
*/
|
||
private ObjectAnimator roomMinAnim;
|
||
/**
|
||
* 管理限制进房
|
||
*/
|
||
private LimitEnterRoomHelper limitEnterRoomHelper;
|
||
private HomeViewModel homeViewModel;
|
||
private boolean mResumed = false;
|
||
@Nullable
|
||
private Fragment tempFragment = null;
|
||
private DialogManager resumeGameDialogManager;
|
||
|
||
@Nullable
|
||
private Runnable touchRunnable;
|
||
|
||
{
|
||
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
|
||
fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameHomeFragment());
|
||
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
|
||
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment());
|
||
fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment());
|
||
}
|
||
|
||
public static void start(Context context) {
|
||
start(context, null);
|
||
}
|
||
|
||
public static void start(Context context, Intent extras) {
|
||
Intent intent = new Intent();
|
||
intent.setClass(context, MainActivity.class);
|
||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||
if (extras != null) {
|
||
intent.putExtras(extras);
|
||
}
|
||
context.startActivity(intent);
|
||
}
|
||
|
||
/**
|
||
* @return true 如果处理了跳转
|
||
*/
|
||
public static boolean handleLinkedJump(Context context) {
|
||
LinkedInfo linkedInfo = LinkedModel.get().getLinkedInfo();
|
||
LinkedModel.get().setLinkedInfo(null);
|
||
|
||
if (linkedInfo == null || linkedInfo.getType() == null || linkedInfo.getType().equals("null")) {
|
||
return false;
|
||
}
|
||
LogUtil.print(ResUtil.getString(R.string.yizhuan_erban_mainactivity_01));
|
||
// 跳转
|
||
if (!StringUtil.isEmpty(linkedInfo.getRoomUid()) && linkedInfo.getType().equals("2")) {
|
||
AVRoomActivity.start(context, Long.parseLong(linkedInfo.getRoomUid()));
|
||
} else if (!TextUtils.isEmpty(linkedInfo.getUrl()) && linkedInfo.getType().equals("3")) {
|
||
CommonWebViewActivity.start(context, UriProvider.getLinkUrl(linkedInfo.getUrl()));
|
||
} else if (linkedInfo.getType().equals("7") && !TextUtils.isEmpty(linkedInfo.getUid())) {
|
||
NimP2PMessageActivity.start(context, linkedInfo.getUid());
|
||
} else {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
@Override
|
||
protected void onSaveInstanceState(Bundle outState) {
|
||
super.onSaveInstanceState(outState);
|
||
outState.putInt(Constants.KEY_MAIN_POSITION, mCurrentTabType);
|
||
}
|
||
|
||
@Override
|
||
protected void onRestoreInstanceState(@NotNull Bundle savedInstanceState) {
|
||
super.onRestoreInstanceState(savedInstanceState);
|
||
mCurrentTabType = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION);
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
@Override
|
||
protected void onCreate(Bundle savedInstanceState) {
|
||
super.onCreate(savedInstanceState);
|
||
ViewModelProvider viewModelProvider = new ViewModelProvider(this);
|
||
homeViewModel = viewModelProvider.get(HomeViewModel.class);
|
||
NimMiddleActivity.firstEnter = false;
|
||
if (savedInstanceState != null) {
|
||
mCurrentTabType = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION);
|
||
}
|
||
setContentView(R.layout.activity_main);
|
||
//自动登录
|
||
AuthModel.get().autoLogin()
|
||
.doOnError(throwable -> onNeedLogin())
|
||
.subscribe();
|
||
initView();
|
||
List<MainTabInfo> mainTabInfo = InitialModel.get().getMainTabInfosLiveData().getValue();
|
||
if (mainTabInfo != null) {
|
||
mMainTabLayout.setMainTabInfoList(mainTabInfo);
|
||
}
|
||
initMaterialView();
|
||
onParseIntent();
|
||
updateDatas();
|
||
updateRoomState();
|
||
ImInitHelper.get().init();
|
||
EventBus.getDefault().register(this);
|
||
otherModelInit();
|
||
|
||
homeViewModel.getAnchorInfoLiveData().observe(this, anchorInfo -> {
|
||
if (anchorInfo != null) {
|
||
anchorCardView.setAnchorInfo(anchorInfo);
|
||
DemoCache.saveAnchorCardView(2);
|
||
}
|
||
});
|
||
checkResumeGame();
|
||
}
|
||
|
||
private void otherModelInit() {
|
||
PwdCodeMgr.get().onCreateInit();
|
||
//初始化线程池
|
||
ThreadPoolManager.instance().init();
|
||
IMBroadcastManager.get().onCreate();
|
||
ImageLoadUtilsV2.init(context);
|
||
SettingsModel.get().checkSysAccount();
|
||
initPreloadResource();
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
private void checkResumeGame() {
|
||
GameModel2.INSTANCE.getResumeGameRoomInfo().compose(bindToLifecycle()).subscribe(gameRoomInfo -> {
|
||
if (gameRoomInfo != null && gameRoomInfo.getData() != null) {
|
||
Integer state = gameRoomInfo.getData().getMatchStatus();
|
||
if (state != null && (state == GameStateAbility.STATE_MATCH_SUCCESS || state == GameStateAbility.STATE_MATCHING)) {
|
||
if (resumeGameDialogManager == null) {
|
||
resumeGameDialogManager = new DialogManager(this);
|
||
}
|
||
resumeGameDialogManager.showOkCancelDialog(getString(R.string.resume_game_tips), getString(R.string.join_organization_ok), getString(R.string.join_organization_no), false, new DialogManager.OkCancelDialogListener() {
|
||
@Override
|
||
public void onOk() {
|
||
long gameId = JavaUtil.str2long(gameRoomInfo.getData().getMgId());
|
||
int gameMode = 0;
|
||
GameActivity.Companion.start(context, new GameIntent(gameId, gameMode));
|
||
}
|
||
|
||
@Override
|
||
public void onCancel() {
|
||
DialogManager.OkCancelDialogListener.super.onCancel();
|
||
Long roomId = gameRoomInfo.getRoomId();
|
||
if (roomId != null) {
|
||
GameModel2.INSTANCE.closeGameRx(roomId).compose(bindToLifecycle()).subscribe(s -> {
|
||
}, throwable -> {
|
||
});
|
||
}
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}, throwable -> {
|
||
});
|
||
}
|
||
|
||
private void initPreloadResource() {
|
||
PreloadResourceViewModel viewModel = new ViewModelProvider(
|
||
GlobalViewModelOwner.Companion.getInstance()
|
||
).get(PreloadResourceViewModel.class);
|
||
viewModel.start();
|
||
}
|
||
|
||
@Override
|
||
protected void onReceiveChatRoomEvent(RoomEvent roomEvent) {
|
||
super.onReceiveChatRoomEvent(roomEvent);
|
||
if (roomEvent == null || roomEvent.getEvent() == RoomEvent.NONE) return;
|
||
int event = roomEvent.getEvent();
|
||
if (event == RoomEvent.ENTER_ROOM) {
|
||
onEnter(AvRoomDataManager.get().mCurrentRoomInfo);
|
||
} else if (event == RoomEvent.KICK_OUT_ROOM) {
|
||
|
||
ChatRoomKickOutEvent reason = roomEvent.getReason();
|
||
if (reason == null) return;
|
||
//加入黑名单,踢出房间回调
|
||
ChatRoomKickOutEvent.ChatRoomKickOutReason reasonReason = reason.getReason();
|
||
if (reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.BE_BLACKLISTED
|
||
|| reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.KICK_OUT_BY_MANAGER
|
||
|| reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.KICK_OUT_BY_CONFLICT_LOGIN
|
||
|| reasonReason == ChatRoomKickOutEvent.ChatRoomKickOutReason.CHAT_ROOM_INVALID) {
|
||
exitRoom(AvRoomDataManager.get().mCurrentRoomInfo);
|
||
}
|
||
} else if (event == RoomEvent.ROOM_EXIT) {
|
||
exitRoom(roomEvent.getRoomInfo());
|
||
} else if (event == RoomEvent.ROOM_CHAT_RECONNECTION) {
|
||
updateRoomState();
|
||
} else if (event == RoomEvent.MY_SELF_KICK_OUT_ROOM_BY_S_ADMIN) {
|
||
AvRoomDataManager.get().addCurrentRoomLimitEnter();
|
||
toast(R.string.kick_out_room_by_s_admin);
|
||
getMvpPresenter().exitRoom();
|
||
}
|
||
}
|
||
|
||
private void closeOpenRoomAnimation() {
|
||
stopRoomMinAnim();
|
||
avatarLayout.setVisibility(View.GONE);
|
||
}
|
||
|
||
@Override
|
||
protected void onResume() {
|
||
super.onResume();
|
||
mResumed = true;
|
||
if (avatarLayout.getVisibility() == View.VISIBLE) {
|
||
userLivingView.start();
|
||
}
|
||
//这里是为了处理APP后台运行的情况下点击分享房间等LinkedMe链接的情况
|
||
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
|
||
if (userInfo != null) {
|
||
handleLinkedJump(this);
|
||
}
|
||
}
|
||
|
||
@Override
|
||
protected void onPause() {
|
||
super.onPause();
|
||
mResumed = false;
|
||
if (avatarLayout.getVisibility() == View.VISIBLE) {
|
||
userLivingView.stop();
|
||
}
|
||
mMainTabLayout.removeCallbacks(touchRunnable);
|
||
}
|
||
|
||
@Override
|
||
public boolean onTouchEvent(MotionEvent event) {
|
||
if (touchRunnable == null) return super.onTouchEvent(event);
|
||
switch (event.getAction()) {
|
||
case MotionEvent.ACTION_DOWN:
|
||
mMainTabLayout.removeCallbacks(touchRunnable);
|
||
break;
|
||
case MotionEvent.ACTION_UP:
|
||
mMainTabLayout.postDelayed(touchRunnable, 5000);
|
||
break;
|
||
}
|
||
return super.onTouchEvent(event);
|
||
}
|
||
|
||
private void initView() {
|
||
mMainTabLayout = findViewById(R.id.main_tab_layout);
|
||
avatarLayout = findViewById(R.id.avatar_image_layout);
|
||
viewClose = findViewById(R.id.view_close);
|
||
avatarImage = findViewById(R.id.avatar_image);
|
||
userLivingView = findViewById(R.id.liv_user);
|
||
userLivingView.setColor(Color.WHITE);
|
||
mMainTabLayout.setOnTabClickListener(this);
|
||
anchorCardView = findViewById(R.id.vs_anchor_card);
|
||
mMainTabLayout.setDefaultTabType(mCurrentTabType);
|
||
}
|
||
|
||
private void updateDatas() {
|
||
handleNimIntent();
|
||
}
|
||
|
||
@Override
|
||
protected void onNewIntent(Intent intent) {
|
||
super.onNewIntent(intent);
|
||
setIntent(intent);
|
||
//这里退出登录,实际上mainActivity是没有销毁的,当从linkme 调起来时候这里需要检查一下登录状态。
|
||
if (TextUtils.isEmpty(AuthModel.get().getTicket())) {
|
||
onNeedLogin();
|
||
return;
|
||
}
|
||
onParseIntent();
|
||
handleNimIntent();
|
||
InitialModel.get().regionCheck();
|
||
}
|
||
|
||
private void onParseIntent() {
|
||
Intent intent = getIntent();
|
||
if (intent.hasExtra(EXTRA_APP_QUIT)) {
|
||
onLogout();
|
||
} else if (intent.hasExtra(Extras.EXTRA_JUMP_P2P)) {
|
||
Intent data = intent.getParcelableExtra(Extras.EXTRA_DATA);
|
||
String account = data.getStringExtra(Extras.EXTRA_ACCOUNT);
|
||
if (!TextUtils.isEmpty(account)) {
|
||
NimP2PMessageActivity.start(this, account);
|
||
}
|
||
} else if (intent.hasExtra(MSG_TAB) && intent.getBooleanExtra(MSG_TAB, false)) {
|
||
if (mMainTabLayout != null) {
|
||
mMainTabLayout.setDefaultTabType(MainTabType.TAB_TYPE_MSG);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void initMaterialView() {
|
||
avatarLayout.setVisibility(View.GONE);
|
||
avatarImage.setOnClickListener(this);
|
||
viewClose.setOnClickListener(this);
|
||
}
|
||
|
||
@Override
|
||
protected void onDestroy() {
|
||
CleanLeakUtils.fixInputMethodManagerLeak(MainActivity.this);
|
||
super.onDestroy();
|
||
if (resumeGameDialogManager != null) {
|
||
resumeGameDialogManager.dismissDialog();
|
||
}
|
||
ImInitHelper.get().unInit();
|
||
EventBus.getDefault().unregister(this);
|
||
stopRoomMinAnim();
|
||
if (limitEnterRoomHelper != null) {
|
||
limitEnterRoomHelper.release();
|
||
}
|
||
IMBroadcastManager.get().onDestroy();
|
||
}
|
||
|
||
/**
|
||
* 双击返回键退出
|
||
*/
|
||
@Override
|
||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||
|
||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||
|
||
/**
|
||
* 防止华为机型未加入白名单时按返回键回到桌面再锁屏后几秒钟进程被杀
|
||
*/
|
||
try {
|
||
Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
|
||
launcherIntent.addCategory(Intent.CATEGORY_HOME);
|
||
startActivity(launcherIntent);
|
||
} catch (Throwable e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
try {
|
||
moveTaskToBack(false);
|
||
} catch (Exception e) {
|
||
return super.onKeyDown(keyCode, event);
|
||
}
|
||
}
|
||
return super.onKeyDown(keyCode, event);
|
||
}
|
||
|
||
@Override
|
||
public void onBackPressed() {
|
||
try {
|
||
moveTaskToBack(false);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onLoginEvent(LoginEvent event) {
|
||
onLogin(AuthModel.get().getCurrentUid());
|
||
}
|
||
|
||
/**
|
||
* 检查是否绑定手机
|
||
*/
|
||
private void checkBindPhone() {
|
||
BindPhoneActivity.start(context);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onLogoutEvent(LogoutEvent event) {
|
||
PwdCodeMgr.get().onLogout();
|
||
onLogout();
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
public void onLogin(long uid) {
|
||
Logger.e(TAG, "onLogin Success ~~~~");
|
||
|
||
Log.i("checkLostUser", "onLogin");
|
||
|
||
int unreadCount = IMMessageManager.get().queryUnreadMsg();
|
||
mMainTabLayout.setMsgNum(unreadCount);
|
||
openCommunityNotice();
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) {
|
||
firstLoadedUserInfo();
|
||
InitialModel.get().regionCheck();
|
||
}
|
||
|
||
public void onLogout() {
|
||
Logger.e(TAG, "onLogout Success ~~~~");
|
||
getMvpPresenter().exitRoom();
|
||
LoginPasswordActivity.start(MainActivity.this);
|
||
PmDialogShowMrg.get().onLogout();
|
||
finish();
|
||
}
|
||
|
||
public void onNeedLogin() {
|
||
NimMiddleActivity.openCommunity = false;
|
||
LoginPasswordActivity.start(MainActivity.this);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onKickedOutEvent(KickOutEvent event) {
|
||
toast(getString(R.string.you_have_been_kicked_offline));
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onReceiveRecentContactChanged(List<RecentContact> imMessages) {
|
||
|
||
int countIgnore = 0;
|
||
for (RecentContact recentContact : imMessages) {
|
||
|
||
if (recentContact.getSessionType() == SessionTypeEnum.Team) {
|
||
Team team = NIMClient.getService(TeamService.class).queryTeamBlock(recentContact.getContactId());
|
||
if (team != null && team.getMessageNotifyType() == TeamMessageNotifyTypeEnum.Mute) {
|
||
countIgnore += recentContact.getUnreadCount();
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
int unreadCount = IMMessageManager.get().queryUnreadMsg() + countIgnore;
|
||
mMainTabLayout.setMsgNum(unreadCount);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onNeedCompleteInfo(NeedCompleteInfoEvent event) {
|
||
getDialogManager().dismissDialog();
|
||
UIHelper.showAddInfoAct(this);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onLoginUserInfoUpdateEvent(LoginUserInfoUpdateEvent event) {
|
||
int unreadCount = IMMessageManager.get().queryUnreadMsg();
|
||
mMainTabLayout.setMsgNum(unreadCount);
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
private void updateRoomState() {
|
||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||
if (roomInfo != null) {
|
||
displayAvatarLayout(roomInfo.getAvatar(), roomInfo.getTitle(), roomInfo.getUid());
|
||
}
|
||
}
|
||
|
||
private void startRoomMinAnim() {
|
||
roomMinAnim = ObjectAnimator.ofFloat(avatarImage, "rotation", 0f, 360f);
|
||
roomMinAnim.setDuration(10000);
|
||
roomMinAnim.setRepeatCount(-1);
|
||
roomMinAnim.setInterpolator(new LinearInterpolator());
|
||
roomMinAnim.start();
|
||
}
|
||
|
||
private void stopRoomMinAnim() {
|
||
if (roomMinAnim != null) {
|
||
roomMinAnim.cancel();
|
||
roomMinAnim = null;
|
||
}
|
||
}
|
||
|
||
@SuppressLint("SetTextI18n")
|
||
private void displayAvatarLayout(String avatar, String nickName, long uid) {
|
||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||
if (roomInfo != null) {
|
||
avatarLayout.clearAnimation();
|
||
avatarLayout.setVisibility(View.VISIBLE);
|
||
userLivingView.start();
|
||
stopRoomMinAnim();
|
||
startRoomMinAnim();
|
||
ImageLoadUtils.loadAvatar(MainActivity.this, avatar, avatarImage);
|
||
}
|
||
}
|
||
|
||
public void onEnter(RoomInfo roomInfo) {
|
||
updateRoomState();
|
||
DaemonService.start(this, roomInfo);
|
||
}
|
||
|
||
@SuppressLint("RestrictedApi")
|
||
@Override
|
||
public void onTabClick(int tabType) {
|
||
|
||
Fragment showFragment = fragmentArray.get(tabType);
|
||
if (showFragment == tempFragment) return;
|
||
|
||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||
if (!showFragment.isAdded()) {
|
||
transaction.add(R.id.main_fragment, showFragment, null);
|
||
}
|
||
transaction.show(showFragment);
|
||
if (tempFragment != null) {
|
||
transaction.hide(tempFragment);
|
||
}
|
||
tempFragment = showFragment;
|
||
if (!isDestroyed()) {
|
||
transaction.commitNowAllowingStateLoss();
|
||
}
|
||
mCurrentTabType = tabType;
|
||
|
||
//每次点击我的都更新当前用户信息
|
||
if (mCurrentTabType == MainTabType.TAB_TYPE_ME) {
|
||
UserModel.get().updateCurrentUserInfo().subscribe();
|
||
}
|
||
|
||
switch (tabType) {
|
||
case MainTabType.TAB_TYPE_HOME:
|
||
reportTabClick(IReportConstants.ELEVEN);
|
||
break;
|
||
case MainTabType.TAB_TYPE_MSG:
|
||
reportTabClick(IReportConstants.THIRTEEN);
|
||
break;
|
||
case MainTabType.TAB_TYPE_ME:
|
||
reportTabClick(IReportConstants.FOURTEEN);
|
||
break;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 导航栏tab板块点击
|
||
*
|
||
* @param type
|
||
*/
|
||
private void reportTabClick(int type) {
|
||
//登录页展示时
|
||
HashMap<String, Object> map = new HashMap<>(3);
|
||
map.put(IReportConstants.HOMEPAGE_TYPE, type);
|
||
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE);
|
||
ReportManager.get().reportEvent(IReportConstants.MODULE_HOMEPAGE_CLICK, map);
|
||
}
|
||
|
||
@Override
|
||
public void exitRoom(RoomInfo roomInfo) {
|
||
closeOpenRoomAnimation();
|
||
DaemonService.stop(MainActivity.this);
|
||
}
|
||
|
||
/**
|
||
* 第一次加载到用户信息
|
||
*/
|
||
@SuppressLint("CheckResult")
|
||
private void firstLoadedUserInfo() {
|
||
//青少年弹窗处理
|
||
PmDialogShowMrg.get().handle(new WeakReference<>(this));
|
||
|
||
handleChannelPageInfo();
|
||
|
||
checkProtocolUpdate();
|
||
|
||
// 互动消息未读数量
|
||
HomeModel.INSTANCE.getUnreadCount(AuthModel.get().getCurrentUid())
|
||
.compose(bindUntilEvent(ActivityEvent.DESTROY))
|
||
.subscribe((integer, throwable) -> {
|
||
if (integer != null) {
|
||
EventBus.getDefault().post(new UnReadCountEvent(integer));
|
||
}
|
||
});
|
||
// checkShowAnchorCardView();
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
private void checkProtocolUpdate() {
|
||
UserModel.get()
|
||
.getProtocolInfo()
|
||
.compose(bindUntilEvent(ActivityEvent.DESTROY))
|
||
.subscribe(protocolInfo -> {
|
||
float version = (float) SharedPreferenceUtils.get(ProtocolUpdateDialog.SP_KEY, 0f);
|
||
//第一次打开APP不弹,因为闪屏页已经弹了!
|
||
if (version == 0f) {
|
||
SharedPreferenceUtils.put(ProtocolUpdateDialog.SP_KEY, protocolInfo.getVer());
|
||
} else if (version < protocolInfo.getVer()) {
|
||
new ProtocolUpdateDialog(MainActivity.this, protocolInfo).show();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 跳转优先级 闪屏→linkedMe→邀请码→新用户打招呼引导→渠道指定房间
|
||
*/
|
||
@SuppressLint("CheckResult")
|
||
private void handleChannelPageInfo() {
|
||
|
||
if (handleSplashJump()) return;
|
||
if (handleLinkedJump(this)) return;
|
||
|
||
//渠道落地页和邀请码跳转只需要完善资料后处理一次
|
||
String spKey = KEY_FLAG_VALID_CHANNEL_PAGE + AuthModel.get().getCurrentUid();
|
||
if ((boolean) SharedPreferenceUtils.get(spKey, true)) {
|
||
SharedPreferenceUtils.put(spKey, false);
|
||
checkInviteUserInRoom();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 检查邀请码跳转
|
||
*/
|
||
@SuppressLint("CheckResult")
|
||
private void checkInviteUserInRoom() {
|
||
if (!TextUtils.isEmpty(AddUserInfoFragment.INVITE_USER_CODE)) {
|
||
ChannelPageModel.get().checkInviteUserInRoom(AddUserInfoFragment.INVITE_USER_CODE)
|
||
.subscribe(inviteUserInfo -> {
|
||
if (inviteUserInfo.isInRoom()) {
|
||
if (inviteUserInfo.getFromType() == 0) {
|
||
AVRoomActivity.start(context, inviteUserInfo.getRoomUid());
|
||
} else {
|
||
AVRoomActivity.startForFromType(context,
|
||
inviteUserInfo.getRoomUid(),
|
||
inviteUserInfo.getFromType(),
|
||
inviteUserInfo.getInviteNick(),
|
||
String.valueOf(inviteUserInfo.getInviteUid()));
|
||
}
|
||
} else {
|
||
checkNewUserInRoom();
|
||
}
|
||
}, throwable -> checkNewUserInRoom());
|
||
AddUserInfoFragment.INVITE_USER_CODE = "";
|
||
} else {
|
||
checkNewUserInRoom();
|
||
}
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
private void checkNewUserInRoom() {
|
||
ChannelPageModel.get().checkNewUserInRoom()
|
||
.subscribe(newUserHelloInfo -> {
|
||
if (newUserHelloInfo.getSayHello()) {
|
||
NewUserHelloDialog.Companion.newInstance(newUserHelloInfo).show(context);
|
||
} else {
|
||
checkChannelPageInRoom();
|
||
}
|
||
}, throwable -> checkChannelPageInRoom());
|
||
}
|
||
|
||
/**
|
||
* 处理渠道落地页
|
||
*/
|
||
@SuppressLint("CheckResult")
|
||
private void checkChannelPageInRoom() {
|
||
GameHomeModel.get().getRoomShortcut()
|
||
.compose(bindUntilEvent(ActivityEvent.DESTROY))
|
||
.subscribe(uid -> {
|
||
if (StringFormatUtils.toLong(uid) != 0) {
|
||
AVRoomActivity.start(context, StringFormatUtils.toLong(uid));
|
||
}
|
||
},
|
||
Throwable::printStackTrace);
|
||
}
|
||
|
||
/**
|
||
* @return true 如果处理了跳转
|
||
*/
|
||
private boolean handleSplashJump() {
|
||
if (getIntent().hasExtra("url") && getIntent().hasExtra("type")) {
|
||
LogUtil.print(getString(R.string.clicked_the_splash_screen));
|
||
//如果没有渠道页,就按原来的逻辑即可
|
||
int type = getIntent().getIntExtra("type", 0);
|
||
String url = getIntent().getStringExtra("url");
|
||
if (type == 3) {
|
||
Intent intent = new Intent(context, CommonWebViewActivity.class);
|
||
intent.putExtra("url", url);
|
||
startActivity(intent);
|
||
} else if (type == 2) {
|
||
AVRoomActivity.start(context, Long.parseLong(url));
|
||
} else {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public LimitEnterRoomHelper getLimitEnterRoomHelper() {
|
||
if (limitEnterRoomHelper == null) {
|
||
limitEnterRoomHelper = new LimitEnterRoomHelper();
|
||
}
|
||
return limitEnterRoomHelper;
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onImPushMsgPmLimitTimeEvent(ImPushMsgPmLimitTimeEvent event) {
|
||
//先判断Avroom存不存在,存在的话则不处理,avroom会处理
|
||
Activity reference = App.gStack.getAvRoomActivity();
|
||
if (reference != null) {
|
||
return;
|
||
}
|
||
getLimitEnterRoomHelper().handleThisContext(this, event.getData(), true, this::handlePmExitRoom);
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onPmDismissAllLimitDialogEvent(PmDismissAllLimitDialogEvent event) {
|
||
if (limitEnterRoomHelper != null) {
|
||
limitEnterRoomHelper.dismissDialog();
|
||
}
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void SquarePublish(SquareTaskEvent event) {
|
||
}
|
||
|
||
private void handlePmExitRoom() {
|
||
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
|
||
closeOpenRoomAnimation();
|
||
getMvpPresenter().exitRoom();
|
||
}
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onCloseMinRoomEvent(CloseMinRoomEvent event) {
|
||
//如果房间存在,就关闭
|
||
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {
|
||
handlePmExitRoom();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 处理开房限制时长
|
||
*/
|
||
public void handleOpenRoomWhenPmLimit(String error) {
|
||
getLimitEnterRoomHelper().handleThisContext(this, error, false, this::handlePmExitRoom);
|
||
}
|
||
|
||
/**
|
||
* 云信通知栏跳转的处理
|
||
*/
|
||
private void handleNimIntent() {
|
||
openCommunityNotice();
|
||
|
||
Intent intent = getIntent();
|
||
if (intent == null) {
|
||
return;
|
||
}
|
||
boolean isNimPush = intent.getBooleanExtra(NimMiddleActivity.EXTRA_IS_NIM_PUSH, false);
|
||
if (isNimPush && mMainTabLayout != null) {
|
||
mMainTabLayout.setDefaultTabType(MainTabType.TAB_TYPE_MSG);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 点击互动通知通知栏,重启进程打开互动通知页
|
||
*/
|
||
private void openCommunityNotice() {
|
||
if (NimMiddleActivity.delayOpenCommunity) {
|
||
return;
|
||
}
|
||
if (NimMiddleActivity.openCommunity) {
|
||
NimMiddleActivity.openCommunity = false;
|
||
if (NimMiddleActivity.skipType == 0) return;
|
||
new Handler().postDelayed(() -> {
|
||
if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_INVITE_FANS &&
|
||
NimMiddleActivity.payloadUid > 0) {
|
||
AVRoomActivity.start(MainActivity.this, NimMiddleActivity.payloadUid);
|
||
} else if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_PRIVATE_MSG &&
|
||
NimMiddleActivity.payloadUid > 0) {
|
||
NimP2PMessageActivity.start(MainActivity.this, NimMiddleActivity.payloadUid + "");
|
||
} else if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_H5 &&
|
||
!TextUtils.isEmpty(NimMiddleActivity.payloadUrl)) {
|
||
CommonWebViewActivity.start(MainActivity.this, NimMiddleActivity.payloadUrl);
|
||
}
|
||
}, 2000);
|
||
}
|
||
}
|
||
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||
public void onNeedBindPhoneEvent(NeedBindPhoneEvent event) {
|
||
// checkBindPhone();
|
||
}
|
||
|
||
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
|
||
public void onVisitorUnreadCountEvent(VisitorUnreadCountEvent event) {
|
||
if (mMainTabLayout != null) {
|
||
mMainTabLayout.setUnreadVisitorCount(event.getVisitNum());
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onClick(View v) {
|
||
switch (v.getId()) {
|
||
case R.id.avatar_image:
|
||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||
if (roomInfo != null) {
|
||
AVRoomActivity.start(MainActivity.this, roomInfo.getUid());
|
||
} else {
|
||
toast(getString(R.string.room_information_is_empty));
|
||
}
|
||
|
||
break;
|
||
case R.id.view_close:
|
||
MainActivity.this.getMvpPresenter().exitRoom();
|
||
break;
|
||
}
|
||
}
|
||
|
||
@Override
|
||
protected boolean needSteepStateBar() {
|
||
return true;
|
||
}
|
||
|
||
@Override
|
||
protected void setStatusBar() {
|
||
super.setStatusBar();
|
||
StatusBarUtil.transparencyBar(this);
|
||
StatusBarUtil.StatusBarLightMode(this);
|
||
}
|
||
|
||
}
|