diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index 8a09b2d6f..d3cafb790 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -6,7 +6,6 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; @@ -112,7 +111,6 @@ import com.yizhuan.erban.ui.widget.MainTabLayout; import com.yizhuan.erban.ui.widget.RecallDialog; import com.yizhuan.erban.utils.CleanLeakUtils; import com.yizhuan.erban.utils.PushMessageHandler; -import com.yizhuan.erban.utils.UserUtils; import com.yizhuan.xchat_android_core.Constants; import com.yizhuan.xchat_android_core.UriProvider; import com.yizhuan.xchat_android_core.auth.AuthModel; @@ -123,8 +121,8 @@ import com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel; import com.yizhuan.xchat_android_core.community.attachment.DynamicSysAttachment; import com.yizhuan.xchat_android_core.community.event.SquareTaskEvent; import com.yizhuan.xchat_android_core.community.event.UnReadCountEvent; +import com.yizhuan.xchat_android_core.home.bean.MainTabType; import com.yizhuan.xchat_android_core.home.event.VisitorUnreadCountEvent; -import com.yizhuan.xchat_android_core.user.bean.ProtocolInfo; import com.yizhuan.xchat_android_core.community.im.WorldDynamicAttachment; import com.yizhuan.xchat_android_core.home.model.GameHomeModel; import com.yizhuan.xchat_android_core.home.model.HomeModel; @@ -151,6 +149,7 @@ import com.yizhuan.xchat_android_core.im.custom.bean.RedPackageAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.RedPacketAttachment; 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.initial.InitialModel; 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; @@ -160,8 +159,6 @@ import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMBroadcastManager; import com.yizhuan.xchat_android_core.manager.IMMessageManager; import com.yizhuan.xchat_android_core.manager.RoomEvent; -import com.yizhuan.xchat_android_core.market_verify.MarketVerifyModel; -import com.yizhuan.xchat_android_core.market_verify.event.MarketVerifyUpdateEvent; import com.yizhuan.xchat_android_core.miniworld.bean.OpenAudioPartyAttachment; import com.yizhuan.xchat_android_core.patriarch.event.CloseMinRoomEvent; import com.yizhuan.xchat_android_core.patriarch.event.ImPushMsgPmLimitTimeEvent; @@ -170,7 +167,6 @@ import com.yizhuan.xchat_android_core.pay.bean.ShowCommonWebEvent; import com.yizhuan.xchat_android_core.public_chat_hall.attachment.AitMeAttachment; import com.yizhuan.xchat_android_core.recall.bean.CheckLostUserInfo; import com.yizhuan.xchat_android_core.recall.event.CheckLostUserEvent; -import com.yizhuan.xchat_android_core.redPacket.bean.RedPacketInfoV2; 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; @@ -180,15 +176,12 @@ import com.yizhuan.xchat_android_core.user.event.LoadLoginUserInfoEvent; 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.LogUtils; 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.threadmgr.ThreadPoolManager; -import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil; import com.yizhuan.xchat_android_library.utils.JavaUtil; import com.yizhuan.xchat_android_library.utils.codec.DESUtils; -import com.yizhuan.xchat_android_library.utils.pref.CommonPref; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -200,9 +193,6 @@ import java.util.ArrayList; import java.util.List; import io.flutter.embedding.android.FlutterFragment; -import io.reactivex.SingleObserver; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; import static com.yizhuan.xchat_android_core.channel_page.model.ChannelPageModel.KEY_FLAG_VALID_CHANNEL_PAGE; @@ -226,7 +216,7 @@ public class MainActivity extends BaseMvpActivity private LivingIconView userLivingView; private View viewClose; private MainTabLayout mMainTabLayout; - private int mCurrentMainPosition = MainTabLayout.MAIN_TAB_POS_HOME; + private int mCurrentTabType = MainTabType.TAB_TYPE_HOME; /** * 房间最小化动画,换成属性动画,原先的补间动画影响了activity的生命周期 */ @@ -268,11 +258,11 @@ public class MainActivity extends BaseMvpActivity }; { - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_HOME, new HomeFragment()); - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_MSG, new ContactsListFragment()); - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_SQUARE, new SquareFragment()); - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_ME, new MeFragment()); - fragmentArray.put(MainTabLayout.MAIN_TAB_POS_GAME, new GameFragment + fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment()); + fragmentArray.put(MainTabType.TAB_TYPE_MSG, new ContactsListFragment()); + fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment()); + fragmentArray.put(MainTabType.TAB_TYPE_ME, new MeFragment()); + fragmentArray.put(MainTabType.TAB_TYPE_GAME, new GameFragment .CachedEngineFragmentBuilder(GameFragment.class, FlutterBoost.ENGINE_ID) .url(BuildConfig.DEBUG ? RouterConstants.FLUTTER_PAGE_MAIN_DEBUG : RouterConstants.FLUTTER_PAGE_MAIN) .build()); @@ -295,14 +285,13 @@ public class MainActivity extends BaseMvpActivity @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putInt(Constants.KEY_MAIN_POSITION, mCurrentMainPosition); + outState.putInt(Constants.KEY_MAIN_POSITION, mCurrentTabType); } @Override protected void onRestoreInstanceState(@NotNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); - mCurrentMainPosition = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION); - + mCurrentTabType = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION); } @Override @@ -311,31 +300,14 @@ public class MainActivity extends BaseMvpActivity homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); NimMiddleActivity.firstEnter = false; if (savedInstanceState != null) { - mCurrentMainPosition = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION); + mCurrentTabType = savedInstanceState.getInt(Constants.KEY_MAIN_POSITION); } - Log.e(TAG, "onCreate: " + DESUtils.DESAndBase64("112030")); setContentView(R.layout.activity_main); //自动登录 - AuthModel.get().autoLogin().subscribe(new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - } - - @Override - public void onSuccess(String s) { - } - - @Override - public void onError(Throwable e) { - onNeedLogin(); - //toast(e.getMessage()); - } - }); - - initTitleBar(getString(R.string.app_name)); + AuthModel.get().autoLogin() + .doOnError(throwable -> onNeedLogin()) + .subscribe(); initView(); - //引导页 -// startGuild(); initMaterialView(); onParseIntent(); updateDatas(); @@ -344,6 +316,9 @@ public class MainActivity extends BaseMvpActivity initTeamSessionCustomization(); EventBus.getDefault().register(this); otherModelInit(); + InitialModel.get().getMainTabInfosLiveData().observe(this, mainTabInfos -> { + mMainTabLayout.setMainTabInfoList(mainTabInfos); + }); } private void otherModelInit() { @@ -497,11 +472,7 @@ public class MainActivity extends BaseMvpActivity private void updateDatas() { - if ("baidutg".equals(AppMetaDataUtil.getChannelID())) { - mMainTabLayout.select(MainTabLayout.MAIN_TAB_POS_HOME); - } else { - mMainTabLayout.select(mCurrentMainPosition); - } + mMainTabLayout.setDefaultTabType(mCurrentTabType); handleNimIntent(); } @@ -535,11 +506,11 @@ public class MainActivity extends BaseMvpActivity } } else if (intent.hasExtra(GAME_TAB) && intent.getBooleanExtra(GAME_TAB, false)) { if (mMainTabLayout != null) { - mMainTabLayout.select(MainTabLayout.MAIN_TAB_POS_GAME); + mMainTabLayout.setDefaultTabType(MainTabType.TAB_TYPE_GAME); } } else if (intent.hasExtra(MSG_TAB) && intent.getBooleanExtra(MSG_TAB, false)) { if (mMainTabLayout != null) { - mMainTabLayout.select(MainTabLayout.MAIN_TAB_POS_MSG); + mMainTabLayout.setDefaultTabType(MainTabType.TAB_TYPE_MSG); } } } @@ -636,7 +607,7 @@ public class MainActivity extends BaseMvpActivity Log.i("checkLostUser", "onLogin"); //登录成功查询未读信息数量 - mMainTabLayout.setmUnReadDynamicCount(0); + mMainTabLayout.setUnReadDynamicCount(0); int unreadCount = IMMessageManager.get().queryUnreadMsg(); mMainTabLayout.setMsgNum(unreadCount); openCommunityNotice(); @@ -788,9 +759,9 @@ public class MainActivity extends BaseMvpActivity @SuppressLint("RestrictedApi") @Override - public void onTabClick(int position) { + public void onTabClick(int tabType) { - Fragment showFragment = fragmentArray.get(position); + Fragment showFragment = fragmentArray.get(tabType); if (showFragment == tempFragment) return; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); @@ -801,7 +772,7 @@ public class MainActivity extends BaseMvpActivity if (tempFragment != null) transaction.hide(tempFragment); tempFragment = showFragment; if (!isDestroyed()) transaction.commitNowAllowingStateLoss(); - mCurrentMainPosition = position; + mCurrentTabType = tabType; } @Override @@ -815,14 +786,6 @@ public class MainActivity extends BaseMvpActivity DaemonService.stop(MainActivity.this); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onMarketVerifyUpdateEvent(MarketVerifyUpdateEvent event) { - //审核包隐藏tab - if (MarketVerifyModel.get().isMarketChecking()) { - mMainTabLayout.showOrHideTab(MainTabLayout.MAIN_TAB_POS_SQUARE, View.GONE); - } - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onReceiveRecallStatus(CheckLostUserEvent event) { @@ -840,7 +803,7 @@ public class MainActivity extends BaseMvpActivity } public boolean isShowMeTab() { - return mCurrentMainPosition == MainTabLayout.MAIN_TAB_POS_ME; + return mCurrentTabType == MainTabType.TAB_TYPE_ME; } /** @@ -1020,7 +983,7 @@ public class MainActivity extends BaseMvpActivity @Subscribe(threadMode = ThreadMode.MAIN) public void onUnReadCount(UnReadCountEvent event) { - mMainTabLayout.setmUnReadDynamicCount(event.getTotal()); + mMainTabLayout.setUnReadDynamicCount(event.getTotal()); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -1064,7 +1027,7 @@ public class MainActivity extends BaseMvpActivity } boolean isNimPush = intent.getBooleanExtra(NimMiddleActivity.EXTRA_IS_NIM_PUSH, false); if (isNimPush && mMainTabLayout != null) { - mMainTabLayout.select(MainTabLayout.MAIN_TAB_POS_MSG); + mMainTabLayout.setDefaultTabType(MainTabType.TAB_TYPE_MSG); } } diff --git a/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt b/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt index c447837ff..9db6ed019 100644 --- a/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt +++ b/app/src/main/java/com/yizhuan/erban/home/HomeViewModel.kt @@ -4,9 +4,11 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.yizhuan.erban.base.BaseViewModel import com.yizhuan.xchat_android_core.bean.response.ListResult -import com.yizhuan.xchat_android_core.home.bean.* +import com.yizhuan.xchat_android_core.home.bean.BannerInfo +import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo +import com.yizhuan.xchat_android_core.home.bean.HomeTagInfo +import com.yizhuan.xchat_android_core.home.bean.ResourceInfo import com.yizhuan.xchat_android_core.home.model.HomeModel -import com.yizhuan.xchat_android_core.utils.net.ServerException import com.yizhuan.xchat_android_core.utils.toast import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/MainRedPointTab.java b/app/src/main/java/com/yizhuan/erban/ui/widget/MainRedPointTab.java index 659405b5d..f1726514d 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/MainRedPointTab.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/MainRedPointTab.java @@ -2,34 +2,32 @@ package com.yizhuan.erban.ui.widget; import android.annotation.SuppressLint; import android.content.Context; -import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import com.netease.nim.uikit.common.ui.draggablebubbles.BubbleMessageTouchListener; +import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.netease.nim.uikit.common.ui.draggablebubbles.BubbleView; -import com.netease.nim.uikit.common.ui.draggablebubbles.MessageBubbleView; +import com.netease.nim.uikit.support.glide.GlideApp; import com.yizhuan.erban.R; +import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; +import com.yizhuan.xchat_android_core.home.bean.MainTabType; import com.yizhuan.xchat_android_core.utils.CheckUtils; /** - *

