打开APP跳转逻辑整理,

优先级 闪屏→linkedme→渠道指定房间→邀请码
This commit is contained in:
huangjian
2020-12-02 20:18:12 +08:00
parent 9de70ff3e4
commit 27daab4ddc
16 changed files with 197 additions and 922 deletions

View File

@@ -98,6 +98,7 @@ import com.yizhuan.erban.ui.im.chat.SignInNoticeMsgViewHolder;
import com.yizhuan.erban.ui.im.chat.SysMsgV2ViewHolder;
import com.yizhuan.erban.ui.im.chat.SysMsgViewHolder;
import com.yizhuan.erban.ui.login.BindPhoneActivity;
import com.yizhuan.erban.ui.login.fragment.AddUserInfoFragment;
import com.yizhuan.erban.ui.patriarch.help.LimitEnterRoomHelper;
import com.yizhuan.erban.ui.patriarch.help.PmDialogShowMrg;
import com.yizhuan.erban.ui.user.UserInfoActivity;
@@ -148,6 +149,7 @@ import com.yizhuan.xchat_android_core.im.custom.bean.SysMsgAttachment;
import com.yizhuan.xchat_android_core.im.custom.bean.SysMsgV2Attachment;
import com.yizhuan.xchat_android_core.level.event.CharmLevelUpEvent;
import com.yizhuan.xchat_android_core.level.event.LevelUpEvent;
import com.yizhuan.xchat_android_core.linked.LinkedModel;
import com.yizhuan.xchat_android_core.linked.bean.LinkedInfo;
import com.yizhuan.xchat_android_core.linked.event.LinkMeInfoUpdateEvent;
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
@@ -170,6 +172,7 @@ import com.yizhuan.xchat_android_core.room.bean.RoomInfo;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.InviteUserInfo;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.user.bean.UserRecommendRoomInfo;
import com.yizhuan.xchat_android_core.user.event.CurrentUserInfoCompleteEvent;
@@ -178,6 +181,7 @@ import com.yizhuan.xchat_android_core.user.event.LoginUserInfoUpdateEvent;
import com.yizhuan.xchat_android_core.user.event.NeedBindPhoneEvent;
import com.yizhuan.xchat_android_core.user.event.NeedCompleteInfoEvent;
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
import com.yizhuan.xchat_android_library.threadmgr.ThreadPoolManager;
import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
@@ -198,19 +202,21 @@ import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.SingleSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiConsumer;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import static com.yizhuan.xchat_android_core.Constants.SHOW_CAR_GUIDE;
import static com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel.KEY_FLAG_VALID_CHANNEL_PAGE;
/**
* @author Administrator
*/
@CreatePresenter(MainPresenter.class)
public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
implements MainTabLayout.OnTabClickListener, IMainView, View.OnClickListener{
implements MainTabLayout.OnTabClickListener, IMainView, View.OnClickListener {
private static final String TAG = "MainActivity";
@@ -501,7 +507,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
protected void onResume() {
super.onResume();
LinkedME.getInstance().setImmediate(true);
if (avatarLayout.getVisibility() == View.VISIBLE) {
userLivingView.start();
}
@@ -652,36 +657,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLinkMeInfoUpdateEvent(LinkMeInfoUpdateEvent event) {
LinkedInfo linkedInfo = event.getLinkedInfo();
if (linkedInfo == null || linkedInfo.getType() == null) {
return;
}
LogUtil.print("linkedme跳转");
handleChannelPageInfo(true)
.doOnError(throwable -> {
// 跳转
if (!StringUtil.isEmpty(linkedInfo.getRoomUid()) && linkedInfo.getType().equals("2")) {
AVRoomActivity.start(this, Long.valueOf(linkedInfo.getRoomUid()));
} else if (!StringUtil.isEmpty(linkedInfo.getFamilyId()) && linkedInfo.getType().equals("4")) {
FamilyHomeActivity.start(this, linkedInfo.getFamilyId());
} else if (!TextUtils.isEmpty(linkedInfo.getUrl()) && linkedInfo.getType().equals("3")) {
CommonWebViewActivity.start(context, UriProvider.getLinkUrl(linkedInfo.getUrl()));
} else if (!TextUtils.isEmpty(linkedInfo.getWorldId()) && linkedInfo.getType().equals("5")) {
MiniWorldGuestPageActivity.start(context, linkedInfo.getWorldId());
} else if (linkedInfo.getType().equals("6") && !TextUtils.isEmpty(linkedInfo.getWorldId()) &&
!TextUtils.isEmpty(linkedInfo.getDynamicId())) {
DynamicDetailActivity.start(context, JavaUtil.str2long(linkedInfo.getDynamicId()),
JavaUtil.str2long(linkedInfo.getWorldId()), 6);
}
})
.subscribe();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLoginEvent(LoginEvent event) {
onLogin(AuthModel.get().getCurrentUid());
@@ -707,49 +682,17 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
CrashReport.setUserId(this, uid + "");
Log.i("checkLostUser", "onLogin");
// checkLostUser(uid);
//登录完成后检查更新
// AppUpgradeHelper.checkAppUpgrade(this);
//登录成功查询未读信息数量
mMainTabLayout.setmUnReadDynamicCount(0);
int unreadCount = IMMessageManager.get().queryUnreadMsg() + Unicorn.getUnreadCount();
mMainTabLayout.setMsgNum(unreadCount);
// 如果需要跳转,在这里实现
if (!shown &&
(System.currentTimeMillis() - startTime) <= 2000 &&
getIntent().hasExtra("url") && getIntent().hasExtra("type")) {
shown = true;
LogUtil.print("点击了闪屏");
handleChannelPageInfo(true)
.doOnError(throwable -> {
//如果没有渠道页,就按原来的逻辑即可
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));
}
})
.subscribe();
}
// 互动消息未读数量
HomeModel.get().getUnreadCount(AuthModel.get().getCurrentUid())
.compose(bindToLifecycle())
.subscribe(new BiConsumer<Integer, Throwable>() {
@Override
public void accept(Integer integer, Throwable throwable) throws Exception {
if (integer != null) {
EventBus.getDefault().post(new UnReadCountEvent(integer));
}
.subscribe((integer, throwable) -> {
if (integer != null) {
EventBus.getDefault().post(new UnReadCountEvent(integer));
}
});
@@ -856,28 +799,26 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private void updateRoomState() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
UserModel.get().getUserInfo(roomInfo.getUid()).subscribe(new Consumer<UserInfo>() {
@Override
public void accept(UserInfo userInfo) throws Exception {
if (userInfo != null) {
displayAvatarLayout(userInfo.getAvatar(), roomInfo.getTitle(), userInfo.getErbanNo());
} else {
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(roomInfo.getUid() + "");
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(roomInfo.getUid() + "", new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
displayAvatarLayout(nimUserInfo.getAvatar(),roomInfo.getTitle(), userInfo.getUid());
}
}
});
UserModel.get().getUserInfo(roomInfo.getUid())
.subscribe(userInfo -> {
if (userInfo != null) {
displayAvatarLayout(userInfo.getAvatar(), roomInfo.getTitle(), userInfo.getErbanNo());
} else {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(roomInfo.getUid() + "");
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(roomInfo.getUid() + "", new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
} else {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
}
}
});
});
}
}
@@ -984,70 +925,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
DaemonService.stop(MainActivity.this);
}
private void showCarGuide() {
boolean showCarGuide = CommonPref.instance(this).getBoolean(SHOW_CAR_GUIDE, true);
if (showCarGuide) {
ShowCarGuideDialog showCarGuideDialog = ShowCarGuideDialog.newInstance("https://image.zhongjialx.com/Fi1Vhqkkc9dh3RIPgy3jjWBtyWNE?imageslim");
if (!isValid()) return;
showCarGuideDialog.show(getFragmentManager(), ShowCarGuideDialog.class.getSimpleName());
CommonPref.instance(this).putBoolean(SHOW_CAR_GUIDE, false);
}
}
/**
* lvzebiao at 2020/02/27
* 绑定手机号流程更改,完善资料完成后,访问少男少女的接口的逻辑依旧保留,但不算登录流程结束
* 登录流程结束,应该是完善资料-绑定手机号-最后获取最新的用户信息
* 并且发出事件{@link LoadLoginUserInfoEvent} 后,才算登录流程成功,并终止
*/
@SuppressLint("CheckResult")
@Subscribe(threadMode = ThreadMode.MAIN)
public void onCurrentUserInfoCompleteEvent(CurrentUserInfoCompleteEvent event) {
//补全完信息后,获取导流房间数据
HomeModel.get().loadRecommendRoom(
String.valueOf(AuthModel.get().getCurrentUid())
)
.subscribe(new BiConsumer<UserRecommendRoomInfo, Throwable>() {
@Override
public void accept(UserRecommendRoomInfo userRecommendRoomInfo, Throwable throwable) throws Exception {
if (throwable != null) {
Logger.e(throwable.getMessage());
return;
}
if (userRecommendRoomInfo.getRecommendRoomUid() > 0) {
onRecommendRoomWhenCompleteUserInformation(userRecommendRoomInfo);
}
}
});
//处理签到弹框 注释原因看上面备注
//handleSign();
//firstLoadedUserInfo();
}
/**
* 第一次完善用户信息时候,弹出推荐房间dialog
*
* @param userRecommendRoomInfo
*/
private void onRecommendRoomWhenCompleteUserInformation(UserRecommendRoomInfo userRecommendRoomInfo) {
RecommendRoomForNewerDialog dialog = new RecommendRoomForNewerDialog(this);
dialog.setActionListener(new RecommendRoomForNewerDialog.onActionListener() {
@Override
public void onGoIntoRoom(DialogInterface dialogInterface) {
AVRoomActivity.start(MainActivity.this, userRecommendRoomInfo.getRecommendRoomUid());
dialogInterface.dismiss();
}
@Override
public void onCancel(DialogInterface dialogInterface) {
dialogInterface.dismiss();
}
});
dialog.show();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMarketVerifyUpdateEvent(MarketVerifyUpdateEvent event) {
//审核包隐藏tab
@@ -1072,14 +949,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
RecallDialog.start(this);
}
private void checkLostUser(long uid) {
RecallModel.get().checkLostUser(uid).subscribe();
}
private void startGuild() {
GuideActivity.start(this);
}
public boolean isShowMsgTab() {
return mCurrentMainPosition == MainTabLayout.MAIN_TAB_POS_MSG;
}
@@ -1090,27 +959,116 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
/**
* 第一次加载到用户信息
* 跳转优先级 闪屏→linkedMe→渠道指定房间→邀请码
*/
private void firstLoadedUserInfo() {
//青少年弹窗处理
PmDialogShowMrg.get().handle(new WeakReference<>(this));
//这里稍微晚点访问
Single.timer(400, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.flatMap(new Function<Long, SingleSource<ChannelPageInfo>>() {
@Override
public SingleSource<ChannelPageInfo> apply(Long aLong) throws Exception {
return handleChannelPageInfo(false);
}
})
.subscribe();
//通知栏权限判断
NoticationsUiHelper.handle(this, getDialogManager());
handleChannelPageInfo();
}
//闪屏→linkedme→渠道指定房间→邀请码
@SuppressLint("CheckResult")
private void handleChannelPageInfo() {
if (handleSplashJump()) return;
if (handleLinkedJump()) return;
//渠道落地页和邀请码跳转只需要完善资料后处理一次
if ((boolean) SharedPreferenceUtils.get(KEY_FLAG_VALID_CHANNEL_PAGE, true)) {
SharedPreferenceUtils.put(KEY_FLAG_VALID_CHANNEL_PAGE, false);
ChannelPageModel.get().getChannelPage()
.delay(400, TimeUnit.MILLISECONDS)
.compose(RxHelper.handleSchedulers())
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(this::channelPageInfoRoute,
throwable -> 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()) {
AVRoomActivity.startForFromType(context,
inviteUserInfo.getRoomUid(),
AVRoomActivity.FROM_TYPE_USER,
inviteUserInfo.getInviteNick(),
String.valueOf(inviteUserInfo.getInviteUid()));
}
}, Throwable::printStackTrace);
}
}
/**
* 处理渠道落地页
*/
private void channelPageInfoRoute(ChannelPageInfo info) {
RouterHandler.handle(context, info.getRouteType(), info.getRouteValue());
}
/**
* @return true 如果处理了跳转
*/
private boolean handleSplashJump() {
if (getIntent().hasExtra("url") && getIntent().hasExtra("type")) {
LogUtil.print("点击了闪屏");
//如果没有渠道页,就按原来的逻辑即可
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 true 如果处理了跳转
*/
public boolean handleLinkedJump() {
LinkedInfo linkedInfo = LinkedModel.get().getLinkedInfo();
LinkedModel.get().setLinkedInfo(null);
if (linkedInfo == null || linkedInfo.getType() == null) {
return false;
}
LogUtil.print("linkedme跳转");
// 跳转
if (!StringUtil.isEmpty(linkedInfo.getRoomUid()) && linkedInfo.getType().equals("2")) {
AVRoomActivity.start(this, Long.parseLong(linkedInfo.getRoomUid()));
} else if (!StringUtil.isEmpty(linkedInfo.getFamilyId()) && linkedInfo.getType().equals("4")) {
FamilyHomeActivity.start(this, linkedInfo.getFamilyId());
} else if (!TextUtils.isEmpty(linkedInfo.getUrl()) && linkedInfo.getType().equals("3")) {
CommonWebViewActivity.start(context, UriProvider.getLinkUrl(linkedInfo.getUrl()));
} else if (!TextUtils.isEmpty(linkedInfo.getWorldId()) && linkedInfo.getType().equals("5")) {
MiniWorldGuestPageActivity.start(context, linkedInfo.getWorldId());
} else if (linkedInfo.getType().equals("6") && !TextUtils.isEmpty(linkedInfo.getWorldId()) &&
!TextUtils.isEmpty(linkedInfo.getDynamicId())) {
DynamicDetailActivity.start(context, JavaUtil.str2long(linkedInfo.getDynamicId()),
JavaUtil.str2long(linkedInfo.getWorldId()), 6);
} else {
return false;
}
return true;
}
public LimitEnterRoomHelper getLimitEnterRoomHelper() {
if (limitEnterRoomHelper == null) {
limitEnterRoomHelper = new LimitEnterRoomHelper();
@@ -1194,13 +1152,13 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
if (NimMiddleActivity.openCommunity) {
NimMiddleActivity.openCommunity = false;
if (NimMiddleActivity.skipType == 0)return;
if (NimMiddleActivity.skipType == 0) return;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_INVITE_FANS){
AVRoomActivity.start(MainActivity.this,NimMiddleActivity.payloadUid);
}else if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_PRIVATE_MSG){
if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_INVITE_FANS) {
AVRoomActivity.start(MainActivity.this, NimMiddleActivity.payloadUid);
} else if (NimMiddleActivity.skipType == PushMessageHandler.PAYLOAD_SKIPTYPE_PRIVATE_MSG) {
NimP2PMessageActivity.start(MainActivity.this, NimMiddleActivity.payloadUid + "");
}
}
@@ -1208,33 +1166,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
}
private Single<ChannelPageInfo> handleChannelPageInfo(boolean isSplashOrLinkedme) {
return ChannelPageModel.get().handleSplashOrLinkedmeJump(isSplashOrLinkedme)
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.doOnSuccess(info -> channelPageInfoRoute(info, isSplashOrLinkedme))
.doOnError(throwable -> LogUtil.print(throwable.getMessage()));
}
/**
* 处理渠道落地页
*/
private void channelPageInfoRoute(ChannelPageInfo info, boolean isSplashOrLinkedme) {
if (info == null) {
return;
}
if (ChannelPageModel.get().isHasJumpChannelPage()) {
LogUtil.print("已经跳转过落地页了...");
return;
}
ChannelPageModel.get().setTureJumpChannelPage();
//如果是来自linkedme或者闪屏则需要延迟下再启动
//普通访问,事先已经有延迟,则直接启动
long delay = isSplashOrLinkedme ? 300 : 10;
Single.timer(delay, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
.doOnSuccess(aLong ->
RouterHandler.handle(context, info.getRouteType(), info.getRouteValue()))
.subscribe();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onNeedBindPhoneEvent(NeedBindPhoneEvent event) {

View File

@@ -119,7 +119,7 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
@Override
public int getItemViewType(int position) {
// RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
// RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (position == 0) return TYPE_BOSS;
// 新秀房,牌照房展示老板位
@@ -190,7 +190,7 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null)
return;
if (roomInfo.isLeaveMode() && position == -1){
if (roomInfo.isLeaveMode() && position == -1) {
DialogWebViewActivity.start(context,
UriProvider.getPersonalCharismaRank() + "?uid=" + roomInfo.getUid());
}
@@ -247,16 +247,16 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
charmData.setValueObserver(valueObserver);
//控制最高最低头饰
Observer<Integer> headWearObserver = headWearValue ->{
if (ivCharmLevelTag == null)return;
Observer<Integer> headWearObserver = headWearValue -> {
if (ivCharmLevelTag == null) return;
ivCharmLevelTag.setVisibility(View.GONE);
if (headWearValue == 1){
if (headWearValue == 1) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_min));
}else if (headWearValue == 2){
} else if (headWearValue == 2) {
ivCharmLevelTag.setVisibility(View.VISIBLE);
ivCharmLevelTag.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_charm_level_max));
}else {
} else {
ivCharmLevelTag.setVisibility(View.GONE);
}
};
@@ -319,8 +319,9 @@ public class MicroViewAdapter extends BaseMicroViewAdapter {
if (roomInfo == null)
return;
//初始化红包是否显示
if (InitialModel.get().getCacheInitInfo().getRedEnvelopeConfig() != null){
ivRedPackage.setVisibility(InitialModel.get().getCacheInitInfo().getRedEnvelopeConfig().isOpen()?View.VISIBLE:View.GONE);
InitInfo initInfo = InitialModel.get().getCacheInitInfo();
if (initInfo != null && initInfo.getRedEnvelopeConfig() != null) {
ivRedPackage.setVisibility(initInfo.getRedEnvelopeConfig().isOpen() ? View.VISIBLE : View.GONE);
}
// 新版房主位优先判断麦序是否有人,麦序没人再判断是否是离开模式(防止新版展示离开模式,实际麦位有人)
ChatRoomMember chatRoomMember = info.mChatRoomMember;

View File

@@ -22,6 +22,7 @@ import com.yizhuan.erban.ui.webview.DialogWebViewActivity
import com.yizhuan.xchat_android_core.UriProvider
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.xchat_android_core.initial.InitialModel
import com.yizhuan.xchat_android_core.initial.bean.InitInfo
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.pay.PayModel
import com.yizhuan.xchat_android_core.pay.event.UpdateWalletInfoEvent
@@ -60,9 +61,9 @@ class RedPackageSendDialog : BaseDialog<DialogRedPackageSendBinding>(), GridPass
EventBus.getDefault().register(this)
PayModel.get().currentWalletInfo?.let {
binding.tvBalanceNum.text =it.diamondNum.toInt().toString()
binding.tvBalanceNum.text = it.diamondNum.toInt().toString()
}
val initInfo = InitialModel.get().cacheInitInfo
val initInfo = InitialModel.get().cacheInitInfo ?: InitInfo()
/**
* 厅内
@@ -114,7 +115,11 @@ class RedPackageSendDialog : BaseDialog<DialogRedPackageSendBinding>(), GridPass
binding.tvChangeType.callOnClick()
}
binding.tvCharge.setOnClickListener { if (!CommonUtils.isFastDoubleClick(800)){ ChargeActivity.start(context) } }
binding.tvCharge.setOnClickListener {
if (!CommonUtils.isFastDoubleClick(800)) {
ChargeActivity.start(context)
}
}
binding.ivClose.setOnClickListener { dismissAllowingStateLoss() }
binding.ivHelp.setOnClickListener { DialogWebViewActivity.start(context, UriProvider.getRedPacketRule()) }
binding.ivSend.setOnClickListener {
@@ -140,12 +145,12 @@ class RedPackageSendDialog : BaseDialog<DialogRedPackageSendBinding>(), GridPass
}
val goldNum = binding.editGoldNum.text.toString().toIntOrDef()
if (isAll){
if (isAll) {
if (goldNum % 100 != 0) {
SingleToastUtil.showToast("钻石数必须为100的倍数!")
return@setOnClickListener
}
}else{
} else {
if (goldNum % 10 != 0) {
SingleToastUtil.showToast("钻石数必须为10的倍数!")
return@setOnClickListener

View File

@@ -866,6 +866,7 @@ public class GameHomeFragment extends BaseMvpFragment<IMainFragmentView, MainFra
.subscribe(homePlayList -> {
if (ListUtils.isListEmpty(homePlayList)) {
mBinding.tvAddFriends.setVisibility(View.GONE);
addFriendsAdapter.setNewData(null);
} else {
loopHomePlay(homePlayList);
}

View File

@@ -10,6 +10,7 @@ import android.text.TextUtils;
import android.view.View;
import com.bumptech.glide.request.RequestOptions;
import com.microquation.linkedme.android.LinkedME;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.yizhuan.erban.MainActivity;
@@ -103,6 +104,12 @@ public class SplashActivity extends BaseActivity implements View.OnClickListener
}
}
@Override
protected void onResume() {
super.onResume();
LinkedME.getInstance().setImmediate(true);
}
private volatile boolean needJump = false;
private void animation() {

View File

@@ -51,6 +51,8 @@ public class AddUserInfoFragment extends BaseFragment
private RadioButton rbMale;
private String avatarUrl = "https://image.zhongjialx.com/default_avatar.png";
public static String INVITE_USER_CODE = "";
@Override
public int getRootLayoutId() {
return R.layout.fragment_add_user_info;
@@ -95,10 +97,6 @@ public class AddUserInfoFragment extends BaseFragment
rgGender.setOnCheckedChangeListener((radioGroup, i) -> gender = i == rbMale.getId() ? UserInfo.GENDER_MALE : UserInfo.GENDER_FEMALE);
}
private void init() {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
@@ -183,6 +181,7 @@ public class AddUserInfoFragment extends BaseFragment
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_COMPLETE, "注册完成(提交个人资料)");
AuthModel.get().setThirdUserInfo(null);
getActivity().finish();
INVITE_USER_CODE = shareCode;
}
@Override

View File

@@ -1,443 +0,0 @@
package com.yizhuan.erban.ui.login.fragment;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.google.android.material.textfield.TextInputEditText;
import android.text.InputFilter;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.fourmob.datetimepicker.date.DatePickerDialog;
import com.jph.takephoto.model.TResult;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.sleepbot.datetimepicker.time.RadialPickerLayout;
import com.sleepbot.datetimepicker.time.TimePickerDialog;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.yizhuan.erban.ErbanTakePhotoActivity;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseFragment;
import com.yizhuan.erban.common.widget.CircleImageView;
import com.yizhuan.erban.ui.login.AddUserInfoActivity;
import com.yizhuan.erban.ui.utils.ImageLoadUtils;
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2;
import com.yizhuan.erban.ui.widget.ButtonItem;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.auth.entity.ThirdUserInfo;
import com.yizhuan.xchat_android_core.file.FileModel;
import com.yizhuan.xchat_android_core.linked.LinkedModel;
import com.yizhuan.xchat_android_core.linked.bean.LinkedInfo;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver;
import com.yizhuan.xchat_android_library.utils.StringUtils;
import com.yizhuan.xchat_android_library.utils.TimeUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
/**
* @author jack
* @Description
* @Date 2018/11/23
*/
public class AddUserInfoOldFragment extends BaseFragment
implements View.OnClickListener, DatePickerDialog.OnDateSetListener,
TimePickerDialog.OnTimeSetListener, ErbanTakePhotoActivity.TakePhotoCallBack {
private static final String TAG = "AddUserInfoFragment";
private CircleImageView civAvatar;
private TextInputEditText tvNick;
private TextInputEditText tvGender;
private TextInputEditText tvBirthday;
private Button okBtn;
// private TextView tvGenderMen;
// private TextView tvGenderWomen;
private ImageView ivRandomAvatar;
private TextView tvRandomNick;
private DatePickerDialog datePickerDialog;
private String avatarUrl;
private String avatarUrlWX;
private File photoFile;
private int gender = -1;
AddUserInfoActivity addUserInfoActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
addUserInfoActivity = (AddUserInfoActivity) activity;
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_add_user_info;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
civAvatar = view.findViewById(R.id.civ_avatar);
tvNick = view.findViewById(R.id.tv_nick);
tvGender = view.findViewById(R.id.tv_gender);
tvBirthday = view.findViewById(R.id.tv_birthday);
okBtn = view.findViewById(R.id.ok_btn);
// tvGenderMen = view.findViewById(R.id.tv_gender_men);
// tvGenderWomen = view.findViewById(R.id.tv_gender_women);
ivRandomAvatar = view.findViewById(R.id.iv_random_avatar);
tvRandomNick = view.findViewById(R.id.tv_random_nick);
ivRandomAvatar.setVisibility(View.GONE);
tvRandomNick.setVisibility(View.GONE);
}
@Override
public void initiate() {
gender = -1;
civAvatar.setOnClickListener(this);
tvGender.setOnClickListener(this);
tvBirthday.setOnClickListener(this);
okBtn.setOnClickListener(this);
// tvGenderMen.setOnClickListener(this);
// tvGenderWomen.setOnClickListener(this);
ivRandomAvatar.setOnClickListener(this);
tvRandomNick.setOnClickListener(this);
init();
addWXUserInfo();
}
private void addWXUserInfo() {
ThirdUserInfo thirdUserInfo = AuthModel.get().getThirdUserInfo();
if (thirdUserInfo != null) {
avatarUrlWX = thirdUserInfo.getUserIcon();
if (thirdUserInfo.getBirth() > 0) {
tvBirthday.setText(TimeUtils.getDateTimeString(thirdUserInfo.getBirth(), "yyyy-MM-dd"));
}
String nick = thirdUserInfo.getUserName();
if (!StringUtil.isEmpty(nick)) {
if (nick.length() > 15) {
tvNick.setText(nick.substring(0, 15));
} else {
tvNick.setText(nick);
}
}
if (!TextUtils.isEmpty(avatarUrlWX)) {
ImageLoadUtils.loadAvatar(getContext(), avatarUrlWX, civAvatar);
}
}
}
private void init() {
tvNick.setFilters(new InputFilter[]{new InputFilter.LengthFilter(15)});
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR) - 18;
datePickerDialog = DatePickerDialog.newInstance(this, year, 0, 1, true);
// 给一个默认的生日值
// 默认给够 18 岁
tvBirthday.setText(String.format(Locale.getDefault(), "%d-01-01", year));
// 设置默认昵称
tvNick.setText(R.string.text_default_nick);
UserModel.get().getRandomConfig()
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.doOnSuccess(userRandomConfig -> {
if (userRandomConfig.isAvatar()) {
ivRandomAvatar.setVisibility(View.VISIBLE);
}
if (userRandomConfig.isNick()) {
tvRandomNick.setVisibility(View.VISIBLE);
}
})
.subscribe();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_gender:
ButtonItem maleItem = new ButtonItem("", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
gender = UserInfo.GENDER_MALE;
tvGender.setText("");
}
});
ButtonItem femaleItem = new ButtonItem("", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
gender = UserInfo.GENDER_FEMALE;
tvGender.setText("");
}
});
List<ButtonItem> genderList = new ArrayList<>();
genderList.add(maleItem);
genderList.add(femaleItem);
getDialogManager().showCommonPopupDialog(genderList, "取消", false);
break;
case R.id.tv_birthday:
if (datePickerDialog.isAdded()) {
datePickerDialog.dismiss();
} else {
Calendar calendar = Calendar.getInstance();
datePickerDialog.setVibrate(true);
datePickerDialog.setYearRange(1945, calendar.get(Calendar.YEAR) - 18);
datePickerDialog.show(getChildFragmentManager(), "DATEPICKER_TAG");
}
break;
case R.id.ok_btn:
String nick = tvNick.getText().toString();
if (TextUtils.isEmpty(nick)) {
toast("昵称不能为空!");
return;
}
String birth = tvBirthday.getText().toString();
if (TextUtils.isEmpty(birth)) {
toast("生日不能为空!");
return;
}
if (gender == -1) {
toast("必须要选性别哦");
return;
}
if (photoFile != null) {
getDialogManager().showProgressDialog(getContext(), "正在上传请稍后...");
FileModel.get()
.uploadFile(photoFile.getAbsolutePath())
.compose(bindToLifecycle())
.subscribe((url, throwable) -> {
if (throwable != null) {
onUploadFail();
} else {
onUpload(url);
}
});
return;
}
//用户如果自己拍照作为头像就上传,如果为空就代表没拍照,直接拿微信头像上传
// avatarUrl = avatarUrlWX;
if (avatarUrlWX != null) {
avatarUrl = avatarUrlWX;
}
if (StringUtils.isEmpty(avatarUrl)) {
avatarUrl = "https://image.zhongjialx.com/default_avatar.png";
}
commit();
break;
case R.id.civ_avatar:
ButtonItem upItem = new ButtonItem("拍照上传", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
ErbanTakePhotoActivity.startToTakePhoto(getContext(), AddUserInfoOldFragment.this);
}
});
ButtonItem localItem = new ButtonItem("本地相册", new ButtonItem.OnClickListener() {
@Override
public void onClick() {
ErbanTakePhotoActivity.startToSelectPhoto(getContext(), AddUserInfoOldFragment.this);
}
});
List<ButtonItem> buttonItemList = new ArrayList<>();
buttonItemList.add(upItem);
buttonItemList.add(localItem);
getDialogManager().showCommonPopupDialog(buttonItemList, "取消", false);
break;
case R.id.iv_random_avatar:
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_INFORMATION_RANDOM_AVATAR,
"随机头像");
ivRandomAvatar.setEnabled(false);
UserModel.get().getRandomAvatar()
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe(new DontWarnObserver<String>() {
@Override
public void accept(String avatar, String error) {
super.accept(avatar, error);
ivRandomAvatar.setEnabled(true);
if (error != null) {
toast(error);
return;
}
if (!TextUtils.isEmpty(avatar)) {
avatarUrl = avatar;
ImageLoadUtilsV2.loadAvatar(civAvatar, avatar);
}
}
});
break;
case R.id.tv_random_nick:
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_INFORMATION_RANDOM_NAME,
"随机昵称");
tvRandomNick.setEnabled(false);
UserModel.get().getRandomNick()
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe(new DontWarnObserver<String>() {
@Override
public void accept(String nick, String error) {
super.accept(nick, error);
tvRandomNick.setEnabled(true);
if (error != null) {
toast(error);
return;
}
if (!TextUtils.isEmpty(nick)) {
tvNick.setText(nick);
}
}
});
break;
default:
break;
}
}
private void commit() {
String nick = tvNick.getText().toString();
String birth = tvBirthday.getText().toString();
UserInfo userInfo = new UserInfo();
userInfo.setUid(AuthModel.get().getCurrentUid());
userInfo.setBirthStr(birth);
userInfo.setNick(nick);
userInfo.setAvatar(avatarUrl);
if (gender == UserInfo.GENDER_MALE || gender == UserInfo.GENDER_FEMALE) {
userInfo.setGender(gender);
}else {
toast("必须要选性别哦");
return;
}
getDialogManager().showProgressDialog(getContext(), "请稍后...");
LinkedInfo linkedInfo = LinkedModel.get().getLinkedInfo();
String channel = "";
String roomUid = "";
String uid = "";
if (linkedInfo != null) {
channel = linkedInfo.getChannel();
roomUid = linkedInfo.getRoomUid();
uid = linkedInfo.getUid();
}
UserModel.get().requestCompleteUserInfo(userInfo, channel, uid, roomUid, null)
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.subscribe(new SingleObserver<UserInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(UserInfo userInfo) {
getDialogManager().dismissDialog();
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_COMPLETE,"注册完成(提交个人资料)");
AuthModel.get().setThirdUserInfo(null);
getActivity().finish();
}
@Override
public void onError(Throwable e) {
getDialogManager().dismissDialog();
toast(e.getMessage());
}
});
Map<String, String> attributes = new HashMap<>(4);
attributes.put("userUid", userInfo.getUid() + "");
attributes.put("shareChannel", channel);
attributes.put("shareUid", uid);
attributes.put("roomUid", roomUid);
StatisticManager.Instance().onEvent(getContext(),
StatisticsProtocol.Event.EVENT_LOGIN_REPARI_SUCCESS_CLICK, "补全", attributes);
}
@Override
public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
String monthstr;
if ((month + 1) < 10) {
monthstr = "0" + (month + 1);
} else {
monthstr = String.valueOf(month + 1);
}
String daystr;
if (day < 10) {
daystr = "0" + day;
} else {
daystr = String.valueOf(day);
}
tvBirthday.setText(String.valueOf(year) + "-" + monthstr + "-" + daystr);
}
@Override
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
}
public void onUpload(String url) {
Log.d(TAG, "onUpload: 这是添加用户更改上传");
avatarUrl = url;
getDialogManager().dismissDialog();
ImageLoadUtils.loadAvatar(getContext(), url, civAvatar);
commit();
}
public void onUploadFail() {
toast("上传失败");
getDialogManager().dismissDialog();
}
@Override
public void takeSuccess(TResult result) {
photoFile = new File(result.getImage().getCompressPath());
if (getContext() != null) {
ImageLoadUtils.loadImage(getContext(), photoFile, civAvatar, R.drawable.tutu_default_avatar_purple);
}
}
@Override
public void takeFail(TResult result, String msg) {
toast(msg);
}
@Override
public void takeCancel() {
}
}