main tab 有消息个数 控件 (todo:还可以优化,将字体写在字体上面) + *

main tab 有消息个数 控件 *

* Created by Administrator on 2017/11/14. */ public class MainRedPointTab extends RelativeLayout { - private int mTabIcon, mTabIconSelect; - private MainTab mMainTab; - private TextView mTvNum; - private String mTabText; - - private RedPointDismissListener mListener; + private final ImageView ivTabIcon; + private final TextView tvTabName; + private final TextView mTvNum; + private MainTabInfo tabInfo; public MainRedPointTab(@NonNull Context context) { this(context, null); @@ -42,49 +40,37 @@ public class MainRedPointTab extends RelativeLayout { public MainRedPointTab(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); inflate(context, R.layout.maint_tab_red_poin_layout, this); - - TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MainTab); - mTabIcon = typedArray.getResourceId(R.styleable.MainTab_tab_icon, R.mipmap.ic_main_tab_game_home); - mTabIconSelect = typedArray.getResourceId(R.styleable.MainTab_tab_icon_select, R.mipmap.ic_main_tab_game_pressed); - mTabText = typedArray.getString(R.styleable.MainTab_tab_text); - boolean draggable = typedArray.getBoolean(R.styleable.MainTab_tab_draggable, false); - mMainTab = findViewById(R.id.main_tab_msg); - mMainTab.setmTabIcon(mTabIcon); - mMainTab.setmTabIconSelect(mTabIconSelect); - mMainTab.setText(mTabText); + ivTabIcon = findViewById(R.id.iv_tab_icon); + tvTabName = findViewById(R.id.tv_tab_name); mTvNum = findViewById(R.id.msg_number); - if (draggable) { - MessageBubbleView.attach(mTvNum, false, new BubbleMessageTouchListener.BubbleDisappearListener() { - @Override - public void dragStart(View view) { + } - } + public void setMainTabInfo(@NonNull MainTabInfo tabInfo) { + this.tabInfo = tabInfo; + tvTabName.setText(tabInfo.getTabName()); + } - @Override - public void dismiss(View view) { - if (mListener != null) { - mListener.dismiss(); - } - } - - @Override - public void dragFinish(View view) { - - } - }); - } + public MainTabInfo getTabInfo() { + return tabInfo; } public void select(boolean select) { - mMainTab.select(select); + if (tabInfo == null) return; + tvTabName.setSelected(select); + int defaultRes = getDefaultRes(tabInfo.getTabType(), select); + GlideApp.with(ivTabIcon).load(select ? tabInfo.getTabSelectedIcon() : tabInfo.getTabIcon()) + .dontAnimate() + .placeholder(defaultRes) + .error(defaultRes) + .transform(new CenterCrop()) + .into(ivTabIcon); } @SuppressLint("SetTextI18n") public void setNumber(int number) { if (mTvNum instanceof BubbleView) { ((BubbleView) mTvNum).setNumText(number); - } - else { + } else { if (number > 99) { mTvNum.setText("99+"); } else @@ -94,12 +80,25 @@ public class MainRedPointTab extends RelativeLayout { mTvNum.setVisibility((CheckUtils.isCheckUser() || number <= 0) ? GONE : VISIBLE); } - public void setmListener(RedPointDismissListener mListener) { - this.mListener = mListener; - } - - public interface RedPointDismissListener { - void dismiss(); + private int getDefaultRes(int tabType, boolean select) { + int resId = select ? R.mipmap.ic_main_tab_game_pressed : R.mipmap.ic_main_tab_game_home; + switch (tabType) { + case MainTabType.TAB_TYPE_SQUARE: + resId = select ? R.mipmap.ic_main_tab_find_pressed : R.mipmap.ic_main_tab_find; + break; + case MainTabType.TAB_TYPE_GAME: + resId = select ? R.mipmap.ic_main_tab_peace_pressed : R.mipmap.ic_main_tab_peace; + break; + case MainTabType.TAB_TYPE_MSG: + resId = select ? R.mipmap.ic_main_tab_msg_pressed : R.mipmap.ic_main_tab_msg; + break; + case MainTabType.TAB_TYPE_ME: + resId = select ? R.mipmap.ic_main_tab_me_pressed : R.mipmap.ic_main_tab_me; + break; + default: + break; + } + return resId; } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/MainTabLayout.java b/app/src/main/java/com/yizhuan/erban/ui/widget/MainTabLayout.java index 197358eea..ad3e33d14 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/MainTabLayout.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/MainTabLayout.java @@ -5,48 +5,39 @@ import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.Size; -import com.netease.nimlib.sdk.NIMClient; -import com.netease.nimlib.sdk.msg.MsgService; import com.yizhuan.erban.R; +import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; +import com.yizhuan.xchat_android_core.home.bean.MainTabType; import com.yizhuan.xchat_android_core.statistic.StatisticManager; import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol; +import java.util.ArrayList; +import java.util.List; + /** *

底部tab导航

* Created by Administrator on 2017/11/14. */ public class MainTabLayout extends LinearLayout implements View.OnClickListener { - public static final int MAIN_TAB_POS_MSG = 1; - public static final int MAIN_TAB_POS_SQUARE = 2; - public static final int MAIN_TAB_POS_ME = 3; - public static final int MAIN_TAB_POS_HOME = 4; - public static final int MAIN_TAB_POS_GAME = 5; - - private MainTab gameTab, homeTab; + private final List tabViewList = new ArrayList<>(5); + private MainRedPointTab homeTab; + private MainRedPointTab squareTab; + private MainRedPointTab gameTab; + private MainRedPointTab msgTab; private MainRedPointTab meTab; - private MainRedPointTab mMsgTab; - private MainRedPointTab mAttentionTab; private int mLastPosition = -1; + private OnTabClickListener mOnTabClickListener; + private List mainTabInfoList; + private int defaultTabType; - // 切换账号需要重置;接收未读互动消息自定义消息、互动消息未读接口调用需要设置; - private int mUnReadDynamicCount = 0; - - private MainRedPointTab.RedPointDismissListener msgListener = new MainRedPointTab.RedPointDismissListener() { - @Override - public void dismiss() { - NIMClient.getService(MsgService.class).clearAllUnreadCount(); - } - }; - - private MainRedPointTab.RedPointDismissListener attentionListener = new MainRedPointTab.RedPointDismissListener() { - @Override - public void dismiss() { - // TODO 互动消息清空未读 - } - }; + private int msgNumber; + private int meNumber; + private int squareNumber; public MainTabLayout(Context context) { this(context, null); @@ -65,8 +56,8 @@ public class MainTabLayout extends LinearLayout implements View.OnClickListener setOrientation(HORIZONTAL); inflate(context, R.layout.main_tab_layout, this); - mAttentionTab = findViewById(R.id.main_attention_tab); - mMsgTab = findViewById(R.id.main_msg_tab); + squareTab = findViewById(R.id.main_square_tab); + msgTab = findViewById(R.id.main_msg_tab); gameTab = findViewById(R.id.main_game_tab); homeTab = findViewById(R.id.main_home_tab); meTab = findViewById(R.id.main_me_tab); @@ -74,90 +65,122 @@ public class MainTabLayout extends LinearLayout implements View.OnClickListener homeTab.setOnClickListener(this); meTab.setOnClickListener(this); gameTab.setOnClickListener(this); - mAttentionTab.setOnClickListener(this); - mMsgTab.setOnClickListener(this); + squareTab.setOnClickListener(this); + msgTab.setOnClickListener(this); - mAttentionTab.setmListener(attentionListener); - mMsgTab.setmListener(msgListener); + tabViewList.add(homeTab); + tabViewList.add(squareTab); + tabViewList.add(gameTab); + tabViewList.add(msgTab); + tabViewList.add(meTab); + } + + public void setMainTabInfoList(@NonNull @Size(5) List mainTabInfoList) { + this.mainTabInfoList = mainTabInfoList; + for (int i = 0; i < mainTabInfoList.size(); i++) { + MainTabInfo mainTabInfo = mainTabInfoList.get(i); + MainRedPointTab redPointTab = tabViewList.get(i); + redPointTab.setMainTabInfo(mainTabInfo); + switch (mainTabInfo.getTabType()) { + case MainTabType.TAB_TYPE_MSG: + redPointTab.setNumber(msgNumber); + break; + case MainTabType.TAB_TYPE_SQUARE: + redPointTab.setNumber(squareNumber); + break; + case MainTabType.TAB_TYPE_ME: + redPointTab.setNumber(meNumber); + break; + } + } + select(defaultTabType); + } + + public void setDefaultTabType(int defaultTabType) { + this.defaultTabType = defaultTabType; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_home_tab: - select(MAIN_TAB_POS_HOME); - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_FIRST_TAB, - "首页tab"); + select(mainTabInfoList.get(0).getTabType()); + StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_FIRST_TAB, "首页tab"); break; - case R.id.main_game_tab: - select(MAIN_TAB_POS_GAME); - break; - case R.id.main_attention_tab: - select(MAIN_TAB_POS_SQUARE); + case R.id.main_square_tab: + select(mainTabInfoList.get(1).getTabType()); StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_SQUARE_DONG_TAI_CLICK, "点击广场动态页"); break; + case R.id.main_game_tab: + select(mainTabInfoList.get(2).getTabType()); + break; case R.id.main_msg_tab: - select(MAIN_TAB_POS_MSG); + select(mainTabInfoList.get(3).getTabType()); StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_MESSAGE, "消息页"); break; case R.id.main_me_tab: - select(MAIN_TAB_POS_ME); - StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_MINE_TAB, - "我的tab"); + select(mainTabInfoList.get(4).getTabType()); + StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HOME_MINE_TAB, "我的tab"); break; } } + private void select(int tabType) { + if (tabType == 0) tabType = MainTabType.TAB_TYPE_HOME; + if (mLastPosition == tabType) return; + squareTab.select(tabType == MainTabType.TAB_TYPE_SQUARE); + msgTab.select(tabType == MainTabType.TAB_TYPE_MSG); + gameTab.select(tabType == MainTabType.TAB_TYPE_GAME); + homeTab.select(tabType == MainTabType.TAB_TYPE_HOME); + meTab.select(tabType == MainTabType.TAB_TYPE_ME); + if (mOnTabClickListener != null) { + mOnTabClickListener.onTabClick(tabType); + } + mLastPosition = tabType; + } + public void setMsgNum(int number) { - mMsgTab.setNumber(number); + msgNumber = number; + MainRedPointTab pointTab = findTabInfoByType(MainTabType.TAB_TYPE_MSG); + if (pointTab != null) { + pointTab.setNumber(number); + } } public void setUnreadVisitorCount(int count) { - if (meTab != null) - meTab.setNumber(count); - } - - - public void select(int position) { - if (mLastPosition == position) return; - mAttentionTab.select(position == MAIN_TAB_POS_SQUARE); - mMsgTab.select(position == MAIN_TAB_POS_MSG); - gameTab.select(position == MAIN_TAB_POS_GAME); - homeTab.select(position == MAIN_TAB_POS_HOME); - meTab.select(position == MAIN_TAB_POS_ME); - if (mOnTabClickListener != null) { - mOnTabClickListener.onTabClick(position); + meNumber = count; + MainRedPointTab pointTab = findTabInfoByType(MainTabType.TAB_TYPE_ME); + if (pointTab != null) { + pointTab.setNumber(count); } - mLastPosition = position; } - private OnTabClickListener mOnTabClickListener; + public void setUnReadDynamicCount(int mUnReadDynamicCount) { + squareNumber = mUnReadDynamicCount; + MainRedPointTab pointTab = findTabInfoByType(MainTabType.TAB_TYPE_SQUARE); + if (pointTab != null) { + pointTab.setNumber(mUnReadDynamicCount); + } + } + + @Nullable + private MainRedPointTab findTabInfoByType(int tabType) { + if (mainTabInfoList == null) return null; + for (MainRedPointTab tabViewList : tabViewList) { + if (tabViewList.getTabInfo() != null && tabViewList.getTabInfo().getTabType() == tabType) { + return tabViewList; + } + } + return null; + } public void setOnTabClickListener(OnTabClickListener onTabClickListener) { mOnTabClickListener = onTabClickListener; } - public void setmUnReadDynamicCount(int mUnReadDynamicCount) { - this.mUnReadDynamicCount = mUnReadDynamicCount; - mAttentionTab.setNumber(mUnReadDynamicCount); - } public interface OnTabClickListener { - void onTabClick(int position); - } - - /** - * 隐藏或显示某些tab - */ - public void showOrHideTab(int position, int visible) { - switch (position) { - case MAIN_TAB_POS_SQUARE: - mAttentionTab.setVisibility(visible); - break; - case MAIN_TAB_POS_MSG: - mMsgTab.setVisibility(visible); - break; - } + void onTabClick(int tabType); } } diff --git a/app/src/main/res/color/color_selector_main_tab.xml b/app/src/main/res/color/color_selector_main_tab.xml new file mode 100644 index 000000000..36ffb7525 --- /dev/null +++ b/app/src/main/res/color/color_selector_main_tab.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 38fd2990c..be6ac5abe 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,10 +16,11 @@ - + android:layout_weight="1" /> + android:layout_weight="1" /> - + android:layout_weight="1" /> + android:layout_weight="1" /> + android:layout_weight="1" /> \ No newline at end of file diff --git a/app/src/main/res/layout/maint_tab_red_poin_layout.xml b/app/src/main/res/layout/maint_tab_red_poin_layout.xml index d15f72b18..9c1a98cce 100644 --- a/app/src/main/res/layout/maint_tab_red_poin_layout.xml +++ b/app/src/main/res/layout/maint_tab_red_poin_layout.xml @@ -3,29 +3,41 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:parentTag="android.widget.RelativeLayout" > + android:layout_height="wrap_content" + tools:parentTag="android.widget.RelativeLayout"> - + android:gravity="center" + android:orientation="vertical"> + + + + + + > - /** - * 获取互动消息未读数量 - * - * @param uid - * @return - */ - @POST - fun getCode( - @Url url: String, - @Query("user_id") uid: Long - ): Single> - /** * 首页Banner * @@ -317,6 +305,14 @@ object HomeModel : BaseModel() { @GET("/single/broadcast/morePopularityAnchorList") suspend fun getMoreSingleAnchorList(): ServiceResult> + /** + * 获取首页Tab配置 + * + * @return + */ + @GET("/app/bottomBar/getCurrentAppBottomBar") + suspend fun getMainTabList(): ServiceResult> + } } \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java index d4002495f..a8da261ee 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java @@ -1,19 +1,30 @@ package com.yizhuan.xchat_android_core.initial; +import android.annotation.SuppressLint; + +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; import com.yizhuan.xchat_android_core.base.IModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; +import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; import com.yizhuan.xchat_android_core.initial.bean.BoxInfo; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; + +import java.util.List; + import io.reactivex.Single; /** - * @author: hewenhao - * @date: 2018/9/10 11:32 + * @author: hewenhao + * @date: 2018/9/10 11:32 */ public interface IInitialModel extends IModel { + @NonNull + LiveData> getMainTabInfosLiveData(); + Single init(boolean force); boolean isReportSwitch(); @@ -34,6 +45,9 @@ public interface IInitialModel extends IModel { String getPublicChatHallUid(); + @SuppressLint("CheckResult") + void loadMainTabInfoList(); + Single getBoxInfo(); boolean isCaptchaSwitch(); @@ -48,7 +62,7 @@ public interface IInitialModel extends IModel { * @return */ - Single reportAdv(String oaid,String imeiMD5); + Single reportAdv(String oaid, String imeiMD5); int getTeenagerMode(); diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java index 22cb12be9..e7e8df521 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java @@ -1,12 +1,16 @@ package com.yizhuan.xchat_android_core.initial; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.text.TextUtils; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import com.bumptech.glide.request.FutureTarget; import com.bumptech.glide.request.target.Target; @@ -15,6 +19,8 @@ import com.yizhuan.xchat_android_core.DemoCache; import com.yizhuan.xchat_android_core.base.BaseModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.certification.CertificationModel; +import com.yizhuan.xchat_android_core.home.bean.MainTabInfo; +import com.yizhuan.xchat_android_core.home.bean.MainTabType; import com.yizhuan.xchat_android_core.initial.bean.BoxInfo; import com.yizhuan.xchat_android_core.initial.bean.InitInfo; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; @@ -23,6 +29,7 @@ import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDat import com.yizhuan.xchat_android_core.room.face.DynamicFaceModel; import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils; import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; +import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_core.withdraw.WithdrawModel; import com.yizhuan.xchat_android_library.net.rxnet.RxNet; import com.yizhuan.xchat_android_library.utils.JavaUtil; @@ -31,6 +38,9 @@ import com.yizhuan.xchat_android_library.utils.NetworkUtils; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import io.reactivex.Single; import io.reactivex.SingleOnSubscribe; @@ -60,6 +70,7 @@ public class InitialModel extends BaseModel implements IInitialModel { private static final long TIME_EXPIRED = 24 * 60 * 60 * 1000; private volatile static IInitialModel model; private final Api api; + private final MutableLiveData> mainTabInfosLiveData = new MutableLiveData<>(); private boolean requesting; private boolean success; private BroadcastReceiver receiver; @@ -71,22 +82,18 @@ public class InitialModel extends BaseModel implements IInitialModel { * 宝箱开关,等级限制 */ private BoxInfo boxInfo; - /** * 注册图片验证码开关 */ private boolean captchaSwitch; - /** * 记录服务器与本地的时间差 */ private long timeDiff; - /** * 是否需要上报消息的开关 */ private boolean reportSwitch; - /** * 家长模式引导 1-强 2- 弱 */ @@ -110,6 +117,7 @@ public class InitialModel extends BaseModel implements IInitialModel { private InitialModel() { api = RxNet.create(Api.class); + loadMainTabInfoList(); IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); receiver = new BroadcastReceiver() { @Override @@ -137,6 +145,12 @@ public class InitialModel extends BaseModel implements IInitialModel { return model; } + @Override + @NonNull + public LiveData> getMainTabInfosLiveData() { + return mainTabInfosLiveData; + } + @Override public Single init(boolean force) { if (requesting && initResultSingle != null) return initResultSingle; @@ -396,6 +410,58 @@ public class InitialModel extends BaseModel implements IInitialModel { .observeOn(AndroidSchedulers.mainThread()); } + @SuppressLint("CheckResult") + @Override + public void loadMainTabInfoList() { + api.getMainTabList() + .compose(RxHelper.handleBeanData()) + .doOnError(throwable -> mainTabInfosLiveData.setValue(getDefaultMainTab())) + .subscribe(mainTabInfos -> { + if (mainTabInfos.size() != 5) { + mainTabInfosLiveData.setValue(getDefaultMainTab()); + } else { + mainTabInfosLiveData.setValue(mainTabInfos); + } + }); + } + + + private List getDefaultMainTab() { + return new ArrayList<>(Arrays.asList( + new MainTabInfo( + "", + "", + "派对", + MainTabType.TAB_TYPE_HOME + ), + new MainTabInfo( + "", + "", + "广场", + MainTabType.TAB_TYPE_SQUARE + ), + new MainTabInfo( + "", + "", + "赛事", + MainTabType.TAB_TYPE_GAME + ), + new MainTabInfo( + "", + "", + "消息", + MainTabType.TAB_TYPE_MSG + ), + new MainTabInfo( + "", + "", + "我的", + MainTabType.TAB_TYPE_ME + ) + )); + } + + /** * 获取宝箱信息,如果没有,则重新加载 */ @@ -483,5 +549,13 @@ public class InitialModel extends BaseModel implements IInitialModel { @POST("/observe/callback") @FormUrlEncoded Single reportAdv(@Field("imei") String imeiMD5, @Field("oaid") String oaidMD5); + + /** + * 获取首页Tab配置 + * + * @return + */ + @GET("/app/bottomBar/getCurrentAppBottomBar") + Single>> getMainTabList(); } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/face/DynamicFaceModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/face/DynamicFaceModel.java index 801c27b89..cb756e079 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/room/face/DynamicFaceModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/face/DynamicFaceModel.java @@ -149,7 +149,6 @@ public class DynamicFaceModel extends BaseModel implements IDynamicFaceModel { String offlineEncryptString = DemoCache.readFaceList(); try { String faceString = DESUtils.DESAndBase64Decrypt(offlineEncryptString); - LogUtils.d(faceString); offlineFaceList = new Gson().fromJson(faceString, FaceListInfo.class); } catch (Exception e) { e.printStackTrace();