View File

@@ -1,89 +0,0 @@
package com.yizhuan.erban.ui.login.fragment;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseFragment;
import com.yizhuan.erban.ui.login.AddUserInfoActivity;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.auth.entity.ThirdUserInfo;
/**
* @author jack
* @Description
* @Date 2018/11/23
*/
@Deprecated
public class GenderSelectFragment extends BaseFragment implements View.OnClickListener {
private TextView tvGenderMen;
private TextView tvGenderWomen;
private Button btnNext;
AddUserInfoActivity addUserInfoActivity;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
addUserInfoActivity = (AddUserInfoActivity) activity;
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_gender_select;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tvGenderMen = (TextView) view.findViewById(R.id.tv_gender_men);
tvGenderWomen = (TextView) view.findViewById(R.id.tv_gender_women);
btnNext = (Button) view.findViewById(R.id.btn_next);
}
@Override
public void initiate() {
tvGenderMen.setOnClickListener(this);
tvGenderWomen.setOnClickListener(this);
btnNext.setOnClickListener(this);
btnNext.setEnabled(false);
addWXUserInfo();
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == tvGenderMen.getId()) {
tvGenderMen.setBackgroundResource(R.mipmap.ic_gender_men_selected);
tvGenderWomen.setBackgroundResource(R.mipmap.ic_gender_women_unselected);
btnNext.setEnabled(true);
} else if (id == tvGenderWomen.getId()) {
tvGenderMen.setBackgroundResource(R.mipmap.ic_gender_men_unselected);
tvGenderWomen.setBackgroundResource(R.mipmap.ic_gender_women_selected);
btnNext.setEnabled(true);
} else if (id == btnNext.getId()) {
addUserInfoActivity.showAddUserInfo();
}
}
private void addWXUserInfo() {
ThirdUserInfo thirdUserInfo = AuthModel.get().getThirdUserInfo();
if (thirdUserInfo != null) {
if (!StringUtil.isEmpty(thirdUserInfo.getUserGender())) {
if (thirdUserInfo.getUserGender().equals("m")) {
onClick(tvGenderMen);
} else {
onClick(tvGenderWomen);
}
}
}
}
}

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="35dp"
android:layout_marginTop="40dp"
android:text="请选择性别"
android:textColor="@color/color_333333"
android:textSize="22dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="75dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_gender_men"
android:layout_width="87dp"
android:layout_height="87dp"
android:background="@mipmap/ic_gender_men_unselected" />
<View
android:layout_width="66dp"
android:layout_height="10dp" />
<TextView
android:id="@+id/tv_gender_women"
android:layout_width="87dp"
android:layout_height="87dp"
android:background="@mipmap/ic_gender_women_unselected" />
</LinearLayout>
<Button
android:id="@+id/btn_next"
android:layout_width="match_parent"
android:layout_height="@dimen/common_item_view_height"
android:layout_marginLeft="@dimen/common_item_view_margin_left_right"
android:layout_marginTop="79dp"
android:layout_marginRight="@dimen/common_item_view_margin_left_right"
android:background="@drawable/bg_binding_button"
android:text="下一步"
android:textColor="@color/color_FFFFFF"
android:textSize="@dimen/font_huge" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:drawableLeft="@mipmap/ic_warning"
android:drawablePadding="5dp"
android:text="性别选择后不可更改"
android:textColor="@color/color_333333"
android:textSize="13sp" />
</LinearLayout>

View File

@@ -1,5 +1,7 @@
package com.yizhuan.xchat_android_core.initial;
import androidx.annotation.Nullable;
import com.yizhuan.xchat_android_core.base.IModel;
import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.initial.bean.BoxInfo;
@@ -18,6 +20,7 @@ public interface IInitialModel extends IModel {
SplashComponent getLocalSplashVo();
@Nullable
InitInfo getCacheInitInfo();
InitInfo getCacheInitInfoOnly();

View File

@@ -6,6 +6,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import com.bumptech.glide.request.FutureTarget;
import com.bumptech.glide.request.target.Target;
import com.netease.nim.uikit.support.glide.GlideApp;
@@ -323,6 +325,7 @@ public class InitialModel extends BaseModel implements IInitialModel {
*
* @return -
*/
@Nullable
@Override
public InitInfo getCacheInitInfo() {
// 过期了

View File

@@ -8,9 +8,6 @@ public interface ILinkedModel extends IModel {
void setLinkedInfo(LinkedInfo linkedInfo);
/**哈哈专用方法*/
void setHaHaLinkedInfo(LinkedInfo linkedInfo);
LinkedInfo getLinkedInfo();
}

View File

@@ -1,17 +1,9 @@
package com.yizhuan.xchat_android_core.linked;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.yizhuan.xchat_android_core.base.BaseModel;
import com.yizhuan.xchat_android_core.linked.bean.LinkedInfo;
import com.yizhuan.xchat_android_core.linked.event.LinkMeInfoUpdateEvent;
import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.user.event.CurrentUserInfoCompleteEvent;
import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
public class LinkedModel extends BaseModel implements ILinkedModel{
@@ -37,18 +29,6 @@ public class LinkedModel extends BaseModel implements ILinkedModel{
@Override
public void setLinkedInfo(LinkedInfo linkedInfo) {
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
//这里再应用打开且登录的状态下直接发出linkme更新事件进行跳转其他情况下保持一下linkme信息等待登录后再跳转
if (userInfo != null && !StringUtil.isEmpty(userInfo.getNick())){
EventBus.getDefault().post(new LinkMeInfoUpdateEvent(linkedInfo));
}else {
this.linkedInfo = linkedInfo;
}
}
/**哈哈专用方法*/
@Override
public void setHaHaLinkedInfo(LinkedInfo linkedInfo) {
this.linkedInfo = linkedInfo;
}
@@ -57,14 +37,4 @@ public class LinkedModel extends BaseModel implements ILinkedModel{
return linkedInfo;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLoadLoginUserInfoEvent(LoadLoginUserInfoEvent event) {
UserInfo userInfo = UserModel.get().getCacheLoginUserInfo();
if (linkedInfo != null && userInfo != null && !StringUtil.isEmpty(userInfo.getNick())) {
EventBus.getDefault().post(new LinkMeInfoUpdateEvent(linkedInfo));
linkedInfo = null;
}
}
}

View File

@@ -0,0 +1,11 @@
package com.yizhuan.xchat_android_core.user.bean;
import lombok.Data;
@Data
public class InviteUserInfo {
private String inviteNick;
private long inviteUid;
private boolean isInRoom;
private long roomUid;
}

View File

@@ -1,16 +1,15 @@
package com.yizhuan.xchat_android_core.channel_page.model;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.yizhuan.xchat_android_core.base.BaseModel;
import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.channel_page.bean.ChannelPageInfo;
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
import com.yizhuan.xchat_android_core.user.bean.InviteUserInfo;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.net.rxnet.RxNet;
import io.reactivex.Single;
import io.reactivex.SingleOnSubscribe;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* 渠道落地页的处理
@@ -18,15 +17,15 @@ import retrofit2.http.GET;
* 1、普通情况下进来APP
* 2、闪屏跳转下的冲突
* 3、linkedme跳转下的冲突
*
* <p>
* Created by lvzebiao on 2020/2/26.
*/
public class ChannelPageModel extends BaseModel implements IChannelPageModel{
public class ChannelPageModel extends BaseModel implements IChannelPageModel {
private final Api api = RxNet.create(Api.class);
private final static String KEY_FLAG_VALID_CHANNEL_PAGE = "flag_valid_channel_page";
public final static String KEY_FLAG_VALID_CHANNEL_PAGE = "flag_valid_channel_page";
private static final class Helper {
public static final ChannelPageModel INSTANCE = new ChannelPageModel();
@@ -36,83 +35,30 @@ public class ChannelPageModel extends BaseModel implements IChannelPageModel{
return Helper.INSTANCE;
}
private boolean validFlag = true;
private ChannelPageModel() {
validFlag = (boolean) SharedPreferenceUtils.get(KEY_FLAG_VALID_CHANNEL_PAGE, true);
}
/**如果接口访问成功,并且确认 落地页为空则为true用此来其他想启动的界面*/
private boolean hasConfirmedInfoEmpty = false;
/**如果已经跳转过了落地页则为true*/
private boolean hasJumpChannelPage = false;
private boolean hasConnect = false;
@Override
public Single<ChannelPageInfo> getChannelPage() {
return api.apiGetChannelPage()
.compose(RxHelper.handleSchedulers())
.flatMap(result -> {
if (result.isSuccess()) {
SharedPreferenceUtils.put(KEY_FLAG_VALID_CHANNEL_PAGE, false);
//把routerType=0的情况也考虑进去当0的时候也处理为空的情况
//满足陈金林的骚操作,添加渠道,但不设置落地页
if (result.getData() != null && result.getData().getRouteType() != 0) {
return Single.just(result.getData());
} else {
hasConfirmedInfoEmpty = true;
}
}
return Single.error(new Throwable("empty channelpageinfo or connect failed"));
});
}
@Override
public Single<Boolean> isValidFlag() {
return Single.create((SingleOnSubscribe<Boolean>) e ->
e.onSuccess((Boolean) SharedPreferenceUtils.get(KEY_FLAG_VALID_CHANNEL_PAGE, true)))
.compose(RxHelper.handleSchedulers());
}
@Override
public Single<ChannelPageInfo> getChannelPageWhenLogin() {
return isValidFlag()
.flatMap(aBoolean -> {
if (aBoolean) {
return getChannelPage();
}
LogUtil.print("has get channel page info");
return Single.error(new Throwable("has get channel page info"));
});
}
@Override
public Single<ChannelPageInfo> handleSplashOrLinkedmeJump(boolean isSplashOrLinkedme) {
if (!validFlag) {
return Single.error(new Throwable("no need to consider channelpageinfo"));
}
if (hasConfirmedInfoEmpty) {
return Single.error(new Throwable("channel page info hasConfirmed empty"));
}
if (!isSplashOrLinkedme && hasConnect) {
return Single.error(new Throwable("!isSplashOrLinkedme && hasConnect"));
}
LogUtil.print("访问落地页接口");
hasConnect = true;
return getChannelPage();
}
@Override
public void setTureJumpChannelPage() {
hasJumpChannelPage = true;
}
@Override
public boolean isHasJumpChannelPage() {
return hasJumpChannelPage;
public Single<InviteUserInfo> checkInviteUserInRoom(String inviteCode) {
return api.checkInviteUserInRoom(inviteCode)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchAndExce());
}
private interface Api {
@@ -122,6 +68,12 @@ public class ChannelPageModel extends BaseModel implements IChannelPageModel{
*/
@GET("/channel/distribute/get")
Single<ServiceResult<ChannelPageInfo>> apiGetChannelPage();
/**
* 填了邀请码用户检查改邀请码用户有没有在房间 在的话就跳转进房间
*/
@GET("/user/v2/checkInviteUserInRoom")
Single<ServiceResult<InviteUserInfo>> checkInviteUserInRoom(@Query("inviteCode") String inviteCode);
}
}

View File

@@ -1,6 +1,7 @@
package com.yizhuan.xchat_android_core.channel_page.model;
import com.yizhuan.xchat_android_core.channel_page.bean.ChannelPageInfo;
import com.yizhuan.xchat_android_core.user.bean.InviteUserInfo;
import io.reactivex.Single;
@@ -12,14 +13,5 @@ public interface IChannelPageModel {
Single<ChannelPageInfo> getChannelPage();
Single<Boolean> isValidFlag();
Single<ChannelPageInfo> getChannelPageWhenLogin();
Single<ChannelPageInfo> handleSplashOrLinkedmeJump(boolean isSplashOrLinkedme);
void setTureJumpChannelPage();
boolean isHasJumpChannelPage();
Single<InviteUserInfo> checkInviteUserInRoom(String inviteCode);
}