Compare commits
39 Commits
release_1.
...
release_2.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
18b680db70 | ||
![]() |
0fd330848c | ||
![]() |
d0d2418dbf | ||
![]() |
a129fb405e | ||
![]() |
91b006422c | ||
![]() |
d83dbe2337 | ||
![]() |
ce27034ca6 | ||
![]() |
340403fe0d | ||
![]() |
ac8dc50955 | ||
![]() |
32ef74df3a | ||
![]() |
e4cb690b68 | ||
![]() |
96de9e153c | ||
![]() |
35032c1f8e | ||
![]() |
3e1ab090aa | ||
![]() |
95aeda920a | ||
![]() |
60d6bbeae8 | ||
![]() |
0b339136cc | ||
![]() |
6e7743960c | ||
![]() |
7709020221 | ||
![]() |
b9d59e9477 | ||
![]() |
321fa1b9ea | ||
![]() |
ff746b5a11 | ||
![]() |
802383b9e8 | ||
![]() |
b41a2e0376 | ||
![]() |
732cea412c | ||
![]() |
52db404fc0 | ||
![]() |
2d954d21ef | ||
![]() |
b7eb1e66fa | ||
![]() |
6491efe708 | ||
![]() |
37ed8facf3 | ||
![]() |
6becbb6226 | ||
![]() |
583d5a139b | ||
![]() |
c7dd6ec61c | ||
![]() |
a58165213d | ||
![]() |
f21e117e7f | ||
![]() |
f9bd5b7a9f | ||
![]() |
b9251a89a5 | ||
![]() |
e81d75a8b8 | ||
![]() |
c691e5f570 |
BIN
app/libs/SudMGP-v1.3.6.1181.aar
Normal file
@@ -1177,7 +1177,7 @@
|
||||
android:name="com.nnbc123.app.shipantics.RadishRankingActivity"
|
||||
android:theme="@style/room_message_activity" />
|
||||
<activity
|
||||
android:name="com.nnbc123.app.home.activity.MoreRoomActivity"
|
||||
android:name="com.nnbc123.app.game_room.GameRoomActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name="com.nnbc123.app.avroom.wishlist.WishListCreateActivity"
|
||||
|
BIN
app/src/main/assets/svga/home_living_white.svga
Normal file
BIN
app/src/main/assets/svga/home_voice_playing.svga
Normal file
BIN
app/src/main/assets/svga/refresh_header.svga
Normal file
BIN
app/src/main/assets/svga/user_in_live.svga
Normal file
@@ -2,12 +2,10 @@ package com.nnbc123.app;
|
||||
|
||||
import static com.nnbc123.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;
|
||||
@@ -16,7 +14,6 @@ import android.util.SparseArray;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
@@ -43,7 +40,6 @@ import com.nnbc123.app.application.ActivityStackManager;
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity;
|
||||
import com.nnbc123.app.avroom.newuserchargegift.NewUserChargeGiftDialog;
|
||||
import com.nnbc123.app.base.BaseMvpActivity;
|
||||
import com.nnbc123.app.common.widget.CircleImageView;
|
||||
import com.nnbc123.app.common.widget.DragLayout;
|
||||
import com.nnbc123.app.community.dynamic.view.DynamicDetailActivity;
|
||||
import com.nnbc123.app.community.publish.view.PublishActivity;
|
||||
@@ -52,10 +48,9 @@ import com.nnbc123.app.family.view.activity.FamilyHomeActivity;
|
||||
import com.nnbc123.app.home.HomeViewModel;
|
||||
import com.nnbc123.app.home.dialog.NewUserHelloDialog;
|
||||
import com.nnbc123.app.home.dialog.ProtocolUpdateDialog;
|
||||
import com.nnbc123.app.home.fragment.HomeFragment;
|
||||
import com.nnbc123.app.home.fragment.home.HomeFragment;
|
||||
import com.nnbc123.app.home.fragment.MeFragment;
|
||||
import com.nnbc123.app.home.fragment.MsgFragment;
|
||||
import com.nnbc123.app.home.fragment.PartyFragment;
|
||||
import com.nnbc123.app.home.fragment.PmModeFragment;
|
||||
import com.nnbc123.app.home.presenter.MainPresenter;
|
||||
import com.nnbc123.app.home.view.IMainView;
|
||||
@@ -77,7 +72,6 @@ import com.nnbc123.app.ui.patriarch.help.PmDialogShowMrg;
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtils;
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity;
|
||||
import com.nnbc123.app.ui.widget.LivingIconView;
|
||||
import com.nnbc123.app.ui.widget.MainTabLayout;
|
||||
import com.nnbc123.app.utils.CleanLeakUtils;
|
||||
import com.nnbc123.app.utils.PushMessageHandler;
|
||||
@@ -176,7 +170,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
|
||||
private Runnable touchRunnable;
|
||||
|
||||
{
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_PARTY, new PartyFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_HOME, new HomeFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_MSG, new MsgFragment());
|
||||
fragmentArray.put(MainTabType.TAB_TYPE_SQUARE, new SquareFragment());
|
||||
|
@@ -93,7 +93,7 @@ public class AudioPlayerHelper {
|
||||
|
||||
try {
|
||||
player.setDataSource(filePath);
|
||||
} catch (IOException e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
preparing = true;
|
||||
@@ -122,6 +122,9 @@ public class AudioPlayerHelper {
|
||||
}
|
||||
|
||||
public void endPlay() {
|
||||
if (listener != null) {
|
||||
listener.onCompletion();
|
||||
}
|
||||
handler.removeMessages(WHAT_STATUS.COUNT_PLAY);
|
||||
if (player != null) {
|
||||
if (preparing) {
|
||||
|
@@ -6,6 +6,7 @@ import android.view.View
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.adapter.GameMicroViewAdapter
|
||||
import com.nnbc123.app.avroom.adapter.GameMiniMicroViewAdapter
|
||||
@@ -58,6 +59,7 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
|
||||
override fun onFindViews() {
|
||||
super.onFindViews()
|
||||
gameBinding = DataBindingUtil.bind(mView)!!
|
||||
ImmersionBar.with(this).titleBarMarginTop(gameBinding.spaceTitleBar).init()
|
||||
gameBinding.lifecycleOwner = this
|
||||
gameBinding.click = this
|
||||
gameBinding.ktvModel = false
|
||||
@@ -169,22 +171,13 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
gameDelegate.onStart()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
gameDelegate.onResume()
|
||||
}
|
||||
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
gameDelegate.onPause()
|
||||
gameDelegate.onStart()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
gameDelegate.onPause()
|
||||
gameDelegate.onStop()
|
||||
}
|
||||
|
||||
|
@@ -8,11 +8,13 @@ import android.view.View
|
||||
import android.view.ViewConfiguration
|
||||
import android.widget.ImageView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import cn.sharesdk.framework.Platform
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.netease.nim.uikit.common.util.string.StringUtil
|
||||
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
|
||||
@@ -53,6 +55,9 @@ import com.nnbc123.core.room.anotherroompk.ShowUserInfoDialogEvent
|
||||
import com.nnbc123.core.room.bean.RoomContributeDataInfo
|
||||
import com.nnbc123.core.room.bean.RoomContributeUserInfo
|
||||
import com.nnbc123.core.room.bean.RoomInfo
|
||||
import com.nnbc123.core.room.bean.RoomModeType
|
||||
import com.nnbc123.core.room.game.GameInfo
|
||||
import com.nnbc123.core.room.game.GameModel
|
||||
import com.nnbc123.core.room.model.RoomContributeListModel
|
||||
import com.nnbc123.core.room.queuing_mic.event.HasAnimationEffect
|
||||
import com.nnbc123.core.share.ShareModel
|
||||
@@ -66,6 +71,7 @@ import com.nnbc123.core.utils.net.RxHelper
|
||||
import com.nnbc123.library.rxbus.RxBus
|
||||
import com.nnbc123.library.utils.FormatUtils
|
||||
import com.nnbc123.library.utils.JavaUtil
|
||||
import com.nnbc123.library.utils.ResUtil
|
||||
import com.nnbc123.library.utils.SingleToastUtil
|
||||
import com.trello.rxlifecycle3.android.FragmentEvent
|
||||
import io.reactivex.SingleObserver
|
||||
@@ -119,6 +125,7 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
|
||||
|
||||
override fun onFindViews() {
|
||||
_binding = DataBindingUtil.bind(mView)
|
||||
ImmersionBar.with(this).titleBarMarginTop(binding.layoutTitleBar).init()
|
||||
setupRoomTitleMarquee()
|
||||
}
|
||||
|
||||
@@ -240,16 +247,16 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
|
||||
}
|
||||
|
||||
//这里的2和4是服务端定义的错误状态 关闭排麦模式和关闭PK模式!
|
||||
private val isShowChangeGame: Boolean
|
||||
get() = false
|
||||
/* RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
private val isShowChangeGame: Boolean get() {
|
||||
val currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
return currentRoomInfo != null &&
|
||||
AvRoomDataManager.get().isRoomOwner() &&
|
||||
currentRoomInfo.getIsPermitRoom() != 1 &&
|
||||
currentRoomInfo.getType() != RoomInfo.ROOM_TYPE_SINGLE &&
|
||||
(currentRoomInfo.getRoomModeType() == RoomModeType.NORMAL_MODE ||
|
||||
currentRoomInfo.getRoomModeType() == 2 ||
|
||||
currentRoomInfo.getRoomModeType() == 4);*/
|
||||
currentRoomInfo.getRoomModeType() == 4)
|
||||
}
|
||||
|
||||
fun setRoomBg(roomInfo: RoomInfo?) {
|
||||
if (_binding == null) return
|
||||
@@ -421,6 +428,38 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
|
||||
setupFollowRoom()
|
||||
FOLLOW_ROOM_TYPE = if (AvRoomDataManager.get().isRoomFans) "2" else "1"
|
||||
setIdOnlineData()
|
||||
if (isShowChangeGame) {
|
||||
initRvGame()
|
||||
binding.layoutRankTop1.isVisible = false
|
||||
binding.layoutRankTop2.isVisible = false
|
||||
binding.llChangeGame.visibility = View.VISIBLE
|
||||
if (AvRoomDataManager.get().isOpenGame) {
|
||||
binding.tvCurrGame.text = it.mgName
|
||||
} else {
|
||||
binding.tvCurrGame.text = "扩列交友"
|
||||
}
|
||||
GameModel.getGameList()
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe { gameInfos ->
|
||||
if (AvRoomDataManager.get().isOpenGame) {
|
||||
for (i in gameInfos.indices) {
|
||||
val gameInfo: GameInfo = gameInfos[i]
|
||||
if (gameInfo.mgId.toLongOrNull() == it.mgId) {
|
||||
gameInfos.removeAt(i)
|
||||
break
|
||||
}
|
||||
}
|
||||
val gameInfo = GameInfo()
|
||||
gameInfo.name = "扩列交友"
|
||||
gameInfos.add(gameInfo)
|
||||
}
|
||||
gameAdapter?.setNewData(gameInfos)
|
||||
}
|
||||
} else {
|
||||
binding.llChangeGame.setVisibility(View.GONE)
|
||||
binding.layoutRankTop1.isVisible = true
|
||||
binding.layoutRankTop2.isVisible = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -538,13 +577,13 @@ class HomePartyFragment : BaseFragment(), View.OnClickListener, OnShareDialogIte
|
||||
private fun updateRoomRanks(data: List<RoomContributeUserInfo>) {
|
||||
val avatarList = arrayListOf(
|
||||
binding.ivRank0,
|
||||
binding.ivRank1,
|
||||
binding.ivRank2
|
||||
// binding.ivRank1,
|
||||
// binding.ivRank2
|
||||
)
|
||||
val stvList = arrayListOf(
|
||||
binding.stvRank0,
|
||||
binding.stvRank1,
|
||||
binding.stvRank2
|
||||
// binding.stvRank1,
|
||||
// binding.stvRank2
|
||||
)
|
||||
for (i in 0 until avatarList.size) {
|
||||
avatarList[i].loadAvatar(data.getOrNull(i)?.avatar)
|
||||
|
@@ -8,6 +8,7 @@ import android.widget.ImageView;
|
||||
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.gyf.immersionbar.ImmersionBar;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity;
|
||||
@@ -133,6 +134,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
|
||||
public void onFindViews() {
|
||||
super.onFindViews();
|
||||
gameBinding = DataBindingUtil.bind(mView);
|
||||
ImmersionBar.with(this).titleBarMarginTop(gameBinding.layoutRoot).init();
|
||||
gameBinding.setLifecycleOwner(this);
|
||||
gameBinding.setClick(this);
|
||||
gameBinding.setKtvModel(false);
|
||||
|
@@ -9,6 +9,7 @@ import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.viewModels
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.adapter.OnMicroItemClickListener
|
||||
@@ -86,6 +87,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
|
||||
override fun onFindViews() {
|
||||
super.onFindViews()
|
||||
gameBinding = DataBindingUtil.bind(mView)!!
|
||||
ImmersionBar.with(this).titleBarMarginTop(gameBinding.spaceTitleBar).init()
|
||||
gameBinding.lifecycleOwner = this
|
||||
gameBinding.click = this
|
||||
}
|
||||
@@ -265,13 +267,13 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
|
||||
gameBinding.microView.bindAdapter(SingleRoomPKMicroViewAdapter(context))
|
||||
gameBinding.viewPkBoard.isVisible = true
|
||||
gameBinding.microView.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
||||
topMargin = ScreenUtil.dip2px(140f)
|
||||
topMargin = ScreenUtil.dip2px(50f)
|
||||
}
|
||||
} else if (!AvRoomDataManager.get().isOpenAnotherPKMode && gameBinding.microView.adapter !is SingleAnchorMicroViewAdapter) {
|
||||
gameBinding.microView.bindAdapter(SingleAnchorMicroViewAdapter(context))
|
||||
gameBinding.viewPkBoard.isVisible = false
|
||||
gameBinding.microView.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
||||
topMargin = ScreenUtil.dip2px(110f)
|
||||
topMargin = ScreenUtil.dip2px(10f)
|
||||
}
|
||||
} else {
|
||||
gameBinding.microView.adapter?.notifyDataSetChanged()
|
||||
|
@@ -8,8 +8,8 @@ import com.nnbc123.app.BuildConfig;
|
||||
|
||||
public class AppConfig {
|
||||
|
||||
protected static final String APP_ID = "1467745235064848385";
|
||||
protected static final String APP_KEY = "BvjLDpWol7OihaYeFebuepx1bZu6cxU5";
|
||||
protected static final String APP_ID = "1735573973195948033";
|
||||
protected static final String APP_KEY = "r23OylNqnjOBPM0SDgVBfq6RCKMWAc0X";
|
||||
protected static boolean isTestEnv = BuildConfig.DEBUG;
|
||||
|
||||
}
|
||||
|
@@ -34,7 +34,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
private val TAG = "GameDelegate"
|
||||
private var APP_CODE = ""
|
||||
|
||||
private val mRoomID = AvRoomDataManager.get().roomUid.toString()
|
||||
private val mRoomID :String get() = AvRoomDataManager.get().roomUid.toString()
|
||||
private val mLanguage = "zh-CN" //语言
|
||||
|
||||
//调用游戏SDK的接口,成功加载游戏后可用:
|
||||
@@ -84,7 +84,10 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
}
|
||||
|
||||
fun updateGame(mgId: Long?) {
|
||||
if (mgId == null || mgId == 0L || mgId == mMGID || iSudFSTAPP == null) return
|
||||
if (mgId == null || mgId == 0L) return
|
||||
if (mgId == mMGID && iSudFSTAPP != null) {
|
||||
return
|
||||
}
|
||||
mMGID = mgId
|
||||
updateMyMicQueue(GameStatus.STATUS_NOT_JOIN)
|
||||
loadMG(activity, mUid, mRoomID, APP_CODE, mMGID, mLanguage)
|
||||
@@ -164,8 +167,11 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
language: String
|
||||
) {
|
||||
iSudFSTAPP?.destroyMG()
|
||||
SudMGP.getCfg().showLoadingGameBg = !isHideLoadingBg()
|
||||
iSudFSTAPP = SudMGP.loadMG(activity, userID, roomID, code, mgID, language, mISudFSMMG)
|
||||
addGameView(iSudFSTAPP!!.gameView)
|
||||
iSudFSTAPP?.apply {
|
||||
addGameView(gameView)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -226,6 +232,9 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
LogUtils.d(p0)
|
||||
}
|
||||
|
||||
override fun onGameLoadingProgress(p0: Int, p1: Int, p2: Int) {
|
||||
}
|
||||
|
||||
override fun onGameStarted() {
|
||||
}
|
||||
|
||||
@@ -285,7 +294,11 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
}
|
||||
|
||||
override fun onGetGameCfg(handle: ISudFSMStateHandle?, p1: String?) {
|
||||
handle?.success(gson.toJson(GameCfg()))
|
||||
val config = GameCfg()
|
||||
if (isHideGameBg()) {
|
||||
config.ui.game_bg.hide = true
|
||||
}
|
||||
handle?.success(gson.toJson(config))
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -313,9 +326,9 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
//游戏安全操作区域
|
||||
val viewGameRect = JSONObject()
|
||||
viewGameRect.put("left", 0)
|
||||
viewGameRect.put("top", ScreenUtil.dip2px(200f))
|
||||
viewGameRect.put("top", ScreenUtil.dip2px(180f))
|
||||
viewGameRect.put("right", 0)
|
||||
viewGameRect.put("bottom", ScreenUtil.dip2px(200f))
|
||||
viewGameRect.put("bottom", ScreenUtil.dip2px(150f))
|
||||
jsonObject.put("view_game_rect", viewGameRect)
|
||||
|
||||
//通知游戏
|
||||
@@ -655,6 +668,12 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId:
|
||||
iSudFSTAPP?.destroyMG()
|
||||
}
|
||||
|
||||
private fun isHideLoadingBg(): Boolean {
|
||||
return mMGID == 1704460412809043970
|
||||
}
|
||||
private fun isHideGameBg(): Boolean {
|
||||
return mMGID == 1704460412809043970
|
||||
}
|
||||
}
|
||||
|
||||
internal interface AppLoginListener {
|
||||
|
@@ -2,33 +2,24 @@ package com.nnbc123.app.common.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Bitmap.Config;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffXfermode;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.Outline;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
import android.widget.ImageView;
|
||||
import android.view.View;
|
||||
import android.view.ViewOutlineProvider;
|
||||
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.shape.CornerFamily;
|
||||
import com.google.android.material.shape.ShapeAppearanceModel;
|
||||
import com.nnbc123.app.R;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
|
||||
/**
|
||||
* 自定义View,实现圆角,圆形等效果
|
||||
*
|
||||
* @author zhy
|
||||
*/
|
||||
public class RectRoundImageView extends ImageView {
|
||||
public class RectRoundImageView extends ShapeableImageView {
|
||||
|
||||
/**
|
||||
* TYPE_CIRCLE / TYPE_ROUND
|
||||
@@ -37,42 +28,11 @@ public class RectRoundImageView extends ImageView {
|
||||
public static final int TYPE_CIRCLE = 0;
|
||||
public static final int TYPE_ROUND = 1;
|
||||
|
||||
/**
|
||||
* 图片
|
||||
*/
|
||||
private Bitmap mSrc;
|
||||
|
||||
/**
|
||||
* 圆角的大小
|
||||
*/
|
||||
private int mRadius = 8;
|
||||
|
||||
/**
|
||||
* 控件的宽度
|
||||
*/
|
||||
private int mWidth;
|
||||
/**
|
||||
* 控件的高度
|
||||
*/
|
||||
private int mHeight;
|
||||
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getmRadius() {
|
||||
return mRadius;
|
||||
}
|
||||
|
||||
public void setmRadius(int mRadius) {
|
||||
this.mRadius = mRadius;
|
||||
}
|
||||
|
||||
public RectRoundImageView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
@@ -98,17 +58,6 @@ public class RectRoundImageView extends ImageView {
|
||||
for (int i = 0; i < n; i++) {
|
||||
int attr = a.getIndex(i);
|
||||
switch (attr) {
|
||||
case R.styleable.RectRoundImageView_src:
|
||||
// mSrc = BitmapFactory.decodeResource(getResources(),
|
||||
// a.getResourceId(attr, 0));
|
||||
InputStream is = getResources().openRawResource(a.getResourceId(attr, 0));
|
||||
BitmapFactory.Options opts = new BitmapFactory.Options();
|
||||
opts.inTempStorage = new byte[100 * 1024];
|
||||
opts.inPreferredConfig = Config.RGB_565;
|
||||
opts.inPurgeable = true;
|
||||
opts.inSampleSize = 4;
|
||||
mSrc = BitmapFactory.decodeStream(is, null, opts);
|
||||
break;
|
||||
case R.styleable.RectRoundImageView_type:
|
||||
type = a.getInt(attr, 0);// 默认为Circle
|
||||
break;
|
||||
@@ -121,197 +70,25 @@ public class RectRoundImageView extends ImageView {
|
||||
}
|
||||
setScaleType(ScaleType.CENTER_CROP);
|
||||
a.recycle();
|
||||
setup(type, mRadius);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 计算控件的高度和宽度
|
||||
*/
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
Drawable drawable = getDrawable();
|
||||
if (null != drawable) {
|
||||
mSrc = drawableToBitmap(getDrawable());
|
||||
}
|
||||
/**
|
||||
* 设置宽度
|
||||
*/
|
||||
int specMode = MeasureSpec.getMode(widthMeasureSpec);
|
||||
int specSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
|
||||
if (specMode == MeasureSpec.EXACTLY)// match_parent , accurate
|
||||
{
|
||||
mWidth = specSize;
|
||||
} else {
|
||||
// 由图片决定的宽
|
||||
int desireByImg = getPaddingLeft() + getPaddingRight()
|
||||
+ mSrc.getWidth();
|
||||
if (specMode == MeasureSpec.AT_MOST)// wrap_content
|
||||
{
|
||||
mWidth = Math.min(desireByImg, specSize);
|
||||
} else
|
||||
mWidth = desireByImg;
|
||||
}
|
||||
|
||||
/***
|
||||
* 设置高度
|
||||
*/
|
||||
|
||||
specMode = MeasureSpec.getMode(heightMeasureSpec);
|
||||
specSize = MeasureSpec.getSize(heightMeasureSpec);
|
||||
if (specMode == MeasureSpec.EXACTLY)// match_parent , accurate
|
||||
{
|
||||
mHeight = specSize;
|
||||
} else {
|
||||
int desire = getPaddingTop() + getPaddingBottom()
|
||||
+ mSrc.getHeight();
|
||||
|
||||
if (specMode == MeasureSpec.AT_MOST)// wrap_content
|
||||
{
|
||||
mHeight = Math.min(desire, specSize);
|
||||
} else
|
||||
mHeight = desire;
|
||||
}
|
||||
|
||||
setMeasuredDimension(mWidth, mHeight);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制
|
||||
*/
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
|
||||
switch (type) {
|
||||
// 如果是TYPE_CIRCLE绘制圆形
|
||||
case TYPE_CIRCLE:
|
||||
int min = Math.min(mWidth, mHeight);
|
||||
/**
|
||||
* 长度如果不一致,按小的值进行压缩
|
||||
*/
|
||||
if (null != mSrc) {
|
||||
mSrc = Bitmap.createScaledBitmap(mSrc, min, min, false);
|
||||
canvas.drawBitmap(createCircleImage(mSrc, min), 0, 0, null);
|
||||
private void setup(int type, int cornerSize) {
|
||||
if (type == TYPE_CIRCLE) {
|
||||
setOutlineProvider(new ViewOutlineProvider() {
|
||||
@Override
|
||||
public void getOutline(View view, Outline outline) {
|
||||
int min = Math.min(view.getWidth(), view.getHeight());
|
||||
int left = (view.getWidth() - min) / 2;
|
||||
int top = (view.getHeight() - min) / 2;
|
||||
outline.setOval(left, top, min, min);
|
||||
}
|
||||
break;
|
||||
case TYPE_ROUND:
|
||||
canvas.drawBitmap(createFramedPhoto(mWidth, mHeight, mSrc, mRadius), 0, 0, null);
|
||||
break;
|
||||
});
|
||||
setClipToOutline(true);
|
||||
} else if (type == TYPE_ROUND) {
|
||||
setShapeAppearanceModel(ShapeAppearanceModel.builder()
|
||||
.setAllCorners(CornerFamily.ROUNDED, cornerSize)
|
||||
.build());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Drawable → Bitmap
|
||||
*
|
||||
* @param drawable
|
||||
* @return
|
||||
*/
|
||||
|
||||
public static Bitmap drawableToBitmap(Drawable drawable) {
|
||||
|
||||
|
||||
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
|
||||
|
||||
drawable.getIntrinsicHeight(),
|
||||
|
||||
drawable.getOpacity() != PixelFormat.OPAQUE ? Config.ARGB_8888
|
||||
|
||||
: Config.RGB_565);
|
||||
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
|
||||
//canvas.setBitmap(bitmap);
|
||||
|
||||
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
|
||||
|
||||
drawable.draw(canvas);
|
||||
|
||||
return bitmap;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据原图和变长绘制圆形图片
|
||||
*
|
||||
* @param source
|
||||
* @param min
|
||||
* @return
|
||||
*/
|
||||
private Bitmap createCircleImage(Bitmap source, int min) {
|
||||
final Paint paint = new Paint();
|
||||
paint.setAntiAlias(true);
|
||||
Bitmap target = Bitmap.createBitmap(min, min, Config.RGB_565);
|
||||
/**
|
||||
* 产生一个同样大小的画布
|
||||
*/
|
||||
Canvas canvas = new Canvas(target);
|
||||
/**
|
||||
* 首先绘制圆形
|
||||
*/
|
||||
canvas.drawCircle(min / 2, min / 2, min / 2, paint);
|
||||
/**
|
||||
* 使用SRC_IN,参考上面的说明
|
||||
*/
|
||||
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||||
/**
|
||||
* 绘制图片
|
||||
*/
|
||||
canvas.drawBitmap(source, 0, 0, paint);
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据原图添加圆角
|
||||
*
|
||||
* @param source
|
||||
* @return
|
||||
*/
|
||||
private Bitmap createRoundConerImage(Bitmap source) {
|
||||
final Paint paint = new Paint();
|
||||
paint.setAntiAlias(true);
|
||||
Bitmap target = Bitmap.createBitmap(mWidth, mHeight, Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(target);
|
||||
RectF rect = new RectF(0, 0, source.getWidth(), source.getHeight());
|
||||
canvas.drawRoundRect(rect, mRadius, mRadius, paint);
|
||||
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||||
canvas.drawBitmap(source, 0, 0, paint);
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param x 图像的宽度
|
||||
* @param y 图像的高度
|
||||
* @param image 源图片
|
||||
* @param outerRadiusRat 圆角的大小
|
||||
* @return 圆角图片
|
||||
*/
|
||||
Bitmap createFramedPhoto(int x, int y, Bitmap image, float outerRadiusRat) {
|
||||
//根据源文件新建一个darwable对象
|
||||
Drawable imageDrawable = new BitmapDrawable(image);
|
||||
// 新建一个新的输出图片
|
||||
Bitmap output = Bitmap.createBitmap(x, y, Config.ARGB_8888);
|
||||
|
||||
Canvas canvas = new Canvas(output);
|
||||
|
||||
// 新建一个矩形
|
||||
RectF outerRect = new RectF(0, 0, x, y);
|
||||
|
||||
// 产生一个红色的圆角矩形
|
||||
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
paint.setColor(Color.RED);
|
||||
canvas.drawRoundRect(outerRect, outerRadiusRat, outerRadiusRat, paint);
|
||||
|
||||
// 将源图片绘制到这个圆角矩形上
|
||||
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||||
imageDrawable.setBounds(0, 0, x, y);
|
||||
canvas.saveLayer(outerRect, paint, Canvas.ALL_SAVE_FLAG);
|
||||
imageDrawable.draw(canvas);
|
||||
canvas.restore();
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
134
app/src/main/java/com/nnbc123/app/game_room/GameRoomActivity.kt
Normal file
@@ -0,0 +1,134 @@
|
||||
package com.nnbc123.app.game_room
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseBindingActivity
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.common.widget.dialog.DialogManager.AbsOkDialogListener
|
||||
import com.nnbc123.app.databinding.ActivityMoreRoomBinding
|
||||
import com.nnbc123.app.home.dialog.RecommendRoomDialog
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.core.UriProvider
|
||||
import com.nnbc123.core.bean.response.observeResult
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.pay.PayModel.NOT_REAL_NAME_BEFORE_CHARGING
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.net.ServerException
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
|
||||
/**
|
||||
* 更多游戏-房间列表
|
||||
*/
|
||||
@ActLayoutRes(R.layout.activity_more_room)
|
||||
class GameRoomActivity : BaseBindingActivity<ActivityMoreRoomBinding>() {
|
||||
|
||||
private val gameTabAdapter = GameTabAdapter()
|
||||
private val roomAdapter = GameRoomAdapter()
|
||||
private lateinit var viewModel: GameRoomViewModel
|
||||
|
||||
private var rvDelegate: RVDelegate<HomeRoomInfo>? = null
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun start(context: Context) {
|
||||
val starter = Intent(context, GameRoomActivity::class.java)
|
||||
context.startActivity(starter)
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
ImmersionBar.with(this).titleBarMarginTop(mBinding.ivBack).init()
|
||||
viewModel = ViewModelProvider(this)[GameRoomViewModel::class.java]
|
||||
initView()
|
||||
initEvent()
|
||||
initObserve()
|
||||
viewModel.getData()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
mBinding.ivBack.setOnClickListener {
|
||||
finish()
|
||||
}
|
||||
mBinding.rvTop.adapter = gameTabAdapter
|
||||
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(roomAdapter)
|
||||
.setRecyclerView(mBinding.recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无数据"))
|
||||
.setLayoutManager(GridLayoutManager(this, 2))
|
||||
.build()
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
viewModel.jumpLiveData.observeResult(this, success = {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isPick) {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
} else {
|
||||
RecommendRoomDialog.newInstance(it).show(context)
|
||||
}
|
||||
}
|
||||
}, failed = {
|
||||
dialogManager.dismissDialog()
|
||||
if ((it as? ServerException)?.code == NOT_REAL_NAME_BEFORE_CHARGING) {
|
||||
dialogManager.showTipsDialog(getString(R.string.tips_need_to_certification),
|
||||
getString(R.string.go_to_certification),
|
||||
object : AbsOkDialogListener() {
|
||||
override fun onOk() {
|
||||
// 跳去实名认证页面
|
||||
CommonWebViewActivity.start(
|
||||
this@GameRoomActivity.context,
|
||||
UriProvider.getTutuRealNamePage()
|
||||
)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
toast(it.message)
|
||||
}
|
||||
})
|
||||
viewModel.gameTabLiveData.observe(this) {
|
||||
gameTabAdapter.setNewData(it)
|
||||
mBinding.rvTop.isVisible = !it.isNullOrEmpty()
|
||||
}
|
||||
viewModel.roomListLiveData.observe(this) {
|
||||
rvDelegate?.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
gameTabAdapter.setOnItemClickListener { adapter, view, position ->
|
||||
gameTabAdapter.getItem(position)?.let {
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_HOMEPAGE_MORE_GAME_TAB_CLICK,
|
||||
it.name
|
||||
)
|
||||
dialogManager.showProgressDialog(this)
|
||||
val type = if (it.isFriendsType == true) {
|
||||
2
|
||||
} else {
|
||||
1
|
||||
}
|
||||
viewModel.getJumpInfo(it.mgId ?: 0, type)
|
||||
}
|
||||
}
|
||||
roomAdapter.setOnItemClickListener { adapter, view, position ->
|
||||
roomAdapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
dialogManager?.dismissDialog()
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
package com.nnbc123.app.game_room
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/26 11:31
|
||||
* Desc:
|
||||
**/
|
||||
class GameRoomAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.game_room_item_room) {
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.getView<ImageView>(R.id.iv_bg)
|
||||
.load(item.backgroundPic, defaultRes = R.drawable.game_room_bg_item_default)
|
||||
helper.getView<ImageView>(R.id.iv_room_cover).load(item.avatar)
|
||||
helper.setText(R.id.tv_room_name, item.title)
|
||||
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
|
||||
|
||||
//gameState=0 (idle 状态,游戏未开始,空闲状态);gameState=1 (loading 状态,所有玩家都准备好,队长点击了开始游戏按钮,等待加载游戏场景开始游戏);gameState=2(playing状态,游戏进行中状态)
|
||||
if (item.mgId > 0) {
|
||||
when (item.state) {
|
||||
0 -> {
|
||||
helper.setText(R.id.tv_message, "游戏未开始,等待加入")
|
||||
}
|
||||
|
||||
else -> {
|
||||
helper.setText(R.id.tv_message, "游戏进行中,立即围观")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
helper.setText(R.id.tv_message, "扩列交友")
|
||||
}
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].load(avatarUrl, defaultRes = R.drawable.game_room_ic_mic)
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,50 @@
|
||||
package com.nnbc123.app.game_room
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.bean.response.BeanResult
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.home.bean.HomeGameBean
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
import com.nnbc123.core.utils.toast
|
||||
|
||||
class GameRoomViewModel : BaseViewModel() {
|
||||
|
||||
val gameTabLiveData = MutableLiveData<List<HomeGameBean>>()
|
||||
val roomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
|
||||
val jumpLiveData = MutableLiveData<BeanResult<HomeRoomInfo>?>()
|
||||
|
||||
fun getData() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
roomListLiveData.value = ListResult.failed(1)
|
||||
gameTabLiveData.value = ArrayList<HomeGameBean>().apply {
|
||||
add(HomeGameBean(isFriendsType = true))
|
||||
}
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHomeGame()
|
||||
val gameList = ArrayList<HomeGameBean>()
|
||||
result?.miniGames?.let {
|
||||
gameList.addAll(it)
|
||||
}
|
||||
gameList.add(HomeGameBean(isFriendsType = true))
|
||||
gameTabLiveData.value = gameList
|
||||
roomListLiveData.value = ListResult.success(result?.playRooms, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getJumpInfo(id: Long, type: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
jumpLiveData.value = BeanResult.failed(it)
|
||||
},
|
||||
block = {
|
||||
jumpLiveData.value = BeanResult.success(HomeModel.getResourceJumpInfo(id, type))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package com.nnbc123.app.game_room
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeGameBean
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/26 11:31
|
||||
* Desc:
|
||||
**/
|
||||
class GameTabAdapter :
|
||||
BaseQuickAdapter<HomeGameBean, BaseViewHolder>(R.layout.game_room_item_tab) {
|
||||
override fun convert(helper: BaseViewHolder, item: HomeGameBean) {
|
||||
if (item.isFriendsType == true) {
|
||||
helper.getView<ImageView>(R.id.iv_cover)
|
||||
.setImageResource(R.drawable.game_room_bg_friends)
|
||||
} else {
|
||||
helper.getView<ImageView>(R.id.iv_cover).load(item.pic)
|
||||
}
|
||||
}
|
||||
}
|
90
app/src/main/java/com/nnbc123/app/home/FriendsViewModel.kt
Normal file
@@ -0,0 +1,90 @@
|
||||
package com.nnbc123.app.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.bean.response.BeanResult
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.home.bean.HomeGameTab
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import com.nnbc123.core.utils.toast
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/27 10:18
|
||||
* Desc:
|
||||
**/
|
||||
class FriendsViewModel: BaseViewModel() {
|
||||
|
||||
private val _resourceJumpLiveData = MutableLiveData<BeanResult<HomeRoomInfo>?>()
|
||||
val resourceJumpLiveData: LiveData<BeanResult<HomeRoomInfo>?> = _resourceJumpLiveData
|
||||
|
||||
private val _homeChatPickLiveData = MutableLiveData<String?>()
|
||||
val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
|
||||
|
||||
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
|
||||
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
|
||||
|
||||
val friendRecommendModeLiveData = MutableLiveData<ListResult<UserInfo>>()
|
||||
|
||||
val gameTabLiveData = MutableLiveData<MutableList<HomeGameTab>>()
|
||||
|
||||
fun getResourceJumpInfo(id: Long) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_resourceJumpLiveData.value = BeanResult.failed(it)
|
||||
},
|
||||
block = {
|
||||
_resourceJumpLiveData.value = BeanResult.success(HomeModel.getResourceJumpInfo(id, 0))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHomeChatPick() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_homeChatPickLiveData.value = null
|
||||
it.message.toast()
|
||||
},
|
||||
block = {
|
||||
_homeChatPickLiveData.value = HomeModel.getHomeChatPick()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getNewFriendList(gender: Int? = null, gameId: Long? = null) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_newFriendLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getNewFriendList(gender, gameId)
|
||||
_newFriendLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getFriendRecommendMore() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
friendRecommendModeLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getFriendRecommendMore()
|
||||
friendRecommendModeLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHomeGameTab() {
|
||||
safeLaunch {
|
||||
if (gameTabLiveData.value == null) {
|
||||
HomeModel.getHomeGameTabListByLocal()?.let {
|
||||
gameTabLiveData.value = it
|
||||
}
|
||||
}
|
||||
gameTabLiveData.value = HomeModel.getHomeGameTabList()
|
||||
}
|
||||
}
|
||||
}
|
@@ -2,136 +2,42 @@ package com.nnbc123.app.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.core.auth.AuthModel
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.community.CommunityConstant
|
||||
import com.nnbc123.core.home.bean.*
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
import com.nnbc123.core.room.bean.AnchorInfo
|
||||
import com.nnbc123.core.room.bean.HomeLiveTopInfo
|
||||
import com.nnbc123.core.room.bean.SingleRoomSortInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.toast
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
|
||||
class HomeViewModel : BaseViewModel() {
|
||||
|
||||
private val _bannerLiveData = MutableLiveData<List<BannerInfo>>()
|
||||
val bannerLiveData: LiveData<List<BannerInfo>> = _bannerLiveData
|
||||
|
||||
private val _partyBannerLiveData = MutableLiveData<List<BannerInfo>?>()
|
||||
val partyBannerLiveData: LiveData<List<BannerInfo>?> = _partyBannerLiveData
|
||||
|
||||
private val _hotRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val hotRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _hotRoomLiveData
|
||||
|
||||
private val _gameRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val gameRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _gameRoomLiveData
|
||||
|
||||
private val _pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
|
||||
val pickRoomLiveData: LiveData<HomeRoomInfo?> = _pickRoomLiveData
|
||||
|
||||
private val _openGameRoomLiveData = MutableLiveData<Long?>()
|
||||
val openGameRoomLiveData: LiveData<Long?> = _openGameRoomLiveData
|
||||
|
||||
private val _concernsLiveData = MutableLiveData<List<HomeRoomInfo>>()
|
||||
val concernsLiveData: LiveData<List<HomeRoomInfo>> = _concernsLiveData
|
||||
|
||||
private val _collectLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val collectLiveData: LiveData<ListResult<HomeRoomInfo>> = _collectLiveData
|
||||
|
||||
private val _tagLiveData = MutableLiveData<MutableList<HomeTagInfo>>()
|
||||
val tagLiveData: LiveData<MutableList<HomeTagInfo>> = _tagLiveData
|
||||
|
||||
private val _emptyLiveData = MutableLiveData<Boolean>()
|
||||
val emptyLiveData: LiveData<Boolean> = _emptyLiveData
|
||||
|
||||
private val _resourceLiveData = MutableLiveData<MutableList<ResourceInfo>>()
|
||||
val resourceLiveData: LiveData<MutableList<ResourceInfo>> = _resourceLiveData
|
||||
|
||||
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
|
||||
val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
|
||||
|
||||
private val _homeChatPickLiveData = MutableLiveData<String?>()
|
||||
val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
|
||||
|
||||
private val _singleAnchorHomeLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val singleAnchorHomeLiveData: LiveData<ListResult<HomeRoomInfo>> = _singleAnchorHomeLiveData
|
||||
|
||||
|
||||
private val _singleRoomSortInfoLiveData = MutableLiveData<ListResult<SingleRoomSortInfo>>()
|
||||
val singleRoomSortInfoLiveData: LiveData<ListResult<SingleRoomSortInfo>> =
|
||||
_singleRoomSortInfoLiveData
|
||||
|
||||
private val _homeLiveTopInfoLiveData = MutableLiveData<HomeLiveTopInfo?>()
|
||||
val homeLiveTopInfoLiveData: LiveData<HomeLiveTopInfo?> = _homeLiveTopInfoLiveData
|
||||
|
||||
private val _anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
|
||||
val anchorInfoLiveData: LiveData<AnchorInfo?> = _anchorInfoLiveData
|
||||
|
||||
private val _partyRecommendRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val partyRecommendRoomLiveData: LiveData<ListResult<HomeRoomInfo>> =
|
||||
_partyRecommendRoomLiveData
|
||||
|
||||
private val _partyRecommendRoomMoreLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val partyRecommendRoomMoreLiveData: LiveData<ListResult<HomeRoomInfo>> =
|
||||
_partyRecommendRoomMoreLiveData
|
||||
|
||||
private val _giftServiceLiveData = MutableLiveData<ListResult<GiftServiceMsgVo>>()
|
||||
val giftServiceLiveData: LiveData<ListResult<GiftServiceMsgVo>> = _giftServiceLiveData
|
||||
|
||||
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
|
||||
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
|
||||
|
||||
fun getBannerInfo() {
|
||||
safeLaunch {
|
||||
_bannerLiveData.value = HomeModel.getHomeBanner("9")
|
||||
}
|
||||
}
|
||||
|
||||
fun getTagInfo() {
|
||||
safeLaunch {
|
||||
_tagLiveData.value = HomeModel.getHomeTag()
|
||||
}
|
||||
}
|
||||
|
||||
fun getHomeResource() {
|
||||
safeLaunch(
|
||||
block = {
|
||||
if (_resourceLiveData.value == null) {
|
||||
HomeModel.getHomeResourceByLocal()?.let {
|
||||
_resourceLiveData.value = it
|
||||
}
|
||||
}
|
||||
_resourceLiveData.value = HomeModel.getHomeResource()
|
||||
},
|
||||
onError = {
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
fun getResourceJumpInfo(id: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_resourceJumpLiveData.value = null
|
||||
it.message.toast()
|
||||
},
|
||||
block = {
|
||||
_resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHomeChatPick() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_homeChatPickLiveData.value = null
|
||||
it.message.toast()
|
||||
},
|
||||
block = {
|
||||
_homeChatPickLiveData.value = HomeModel.getHomeChatPick()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHotRoom(pageNum: Int, pageSize: Int) {
|
||||
@@ -146,145 +52,6 @@ class HomeViewModel : BaseViewModel() {
|
||||
)
|
||||
}
|
||||
|
||||
fun getPartyBanner() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_partyBannerLiveData.value = null
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHotRoom()
|
||||
var bannerInfoList: List<BannerInfo>?
|
||||
bannerInfoList = result?.find { it.isBanner }?.bannerVoList
|
||||
if (bannerInfoList == null) {
|
||||
bannerInfoList = HomeModel.getPlayRoom()?.find { it.isBanner }?.bannerVoList
|
||||
}
|
||||
_partyBannerLiveData.value = bannerInfoList
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
fun getGameRoom(pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_gameRoomLiveData.value = ListResult.failed(pageNum)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getGameRoom(pageNum, pageSize)
|
||||
_gameRoomLiveData.value = ListResult.success(result, pageNum)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun fastPickGameRoom(mgId: Long? = null) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
it.message.toast()
|
||||
StatisticManager.Instance()
|
||||
.onEvent(
|
||||
StatisticsProtocol.EVENT_USERCENTER_QUICK_ENTRYSUCCESS_CLICK,
|
||||
"个人中心快捷进房点击未匹配成功"
|
||||
)
|
||||
},
|
||||
block = {
|
||||
val homeRoomInfo = HomeModel.fastPickGameRoom(mgId)
|
||||
if (homeRoomInfo?.isPick == true) {
|
||||
_pickRoomLiveData.value = homeRoomInfo
|
||||
} else if (homeRoomInfo?.isNeedOpenSelfRoom == true) {
|
||||
_openGameRoomLiveData.value = mgId
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
fun getCollectRoom(pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_collectLiveData.value = ListResult.failed(pageNum)
|
||||
_emptyLiveData.value = true
|
||||
},
|
||||
block = {
|
||||
if (pageNum == 1) {
|
||||
val concernsRooms = async(Dispatchers.IO) {
|
||||
try {
|
||||
HomeModel.getConcernsRoom()
|
||||
} catch (e: Throwable) {
|
||||
null
|
||||
}
|
||||
}
|
||||
val collectRooms = async(Dispatchers.IO) {
|
||||
try {
|
||||
HomeModel.getCollectRoom(pageNum, pageSize)
|
||||
} catch (e: Throwable) {
|
||||
null
|
||||
}
|
||||
}
|
||||
_concernsLiveData.value = concernsRooms.await()
|
||||
val collectList = collectRooms.await()
|
||||
if (collectList == null) {
|
||||
_collectLiveData.value = ListResult.failed(pageNum)
|
||||
} else {
|
||||
_collectLiveData.value =
|
||||
ListResult.success(collectList.fansRoomList, pageNum)
|
||||
}
|
||||
_emptyLiveData.value = _concernsLiveData.value.isNullOrEmpty() &&
|
||||
_collectLiveData.value?.data.isNullOrEmpty()
|
||||
} else {
|
||||
val result = HomeModel.getCollectRoom(pageNum, pageSize)
|
||||
_collectLiveData.value = ListResult.success(result?.fansRoomList, pageNum)
|
||||
}
|
||||
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun requestSingleRoomSortList() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
//保证最少有一个推荐tab,防止出现空白页
|
||||
_singleRoomSortInfoLiveData.value =
|
||||
ListResult.success(listOf(SingleRoomSortInfo(null, "推荐")), 1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.requestSingleRoomSortList()
|
||||
val fullResult = ArrayList<SingleRoomSortInfo>()
|
||||
fullResult.add(SingleRoomSortInfo(null, "推荐"))
|
||||
result?.let { fullResult.addAll(it) }
|
||||
_singleRoomSortInfoLiveData.value = ListResult.success(fullResult, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getHomeSingleAnchorList() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_singleAnchorHomeLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getHomeSingleAnchorList()
|
||||
_singleAnchorHomeLiveData.value = ListResult.success(
|
||||
if ((result?.size ?: 0) > 4) {
|
||||
result?.subList(0, 4)
|
||||
} else {
|
||||
result
|
||||
}, 1
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun requestHomeLiveTopInfo() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_homeLiveTopInfoLiveData.value = null
|
||||
},
|
||||
block = {
|
||||
_homeLiveTopInfoLiveData.value = HomeModel.requestHomeLiveTopInfo()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun requestAnchorInfo() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
@@ -296,54 +63,4 @@ class HomeViewModel : BaseViewModel() {
|
||||
)
|
||||
}
|
||||
|
||||
fun getPartyRecommendRoomList() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_partyRecommendRoomLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getPartyRecommendRoomList(
|
||||
AuthModel.get().currentUid.toString(),
|
||||
CommunityConstant.VERSION_VALID_TYPE
|
||||
)
|
||||
_partyRecommendRoomLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getPartyRecommendRoomMoreList() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_partyRecommendRoomMoreLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getPartyRecommendRoomMoreList()
|
||||
_partyRecommendRoomMoreLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getServiceGiftRecord() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_giftServiceLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getServiceGiftRecord()
|
||||
_giftServiceLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getNewFriendList(gender: Int? = null) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_newFriendLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getNewFriendList(gender)
|
||||
_newFriendLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
56
app/src/main/java/com/nnbc123/app/home/PartyViewModel.kt
Normal file
@@ -0,0 +1,56 @@
|
||||
package com.nnbc123.app.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.bean.response.BeanResult
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.home.bean.BannerInfo
|
||||
import com.nnbc123.core.home.bean.GiftServiceMsgVo
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
import com.nnbc123.core.utils.toast
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/27 10:18
|
||||
* Desc:
|
||||
**/
|
||||
class PartyViewModel : BaseViewModel() {
|
||||
private val _giftServiceLiveData = MutableLiveData<ListResult<GiftServiceMsgVo>>()
|
||||
val giftServiceLiveData: LiveData<ListResult<GiftServiceMsgVo>> = _giftServiceLiveData
|
||||
|
||||
private val _bannerLiveData = MutableLiveData<List<BannerInfo>>()
|
||||
val bannerLiveData: LiveData<List<BannerInfo>> = _bannerLiveData
|
||||
|
||||
private val _resourceJumpLiveData = MutableLiveData<BeanResult<HomeRoomInfo>?>()
|
||||
val resourceJumpLiveData: LiveData<BeanResult<HomeRoomInfo>?> = _resourceJumpLiveData
|
||||
|
||||
fun getResourceJumpInfo(id: Long) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_resourceJumpLiveData.value = BeanResult.failed(it)
|
||||
},
|
||||
block = {
|
||||
_resourceJumpLiveData.value = BeanResult.success(HomeModel.getResourceJumpInfo(id, 0))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun getBannerInfo() {
|
||||
safeLaunch {
|
||||
_bannerLiveData.value = HomeModel.getHomeBanner("1")
|
||||
}
|
||||
}
|
||||
|
||||
fun getServiceGiftRecord() {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_giftServiceLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getServiceGiftRecord()
|
||||
_giftServiceLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
package com.nnbc123.app.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
|
||||
class RoomCommonViewModel : BaseViewModel() {
|
||||
|
||||
private val _commonRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val commonRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _commonRoomLiveData
|
||||
|
||||
fun getCommonRoom(tabId: Int, pageNum: Int, pageSize: Int) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_commonRoomLiveData.value = ListResult.failed(pageNum)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getCommonRoom(tabId, pageNum, pageSize)
|
||||
_commonRoomLiveData.value = ListResult.success(result, pageNum)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
package com.nnbc123.app.home
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.nnbc123.app.base.BaseViewModel
|
||||
import com.nnbc123.core.bean.response.ListResult
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.model.HomeModel
|
||||
|
||||
class RoomSingleViewModel : BaseViewModel() {
|
||||
|
||||
private val _singleAnchorMoreLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
|
||||
val singleAnchorMoreLiveData: LiveData<ListResult<HomeRoomInfo>> = _singleAnchorMoreLiveData
|
||||
|
||||
fun getMoreSingleAnchorList(id: Long?) {
|
||||
safeLaunch(
|
||||
onError = {
|
||||
_singleAnchorMoreLiveData.value = ListResult.failed(1)
|
||||
},
|
||||
block = {
|
||||
val result = HomeModel.getMoreSingleAnchorList(id)
|
||||
_singleAnchorMoreLiveData.value = ListResult.success(result, 1)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@@ -1,38 +0,0 @@
|
||||
package com.nnbc123.app.home.activity
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.base.BaseActivity
|
||||
import com.nnbc123.app.home.fragment.PartyFragment
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
|
||||
class MoreRoomActivity : BaseActivity() {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun start(context: Context) {
|
||||
val starter = Intent(context, MoreRoomActivity::class.java)
|
||||
context.startActivity(starter)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_more_room)
|
||||
initTitleBar("更多房间")
|
||||
supportFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.fcv, PartyFragment.newInstance())
|
||||
.commitAllowingStateLoss()
|
||||
}
|
||||
|
||||
override fun needSteepStateBar() = true
|
||||
|
||||
override fun setStatusBar() {
|
||||
super.setStatusBar()
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
}
|
@@ -1,58 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter;
|
||||
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity;
|
||||
import com.nnbc123.app.common.widget.CircleImageView;
|
||||
import com.nnbc123.app.ui.user.UserInfoActivity;
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo;
|
||||
import com.nnbc123.core.statistic.StatisticManager;
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
|
||||
import com.nnbc123.core.utils.StringExtensionKt;
|
||||
|
||||
public class HomeConcernsAdapter extends BaseQuickAdapter<HomeRoomInfo, BaseViewHolder> {
|
||||
|
||||
public HomeConcernsAdapter() {
|
||||
super(R.layout.item_home_concerns, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convert(@NonNull BaseViewHolder helper, HomeRoomInfo item) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
CircleImageView circleImageView = helper.getView(R.id.civ_room_avatar);
|
||||
ImageLoadUtilsV2.loadImage(circleImageView, item.getAvatar());
|
||||
helper.setText(R.id.tv_room_name, StringExtensionKt.subAndReplaceDot(item.getNick(), 4));
|
||||
|
||||
if (item.getRoomUid() > 0) {
|
||||
helper.setVisible(R.id.view_avatar_bg, true);
|
||||
helper.setVisible(R.id.view_living, true);
|
||||
helper.setVisible(R.id.tv_live, true);
|
||||
if (helper.getView(R.id.view_living).getBackground() instanceof AnimationDrawable) {
|
||||
((AnimationDrawable) helper.getView(R.id.view_living).getBackground()).start();
|
||||
}
|
||||
helper.itemView.setOnClickListener(v -> {
|
||||
AVRoomActivity.startForFromType(mContext,
|
||||
item.getRoomUid(),
|
||||
AVRoomActivity.FROM_TYPE_USER,
|
||||
item.getNick(),
|
||||
String.valueOf(item.getUid()));
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_GZR_ROOM_SUCCESS, "喜欢tab点击关注的人进入房间");
|
||||
});
|
||||
} else {
|
||||
helper.setVisible(R.id.view_avatar_bg, false);
|
||||
helper.setVisible(R.id.tv_live, false);
|
||||
helper.setVisible(R.id.view_living, false);
|
||||
helper.itemView.setOnClickListener(v -> UserInfoActivity.Companion.start(mContext, item.getUid()));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,64 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeGameTab
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/25 10:30
|
||||
* Desc:
|
||||
**/
|
||||
class HomeFriendsGameTabAdapter :
|
||||
BaseQuickAdapter<HomeGameTab, BaseViewHolder>(R.layout.home_friends_item_game) {
|
||||
|
||||
var selectGameId: Long? = null
|
||||
private var selectPosition: Int? = null
|
||||
|
||||
override fun convertPayloads(
|
||||
helper: BaseViewHolder,
|
||||
item: HomeGameTab,
|
||||
payloads: MutableList<Any>
|
||||
) {
|
||||
super.convertPayloads(helper, item, payloads)
|
||||
convertState(helper, item)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeGameTab) {
|
||||
convertState(helper, item)
|
||||
}
|
||||
|
||||
private fun convertState(helper: BaseViewHolder, item: HomeGameTab) {
|
||||
if (helper.absoluteAdapterPosition == selectPosition) {
|
||||
helper.getView<ImageView>(R.id.iv_cover).load(item.onClick, defaultRes = null)
|
||||
} else {
|
||||
helper.getView<ImageView>(R.id.iv_cover).load(item.onUnclick, defaultRes = null)
|
||||
}
|
||||
}
|
||||
|
||||
fun selectItem(position: Int?) {
|
||||
val item = getItem(position ?: -1)
|
||||
if (item == null || position == null) {
|
||||
val oldPosition = selectPosition
|
||||
this.selectGameId = null
|
||||
this.selectPosition = null
|
||||
if (oldPosition != null) {
|
||||
notifyItemChanged(oldPosition, true)
|
||||
}
|
||||
} else if (position == selectPosition) {
|
||||
this.selectGameId = null
|
||||
this.selectPosition = null
|
||||
notifyItemChanged(position, true)
|
||||
} else {
|
||||
val oldPosition = this.selectPosition
|
||||
this.selectGameId = item.gameId
|
||||
this.selectPosition = position
|
||||
if (oldPosition != null) {
|
||||
notifyItemChanged(oldPosition, true)
|
||||
}
|
||||
notifyItemChanged(position, true)
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,251 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isVisible
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.audio.helper.AudioPlayerHelper
|
||||
import com.nnbc123.app.audio.helper.OnPlayListener
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.utils.loadFromAssets
|
||||
import com.nnbc123.app.vip.VipHelper
|
||||
import com.nnbc123.core.Constants
|
||||
import com.nnbc123.core.manager.AudioEngineManager
|
||||
import com.nnbc123.core.manager.AvRoomDataManager
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import com.nnbc123.core.utils.StarUtils
|
||||
import com.nnbc123.library.utils.SingleToastUtil
|
||||
import com.opensource.svgaplayer.SVGADrawable
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
import com.opensource.svgaplayer.SVGAParser
|
||||
import com.opensource.svgaplayer.SVGAVideoEntity
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import java.util.Date
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 18:33
|
||||
* Desc:
|
||||
**/
|
||||
class HomeFriendsUserAdapter :
|
||||
BaseQuickAdapter<UserInfo, BaseViewHolder>(R.layout.home_friends_list_item) {
|
||||
|
||||
private var disposable: Disposable? = null
|
||||
|
||||
private var isMute = false
|
||||
private var isRemoteMute = false
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: UserInfo) {
|
||||
// 昵称
|
||||
val nameView = helper.getView<TextView>(R.id.tv_name)
|
||||
nameView.text = item.nick
|
||||
VipHelper.loadVipNickColor(nameView, item.userVipInfoVO, "#2B2D33")
|
||||
// 头像
|
||||
helper.getView<ImageView>(R.id.iv_avatar).load(item.avatar)
|
||||
// 星座
|
||||
var star: String? = null
|
||||
if (item.birth > 0) {
|
||||
star = StarUtils.getConstellation(Date(item.birth))
|
||||
}
|
||||
helper.setGone(R.id.tv_constellation, !star.isNullOrEmpty())
|
||||
.setText(R.id.tv_constellation, star)
|
||||
// 状态
|
||||
if (item.isInOnline) {
|
||||
val svgaLiving = helper.getView<SVGAImageView>(R.id.svga_state_live)
|
||||
if (item.inRoomUid > 0L) {
|
||||
svgaLiving.loadFromAssets("svga/home_living_white.svga")
|
||||
svgaLiving.startAnimation()
|
||||
svgaLiving.isVisible = true
|
||||
helper.getView<View>(R.id.iv_state_leisure).isVisible = false
|
||||
helper.setText(R.id.tv_state, "直播中")
|
||||
} else {
|
||||
svgaLiving.stopAnimation()
|
||||
svgaLiving.isVisible = false
|
||||
helper.getView<View>(R.id.iv_state_leisure).isVisible = true
|
||||
helper.setText(R.id.tv_state, "空闲中")
|
||||
}
|
||||
helper.setGone(R.id.layout_state, true)
|
||||
} else {
|
||||
helper.setGone(R.id.layout_state, false)
|
||||
}
|
||||
// 房间
|
||||
val roomInfoView = helper.getView<View>(R.id.layout_room_info)
|
||||
if (item.roomTitle.isNullOrEmpty()) {
|
||||
roomInfoView.isVisible = false
|
||||
} else {
|
||||
roomInfoView.isVisible = true
|
||||
roomInfoView.isSelected = true
|
||||
helper.setText(R.id.tv_room_title, item.roomTitle)
|
||||
roomInfoView.singleClick {
|
||||
if (!item.isLock && item.inRoomUid > 0) {
|
||||
AVRoomActivity.start(it.context, item.inRoomUid)
|
||||
}
|
||||
}
|
||||
}
|
||||
// 声音
|
||||
val audioUrl = item.voiceCard?.getAudioUrl()
|
||||
val svagAudio = helper.getView<SVGAImageView>(R.id.svga_audio)
|
||||
if (audioUrl.isNullOrEmpty()) {
|
||||
svagAudio.stopAnimation()
|
||||
helper.setGone(R.id.layout_audio, false)
|
||||
} else {
|
||||
helper.getView<TextView>(R.id.tv_audio_duration).text =
|
||||
"${item.voiceCard?.getAudioDuration() ?: 0}”"
|
||||
helper.getView<View>(R.id.layout_audio)
|
||||
.setOnClickListener { toggleAudio(helper, item) }
|
||||
svagAudio.setImageResource(R.drawable.home_ic_audio_playing)
|
||||
helper.setGone(R.id.layout_audio, true)
|
||||
}
|
||||
|
||||
// 游戏
|
||||
val groupGame = helper.getView<View>(R.id.group_game)
|
||||
item.userGamePartnerVo?.let {
|
||||
val name =
|
||||
if (!it.firstGameName.isNullOrEmpty() && !it.secondGameName.isNullOrEmpty()) {
|
||||
"${it.firstGameName}|${it.secondGameName}"
|
||||
} else if (!it.firstGameName.isNullOrEmpty()) {
|
||||
it.firstGameName
|
||||
} else if (!it.secondGameName.isNullOrEmpty()) {
|
||||
it.secondGameName
|
||||
} else {
|
||||
null
|
||||
}
|
||||
helper.setText(R.id.tv_game_name, name)
|
||||
helper.getView<ImageView>(R.id.iv_game_icon).load(it.firstLogo)
|
||||
groupGame.isVisible = true
|
||||
} ?: kotlin.run {
|
||||
groupGame.isVisible = false
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleAudio(holder: BaseViewHolder, item: UserInfo) {
|
||||
if (item.isVoicePlaying) {
|
||||
stopAudio()
|
||||
} else {
|
||||
playAudio(holder, item)
|
||||
}
|
||||
}
|
||||
|
||||
private fun stopAudio() {
|
||||
AudioPlayerHelper.get().endPlay()
|
||||
}
|
||||
|
||||
private fun resetAudioUI(holder: BaseViewHolder, item: UserInfo) {
|
||||
item.isVoicePlaying = false
|
||||
|
||||
disposable?.dispose()
|
||||
holder.setImageResource(R.id.iv_audio_btn, R.drawable.home_ic_audio_play)
|
||||
holder.setText(
|
||||
R.id.tv_audio_duration,
|
||||
"${item.voiceCard?.getAudioDuration() ?: 0}”"
|
||||
)
|
||||
|
||||
val svgaImageView = holder.getView<SVGAImageView>(R.id.svga_audio)
|
||||
svgaImageView.stopAnimation()
|
||||
svgaImageView.setImageResource(R.drawable.home_ic_audio_playing)
|
||||
|
||||
AvRoomDataManager.get().mCurrentRoomInfo?.run {
|
||||
AudioEngineManager.get().isRemoteMute = isRemoteMute //非靜音
|
||||
AudioEngineManager.get().isMute = isMute //能説話
|
||||
AudioEngineManager.get().setRole(
|
||||
if (isRemoteMute) Constants.CLIENT_ROLE_AUDIENCE else Constants.CLIENT_ROLE_BROADCASTER
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun playAudio(holder: BaseViewHolder, item: UserInfo) {
|
||||
AudioPlayerHelper.get().endPlay()
|
||||
|
||||
item.isVoicePlaying = true
|
||||
|
||||
|
||||
holder.setImageResource(R.id.iv_audio_btn, R.drawable.home_ic_audio_pause)
|
||||
val svgaImageView = holder.getView<SVGAImageView>(R.id.svga_audio)
|
||||
SVGAParser.shareParser()
|
||||
.decodeFromAssets("svga/home_voice_playing.svga", object : SVGAParser.ParseCompletion {
|
||||
override fun onComplete(videoItem: SVGAVideoEntity) {
|
||||
if (item.isVoicePlaying) {
|
||||
val drawable = SVGADrawable(videoItem)
|
||||
svgaImageView.setImageDrawable(drawable)
|
||||
svgaImageView.startAnimation()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
}
|
||||
})
|
||||
|
||||
val duration = item.voiceCard?.getAudioDuration() ?: 0
|
||||
disposable = Observable.interval(1L, TimeUnit.SECONDS)
|
||||
.subscribeOn(Schedulers.computation())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.map { it + 1 }
|
||||
.takeUntil { it == duration }
|
||||
.subscribe {
|
||||
holder.setText(
|
||||
R.id.tv_audio_duration,
|
||||
"${(duration - it)}”"
|
||||
)
|
||||
}
|
||||
|
||||
AvRoomDataManager.get().mCurrentRoomInfo?.run {
|
||||
isRemoteMute = AudioEngineManager.get().isRemoteMute
|
||||
isMute = AudioEngineManager.get().isMute
|
||||
AudioEngineManager.get().isRemoteMute = true //設置靜音
|
||||
AudioEngineManager.get().isMute = true //不能説話
|
||||
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE)
|
||||
}
|
||||
|
||||
AudioPlayerHelper.get()
|
||||
.playInThread(item.voiceCard?.getAudioUrl(), object : OnPlayListener {
|
||||
override fun onError(error: String) {
|
||||
SingleToastUtil.showToast("播放出错,请重试")
|
||||
resetAudioUI(holder, item)
|
||||
}
|
||||
|
||||
override fun onPrepared() {}
|
||||
override fun onPlaying(currDuration: Long) {}
|
||||
override fun onCompletion() {
|
||||
resetAudioUI(holder, item)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
|
||||
super.onViewAttachedToWindow(holder)
|
||||
if (holder.itemViewType == 0) {
|
||||
val svgaLiving = holder.getView<SVGAImageView>(R.id.svga_state_live)
|
||||
if (svgaLiving.isVisible) {
|
||||
svgaLiving?.loadFromAssets("svga/home_living_white.svga")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewDetachedFromWindow(holder: BaseViewHolder) {
|
||||
super.onViewDetachedFromWindow(holder)
|
||||
if (holder.itemViewType == 0) {
|
||||
val position = holder.absoluteAdapterPosition
|
||||
if (position < 0 || position >= data.size) {
|
||||
return
|
||||
}
|
||||
val item = data[position]
|
||||
if (item.isVoicePlaying) {
|
||||
stopAudio()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setNewData(data: MutableList<UserInfo>?) {
|
||||
stopAudio()
|
||||
super.setNewData(data)
|
||||
}
|
||||
}
|
@@ -1,41 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.room.bean.HomeLiveTopInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
|
||||
|
||||
class HomeLiveTopAdapter :
|
||||
BaseQuickAdapter<HomeLiveTopInfo.SingleRoom, BaseViewHolder>(R.layout.item_home_live_top) {
|
||||
|
||||
private var onceLookStatus: Boolean = false
|
||||
|
||||
fun setOnceLookStatus(onceLookStatus: Boolean) {
|
||||
this.onceLookStatus = onceLookStatus
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeLiveTopInfo.SingleRoom) {
|
||||
helper.apply {
|
||||
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
|
||||
setText(R.id.tv_room_title, item.title)
|
||||
setGone(R.id.iv_room_tag, item.isRecommend && onceLookStatus)
|
||||
}
|
||||
|
||||
helper.itemView.setOnClickListener {
|
||||
AVRoomActivity.start(mContext, item.uid)
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_RECENT_CARD_CLICK,
|
||||
"最近在看卡片点击",
|
||||
mapOf("room_id" to item.erbanNo)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,128 @@
|
||||
package com.nnbc123.app.home.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.Gravity;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.UIUtil;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.DrawableIndicator;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class HomeMagicIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
|
||||
private final List<? extends CharSequence> mTitleList;
|
||||
|
||||
private int textSize = 20;
|
||||
private float minScale = 0.7f;
|
||||
protected int mNormalColor = Color.BLACK;
|
||||
protected int mSelectedColor = Color.BLACK;
|
||||
private boolean showIndicator = true;
|
||||
private int resId = R.drawable.home_bg_indicator;
|
||||
|
||||
public HomeMagicIndicatorAdapter(Context context, List<? extends CharSequence> charSequences ) {
|
||||
this.mTitleList = charSequences;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mTitleList == null ? 0 : mTitleList.size();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IPagerTitleView getTitleView(Context context, final int i) {
|
||||
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
|
||||
scaleTransitionPagerTitleView.setNormalColor(mNormalColor);
|
||||
scaleTransitionPagerTitleView.setSelectedColor(mSelectedColor);
|
||||
scaleTransitionPagerTitleView.setMinScale(minScale);
|
||||
scaleTransitionPagerTitleView.setTextSize(textSize);
|
||||
scaleTransitionPagerTitleView.setAutoResetPivot(true);
|
||||
int padding = UIUtil.dip2px(context, 6);
|
||||
scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0);
|
||||
scaleTransitionPagerTitleView.setText(mTitleList.get(i));
|
||||
scaleTransitionPagerTitleView.setOnClickListener(view -> {
|
||||
if (mOnItemSelectListener != null) {
|
||||
mOnItemSelectListener.onItemSelect(i, scaleTransitionPagerTitleView);
|
||||
}
|
||||
|
||||
});
|
||||
return scaleTransitionPagerTitleView;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IPagerIndicator getIndicator(Context context) {
|
||||
if (!showIndicator) return null;
|
||||
DrawableIndicator indicator = new DrawableIndicator(context);
|
||||
indicator.setMode(DrawableIndicator.MODE_MATCH_EDGE);
|
||||
indicator.setIndicatorDrawable(context.getResources().getDrawable(resId));
|
||||
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, UIUtil.dip2px(context, 28));
|
||||
lp.gravity = Gravity.CENTER_VERTICAL;
|
||||
indicator.setLayoutParams(lp);
|
||||
return indicator;
|
||||
}
|
||||
|
||||
public void setResId(int resId) {
|
||||
this.resId = resId;
|
||||
}
|
||||
|
||||
public int getTextSize() {
|
||||
return textSize;
|
||||
}
|
||||
|
||||
public void setTextSize(int textSize) {
|
||||
this.textSize = textSize;
|
||||
}
|
||||
|
||||
public float getMinScale() {
|
||||
return minScale;
|
||||
}
|
||||
|
||||
public void setMinScale(float minScale) {
|
||||
this.minScale = minScale;
|
||||
}
|
||||
|
||||
public int getSelectedColor() {
|
||||
return mSelectedColor;
|
||||
}
|
||||
|
||||
public void setSelectedColor(int selectedColor) {
|
||||
mSelectedColor = selectedColor;
|
||||
}
|
||||
|
||||
public int getNormalColor() {
|
||||
return mNormalColor;
|
||||
}
|
||||
|
||||
public void setNormalColor(int normalColor) {
|
||||
mNormalColor = normalColor;
|
||||
}
|
||||
|
||||
public boolean isShowIndicator() {
|
||||
return showIndicator;
|
||||
}
|
||||
|
||||
public void setShowIndicator(boolean showIndicator) {
|
||||
this.showIndicator = showIndicator;
|
||||
}
|
||||
|
||||
private OnItemSelectListener mOnItemSelectListener;
|
||||
|
||||
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
|
||||
mOnItemSelectListener = onItemSelectListener;
|
||||
}
|
||||
|
||||
public interface OnItemSelectListener {
|
||||
void onItemSelect(int position, TextView view);
|
||||
}
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isVisible
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.utils.loadAvatar
|
||||
import com.nnbc123.core.home.bean.GiftServiceMsgVo
|
||||
import com.nnbc123.core.utils.subAndReplaceDot2
|
||||
import com.zhpan.bannerview.BaseBannerAdapter
|
||||
import com.zhpan.bannerview.BaseViewHolder
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 19:02
|
||||
* Desc:
|
||||
**/
|
||||
class HomePartyMessageAdapter : BaseBannerAdapter<GiftServiceMsgVo>() {
|
||||
|
||||
var clickListener: ((GiftServiceMsgVo) -> Unit)? = null
|
||||
override fun bindData(
|
||||
holder: BaseViewHolder<GiftServiceMsgVo>,
|
||||
item: GiftServiceMsgVo,
|
||||
position: Int,
|
||||
pageSize: Int
|
||||
) {
|
||||
holder.setText(R.id.tv_nick_send, item.senderNick.subAndReplaceDot2(4))
|
||||
holder.setText(R.id.tv_nick_receiver, item.receiverNick.subAndReplaceDot2(4))
|
||||
holder.setText(R.id.tv_gift_name, item.giftName.subAndReplaceDot2(4))
|
||||
holder.setText(R.id.tv_gift_num, "x${item.giftNum}")
|
||||
holder.findViewById<ImageView>(R.id.iv_avatar_send).loadAvatar(item.senderAvatar)
|
||||
holder.findViewById<ImageView>(R.id.iv_avatar_receiver).loadAvatar(item.receiverAvatar)
|
||||
holder.findViewById<ImageView>(R.id.iv_gift).load(item.giftPicUrl)
|
||||
val arrowView = holder.findViewById<View>(R.id.iv_arrow)
|
||||
arrowView.isVisible = !item.isLock
|
||||
arrowView.setOnClickListener {
|
||||
clickListener?.invoke(item)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getLayoutId(viewType: Int): Int {
|
||||
return R.layout.home_party_item_message
|
||||
}
|
||||
|
||||
fun getItem(position: Int): GiftServiceMsgVo? {
|
||||
return mList.getOrNull(position)
|
||||
}
|
||||
}
|
@@ -1,7 +1,5 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.text.TextUtils
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
@@ -10,34 +8,38 @@ import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
|
||||
class PartyHotAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_party_hot) {
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 18:33
|
||||
* Desc:
|
||||
**/
|
||||
class HomePartyRoomAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_party_room_item) {
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.apply {
|
||||
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
|
||||
getView<ImageView>(R.id.iv_cover).load(item.avatar)
|
||||
setText(R.id.tv_online_number, "${item.onlineNum}")
|
||||
setText(R.id.tv_room_title, item.title)
|
||||
setText(R.id.tv_name, item.title)
|
||||
setGone(R.id.iv_tag, !item.tagPict.isNullOrEmpty())
|
||||
getView<ImageView>(R.id.iv_tag).load(item.tagPict)
|
||||
setGone(R.id.iv_pk, item.isCrossPking)
|
||||
val borderView = getView<ImageView>(R.id.iv_cover_border)
|
||||
if (item.backgroundPic.isNullOrEmpty()) {
|
||||
borderView.setImageDrawable(null)
|
||||
} else {
|
||||
borderView.load(item.backgroundPic, defaultRes = null)
|
||||
}
|
||||
}
|
||||
helper.setGone(R.id.tv_in_pk, item.isCrossPking)
|
||||
|
||||
helper.setGone(R.id.tv_tag_content, !TextUtils.isEmpty(item.iconContent))
|
||||
.setText(R.id.tv_tag_content, item.iconContent)
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4),
|
||||
helper.getView(R.id.iv_avatar_5)
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,88 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.LinearGradient
|
||||
import android.graphics.Shader
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.makeramen.roundedimageview.RoundedImageView
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.home.helper.BannerHelper
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.utils.TextUtils
|
||||
import com.nnbc123.core.utils.ifNullOrEmpty
|
||||
|
||||
/**
|
||||
* create by lvzebiao @2019/11/13
|
||||
*/
|
||||
class HomePlayAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
|
||||
|
||||
init {
|
||||
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_home_play)
|
||||
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
|
||||
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_home_play_broadcast)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
if (item.itemType == HomeRoomInfo.TYPE_ROOM ||
|
||||
item.itemType == HomeRoomInfo.TYPE_BROADCAST
|
||||
) {
|
||||
helper.setText(R.id.tv_room_title, item.title)
|
||||
helper.setGone(R.id.iv_room_tag, !TextUtils.isEmptyText(item.tagPict))
|
||||
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
|
||||
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
|
||||
val tvMgName = helper.getView<TextView>(R.id.tv_mg_name)
|
||||
tvMgName.text = item.mgName.ifNullOrEmpty { "扩列交友" }
|
||||
if (item.mgName.isNullOrEmpty()) {
|
||||
setGradient(tvMgName, "#FF8C5FFF", "#FFFF969B")
|
||||
} else {
|
||||
setGradient(tvMgName, "#FF61C4FE", "#FFA979FF")
|
||||
}
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
val ivRoomImage = helper.getView<RoundedImageView>(R.id.iv_room_image)
|
||||
ImageLoadUtilsV2.loadAvatar(ivRoomImage, item.avatar)
|
||||
ivRoomImage.borderColor =
|
||||
Color.parseColor(if (item.gender == 1) "#CCD7FF" else "#FFD0D0")
|
||||
|
||||
if (item.itemType == HomeRoomInfo.TYPE_BROADCAST) {
|
||||
helper.setText(R.id.tv_broad_msg, item.broadMsg)
|
||||
} else {
|
||||
helper.setBackgroundRes(
|
||||
R.id.view_bg,
|
||||
if (item.gender == 1) R.drawable.bg_home_play_item_man else R.drawable.bg_home_play_item_woman
|
||||
)
|
||||
}
|
||||
} else {
|
||||
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun setGradient(textView: TextView, startColor: String, endColor: String) {
|
||||
val endX = textView.paint.textSize * textView.text.length
|
||||
val linearGradient = LinearGradient(
|
||||
0f, 0f, endX, 0f,
|
||||
Color.parseColor(startColor),
|
||||
Color.parseColor(endColor),
|
||||
Shader.TileMode.CLAMP
|
||||
)
|
||||
textView.paint.shader = linearGradient
|
||||
textView.invalidate()
|
||||
}
|
||||
}
|
@@ -1,91 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.netease.nim.uikit.support.glide.GlideApp;
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity;
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtils;
|
||||
import com.nnbc123.core.home.bean.HomeTabMapInfo;
|
||||
import com.nnbc123.core.statistic.StatisticManager;
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol;
|
||||
|
||||
/**
|
||||
* <p> 首页热门adapter </p>
|
||||
*
|
||||
* @author Administrator
|
||||
* @date 2017/11/16
|
||||
*/
|
||||
public class HomeRoomFragmentAdapter extends BaseMultiItemQuickAdapter<HomeTabMapInfo, BaseViewHolder> {
|
||||
|
||||
private Context mContext;
|
||||
|
||||
/**
|
||||
* 校验跳转房间的频率
|
||||
*/
|
||||
public HomeRoomFragmentAdapter(Context context) {
|
||||
super(null);
|
||||
addItemType(HomeTabMapInfo.TYPE_NORMAL, R.layout.item_home_tab_map);
|
||||
addItemType(HomeTabMapInfo.TYPE_EMPTY, R.layout.item_erban_grid_empty);
|
||||
this.mContext = context;
|
||||
}
|
||||
|
||||
protected void convert(@NonNull BaseViewHolder helper, HomeTabMapInfo item) {
|
||||
if (item == null) {
|
||||
return;
|
||||
}
|
||||
switch (helper.getItemViewType()) {
|
||||
|
||||
case HomeTabMapInfo.TYPE_NORMAL:
|
||||
helper.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_TJ_ROOM_SUCCESS, "首页_进入推荐房间");
|
||||
AVRoomActivity.startForFromType(mContext, item.getRoomUid(), AVRoomActivity.FROM_TYPE_RECOMMEND);
|
||||
}
|
||||
});
|
||||
helper.setText(R.id.tv_online_number, item.getOnlineNum() + "")
|
||||
.setText(R.id.tv_title, item.getTitle());
|
||||
|
||||
|
||||
//注意这里有三个标签,展示优先级 PK中>自定义>房间标签
|
||||
helper.setGone(R.id.tv_tag_in_pk, item.isCrossPking());
|
||||
|
||||
helper.setGone(R.id.tv_tag_content, !TextUtils.isEmpty(item.getIconContent()) && !item.isCrossPking())
|
||||
.setText(R.id.tv_tag_content, item.getIconContent());
|
||||
|
||||
ImageView mIvTabLabel = helper.getView(R.id.iv_tab_label);
|
||||
if (!TextUtils.isEmpty(item.getTagPict()) && !item.isCrossPking() && TextUtils.isEmpty(item.getIconContent())) {
|
||||
mIvTabLabel.setVisibility(View.VISIBLE);
|
||||
ImageLoadUtils.loadAvatarBig(item.getTagPict(), mIvTabLabel);
|
||||
} else {
|
||||
mIvTabLabel.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
ImageView ivCover = helper.getView(R.id.iv_cover);
|
||||
if (!TextUtils.isEmpty(item.getAvatar())) {
|
||||
ImageLoadUtils.loadAvatarBig(item.getAvatar(), ivCover, R.drawable.default_cover);
|
||||
} else {
|
||||
GlideApp.with(mContext)
|
||||
.load(R.drawable.default_cover)
|
||||
.placeholder(R.drawable.default_cover)
|
||||
.into(ivCover);
|
||||
}
|
||||
break;
|
||||
|
||||
case HomeTabMapInfo.TYPE_EMPTY:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -1,51 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isVisible
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.utils.loadFromAssets
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.TextUtils
|
||||
|
||||
/**
|
||||
* create by lvzebiao @2019/11/13
|
||||
* 人气主播更多
|
||||
*/
|
||||
class MoreSingleAnchorAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_home_single_anchor_more) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
|
||||
val ivPking = helper.getView<SVGAImageView>(R.id.iv_pking)
|
||||
val ivTag = helper.getView<ImageView>(R.id.iv_tag)
|
||||
ivPking.isVisible = item.isCrossPking
|
||||
ivTag.isVisible = !TextUtils.isEmptyText(item.tagPict) && !item.isCrossPking
|
||||
if (item.isCrossPking) {
|
||||
ivPking.loadFromAssets("svga/single_room_pking.svga")
|
||||
} else {
|
||||
ivTag.load(item.tagPict)
|
||||
}
|
||||
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
|
||||
.setText(R.id.tv_nickname, item.nick)
|
||||
.setText(R.id.tv_room_name, item.title)
|
||||
.setImageResource(
|
||||
R.id.iv_gender,
|
||||
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
|
||||
)
|
||||
helper.getView<ImageView>(R.id.iv_room_avatar)
|
||||
.load(item.avatar, 12f, R.drawable.default_cover)
|
||||
|
||||
helper.itemView.setOnClickListener {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_ZB_TAB_ROOM_SUCCESS, "直播tab进入房间成功")
|
||||
AVRoomActivity.start(mContext, item.uid)
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,55 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.text.TextUtils
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
|
||||
|
||||
class RoomCommonAdapter :
|
||||
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_common) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.apply {
|
||||
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
|
||||
setText(R.id.tv_online_number, "${item.onlineNum}")
|
||||
setText(R.id.tv_room_title, item.title)
|
||||
}
|
||||
helper.setGone(R.id.tv_in_pk, item.isCrossPking)
|
||||
helper.setGone(R.id.iv_room_tag, !TextUtils.isEmpty(item.tagPict))
|
||||
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
|
||||
|
||||
helper.setGone(R.id.tv_tag_content, !TextUtils.isEmpty(item.iconContent))
|
||||
.setText(R.id.tv_tag_content, item.iconContent)
|
||||
|
||||
helper.getView<View>(R.id.view_bg).setBackgroundResource(
|
||||
when (helper.layoutPosition % 3) {
|
||||
0 -> R.drawable.bg_home_common_item0
|
||||
1 -> R.drawable.bg_home_common_item1
|
||||
else -> R.drawable.bg_home_common_item2
|
||||
}
|
||||
)
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4),
|
||||
helper.getView(R.id.iv_avatar_5)
|
||||
)
|
||||
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,64 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.graphics.Color
|
||||
import android.graphics.LinearGradient
|
||||
import android.graphics.Shader
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
|
||||
|
||||
class RoomGameAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_game) {
|
||||
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.apply {
|
||||
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
|
||||
setText(R.id.tv_room_title, item.title)
|
||||
itemView.setOnClickListener {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_MINI_GAME_ROOM_SUCCESS, "小游戏tab进入房间成功")
|
||||
AVRoomActivity.start(mContext, item.uid)
|
||||
}
|
||||
val tvRoomGame = helper.getView<TextView>(R.id.tv_room_game)
|
||||
tvRoomGame.text = item.mgName
|
||||
helper.setText(R.id.tv_game_status, if (item.state == 1) "游戏中" else "等人中")
|
||||
setGradient(tvRoomGame)
|
||||
}
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun setGradient(textView: TextView) {
|
||||
val endX = textView.paint.textSize * textView.text.length
|
||||
val linearGradient = LinearGradient(
|
||||
0f, 0f, endX, 0f,
|
||||
Color.parseColor("#FF61C4FE"),
|
||||
Color.parseColor("#FFA979FF"),
|
||||
Shader.TileMode.CLAMP
|
||||
)
|
||||
textView.paint.shader = linearGradient
|
||||
textView.invalidate()
|
||||
}
|
||||
|
||||
}
|
@@ -1,62 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.home.helper.BannerHelper
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.TextUtils
|
||||
|
||||
|
||||
class RoomHotAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
|
||||
|
||||
init {
|
||||
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_room_hot)
|
||||
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_room_hot)
|
||||
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
if (item.itemType != HomeRoomInfo.TYPE_BANNER) {
|
||||
|
||||
helper.itemView.setOnClickListener {
|
||||
AVRoomActivity.start(mContext, item.uid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_RM_ROOM_SUCCESS, "热门进入房间")
|
||||
}
|
||||
|
||||
helper.getView<ImageView>(R.id.iv_room_image).load(item.avatar,round = 8f)
|
||||
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
|
||||
helper.setText(R.id.tv_room_title, item.title)
|
||||
helper.setText(R.id.tv_id, "ID:${item.erbanNo}")
|
||||
|
||||
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
|
||||
|
||||
helper.setVisible(R.id.iv_room_tag, !TextUtils.isEmptyText(item.tagPict))
|
||||
helper.getView<ImageView>(R.id.iv_room_tag).load(item.tagPict)
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
} else {
|
||||
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -1,59 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.widget.ImageView
|
||||
import androidx.core.view.isGone
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.TextUtils
|
||||
|
||||
|
||||
class RoomLikeAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_like) {
|
||||
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
|
||||
helper.apply {
|
||||
getView<ImageView>(R.id.iv_room_image).load(item.roomAvatar)
|
||||
setText(R.id.tv_online_number, "${item.roomOnlineNum}")
|
||||
setText(R.id.tv_room_title, item.roomName)
|
||||
setText(R.id.tv_id, "ID:${item.erbanNo}")
|
||||
}
|
||||
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
|
||||
helper.setVisible(R.id.iv_room_tag, !TextUtils.isEmptyText(item.tagPict))
|
||||
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
|
||||
|
||||
val avatars: Array<ImageView> = arrayOf(
|
||||
helper.getView(R.id.iv_avatar_0),
|
||||
helper.getView(R.id.iv_avatar_1),
|
||||
helper.getView(R.id.iv_avatar_2),
|
||||
helper.getView(R.id.iv_avatar_3),
|
||||
helper.getView(R.id.iv_avatar_4)
|
||||
)
|
||||
for (i in avatars.indices) {
|
||||
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
|
||||
avatars[i].isGone = avatarUrl.isNullOrBlank()
|
||||
avatars[i].load(avatarUrl)
|
||||
}
|
||||
helper.itemView.setOnClickListener {
|
||||
AVRoomActivity.start(mContext, item.roomUid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_SCFJ_ROOM_SUCCESS, "成功进入收藏的房间")
|
||||
}
|
||||
if (item.isValid) {
|
||||
helper.setGone(R.id.tv_online_number, true)
|
||||
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item)
|
||||
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar)
|
||||
} else {
|
||||
helper.setGone(R.id.tv_online_number, false)
|
||||
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item_disable)
|
||||
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar_disable)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,111 +0,0 @@
|
||||
package com.nnbc123.app.home.adapter
|
||||
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.core.view.isVisible
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.ui.im.avtivity.NimP2PMessageActivity
|
||||
import com.nnbc123.app.ui.user.UserInfoActivity
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.nnbc123.app.ui.utils.loadAvatar
|
||||
import com.nnbc123.app.ui.utils.loadFromAssets
|
||||
import com.nnbc123.app.vip.VipHelper
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import com.nnbc123.core.utils.CurrentTimeUtils
|
||||
import com.nnbc123.core.utils.StarUtils
|
||||
import com.nnbc123.core.utils.TextUtils
|
||||
import com.nnbc123.core.utils.ifNullOrEmpty
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
import java.util.*
|
||||
|
||||
class RoomNewFriendsAdapter :
|
||||
BaseQuickAdapter<UserInfo, BaseViewHolder>(R.layout.item_room_new_friends) {
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: UserInfo) {
|
||||
val userGamePartnerInfo = item.userGamePartnerVo
|
||||
if (userGamePartnerInfo != null) {
|
||||
helper.getView<AppCompatImageView>(R.id.iv_game).visibility = View.VISIBLE
|
||||
helper.getView<LinearLayout>(R.id.ll_game_type).visibility = View.VISIBLE
|
||||
if (TextUtils.isEmptyText(userGamePartnerInfo.secondGameName)) {
|
||||
helper.setText(R.id.tv_game_type, userGamePartnerInfo.firstGameName)
|
||||
} else {
|
||||
helper.setText(
|
||||
R.id.tv_game_type,
|
||||
"${userGamePartnerInfo.firstGameName}|${userGamePartnerInfo.secondGameName}"
|
||||
)
|
||||
}
|
||||
ImageLoadUtilsV2.loadImage(
|
||||
helper.getView(R.id.iv_game_icon),
|
||||
userGamePartnerInfo.firstLogo
|
||||
)
|
||||
} else {
|
||||
helper.getView<AppCompatImageView>(R.id.iv_game).visibility = View.GONE
|
||||
helper.getView<LinearLayout>(R.id.ll_game_type).visibility = View.GONE
|
||||
}
|
||||
helper.getView<ImageView>(R.id.iv_avatar).loadAvatar(item.avatar)
|
||||
helper.setText(R.id.tv_desc, item.userDesc.ifNullOrEmpty { "我是个默认签名" })
|
||||
.setText(
|
||||
R.id.tv_age,
|
||||
((CurrentTimeUtils.getCurrentTime() - item.birth) / 1000 / 60 / 60 / 24 / 365).toString()
|
||||
)
|
||||
//设置星座
|
||||
val star = StarUtils.getConstellation(Date(item.birth))
|
||||
helper.setGone(R.id.tv_constellation, star != null)
|
||||
.setText(R.id.tv_constellation, star)
|
||||
helper.setBackgroundRes(
|
||||
R.id.ll_gender_age,
|
||||
if (item.gender == 1) R.drawable.shape_65d3f7_corner else R.drawable.shape_ff9cce_corner
|
||||
)
|
||||
helper.setImageResource(
|
||||
R.id.iv_gender,
|
||||
if (item.gender == 1) R.drawable.ic_home_man else R.drawable.ic_home_woman
|
||||
)
|
||||
val tvOnlineText = helper.getView<TextView>(R.id.tv_online_text)
|
||||
val ivTalk = helper.getView<AppCompatImageView>(R.id.iv_talk)
|
||||
val svgaLiving = helper.getView<SVGAImageView>(R.id.svga_living)
|
||||
val llOnline = helper.getView<View>(R.id.ll_online)
|
||||
val viewOnline = helper.getView<View>(R.id.view_online)
|
||||
|
||||
if (item.inRoomUid != 0L) {
|
||||
ivTalk.isVisible = false
|
||||
svgaLiving.isVisible = true
|
||||
viewOnline.isVisible = true
|
||||
svgaLiving.loadFromAssets("svga/home_living.svga")
|
||||
tvOnlineText.text = "直播中"
|
||||
llOnline.setOnClickListener {
|
||||
AVRoomActivity.start(mContext, item.inRoomUid)
|
||||
}
|
||||
} else {
|
||||
ivTalk.isVisible = true
|
||||
svgaLiving.isVisible = false
|
||||
viewOnline.isVisible = false
|
||||
tvOnlineText.text = "和TA聊"
|
||||
llOnline.setOnClickListener {
|
||||
NimP2PMessageActivity.start(mContext, item.uid.toString())
|
||||
}
|
||||
}
|
||||
|
||||
helper.getView<View>(R.id.iv_avatar).setOnClickListener {
|
||||
UserInfoActivity.Companion.start(mContext, item.uid)
|
||||
}
|
||||
|
||||
val tvNickname = helper.getView<TextView>(R.id.tv_nickname)
|
||||
tvNickname.text = item.nick
|
||||
VipHelper.loadVipNickColor(tvNickname, item.userVipInfoVO, "#282828")
|
||||
VipHelper.loadVipIcon(helper.getView(R.id.iv_vip_icon), item.userVipInfoVO)
|
||||
}
|
||||
|
||||
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
|
||||
super.onViewAttachedToWindow(holder)
|
||||
val svgaLiving = holder.getView<SVGAImageView>(R.id.svga_living)
|
||||
svgaLiving?.loadFromAssets("svga/home_living.svga")
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -1,65 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.view.View
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import com.nnbc123.core.DemoCache
|
||||
import com.nnbc123.core.UriProvider
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.base.BaseFragment
|
||||
import com.nnbc123.app.databinding.FragmentHomeBinding
|
||||
import com.nnbc123.app.home.helper.OpenRoomHelper
|
||||
import com.nnbc123.app.ui.search.SearchActivity
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
|
||||
/**
|
||||
* 音萌首页
|
||||
*/
|
||||
class HomeFragment : BaseFragment(), View.OnClickListener {
|
||||
private lateinit var mBinding: FragmentHomeBinding
|
||||
override fun onClick(v: View) {
|
||||
when (v.id) {
|
||||
R.id.tv_search -> {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_SEARCH, "进入搜索页")
|
||||
SearchActivity.start(activity)
|
||||
//为啥触发条件这么恶心 我也不知道啊
|
||||
if (DemoCache.readAnchorCardView() == 0) {
|
||||
DemoCache.saveAnchorCardView(1)
|
||||
}
|
||||
}
|
||||
R.id.iv_ranking -> {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOME_RANK_CLICK, "首页_榜单")
|
||||
CommonWebViewActivity.start(mContext, UriProvider.getRanking())
|
||||
}
|
||||
R.id.iv_my_room -> {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOME_MY_ROOM_CLICK, "首页_我的房间")
|
||||
OpenRoomHelper.openRoom(baseActivity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getRootLayoutId(): Int {
|
||||
return R.layout.fragment_home
|
||||
}
|
||||
|
||||
override fun onFindViews() {
|
||||
mBinding = DataBindingUtil.bind(mView)!!
|
||||
}
|
||||
|
||||
override fun onSetListener() {
|
||||
mBinding.click = this
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun initiate() {
|
||||
requireActivity().supportFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container_view, RecommendFragment.newInstance())
|
||||
.commitAllowingStateLoss()
|
||||
}
|
||||
|
||||
}
|
@@ -1,104 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import com.nnbc123.app.base.BaseFragment
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.nnbc123.app.home.adapter.HomePlayAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import android.annotation.SuppressLint
|
||||
import com.nnbc123.core.home.model.GameHomeModel
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import com.nnbc123.core.user.event.LoadLoginUserInfoEvent
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.app.home.fragment.HomePlayFragment
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.nnbc123.app.R
|
||||
|
||||
/**
|
||||
* create by lvzebiao @2020/1/7
|
||||
*/
|
||||
class HomePlayFragment : BaseFragment() {
|
||||
private var recyclerView: RecyclerView? = null
|
||||
private lateinit var playAdapter: HomePlayAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
override fun getRootLayoutId(): Int {
|
||||
return R.layout.fragment_home_play
|
||||
}
|
||||
|
||||
override fun initiate() {
|
||||
recyclerView = mView.findViewById(R.id.recycler_view)
|
||||
EventBus.getDefault().register(this)
|
||||
playAdapter = HomePlayAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(playAdapter)
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setRecyclerView(recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无数据"))
|
||||
.build()
|
||||
playAdapter.onItemClickListener =
|
||||
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>, _: View, position: Int ->
|
||||
val homePlayInfo = playAdapter.getItem(position)
|
||||
if (homePlayInfo != null) {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_KH_ROOM_SUCCESS, "点击组队开黑进入房间")
|
||||
AVRoomActivity.startForFromType(
|
||||
mContext,
|
||||
homePlayInfo.uid,
|
||||
AVRoomActivity.FROM_TYPE_RECOMMEND
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun loadData(refresh: Boolean) {
|
||||
GameHomeModel.get().homePlayV2
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe { homePlayInfoList: List<HomeRoomInfo>?, throwable: Throwable? ->
|
||||
if (throwable != null) {
|
||||
rvDelegate.loadErr(refresh)
|
||||
} else {
|
||||
rvDelegate.loadData(homePlayInfoList?.filter { !it.isBanner }, refresh)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onLoadLoginUserInfoEvent(event: LoadLoginUserInfoEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
EventBus.getDefault().unregister(this)
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newInstance(): HomePlayFragment {
|
||||
val fragment = HomePlayFragment()
|
||||
val bundle = Bundle()
|
||||
fragment.arguments = bundle
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,192 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.nnbc123.core.home.bean.HomeTabMapInfo;
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent;
|
||||
import com.nnbc123.core.home.model.GameHomeModel;
|
||||
import com.nnbc123.core.utils.net.RxHelper;
|
||||
import com.nnbc123.app.R;
|
||||
import com.nnbc123.app.base.BaseFragment;
|
||||
import com.nnbc123.app.home.adapter.HomeRoomFragmentAdapter;
|
||||
import com.nnbc123.library.utils.ListUtils;
|
||||
import com.trello.rxlifecycle3.android.FragmentEvent;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class HomeTabHomeFragment extends BaseFragment {
|
||||
public static final int ROWS = 3;
|
||||
private static final Comparator<HomeTabMapInfo> comp = (o1, o2) -> {
|
||||
int seq = o1.getSeq() - o2.getSeq();
|
||||
return Integer.compare(seq, 0);
|
||||
};
|
||||
private RecyclerView recyclerView;
|
||||
private HomeRoomFragmentAdapter mHomeRoomAdapter;
|
||||
|
||||
@NonNull
|
||||
public static HomeTabHomeFragment newInstance() {
|
||||
HomeTabHomeFragment fragment = new HomeTabHomeFragment();
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRootLayoutId() {
|
||||
return R.layout.fragment_home_room_tab;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFindViews() {
|
||||
super.onFindViews();
|
||||
recyclerView = mView.findViewById(R.id.recycler_view);
|
||||
initRecyclerView();
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求数据
|
||||
*/
|
||||
@SuppressLint("CheckResult")
|
||||
private void getData() {
|
||||
GameHomeModel.get()
|
||||
.getHomeTabHome()
|
||||
.compose(RxHelper.handleSchedulers())
|
||||
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
|
||||
.subscribe((serviceResult, throwable) -> {
|
||||
if (throwable == null) {
|
||||
if (ListUtils.isListEmpty(serviceResult)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<HomeTabMapInfo> roomsList = new ArrayList<>(serviceResult);//未处理的数
|
||||
List<HomeTabMapInfo> randomList = new ArrayList<>();//不是置顶的
|
||||
List<HomeTabMapInfo> finalList = new ArrayList<>();//最终的6条数据
|
||||
|
||||
for (int i = 0; i < roomsList.size(); i++) {
|
||||
roomsList.get(i).setItemType(HomeTabMapInfo.TYPE_NORMAL);//对原始数据设置type
|
||||
}
|
||||
for (int i = 0; i < roomsList.size(); i++) {
|
||||
if (roomsList.get(i).isIsTop()) {
|
||||
finalList.add(roomsList.get(i));
|
||||
} else {
|
||||
randomList.add(roomsList.get(i));
|
||||
}
|
||||
}
|
||||
sortSeqRoom(finalList);
|
||||
refreshRoomData(finalList, randomList);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新数据
|
||||
*/
|
||||
private void refreshRoomData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
|
||||
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
|
||||
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
|
||||
mHomeRoomAdapter.setNewData(getConvertData(finalList1, randomList1));
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
recyclerView.setLayoutManager(new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false));
|
||||
recyclerView.setItemAnimator(null);
|
||||
mHomeRoomAdapter = new HomeRoomFragmentAdapter(getContext());
|
||||
mHomeRoomAdapter.setEnableLoadMore(false);
|
||||
mHomeRoomAdapter.setEnableLoadMore(false);
|
||||
recyclerView.setAdapter(mHomeRoomAdapter);
|
||||
|
||||
View emptyView = getLayoutInflater().inflate(R.layout.layout_home_room_empty, null);
|
||||
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
emptyView.setLayoutParams(lp);
|
||||
mHomeRoomAdapter.setEmptyView(emptyView);
|
||||
}
|
||||
|
||||
/**
|
||||
* 转化房间数组,不足6的加上虚位以待
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
private List<HomeTabMapInfo> getConvertData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
|
||||
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
|
||||
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
|
||||
int ROOM_COUNT = 6;//首页显示6条数据
|
||||
randomList1 = randomList(randomList1);
|
||||
finalList1.addAll(randomList1);
|
||||
|
||||
if (finalList1.size() >= ROOM_COUNT) {
|
||||
finalList1 = finalList1.subList(0, ROOM_COUNT);
|
||||
} else {
|
||||
while (finalList1.size() < ROOM_COUNT) {
|
||||
HomeTabMapInfo info = new HomeTabMapInfo();
|
||||
info.setItemType(HomeTabMapInfo.TYPE_EMPTY);
|
||||
finalList1.add(info);
|
||||
}
|
||||
}
|
||||
return finalList1;
|
||||
}
|
||||
|
||||
/**
|
||||
* **************************** 排序 ***********************************
|
||||
*/
|
||||
private void sortSeqRoom(List<HomeTabMapInfo> list) {
|
||||
if (list.size() == 0) {
|
||||
return;
|
||||
}
|
||||
Collections.sort(list, comp);
|
||||
}
|
||||
|
||||
private List<HomeTabMapInfo> randomList(List<HomeTabMapInfo> sourceList) {
|
||||
if (sourceList == null || sourceList.size() == 0) {
|
||||
return sourceList;
|
||||
}
|
||||
ArrayList randomList = new ArrayList(sourceList.size());
|
||||
do {
|
||||
int randomIndex = Math.abs(new Random().nextInt(sourceList.size()));
|
||||
randomList.add(sourceList.remove(randomIndex));
|
||||
} while (sourceList.size() > 0);
|
||||
return randomList;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void initiate() {
|
||||
getData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
EventBus.getDefault().unregister(this);
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
|
||||
if (isResumed()) getData();
|
||||
}
|
||||
|
||||
}
|
@@ -1,185 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil
|
||||
import com.scwang.smartrefresh.layout.internal.ProgressDrawable
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.adapter.RoomVPAdapter
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.databinding.FragmentLiveBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.HomeLiveTopAdapter
|
||||
import com.nnbc123.app.home.adapter.PartyMagicIndicatorAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.room.bean.HomeLiveTopInfo
|
||||
import com.nnbc123.core.room.bean.SingleRoomSortInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.CurrentTimeUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
/**
|
||||
* 音萌首页
|
||||
*/
|
||||
class LiveFragment : BaseViewBindingFragment<FragmentLiveBinding>(),
|
||||
PartyMagicIndicatorAdapter.OnItemSelectListener {
|
||||
|
||||
private val mFragments: ArrayList<Fragment> = ArrayList()
|
||||
private val mTabInfoList: ArrayList<String> = ArrayList()
|
||||
private var currentIndex = 0
|
||||
private var lastLoadDataTime = 0L
|
||||
|
||||
private lateinit var mAdapter: HomeLiveTopAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeLiveTopInfo.SingleRoom>
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
companion object {
|
||||
fun newInstance(): LiveFragment {
|
||||
val args = Bundle()
|
||||
val fragment = LiveFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
mAdapter = HomeLiveTopAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeLiveTopInfo.SingleRoom>()
|
||||
.setAdapter(mAdapter)
|
||||
.setLayoutManager(LinearLayoutManager(mContext, RecyclerView.HORIZONTAL, false))
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.build()
|
||||
initRefreshView()
|
||||
homeViewModel.singleRoomSortInfoLiveData.observe(
|
||||
viewLifecycleOwner
|
||||
) {
|
||||
if (it.isSuccess) {
|
||||
it.data?.let { date -> onGetSingleRoomSortInfoSuccess(date) }
|
||||
}
|
||||
}
|
||||
|
||||
homeViewModel.homeLiveTopInfoLiveData.observe(viewLifecycleOwner) {
|
||||
it?.let {
|
||||
mAdapter.setOnceLookStatus(it.onceLookStatus)
|
||||
rvDelegate.loadData(it.singleRoomList, true)
|
||||
binding.tvTitle.text = if (it.onceLookStatus) "曾经看过的人" else "Top热播"
|
||||
}
|
||||
}
|
||||
|
||||
binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
|
||||
override fun onPageSelected(position: Int) {
|
||||
super.onPageSelected(position)
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_GEBO_TAB_CLICK,
|
||||
"个播页二级tab分类点击",
|
||||
mapOf("tab_name" to mTabInfoList.getOrElse(position) { "未知tab" })
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData()
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_RECENT_CARD_SHOW, "最近在看卡片曝光"
|
||||
)
|
||||
}
|
||||
|
||||
private fun onGetSingleRoomSortInfoSuccess(info: List<SingleRoomSortInfo>) {
|
||||
var changed = false
|
||||
val oldTabInfoList: List<CharSequence> = ArrayList<CharSequence>(mTabInfoList)
|
||||
for (tagInfo in info) {
|
||||
if (!oldTabInfoList.contains(tagInfo.sortName)) {
|
||||
changed = true
|
||||
break
|
||||
}
|
||||
}
|
||||
//只有HomeTagInfo发生改变才刷新数据
|
||||
if (changed) {
|
||||
mTabInfoList.clear()
|
||||
mFragments.clear()
|
||||
for (tagInfo in info) {
|
||||
mTabInfoList.add(tagInfo.sortName)
|
||||
val fragment = RoomSingleFragment.newInstance(tagInfo.id)
|
||||
mFragments.add(fragment)
|
||||
}
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(false)
|
||||
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
|
||||
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
|
||||
val magicIndicatorAdapter = PartyMagicIndicatorAdapter(mTabInfoList)
|
||||
magicIndicatorAdapter.textSize = 14
|
||||
magicIndicatorAdapter.setOnItemSelectListener(this)
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
binding.magicIndicator.navigator = commonNavigator
|
||||
binding.viewPager.offscreenPageLimit = 2
|
||||
binding.viewPager.adapter = RoomVPAdapter(
|
||||
childFragmentManager,
|
||||
mFragments
|
||||
)
|
||||
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
|
||||
onItemSelect(currentIndex, null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initRefreshView() {
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
binding.refreshLayout.finishRefresh()
|
||||
EventBus.getDefault().post(RefreshHomeDataEvent())
|
||||
}
|
||||
binding.refreshLayout.isEnableLoadmore = false
|
||||
binding.refreshLayout.isEnableOverScrollBounce = false
|
||||
val themeColor = requireContext().resources.getColor(R.color.color_666666)
|
||||
binding.refreshHeader.lastUpdateText.setTextColor(themeColor)
|
||||
binding.refreshHeader.titleText.setTextColor(themeColor)
|
||||
binding.refreshHeader.setBackgroundColor(Color.TRANSPARENT)
|
||||
val progressDrawable = ProgressDrawable()
|
||||
progressDrawable.setColor(themeColor)
|
||||
binding.refreshHeader.progressView.setImageDrawable(progressDrawable)
|
||||
}
|
||||
|
||||
override fun onItemSelect(position: Int, view: TextView?) {
|
||||
currentIndex = position
|
||||
binding.viewPager.currentItem = currentIndex
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) {
|
||||
loadData()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadData() {
|
||||
if (CurrentTimeUtils.getCurrentTime() - lastLoadDataTime < 15 * 1000) return
|
||||
lastLoadDataTime = CurrentTimeUtils.getCurrentTime()
|
||||
homeViewModel.requestSingleRoomSortList()
|
||||
homeViewModel.requestHomeLiveTopInfo()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -2,7 +2,6 @@ package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.text.TextUtils
|
||||
import android.util.SparseArray
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@@ -39,7 +38,6 @@ import com.nnbc123.app.ui.patriarch.PatriarchModeActivity
|
||||
import com.nnbc123.app.ui.pay.ChargeActivity
|
||||
import com.nnbc123.app.ui.relation.AttentionListActivity
|
||||
import com.nnbc123.app.ui.relation.FansListActivity
|
||||
import com.nnbc123.app.ui.utils.ImageLoadUtils
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.app.ui.widget.OnPageSelectedListener
|
||||
import com.nnbc123.app.utils.UserUtils
|
||||
@@ -57,12 +55,10 @@ import com.nnbc123.core.room.bean.RoomInfo
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.user.UserModel
|
||||
import com.nnbc123.core.user.bean.UserExpInfo
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import com.nnbc123.core.user.event.LoginUserInfoUpdateEvent
|
||||
import com.nnbc123.core.utils.CurrentTimeUtils
|
||||
import com.nnbc123.core.utils.StarUtils
|
||||
import com.nnbc123.core.utils.net.BeanObserver
|
||||
import com.nnbc123.core.utils.toast
|
||||
import com.trello.rxlifecycle3.android.FragmentEvent
|
||||
import io.reactivex.Observable
|
||||
@@ -241,12 +237,15 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (!isHidden) {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_SHOW, "我的")
|
||||
}
|
||||
if (mUserInfo?.isReview == true) {
|
||||
requestUpdateUserInfo()
|
||||
}
|
||||
initUserDate()
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun initUserDate() {
|
||||
UserModel.get().currentUserInfo
|
||||
@@ -274,7 +273,11 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
||||
if (it.isParentMode) {
|
||||
mBinding.meItemSkill.isVisible = false
|
||||
}
|
||||
it.userHeadwear?.effect?.let { effect ->
|
||||
var avatarBorder = it.userHeadwear?.effect
|
||||
if (avatarBorder.isNullOrEmpty()) {
|
||||
avatarBorder = it.userHeadwear?.pic
|
||||
}
|
||||
avatarBorder?.let { effect ->
|
||||
if (mBinding.ivHeadWear.tag != effect) {
|
||||
NobleUtil.loadHeadWear(effect, mBinding.ivHeadWear)
|
||||
mBinding.ivHeadWear.tag = effect
|
||||
|
@@ -17,6 +17,8 @@ import com.nnbc123.app.ui.im.friend.FriendListFragment
|
||||
import com.nnbc123.app.ui.im.recent.RecentListFragment
|
||||
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
|
||||
/**
|
||||
@@ -42,6 +44,13 @@ class MsgFragment : BaseViewBindingFragment<FragmentMsgBinding>(),
|
||||
binding.viewPager.currentItem = currentIndex
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (!isHidden) {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_SHOW, "消息")
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
val tagList = arrayListOf("消息", "好友")
|
||||
mFragments.clear()
|
||||
|
@@ -1,156 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.widget.TextView
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import com.coorchice.library.utils.LogUtils
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.adapter.RoomVPAdapter
|
||||
import com.nnbc123.app.base.BaseFragment
|
||||
import com.nnbc123.app.databinding.FragmentPartyBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter
|
||||
import com.nnbc123.app.home.helper.BannerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.nnbc123.core.home.bean.HomeTagInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
/**
|
||||
* 音萌首页
|
||||
*/
|
||||
class PartyFragment : BaseFragment(), MainMagicIndicatorAdapter.OnItemSelectListener {
|
||||
private lateinit var mBinding: FragmentPartyBinding
|
||||
private val mFragments: ArrayList<Fragment> = ArrayList()
|
||||
private val mTabInfoList: ArrayList<CharSequence> = ArrayList()
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
private var currentIndex = 0
|
||||
|
||||
companion object {
|
||||
fun newInstance(): PartyFragment {
|
||||
val args = Bundle()
|
||||
val fragment = PartyFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
override fun getRootLayoutId(): Int {
|
||||
return R.layout.fragment_party
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
override fun onFindViews() {
|
||||
mBinding = DataBindingUtil.bind(mView)!!
|
||||
}
|
||||
|
||||
override fun initiate() {
|
||||
homeViewModel.tagLiveData.observe(this) {
|
||||
it?.let {
|
||||
onGetHomeTagSuccess(it)
|
||||
}
|
||||
}
|
||||
homeViewModel.partyBannerLiveData.observe(this) {
|
||||
BannerHelper.setBanner(mBinding.rollView, it) { _, _ ->
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOME_BANNER_CLICK, "首页_banner")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
homeViewModel.getTagInfo()
|
||||
homeViewModel.getPartyBanner()
|
||||
}
|
||||
|
||||
private fun onGetHomeTagSuccess(tagInfoList: MutableList<HomeTagInfo>) {
|
||||
tagInfoList.add(0,HomeTagInfo("热门"))
|
||||
var changed = false
|
||||
val oldTabInfoList: List<CharSequence> = ArrayList<CharSequence>(mTabInfoList)
|
||||
for (tagInfo in tagInfoList) {
|
||||
if (!oldTabInfoList.contains(tagInfo.name)) {
|
||||
changed = true
|
||||
break
|
||||
}
|
||||
}
|
||||
//只有HomeTagInfo发生改变才刷新数据
|
||||
if (changed) {
|
||||
LogUtils.e("$changed:oldTabInfoList")
|
||||
mTabInfoList.clear()
|
||||
mFragments.clear()
|
||||
for (i in tagInfoList.indices) {
|
||||
//过滤对象是空和没有标签名同时也没有子标签的情况
|
||||
var title: CharSequence?
|
||||
var fragment: Fragment?
|
||||
var name = tagInfoList[i].name
|
||||
if (name != null) {
|
||||
name = name.trim { it <= ' ' }
|
||||
}
|
||||
title = name
|
||||
mTabInfoList.add(title)
|
||||
val tabId: Int = tagInfoList[i].id
|
||||
fragment = when (title) {
|
||||
"热门" -> {
|
||||
PartyRecommendFragment.newInstance()
|
||||
}
|
||||
"喜欢" -> {
|
||||
RoomLikeFragment.newInstance()
|
||||
}
|
||||
"小游戏" -> {
|
||||
RoomGameFragment.newInstance()
|
||||
}
|
||||
else -> {
|
||||
RoomCommonFragment.newInstance(tabId)
|
||||
}
|
||||
}
|
||||
mFragments.add(fragment)
|
||||
}
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(true)
|
||||
commonNavigator.titleMargin = ScreenUtil.dip2px(6.0F)
|
||||
val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, mTabInfoList)
|
||||
magicIndicatorAdapter.textSize = 16
|
||||
magicIndicatorAdapter.minScale = 0.85f
|
||||
magicIndicatorAdapter.setResId(R.drawable.ic_home_indicator_center)
|
||||
magicIndicatorAdapter.setOnItemSelectListener(this)
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
mBinding.magicIndicator.navigator = commonNavigator
|
||||
mBinding.viewPager.offscreenPageLimit = 2
|
||||
mBinding.viewPager.adapter = RoomVPAdapter(
|
||||
childFragmentManager,
|
||||
mFragments
|
||||
)
|
||||
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
|
||||
onItemSelect(currentIndex, null)
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) homeViewModel.getTagInfo()
|
||||
}
|
||||
|
||||
override fun onItemSelect(position: Int, view: TextView?) {
|
||||
currentIndex = position
|
||||
mBinding.viewPager.currentItem = currentIndex
|
||||
}
|
||||
|
||||
}
|
@@ -1,113 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentPartyHotBinding
|
||||
import com.nnbc123.app.databinding.FragmentRoomCommonBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.PartyHotAdapter
|
||||
import com.nnbc123.app.home.adapter.RoomCommonAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
class PartyRecommendFragment : BaseViewBindingFragment<FragmentPartyHotBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): PartyRecommendFragment {
|
||||
val args = Bundle()
|
||||
val fragment = PartyRecommendFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private lateinit var mAdapter: PartyHotAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private lateinit var mMoreAdapter: RoomCommonAdapter
|
||||
private lateinit var rvMoreDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun init() {
|
||||
mAdapter = PartyHotAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(mAdapter)
|
||||
.setLayoutManager(GridLayoutManager(mContext, 2, GridLayoutManager.VERTICAL, false))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暂无房间"))
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.build()
|
||||
mAdapter.setOnItemClickListener { _, _, position ->
|
||||
mAdapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(context, it.roomUid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_COMMON_TAB_ROOM_SUCCESS, "通用tab进入房间成功")
|
||||
}
|
||||
}
|
||||
mMoreAdapter = RoomCommonAdapter()
|
||||
rvMoreDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(mMoreAdapter)
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暂无房间"))
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setRecyclerView(binding.recyclerMoreView)
|
||||
.build()
|
||||
mMoreAdapter.setOnItemClickListener { _, _, position ->
|
||||
mMoreAdapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_COMMON_TAB_ROOM_SUCCESS, "通用tab进入房间成功")
|
||||
}
|
||||
}
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
loadData(true)
|
||||
}
|
||||
homeViewModel.partyRecommendRoomLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
homeViewModel.partyRecommendRoomMoreLiveData.observe(this) {
|
||||
rvMoreDelegate.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
fun loadData(isRefresh: Boolean) {
|
||||
binding.refreshLayout.isRefreshing = isRefresh
|
||||
homeViewModel.getPartyRecommendRoomList()
|
||||
homeViewModel.getPartyRecommendRoomMoreList()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
}
|
@@ -1,345 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.avroom.adapter.RoomVPAdapter
|
||||
import com.nnbc123.app.base.BaseFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRecommendBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.GiftServiceAdapter
|
||||
import com.nnbc123.app.home.adapter.HomeSingleAnchorAdapter
|
||||
import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter
|
||||
import com.nnbc123.app.home.dialog.RecommendRoomDialog
|
||||
import com.nnbc123.app.home.helper.BannerHelper
|
||||
import com.nnbc123.app.ui.im.avtivity.NimP2PMessageActivity
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.app.ui.widget.NewFriendsFilterWindow
|
||||
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.nnbc123.core.auth.AuthModel
|
||||
import com.nnbc123.core.home.bean.GiftServiceMsgVo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.scwang.smartrefresh.layout.internal.ProgressDrawable
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* 音萌首页
|
||||
*/
|
||||
class RecommendFragment : BaseFragment(),
|
||||
MainMagicIndicatorAdapter.OnItemSelectListener {
|
||||
private lateinit var mBinding: FragmentRecommendBinding
|
||||
private var mFragmentsBottom: MutableList<Fragment> = ArrayList()
|
||||
private lateinit var singleAnchorAdapter: HomeSingleAnchorAdapter
|
||||
|
||||
private lateinit var giftServiceAdapter: GiftServiceAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<GiftServiceMsgVo>
|
||||
private var disposable: Disposable? = null
|
||||
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
private var currGender: Int? = null
|
||||
|
||||
//仅埋点使用,不影响业务逻辑
|
||||
private val abcArray = arrayOf("A", "B", "C", "D")
|
||||
private var currMatchClick = abcArray[0]
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RecommendFragment {
|
||||
val args = Bundle()
|
||||
val fragment = RecommendFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
override fun getRootLayoutId(): Int {
|
||||
return R.layout.fragment_recommend
|
||||
}
|
||||
|
||||
|
||||
override fun onFindViews() {
|
||||
mBinding = DataBindingUtil.bind(mView)!!
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData()
|
||||
homeViewModel.getServiceGiftRecord()
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun initiate() {
|
||||
initRefreshView()
|
||||
initTitleTab()
|
||||
//initSingleAnchor()
|
||||
giftServiceAdapter = GiftServiceAdapter()
|
||||
giftServiceAdapter.setOnItemClickListener { _, _, position ->
|
||||
giftServiceAdapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(mContext, it.roomUid)
|
||||
}
|
||||
}
|
||||
rvDelegate = RVDelegate.Builder<GiftServiceMsgVo>()
|
||||
.setAdapter(giftServiceAdapter)
|
||||
.setRecyclerView(mBinding.rvGiftService)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间"))
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.build()
|
||||
|
||||
homeViewModel.bannerLiveData.observe(this) {
|
||||
BannerHelper.setBanner(mBinding.rollView, it) { _, _ ->
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOME_BANNER_CLICK, "首页_banner")
|
||||
}
|
||||
}
|
||||
homeViewModel.resourceLiveData.observe(this) {
|
||||
if (it.isNullOrEmpty() || it.size != 4) {
|
||||
mBinding.llResource.isGone = true
|
||||
return@observe
|
||||
}
|
||||
mBinding.llResource.isGone = false
|
||||
val resourceViews = arrayOf(
|
||||
mBinding.ivResource0,
|
||||
mBinding.ivResource1,
|
||||
mBinding.ivResource2,
|
||||
mBinding.ivResource3
|
||||
)
|
||||
for (i in resourceViews.indices) {
|
||||
resourceViews[i].load(it[i].icon)
|
||||
if (it[i].resourceType == 8) {
|
||||
mBinding.tvOnlineNum.text = "${it[i].resourceContent}人组队中"
|
||||
}
|
||||
resourceViews[i].setOnClickListener { _ ->
|
||||
currMatchClick = abcArray[i]
|
||||
StatisticManager.Instance().onEvent(
|
||||
"${currMatchClick}_match_click",
|
||||
"资源位点击",
|
||||
mapOf("user_id" to AuthModel.get().currentUid.toString())
|
||||
)
|
||||
when {
|
||||
it[i].resourceType == 5 -> {
|
||||
CommonWebViewActivity.start(context, it[i].resourceContent)
|
||||
}
|
||||
i == 3 -> {
|
||||
dialogManager.showProgressDialog(mContext)
|
||||
homeViewModel.getHomeChatPick()
|
||||
}
|
||||
else -> {
|
||||
dialogManager.showProgressDialog(mContext)
|
||||
homeViewModel.getResourceJumpInfo(it[i].id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
homeViewModel.resourceJumpLiveData.observe(this) {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isPick) {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
StatisticManager.Instance().onEvent(
|
||||
"${currMatchClick}_match_success",
|
||||
"资源位匹配成功",
|
||||
mapOf("user_id" to AuthModel.get().currentUid.toString())
|
||||
)
|
||||
} else {
|
||||
RecommendRoomDialog.newInstance(it).show(context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
homeViewModel.homeChatPickLiveData.observe(viewLifecycleOwner) {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isNotEmpty()) {
|
||||
NimP2PMessageActivity.start(context, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
homeViewModel.giftServiceLiveData.observe(viewLifecycleOwner) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
mBinding.rvGiftService.setOnTouchListener { _, _ -> true }
|
||||
disposable = Observable.intervalRange(0, Int.MAX_VALUE.toLong(), 0, 5, TimeUnit.SECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.filter { rvDelegate.adapter.itemCount > 0 && isResumed }
|
||||
.subscribe {
|
||||
val index = (it % rvDelegate.adapter.itemCount).toInt()
|
||||
if (index == 0) {
|
||||
mBinding.rvGiftService.scrollToPosition(index)
|
||||
} else {
|
||||
mBinding.rvGiftService.smoothScrollToPosition(index)
|
||||
}
|
||||
}
|
||||
mBinding.tvNewRefresh.setOnClickListener {
|
||||
homeViewModel.getNewFriendList(currGender)
|
||||
}
|
||||
mBinding.tvNewFilter.setOnClickListener {
|
||||
val popup = NewFriendsFilterWindow(
|
||||
mContext,
|
||||
mBinding.tvNewFilter.text.toString()
|
||||
)
|
||||
popup.setOnClickListener {
|
||||
popup.dismiss()
|
||||
when (it.id) {
|
||||
R.id.tv_all -> {
|
||||
homeViewModel.getNewFriendList()
|
||||
mBinding.tvNewFilter.text = "全部"
|
||||
currGender = null
|
||||
}
|
||||
R.id.tv_man -> {
|
||||
homeViewModel.getNewFriendList(1)
|
||||
mBinding.tvNewFilter.text = "男生"
|
||||
currGender = 1
|
||||
}
|
||||
R.id.tv_woman -> {
|
||||
homeViewModel.getNewFriendList(2)
|
||||
mBinding.tvNewFilter.text = "女生"
|
||||
currGender = 2
|
||||
}
|
||||
}
|
||||
}
|
||||
popup.show(mBinding.tvNewFilter, Gravity.BOTTOM)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun initRefreshView() {
|
||||
mBinding.refreshLayout.setOnRefreshListener {
|
||||
mBinding.refreshLayout.finishRefresh()
|
||||
EventBus.getDefault().post(RefreshHomeDataEvent())
|
||||
}
|
||||
mBinding.refreshLayout.isEnableLoadmore = false
|
||||
mBinding.refreshLayout.isEnableOverScrollBounce = false
|
||||
val themeColor = requireContext().resources.getColor(R.color.color_666666)
|
||||
mBinding.refreshHeader.lastUpdateText.setTextColor(themeColor)
|
||||
mBinding.refreshHeader.titleText.setTextColor(themeColor)
|
||||
mBinding.refreshHeader.setBackgroundColor(Color.TRANSPARENT)
|
||||
val progressDrawable = ProgressDrawable()
|
||||
progressDrawable.setColor(themeColor)
|
||||
mBinding.refreshHeader.progressView.setImageDrawable(progressDrawable)
|
||||
}
|
||||
|
||||
private fun initTitleTab() {
|
||||
val tagList = arrayListOf("发现新朋友", "组队开黑")
|
||||
mFragmentsBottom.add(RoomNewFriendsFragment.newInstance())
|
||||
mFragmentsBottom.add(HomePlayFragment.newInstance())
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(true)
|
||||
val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList)
|
||||
magicIndicatorAdapter.setResId(R.drawable.ic_home_indicator_center)
|
||||
magicIndicatorAdapter.textSize = 16
|
||||
magicIndicatorAdapter.minScale = 0.85f
|
||||
magicIndicatorAdapter.setOnItemSelectListener(this)
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
mBinding.magicIndicator.navigator = commonNavigator
|
||||
commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
|
||||
mBinding.viewPager.offscreenPageLimit = 5
|
||||
mBinding.viewPager.adapter =
|
||||
RoomVPAdapter(childFragmentManager, mFragmentsBottom)
|
||||
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
|
||||
mBinding.viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrolled(
|
||||
position: Int,
|
||||
positionOffset: Float,
|
||||
positionOffsetPixels: Int
|
||||
) {
|
||||
}
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
mBinding.tvNewRefresh.isVisible = position == 0
|
||||
mBinding.tvNewFilter.isVisible = position == 0
|
||||
}
|
||||
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
private fun initSingleAnchor() {
|
||||
singleAnchorAdapter = HomeSingleAnchorAdapter()
|
||||
mBinding.rvSingleAnchor.adapter = singleAnchorAdapter
|
||||
val layoutManager =
|
||||
GridLayoutManager(requireContext(), 4, LinearLayoutManager.VERTICAL, false)
|
||||
mBinding.rvSingleAnchor.layoutManager = layoutManager
|
||||
homeViewModel.singleAnchorHomeLiveData.observe(this) {
|
||||
if (it.data.isNullOrEmpty()) {
|
||||
mBinding.llSingleAnchor.visibility = View.GONE
|
||||
mBinding.rvSingleAnchor.visibility = View.GONE
|
||||
} else {
|
||||
mBinding.llSingleAnchor.visibility = View.VISIBLE
|
||||
mBinding.rvSingleAnchor.visibility = View.VISIBLE
|
||||
}
|
||||
singleAnchorAdapter.setNewData(it.data)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onItemSelect(position: Int, view: TextView?) {
|
||||
if (mFragmentsBottom.isEmpty()) {
|
||||
return
|
||||
}
|
||||
mBinding.tvNewRefresh.isVisible = position == 0
|
||||
mBinding.tvNewFilter.isVisible = position == 0
|
||||
mBinding.viewPager.currentItem = position
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_TJ_TABEXCHANGE, "用户切换tab次数,热门房间or组队开黑")
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) {
|
||||
loadData()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadData() {
|
||||
homeViewModel.getHomeResource()
|
||||
homeViewModel.getBannerInfo()
|
||||
//homeViewModel.getHomeSingleAnchorList()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
disposable?.dispose()
|
||||
}
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -1,100 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomCommonBinding
|
||||
import com.nnbc123.app.home.RoomCommonViewModel
|
||||
import com.nnbc123.app.home.adapter.RoomCommonAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(tabID: Int): RoomCommonFragment {
|
||||
val args = Bundle()
|
||||
args.putInt("tab_id", tabID)
|
||||
val fragment = RoomCommonFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private val tabID: Int by lazy { arguments?.getInt("tab_id") ?: -1 }
|
||||
private var pageNum: Int = 1
|
||||
private val pageSize = 20
|
||||
|
||||
private lateinit var mAdapter: RoomCommonAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private val roomCommonViewModel: RoomCommonViewModel by viewModels()
|
||||
|
||||
override fun init() {
|
||||
mAdapter = RoomCommonAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(mAdapter)
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setPageSize(20)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暂无房间"))
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.build()
|
||||
mAdapter.setOnItemClickListener { _, _, position ->
|
||||
mAdapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(context, it.roomUid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent("tab${tabID}_success_room", "通过派对tab下面的房间,成功进房的统计")
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_COMMON_TAB_ROOM_SUCCESS, "通用tab进入房间成功")
|
||||
}
|
||||
}
|
||||
mAdapter.setOnLoadMoreListener({
|
||||
loadData(false)
|
||||
}, binding.recyclerView)
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
loadData(true)
|
||||
}
|
||||
roomCommonViewModel.commonRoomLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
fun loadData(isRefresh: Boolean) {
|
||||
binding.refreshLayout.isRefreshing = isRefresh
|
||||
pageNum = if (isRefresh) 1 else (pageNum + 1)
|
||||
roomCommonViewModel.getCommonRoom(tabID, pageNum, pageSize)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
}
|
@@ -1,98 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomGameBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.RoomGameAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RoomGameFragment {
|
||||
val args = Bundle()
|
||||
val fragment = RoomGameFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var roomHotAdapter: RoomGameAdapter
|
||||
private var page = 1
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
private val pageSize = 20
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun init() {
|
||||
roomHotAdapter = RoomGameAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(roomHotAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间"))
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setPageSize(pageSize)
|
||||
.build()
|
||||
|
||||
roomHotAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView)
|
||||
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
loadData(true)
|
||||
}
|
||||
homeViewModel.gameRoomLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
|
||||
binding.tvMatch.setOnClickListener {
|
||||
homeViewModel.fastPickGameRoom()
|
||||
}
|
||||
|
||||
homeViewModel.pickRoomLiveData.observe(this) {
|
||||
it?.let {
|
||||
AVRoomActivity.start(mContext, it.uid)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
private fun loadData(isRefresh: Boolean) {
|
||||
|
||||
binding.refreshLayout.isRefreshing = isRefresh
|
||||
|
||||
if (isRefresh) {
|
||||
page = 1
|
||||
} else {
|
||||
page++
|
||||
}
|
||||
homeViewModel.getGameRoom(page, pageSize)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
}
|
@@ -1,75 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomHotBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.RoomHotAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
|
||||
class RoomHotFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RoomHotFragment {
|
||||
val args = Bundle()
|
||||
val fragment = RoomHotFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var roomHotAdapter : RoomHotAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private var page = 1
|
||||
private val pageSize = Int.MAX_VALUE
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun init() {
|
||||
roomHotAdapter = RoomHotAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(roomHotAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间"))
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setPageSize(pageSize)
|
||||
.build()
|
||||
|
||||
homeViewModel.hotRoomLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
private fun loadData(isRefresh: Boolean) {
|
||||
homeViewModel.getHotRoom(page, pageSize)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
}
|
@@ -1,135 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomLikeBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.HomeConcernsAdapter
|
||||
import com.nnbc123.app.home.adapter.RoomLikeAdapter
|
||||
import com.nnbc123.app.ui.relation.AttentionListActivity
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
|
||||
class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RoomLikeFragment {
|
||||
val args = Bundle()
|
||||
val fragment = RoomLikeFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var concernsAdapter : HomeConcernsAdapter
|
||||
private lateinit var likeRvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private lateinit var mAdapter : RoomLikeAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
private var pageNum = 1
|
||||
private val pageSize = 20
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun init() {
|
||||
|
||||
binding.appBarLayout.addOnOffsetChangedListener(
|
||||
AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
|
||||
binding.refreshLayout.isEnabled = verticalOffset == 0
|
||||
})
|
||||
concernsAdapter = HomeConcernsAdapter()
|
||||
likeRvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(concernsAdapter)
|
||||
.setRecyclerView(binding.rvLike)
|
||||
.setLayoutManager(GridLayoutManager(mContext,5, GridLayoutManager.VERTICAL, false))
|
||||
.build()
|
||||
|
||||
homeViewModel.concernsLiveData.observe(this) {
|
||||
likeRvDelegate.setNewData(it)
|
||||
val isGone = concernsAdapter.data.isNullOrEmpty()
|
||||
binding.tvMore.isGone = isGone
|
||||
binding.tvLike.isGone = isGone
|
||||
binding.rvLike.isGone = isGone
|
||||
}
|
||||
mAdapter = RoomLikeAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(mAdapter)
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.setPageSize(pageSize)
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暂无收藏"))
|
||||
.setRecyclerView(binding.rvCollect)
|
||||
.build()
|
||||
|
||||
homeViewModel.collectLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
|
||||
mAdapter.setOnLoadMoreListener({
|
||||
loadData(false)
|
||||
}, binding.rvCollect)
|
||||
|
||||
binding.refreshLayout.setOnRefreshListener {
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
homeViewModel.emptyLiveData.observe(this) {
|
||||
it?.let {
|
||||
binding.refreshLayout.isRefreshing = false
|
||||
binding.clEmpty.isVisible = it
|
||||
binding.coordinatorLayout.isVisible = !it
|
||||
}
|
||||
}
|
||||
|
||||
binding.tvGoPlay.setOnClickListener {
|
||||
(parentFragment as PartyFragment).onItemSelect(1, null)
|
||||
}
|
||||
|
||||
binding.tvMore.setOnClickListener {
|
||||
AttentionListActivity.start(context)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
private fun loadData(isRefresh: Boolean) {
|
||||
if (isRefresh) {
|
||||
pageNum = 1
|
||||
binding.refreshLayout.isRefreshing = true
|
||||
} else {
|
||||
pageNum++
|
||||
}
|
||||
homeViewModel.getCollectRoom(pageNum, pageSize)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
|
||||
}
|
@@ -1,45 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomHotBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.RoomNewFriendsAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
|
||||
|
||||
class RoomNewFriendsFragment : BaseViewBindingFragment<FragmentRoomHotBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(): RoomNewFriendsFragment {
|
||||
val args = Bundle()
|
||||
val fragment = RoomNewFriendsFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var roomHotAdapter: RoomNewFriendsAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<UserInfo>
|
||||
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
|
||||
override fun init() {
|
||||
roomHotAdapter = RoomNewFriendsAdapter()
|
||||
rvDelegate = RVDelegate.Builder<UserInfo>()
|
||||
.setAdapter(roomHotAdapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无新朋友"))
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.build()
|
||||
homeViewModel.getNewFriendList()
|
||||
homeViewModel.newFriendLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,86 +0,0 @@
|
||||
package com.nnbc123.app.home.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.nnbc123.app.base.BaseViewBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.FragmentRoomSingleBinding
|
||||
import com.nnbc123.app.home.RoomSingleViewModel
|
||||
import com.nnbc123.app.home.adapter.MoreSingleAnchorAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.utils.CurrentTimeUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
|
||||
class RoomSingleFragment : BaseViewBindingFragment<FragmentRoomSingleBinding>() {
|
||||
|
||||
companion object {
|
||||
fun newInstance(id: Long?): RoomSingleFragment {
|
||||
val args = Bundle()
|
||||
if (id != null) {
|
||||
args.putLong("id", id)
|
||||
}
|
||||
val fragment = RoomSingleFragment()
|
||||
fragment.arguments = args
|
||||
return fragment
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var adapter: MoreSingleAnchorAdapter
|
||||
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
|
||||
|
||||
private val pageSize = Int.MAX_VALUE
|
||||
private val roomSingleViewModel: RoomSingleViewModel by viewModels()
|
||||
|
||||
private var lastLoadDataTime = 0L
|
||||
|
||||
private val id: Long? by lazy { requireArguments().getLong("id") }
|
||||
|
||||
override fun init() {
|
||||
adapter = MoreSingleAnchorAdapter()
|
||||
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(binding.recyclerView)
|
||||
.setRefreshLayout(binding.refreshLayout)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无房间"))
|
||||
.setLayoutManager(GridLayoutManager(mContext, 2))
|
||||
.setPageSize(pageSize)
|
||||
.build()
|
||||
binding.refreshLayout.setOnRefreshListener { loadData(true) }
|
||||
roomSingleViewModel.singleAnchorMoreLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(false)
|
||||
}
|
||||
|
||||
private fun loadData(isForce: Boolean) {
|
||||
if (!isForce && CurrentTimeUtils.getCurrentTime() - lastLoadDataTime < 15 * 1000) return
|
||||
lastLoadDataTime = CurrentTimeUtils.getCurrentTime()
|
||||
binding.refreshLayout.isRefreshing = true
|
||||
roomSingleViewModel.getMoreSingleAnchorList(id)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(false)
|
||||
}
|
||||
}
|
@@ -0,0 +1,114 @@
|
||||
package com.nnbc123.app.home.fragment.home
|
||||
|
||||
import android.graphics.Color
|
||||
import android.view.Gravity
|
||||
import android.widget.LinearLayout
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.adapter.RoomVPAdapter
|
||||
import com.nnbc123.app.base.BaseBindingFragment
|
||||
import com.nnbc123.app.databinding.HomeFragmentBinding
|
||||
import com.nnbc123.app.home.adapter.HomeMagicIndicatorAdapter
|
||||
import com.nnbc123.app.home.fragment.home.friends.FriendsFragment
|
||||
import com.nnbc123.app.home.fragment.home.party.PartyFragment
|
||||
import com.nnbc123.app.home.helper.OpenRoomHelper
|
||||
import com.nnbc123.app.ui.search.SearchActivity
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.nnbc123.core.DemoCache
|
||||
import com.nnbc123.core.UriProvider
|
||||
import com.nnbc123.core.initial.InitialModel
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 17:51
|
||||
* Desc:首页
|
||||
**/
|
||||
@ActLayoutRes(R.layout.home_fragment)
|
||||
class HomeFragment : BaseBindingFragment<HomeFragmentBinding>() {
|
||||
override fun initiate() {
|
||||
ImmersionBar.with(this).titleBarMarginTop(mBinding.vTitleBarTop).init()
|
||||
initTab()
|
||||
initEvent()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (!isHidden) {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_SHOW, "首页")
|
||||
}
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
mBinding.ivMyRoom.singleClick {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_MY_ROOM_CLICK)
|
||||
OpenRoomHelper.openRoom(baseActivity)
|
||||
}
|
||||
|
||||
mBinding.ivRanking.singleClick {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_RANK_CLICK)
|
||||
CommonWebViewActivity.start(mContext, UriProvider.getRanking())
|
||||
}
|
||||
|
||||
mBinding.tvSearch.singleClick {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_SEARCH_CLICK)
|
||||
SearchActivity.start(activity)
|
||||
//为啥触发条件这么恶心 我也不知道啊
|
||||
if (DemoCache.readAnchorCardView() == 0) {
|
||||
DemoCache.saveAnchorCardView(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initTab() {
|
||||
val tagList = arrayListOf("派对", "交友")
|
||||
val fragmentList = listOf(PartyFragment(), FriendsFragment())
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(true)
|
||||
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
|
||||
val magicIndicatorAdapter = HomeMagicIndicatorAdapter(context, tagList)
|
||||
magicIndicatorAdapter.setOnItemSelectListener { position, view ->
|
||||
mBinding.viewPager.currentItem = position
|
||||
}
|
||||
magicIndicatorAdapter.normalColor = Color.parseColor("#696D7A")
|
||||
magicIndicatorAdapter.selectedColor = Color.parseColor("#2B2D33")
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
mBinding.magicIndicator.navigator = commonNavigator
|
||||
commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
|
||||
mBinding.viewPager.offscreenPageLimit = 5
|
||||
mBinding.viewPager.adapter =
|
||||
RoomVPAdapter(childFragmentManager, fragmentList)
|
||||
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
|
||||
mBinding.viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrolled(
|
||||
position: Int,
|
||||
positionOffset: Float,
|
||||
positionOffsetPixels: Int
|
||||
) {
|
||||
}
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_TBA_CLICK, "${position + 1}")
|
||||
}
|
||||
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
}
|
||||
|
||||
})
|
||||
InitialModel.get().cacheInitInfo?.defaultTab?.let {
|
||||
val tab = it - 1
|
||||
if (it >= 0 && it < tagList.size) {
|
||||
mBinding.viewPager.currentItem = tab
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,236 @@
|
||||
package com.nnbc123.app.home.fragment.home.friends
|
||||
|
||||
import android.view.Gravity
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseBindingFragment
|
||||
import com.nnbc123.app.common.widget.dialog.DialogManager
|
||||
import com.nnbc123.app.databinding.HomeFriendsFragmentBinding
|
||||
import com.nnbc123.app.home.FriendsViewModel
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.HomeFriendsGameTabAdapter
|
||||
import com.nnbc123.app.home.dialog.RecommendRoomDialog
|
||||
import com.nnbc123.app.ui.im.avtivity.NimP2PMessageActivity
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.app.ui.widget.NewFriendsFilterWindow
|
||||
import com.nnbc123.core.UriProvider
|
||||
import com.nnbc123.core.bean.response.observeResult
|
||||
import com.nnbc123.core.pay.PayModel
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.net.ServerException
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
import com.scwang.smartrefresh.layout.listener.OnRefreshListener
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 17:59
|
||||
* Desc:交友
|
||||
**/
|
||||
|
||||
@ActLayoutRes(R.layout.home_friends_fragment)
|
||||
class FriendsFragment : BaseBindingFragment<HomeFriendsFragmentBinding>() {
|
||||
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
private val viewModel: FriendsViewModel by activityViewModels()
|
||||
|
||||
private val tabAdapter = HomeFriendsGameTabAdapter()
|
||||
|
||||
// 过滤条件:性别
|
||||
private var filterGender: Int? = null
|
||||
|
||||
// 过滤条件:游戏ID
|
||||
private val filterGameId: Long? get() = tabAdapter.selectGameId
|
||||
|
||||
private var genderPopup: NewFriendsFilterWindow? = null
|
||||
|
||||
override fun initiate() {
|
||||
initResource()
|
||||
initFilterTab()
|
||||
mBinding.tvGender.singleClick {
|
||||
showFilterGender()
|
||||
}
|
||||
mBinding.tvRefresh.singleClick {
|
||||
viewModel.getNewFriendList(filterGender, filterGameId)
|
||||
}
|
||||
mBinding.refreshLayout.isEnableLoadmore = false
|
||||
mBinding.refreshLayout.isEnableOverScrollBounce = false
|
||||
mBinding.refreshLayout.setOnRefreshListener { view ->
|
||||
mBinding.refreshLayout.finishRefresh()
|
||||
loadData(true)
|
||||
childFragmentManager.fragments.forEach {
|
||||
if (it is OnRefreshListener) {
|
||||
it.onRefresh(view)
|
||||
}
|
||||
}
|
||||
}
|
||||
childFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container_view, FriendsListFragment())
|
||||
.commitAllowingStateLoss()
|
||||
}
|
||||
|
||||
private fun initFilterTab() {
|
||||
mBinding.rvTab.adapter = tabAdapter
|
||||
tabAdapter.setOnItemClickListener { adapter, view, position ->
|
||||
tabAdapter.selectItem(position)
|
||||
refreshListData()
|
||||
}
|
||||
viewModel.gameTabLiveData.observe(viewLifecycleOwner)
|
||||
{
|
||||
if (!it.isNullOrEmpty()) {
|
||||
tabAdapter.setNewData(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initResource() {
|
||||
mBinding.ivResourceMatch.singleClick {
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_MATCH_CLICK)
|
||||
dialogManager.showProgressDialog(mContext)
|
||||
viewModel.getHomeChatPick()
|
||||
}
|
||||
|
||||
viewModel.resourceJumpLiveData.observeResult(this, success = {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isPick) {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
} else {
|
||||
RecommendRoomDialog.newInstance(it).show(context)
|
||||
}
|
||||
}
|
||||
}, failed = {
|
||||
dialogManager.dismissDialog()
|
||||
if ((it as? ServerException)?.code == PayModel.NOT_REAL_NAME_BEFORE_CHARGING) {
|
||||
dialogManager.showTipsDialog(getString(R.string.tips_need_to_certification),
|
||||
getString(R.string.go_to_certification),
|
||||
object : DialogManager.AbsOkDialogListener() {
|
||||
override fun onOk() {
|
||||
// 跳去实名认证页面
|
||||
CommonWebViewActivity.start(
|
||||
this@FriendsFragment.context,
|
||||
UriProvider.getTutuRealNamePage()
|
||||
)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
toast(it.message)
|
||||
}
|
||||
})
|
||||
|
||||
viewModel.homeChatPickLiveData.observe(viewLifecycleOwner) {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isNotEmpty()) {
|
||||
NimP2PMessageActivity.start(context, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
homeViewModel.resourceLiveData.observe(this) {
|
||||
// 资源位5
|
||||
it.getOrNull(4)?.let { item ->
|
||||
mBinding.groupResource.isVisible = true
|
||||
mBinding.ivResource0.load(item.icon)
|
||||
mBinding.ivResource0.singleClick {
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_HOMEPAGE_TOP_RESOURCE_CLICK,
|
||||
"E"
|
||||
)
|
||||
when (item.resourceType) {
|
||||
5 -> {
|
||||
CommonWebViewActivity.start(context, item.resourceContent)
|
||||
}
|
||||
|
||||
else -> {
|
||||
dialogManager.showProgressDialog(mContext)
|
||||
viewModel.getResourceJumpInfo(item.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun showFilterGender() {
|
||||
genderPopup = NewFriendsFilterWindow(
|
||||
mContext,
|
||||
mBinding.tvGender.text.toString()
|
||||
).apply {
|
||||
setOnClickListener {
|
||||
dismiss()
|
||||
when (it.id) {
|
||||
R.id.tv_all -> {
|
||||
updateGender(null)
|
||||
refreshListData()
|
||||
}
|
||||
|
||||
R.id.tv_man -> {
|
||||
updateGender(1)
|
||||
refreshListData()
|
||||
}
|
||||
|
||||
R.id.tv_woman -> {
|
||||
updateGender(2)
|
||||
refreshListData()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
genderPopup?.show(mBinding.tvGender, Gravity.BOTTOM)
|
||||
}
|
||||
|
||||
private fun updateGender(gender: Int?) {
|
||||
filterGender = gender
|
||||
when (gender) {
|
||||
1 -> {
|
||||
mBinding.tvGender.text = "男生"
|
||||
}
|
||||
|
||||
2 -> {
|
||||
mBinding.tvGender.text = "女生"
|
||||
}
|
||||
|
||||
else -> {
|
||||
mBinding.tvGender.text = "全部"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(false)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
if (genderPopup?.isShowing == true) {
|
||||
genderPopup?.dismiss()
|
||||
genderPopup = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadData(resetFilter: Boolean) {
|
||||
if (resetFilter) {
|
||||
// 重置条件
|
||||
updateGender(null)
|
||||
tabAdapter.selectItem(null)
|
||||
}
|
||||
if (viewModel.gameTabLiveData.value.isNullOrEmpty()) {
|
||||
viewModel.getHomeGameTab()
|
||||
}
|
||||
if (homeViewModel.resourceLiveData.value.isNullOrEmpty()) {
|
||||
// 和派对页共用数据了,派对页会刷新,这里不需要再刷新了
|
||||
homeViewModel.getHomeResource()
|
||||
}
|
||||
refreshListData()
|
||||
}
|
||||
|
||||
private fun refreshListData() {
|
||||
viewModel.getNewFriendList(filterGender, filterGameId)
|
||||
}
|
||||
}
|
@@ -0,0 +1,134 @@
|
||||
package com.nnbc123.app.home.fragment.home.friends
|
||||
|
||||
import android.graphics.Rect
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.chuhai.utils.UiUtils
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.base.BaseBindingFragment
|
||||
import com.nnbc123.app.databinding.HomeFriendsListFragmentBinding
|
||||
import com.nnbc123.app.home.FriendsViewModel
|
||||
import com.nnbc123.app.home.adapter.HomeFriendsUserAdapter
|
||||
import com.nnbc123.app.ui.user.UserInfoActivity
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.user.bean.UserInfo
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout
|
||||
import com.scwang.smartrefresh.layout.listener.OnRefreshListener
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 19:35
|
||||
* Desc:
|
||||
**/
|
||||
@ActLayoutRes(R.layout.home_friends_list_fragment)
|
||||
class FriendsListFragment : BaseBindingFragment<HomeFriendsListFragmentBinding>(),
|
||||
OnRefreshListener {
|
||||
private val adapter = HomeFriendsUserAdapter()
|
||||
private val viewModel: FriendsViewModel by activityViewModels()
|
||||
private var rvDelegate: RVDelegate<UserInfo>? = null
|
||||
private var headerEmptyView: View? = null
|
||||
private val recommendTitleView get() = headerEmptyView?.findViewById<View>(R.id.layout_title)
|
||||
|
||||
override fun initiate() {
|
||||
initView()
|
||||
initEvent()
|
||||
initObserve()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
val spanCount = 2
|
||||
val listLeftRightPadding = UiUtils.dip2px(15f)
|
||||
val itemLeftRightMargin = UiUtils.dip2px(4.5f)
|
||||
mBinding.recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
||||
override fun getItemOffsets(
|
||||
outRect: Rect,
|
||||
view: View,
|
||||
parent: RecyclerView,
|
||||
state: RecyclerView.State
|
||||
) {
|
||||
super.getItemOffsets(outRect, view, parent, state)
|
||||
val pos = parent.getChildAdapterPosition(view) - adapter.headerLayoutCount
|
||||
val remainder = pos % spanCount
|
||||
if (pos < 0) {
|
||||
outRect.set(0, 0, 0, 0)
|
||||
} else if (remainder == 0) {
|
||||
// 第一列
|
||||
outRect.set(listLeftRightPadding, 0, itemLeftRightMargin, 0)
|
||||
} else if (remainder == (spanCount - 1)) {
|
||||
// 最后一列
|
||||
outRect.set(itemLeftRightMargin, 0, listLeftRightPadding, 0)
|
||||
} else {
|
||||
// 中间
|
||||
outRect.set(itemLeftRightMargin, 0, itemLeftRightMargin, 0)
|
||||
}
|
||||
}
|
||||
})
|
||||
rvDelegate = RVDelegate.Builder<UserInfo>()
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(mBinding.recyclerView)
|
||||
.setLayoutManager(GridLayoutManager(mContext, spanCount))
|
||||
.build()
|
||||
initEmptyView()
|
||||
}
|
||||
|
||||
private fun initEmptyView() {
|
||||
headerEmptyView = LayoutInflater.from(requireContext())
|
||||
.inflate(R.layout.home_friends_list_item_empty, null)
|
||||
}
|
||||
|
||||
private fun initEvent() {
|
||||
adapter.setOnItemClickListener { adapter, view, position ->
|
||||
(adapter.getItem(position) as? UserInfo)?.let { item ->
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_HOMEPAGE_MORE_GAME_USER_CLICK,
|
||||
item.uid.toString()
|
||||
)
|
||||
UserInfoActivity.Companion.start(mContext, item.uid)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
viewModel.newFriendLiveData.observe(this) {
|
||||
if (it.data.isNullOrEmpty()) {
|
||||
if (adapter.headerLayoutCount == 0) {
|
||||
adapter.addHeaderView(headerEmptyView)
|
||||
adapter.headerLayout.clipChildren = false
|
||||
}
|
||||
val list = viewModel.friendRecommendModeLiveData.value?.data?.toMutableList()
|
||||
recommendTitleView?.isVisible = !list.isNullOrEmpty()
|
||||
adapter.setNewData(list)
|
||||
} else {
|
||||
adapter.removeAllHeaderView()
|
||||
rvDelegate?.loadData(it)
|
||||
}
|
||||
}
|
||||
viewModel.friendRecommendModeLiveData.observe(this) {
|
||||
if (adapter.headerLayoutCount != 0) {
|
||||
recommendTitleView?.isVisible = !it.data.isNullOrEmpty()
|
||||
adapter.setNewData(it.data?.toMutableList())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
if (viewModel.friendRecommendModeLiveData.value?.data.isNullOrEmpty()) {
|
||||
viewModel.getFriendRecommendMore()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRefresh(refreshlayout: RefreshLayout?) {
|
||||
if (isVisible && lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
|
||||
// 刷新下更多推荐
|
||||
viewModel.getFriendRecommendMore()
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,207 @@
|
||||
package com.nnbc123.app.home.fragment.home.party
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.chuhai.utils.ktx.singleClick
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseActivity
|
||||
import com.nnbc123.app.base.BaseBindingFragment
|
||||
import com.nnbc123.app.common.widget.dialog.DialogManager
|
||||
import com.nnbc123.app.databinding.HomePartyFragmentBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.game_room.GameRoomActivity
|
||||
import com.nnbc123.app.home.PartyViewModel
|
||||
import com.nnbc123.app.home.adapter.HomePartyMessageAdapter
|
||||
import com.nnbc123.app.home.dialog.RecommendRoomDialog
|
||||
import com.nnbc123.app.home.helper.BannerHelper
|
||||
import com.nnbc123.app.ui.utils.load
|
||||
import com.nnbc123.app.ui.webview.CommonWebViewActivity
|
||||
import com.nnbc123.core.UriProvider
|
||||
import com.nnbc123.core.bean.response.observeResult
|
||||
import com.nnbc123.core.home.bean.BannerInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.im.custom.bean.RouterType
|
||||
import com.nnbc123.core.pay.PayModel
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.core.utils.net.ServerException
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
import com.nnbc123.library.utils.JavaUtil
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 17:58
|
||||
* Desc:派对
|
||||
**/
|
||||
@ActLayoutRes(R.layout.home_party_fragment)
|
||||
class PartyFragment : BaseBindingFragment<HomePartyFragmentBinding>() {
|
||||
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
private val viewModel: PartyViewModel by activityViewModels()
|
||||
|
||||
//仅埋点使用,不影响业务逻辑
|
||||
private val abcArray = arrayOf("A", "B", "C", "D")
|
||||
private var currMatchClick = abcArray[0]
|
||||
|
||||
override fun initiate() {
|
||||
initResource()
|
||||
initHotMessage()
|
||||
initBanner()
|
||||
mBinding.refreshLayout.isEnableLoadmore = false
|
||||
mBinding.refreshLayout.isEnableOverScrollBounce = false
|
||||
mBinding.refreshLayout.setOnRefreshListener {
|
||||
mBinding.refreshLayout.finishRefresh()
|
||||
EventBus.getDefault().post(RefreshHomeDataEvent())
|
||||
}
|
||||
childFragmentManager
|
||||
.beginTransaction()
|
||||
.replace(R.id.fragment_container_view, PartyHotRoomFragment())
|
||||
.commitAllowingStateLoss()
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) {
|
||||
loadData()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData()
|
||||
}
|
||||
|
||||
private fun loadData() {
|
||||
homeViewModel.getHomeResource()
|
||||
viewModel.getBannerInfo()
|
||||
viewModel.getServiceGiftRecord()
|
||||
}
|
||||
|
||||
private fun initHotMessage() {
|
||||
val adapter = HomePartyMessageAdapter()
|
||||
adapter.clickListener = {
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_HOMEPAGE_INFORM_CLICK,
|
||||
it.roomUid.toString()
|
||||
)
|
||||
AVRoomActivity.start(mContext, it.roomUid)
|
||||
}
|
||||
mBinding.hotMessage.apply {
|
||||
setOrientation(ViewPager2.ORIENTATION_VERTICAL)
|
||||
setAdapter(adapter)
|
||||
registerLifecycleObserver(lifecycle)
|
||||
setUserInputEnabled(false)
|
||||
}.create()
|
||||
viewModel.giftServiceLiveData.observe(viewLifecycleOwner) {
|
||||
if (it.isSuccess && !it.data.isNullOrEmpty()) {
|
||||
mBinding.hotMessage.isVisible = true
|
||||
mBinding.hotMessage.refreshData(it.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initResource() {
|
||||
mBinding.ivResourceMore.singleClick {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_TOP_MORE_ROOM_CLICK)
|
||||
GameRoomActivity.start(requireContext())
|
||||
}
|
||||
|
||||
homeViewModel.resourceLiveData.observe(this) {
|
||||
if (it.isNullOrEmpty()) {
|
||||
mBinding.groupResource.isVisible = false
|
||||
return@observe
|
||||
}
|
||||
mBinding.groupResource.isVisible = true
|
||||
val resourceViews = arrayOf(
|
||||
mBinding.ivResource0,
|
||||
mBinding.ivResource1,
|
||||
mBinding.ivResource2,
|
||||
mBinding.ivResource3
|
||||
)
|
||||
for (i in resourceViews.indices) {
|
||||
resourceViews[i].load(it[i].icon)
|
||||
resourceViews[i].singleClick { _ ->
|
||||
currMatchClick = abcArray[i]
|
||||
StatisticManager.Instance().onEvent(
|
||||
StatisticsProtocol.EVENT_HOMEPAGE_TOP_RESOURCE_CLICK,
|
||||
currMatchClick
|
||||
)
|
||||
when (it[i].resourceType) {
|
||||
5 -> {
|
||||
CommonWebViewActivity.start(context, it[i].resourceContent)
|
||||
}
|
||||
|
||||
else -> {
|
||||
dialogManager.showProgressDialog(mContext)
|
||||
viewModel.getResourceJumpInfo(it[i].id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.resourceJumpLiveData.observeResult(this, success = {
|
||||
dialogManager.dismissDialog()
|
||||
it?.let {
|
||||
if (it.isPick) {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
} else {
|
||||
RecommendRoomDialog.newInstance(it).show(context)
|
||||
}
|
||||
}
|
||||
}, failed = {
|
||||
dialogManager.dismissDialog()
|
||||
if ((it as? ServerException)?.code == PayModel.NOT_REAL_NAME_BEFORE_CHARGING) {
|
||||
dialogManager.showTipsDialog(getString(R.string.tips_need_to_certification),
|
||||
getString(R.string.go_to_certification),
|
||||
object : DialogManager.AbsOkDialogListener() {
|
||||
override fun onOk() {
|
||||
// 跳去实名认证页面
|
||||
CommonWebViewActivity.start(
|
||||
this@PartyFragment.context,
|
||||
UriProvider.getTutuRealNamePage()
|
||||
)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
toast(it.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun initBanner() {
|
||||
viewModel.bannerLiveData.observe(this) {
|
||||
BannerHelper.setBanner(mBinding.rollView, it) { _, data ->
|
||||
var roomId: Long? = null
|
||||
if (data.skipType == BannerInfo.SKIP_TYPE_ROUTER) {
|
||||
if (JavaUtil.str2int(data.routerType) == RouterType.ROOM) {
|
||||
roomId = JavaUtil.str2long(data.routerValue)
|
||||
}
|
||||
} else if (data.skipType == BannerInfo.SKIP_TYP_CHAT_ROOM) {
|
||||
roomId = JavaUtil.str2long(data.skipUri)
|
||||
}
|
||||
if (roomId != null) {
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_BANNER_CLICK, roomId.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
}
|
@@ -0,0 +1,75 @@
|
||||
package com.nnbc123.app.home.fragment.home.party
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.avroom.activity.AVRoomActivity
|
||||
import com.nnbc123.app.base.BaseBindingFragment
|
||||
import com.nnbc123.app.common.EmptyViewHelper
|
||||
import com.nnbc123.app.databinding.HomePartyRoomFragmentBinding
|
||||
import com.nnbc123.app.home.HomeViewModel
|
||||
import com.nnbc123.app.home.adapter.HomePartyRoomAdapter
|
||||
import com.nnbc123.app.ui.utils.RVDelegate
|
||||
import com.nnbc123.core.home.bean.HomeRoomInfo
|
||||
import com.nnbc123.core.home.event.RefreshHomeDataEvent
|
||||
import com.nnbc123.core.statistic.StatisticManager
|
||||
import com.nnbc123.core.statistic.protocol.StatisticsProtocol
|
||||
import com.nnbc123.library.annatation.ActLayoutRes
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/18 19:35
|
||||
* Desc:
|
||||
**/
|
||||
@ActLayoutRes(R.layout.home_party_room_fragment)
|
||||
class PartyHotRoomFragment : BaseBindingFragment<HomePartyRoomFragmentBinding>() {
|
||||
private val adapter = HomePartyRoomAdapter()
|
||||
private val homeViewModel: HomeViewModel by activityViewModels()
|
||||
override fun initiate() {
|
||||
val rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
|
||||
.setAdapter(adapter)
|
||||
.setRecyclerView(mBinding.recyclerView)
|
||||
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无数据"))
|
||||
.setLayoutManager(GridLayoutManager(context, 2))
|
||||
.build()
|
||||
adapter.setOnItemClickListener { _, _, position ->
|
||||
adapter.getItem(position)?.let {
|
||||
AVRoomActivity.start(context, it.uid)
|
||||
StatisticManager.Instance()
|
||||
.onEvent(StatisticsProtocol.EVENT_HOMEPAGE_ROOM_CLICK, it.uid.toString())
|
||||
}
|
||||
}
|
||||
homeViewModel.hotRoomLiveData.observe(this) {
|
||||
rvDelegate.loadData(it)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
fun loadData(isRefresh: Boolean) {
|
||||
homeViewModel.getHotRoom(1, Int.MAX_VALUE)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
EventBus.getDefault().register(this)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
loadData(true)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
EventBus.getDefault().unregister(this)
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
|
||||
if (isResumed) loadData(true)
|
||||
}
|
||||
}
|
@@ -0,0 +1,107 @@
|
||||
package com.nnbc123.app.home.refresh
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import com.chuhai.utils.UiUtils
|
||||
import com.nnbc123.app.R
|
||||
import com.nnbc123.app.ui.utils.loadFromAssets
|
||||
import com.opensource.svgaplayer.SVGADrawable
|
||||
import com.opensource.svgaplayer.SVGAImageView
|
||||
import com.scwang.smartrefresh.layout.api.RefreshHeader
|
||||
import com.scwang.smartrefresh.layout.api.RefreshKernel
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout
|
||||
import com.scwang.smartrefresh.layout.constant.RefreshState
|
||||
import com.scwang.smartrefresh.layout.constant.SpinnerStyle
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/26 19:35
|
||||
* Desc:
|
||||
**/
|
||||
class HomeRefreshHeader : FrameLayout, RefreshHeader {
|
||||
|
||||
private var svgaView: SVGAImageView? = null
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attrs,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet?,
|
||||
defStyleAttr: Int,
|
||||
defStyleRes: Int
|
||||
) : super(context, attrs, defStyleAttr, defStyleRes)
|
||||
|
||||
init {
|
||||
svgaView = SVGAImageView(context)
|
||||
svgaView?.setImageResource(R.drawable.base_ic_refresh_header)
|
||||
val size = UiUtils.dip2px(34f)
|
||||
val layoutParams = LayoutParams(size, size)
|
||||
layoutParams.gravity = Gravity.CENTER
|
||||
addView(svgaView, layoutParams)
|
||||
}
|
||||
|
||||
override fun onStateChanged(
|
||||
refreshLayout: RefreshLayout?,
|
||||
oldState: RefreshState?,
|
||||
newState: RefreshState?
|
||||
) {
|
||||
}
|
||||
|
||||
override fun getView(): View {
|
||||
return this
|
||||
}
|
||||
|
||||
override fun getSpinnerStyle(): SpinnerStyle {
|
||||
return SpinnerStyle.Translate
|
||||
}
|
||||
|
||||
override fun setPrimaryColors(vararg colors: Int) {
|
||||
}
|
||||
|
||||
override fun onInitialized(kernel: RefreshKernel?, height: Int, extendHeight: Int) {
|
||||
}
|
||||
|
||||
override fun onHorizontalDrag(percentX: Float, offsetX: Int, offsetMax: Int) {
|
||||
}
|
||||
|
||||
override fun onStartAnimator(layout: RefreshLayout?, height: Int, extendHeight: Int) {
|
||||
if (svgaView?.drawable is SVGADrawable) {
|
||||
svgaView?.startAnimation()
|
||||
} else {
|
||||
svgaView?.loadFromAssets("svga/refresh_header.svga")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFinish(layout: RefreshLayout?, success: Boolean): Int {
|
||||
svgaView?.stopAnimation()
|
||||
return 500
|
||||
}
|
||||
|
||||
override fun isSupportHorizontalDrag(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onPullingDown(
|
||||
percent: Float,
|
||||
offset: Int,
|
||||
headerHeight: Int,
|
||||
extendHeight: Int
|
||||
) {
|
||||
}
|
||||
|
||||
override fun onReleasing(
|
||||
percent: Float,
|
||||
offset: Int,
|
||||
headerHeight: Int,
|
||||
extendHeight: Int
|
||||
) {
|
||||
}
|
||||
}
|
@@ -193,7 +193,8 @@ class AnchorCardView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleAudio(list: List<String?>) {
|
||||
private fun toggleAudio(list: List<String?>?) {
|
||||
if (list == null) return
|
||||
if (ListUtils.isListEmpty(list)) return
|
||||
var url: String? = ""
|
||||
for (s in list) {
|
||||
|
@@ -0,0 +1,24 @@
|
||||
package com.nnbc123.app.home.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import com.zhpan.bannerview.BannerViewPager
|
||||
|
||||
/**
|
||||
* Created by Max on 2023/12/21 17:52
|
||||
* Desc:修复BannerViewPager高度模式为MeasureSpec.UNSPECIFIED,导致的未复用问题
|
||||
**/
|
||||
class HomeBannerViewPager<T> : BannerViewPager<T> {
|
||||
constructor(context: Context?) : super(context)
|
||||
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
|
||||
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
|
||||
context,
|
||||
attrs,
|
||||
defStyleAttr
|
||||
)
|
||||
|
||||
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
||||
val hSize = MeasureSpec.getSize(heightMeasureSpec)
|
||||
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(hSize, MeasureSpec.EXACTLY))
|
||||
}
|
||||
}
|
@@ -12,6 +12,7 @@ import android.text.Spanned;
|
||||
import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -670,6 +671,9 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi
|
||||
if (limitInfo == null) {
|
||||
return;
|
||||
}
|
||||
if (inputPanel == null) {
|
||||
return;
|
||||
}
|
||||
int model = limitInfo.getModel();
|
||||
if (model == 2) {
|
||||
isChat = limitInfo.isChat();
|
||||
|
@@ -66,6 +66,7 @@ import com.nnbc123.app.vip.VipHelper;
|
||||
import com.nnbc123.core.auth.AuthModel;
|
||||
import com.nnbc123.core.im.friend.IMFriendModel;
|
||||
import com.nnbc123.core.level.UserLevelVo;
|
||||
import com.nnbc123.core.noble.NobleUtil;
|
||||
import com.nnbc123.core.praise.PraiseModel;
|
||||
import com.nnbc123.core.praise.event.IsLikedEvent;
|
||||
import com.nnbc123.core.praise.event.PraiseEvent;
|
||||
@@ -86,6 +87,7 @@ import com.nnbc123.library.annatation.ActLayoutRes;
|
||||
import com.nnbc123.library.utils.ListUtils;
|
||||
import com.nnbc123.library.utils.SingleToastUtil;
|
||||
import com.nnbc123.library.utils.SizeUtils;
|
||||
import com.nnbc123.library.utils.StringUtils;
|
||||
import com.nnbc123.xchat_android_constants.XChatConstants;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
@@ -144,7 +146,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
getUserInfo();
|
||||
initAttentionView();
|
||||
initNestScrollView();
|
||||
setEditButton(identityState, true);
|
||||
setEditButton(identityState, false);
|
||||
setTitleVisible(false);
|
||||
// initViewPager(true);
|
||||
if (userId != AuthModel.get().getCurrentUid() && !VipHelper.isHideLookUser()) {
|
||||
@@ -207,19 +209,40 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.ivEdit.setOnClickListener(this);
|
||||
mBinding.flAvatar.setOnClickListener(this);
|
||||
mBinding.tvErbanId.setOnClickListener(this);
|
||||
mBinding.layoutRoom.setOnClickListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* 找到TA, 主态不展示
|
||||
*/
|
||||
private void setWhereVisible() {
|
||||
if (viewModel.getMRoomUid() != 0) {
|
||||
mBinding.flLiving.setVisibility(View.VISIBLE);
|
||||
ImageLoadKt.loadFromAssets(mBinding.svgaLiving, "svga/living_black.svga");
|
||||
mBinding.ivAvatar.setBorderColor(Color.parseColor("#FFE710"));
|
||||
private void loadRoomInfo(UserDetailInfo.DataBean info){
|
||||
if (info != null && info.getRoomUid() > 0) {
|
||||
mBinding.layoutRoom.setVisibility(View.VISIBLE);
|
||||
ImageLoadKt.loadFromAssets(mBinding.svgaRoom, "svga/user_in_live.svga");
|
||||
mBinding.tvRoomName.setText(info.getRoomTitle());
|
||||
} else {
|
||||
mBinding.flLiving.setVisibility(View.GONE);
|
||||
mBinding.svgaRoom.stopAnimation();
|
||||
mBinding.layoutRoom.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadUserAvatar(UserDetailInfo.DataBean info) {
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
String avatar = info.getAvatar();
|
||||
String avatarBorder = null;
|
||||
if (info.getUserHeadwear() != null) {
|
||||
avatarBorder = info.getUserHeadwear().getEffect();
|
||||
if (StringUtils.isEmpty(avatarBorder)) {
|
||||
avatarBorder = info.getUserHeadwear().getPic();
|
||||
}
|
||||
}
|
||||
ImageLoadKt.loadAvatar(mBinding.ivAvatar, avatar);
|
||||
if (StringUtils.isEmpty(avatarBorder)) {
|
||||
mBinding.ivAvatar.setBorderColor(Color.WHITE);
|
||||
mBinding.ivAvatarBorder.setVisibility(View.GONE);
|
||||
} else {
|
||||
mBinding.ivAvatar.setBorderColor(Color.TRANSPARENT);
|
||||
NobleUtil.loadHeadWear(avatarBorder, mBinding.ivAvatarBorder);
|
||||
mBinding.ivAvatarBorder.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,7 +331,13 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
isShowPage = true;
|
||||
}
|
||||
initPhoto(dataBean.getPrivatePhoto());
|
||||
setWhereVisible();
|
||||
loadRoomInfo(dataBean);
|
||||
loadUserAvatar(dataBean);
|
||||
if (dataBean.isInOnline()) {
|
||||
mBinding.layoutOnline.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
mBinding.layoutOnline.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -386,7 +415,6 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
|
||||
VipHelper.loadVipIcon(mBinding.ivVipIcon, userInfo.getUserVipInfoVO());
|
||||
ImageLoadKt.loadAvatar(mBinding.ivAvatar, userInfo.getAvatar());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -536,6 +564,17 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.layout_room:
|
||||
if (userInfo == null) {
|
||||
toast("用户信息为空。");
|
||||
return;
|
||||
}
|
||||
if (viewModel.getMRoomUid() != 0) {
|
||||
AVRoomActivity.startForFromType(this, viewModel.getMRoomUid(),
|
||||
AVRoomActivity.FROM_TYPE_USER, userInfo.getNick(), String.valueOf(userInfo.getUid()));
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.iv_user_back:
|
||||
finish();
|
||||
break;
|
||||
@@ -602,14 +641,6 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
break;
|
||||
case R.id.fl_avatar:
|
||||
if (userInfo == null) {
|
||||
toast("用户信息为空。");
|
||||
return;
|
||||
}
|
||||
if (viewModel.getMRoomUid() != 0) {
|
||||
AVRoomActivity.startForFromType(this, viewModel.getMRoomUid(),
|
||||
AVRoomActivity.FROM_TYPE_USER, userInfo.getNick(), String.valueOf(userInfo.getUid()));
|
||||
}
|
||||
break;
|
||||
case R.id.tv_erban_id:
|
||||
if (userInfo == null) {
|
||||
|
@@ -26,12 +26,12 @@ class SkillCardAdapter(private val context: Context) :
|
||||
helper.setText(R.id.tv_desc, buffer.toString())
|
||||
val radius = UIUtil.dip2px(context, 8.0)
|
||||
val drawable = when (item?.cardId) {
|
||||
1 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#EEF2FF"))
|
||||
2 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#FEF5E8"))
|
||||
3 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#F9ECFF"))
|
||||
4 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#E9FFF4"))
|
||||
5 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#F2FFE0"))
|
||||
6 -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#FFE7EF"))
|
||||
1L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#EEF2FF"))
|
||||
2L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#FEF5E8"))
|
||||
3L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#F9ECFF"))
|
||||
4L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#E9FFF4"))
|
||||
5L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#F2FFE0"))
|
||||
6L -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#FFE7EF"))
|
||||
else -> GradientDrawableCreator.createDrawable(radius, Color.parseColor("#FFE4FB"))
|
||||
}
|
||||
helper.itemView.background = drawable
|
||||
|
@@ -82,7 +82,7 @@ class UserInfoInfoFragment : BaseViewBindingFragment<FragmentUserinfoUserinfoBin
|
||||
* 技能卡
|
||||
*/
|
||||
private fun initSkillCardList(list: List<UserInfoSkillEntity>) {
|
||||
val audio = list.find { it.cardId == 8 }
|
||||
val audio = list.find { it.cardId == 8L }
|
||||
val newList: MutableList<UserInfoSkillEntity> = list.toMutableList()
|
||||
if (audio != null) {
|
||||
(activity as? UserInfoActivity)?.initVoiceShow(audio)
|
||||
|
@@ -34,21 +34,27 @@ import java.net.URL
|
||||
fun ImageView.load(
|
||||
url: String?,
|
||||
@Dimension(unit = DP) round: Float = 0f,
|
||||
@DrawableRes defaultRes: Int = R.drawable.default_cover
|
||||
@DrawableRes defaultRes: Int? = R.drawable.default_cover
|
||||
) {
|
||||
|
||||
if (context.isDestroyed()) return
|
||||
|
||||
if (url.isNullOrEmpty()) {
|
||||
load(defaultRes)
|
||||
if (defaultRes != null) {
|
||||
load(defaultRes)
|
||||
} else {
|
||||
setImageDrawable(null)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
GlideApp.with(context).load(url)
|
||||
.dontAnimate()
|
||||
.placeholder(defaultRes)
|
||||
.error(defaultRes)
|
||||
.apply {
|
||||
if (defaultRes != null) {
|
||||
placeholder(defaultRes)
|
||||
error(defaultRes)
|
||||
}
|
||||
if (round != 0f) transform(CenterCrop(), RoundedCorners(ScreenUtil.dip2px(round)))
|
||||
}
|
||||
.into(this)
|
||||
|
@@ -147,9 +147,9 @@ public class MainRedPointTab extends RelativeLayout {
|
||||
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_PARTY:
|
||||
resId = select ? R.mipmap.ic_main_tab_party_pressed : R.mipmap.ic_main_tab_party;
|
||||
break;
|
||||
// case MainTabType.TAB_TYPE_PARTY:
|
||||
// resId = select ? R.mipmap.ic_main_tab_party_pressed : R.mipmap.ic_main_tab_party;
|
||||
// break;
|
||||
case MainTabType.TAB_TYPE_MSG:
|
||||
resId = select ? R.mipmap.ic_main_tab_msg_pressed : R.mipmap.ic_main_tab_msg;
|
||||
break;
|
||||
|
@@ -25,9 +25,9 @@ import java.util.List;
|
||||
*/
|
||||
public class MainTabLayout extends LinearLayout implements View.OnClickListener {
|
||||
|
||||
private final List<MainRedPointTab> tabViewList = new ArrayList<>(5);
|
||||
private final List<MainRedPointTab> tabViewList = new ArrayList<>(4);
|
||||
private MainRedPointTab homeTab;
|
||||
private MainRedPointTab partyTab;
|
||||
// private MainRedPointTab partyTab;
|
||||
private MainRedPointTab squareTab;
|
||||
private MainRedPointTab msgTab;
|
||||
private MainRedPointTab meTab;
|
||||
@@ -60,24 +60,24 @@ public class MainTabLayout extends LinearLayout implements View.OnClickListener
|
||||
|
||||
squareTab = findViewById(R.id.main_square_tab);
|
||||
msgTab = findViewById(R.id.main_msg_tab);
|
||||
partyTab = findViewById(R.id.main_party_tab);
|
||||
// partyTab = findViewById(R.id.main_party_tab);
|
||||
homeTab = findViewById(R.id.main_home_tab);
|
||||
meTab = findViewById(R.id.main_me_tab);
|
||||
|
||||
homeTab.setOnClickListener(this);
|
||||
meTab.setOnClickListener(this);
|
||||
partyTab.setOnClickListener(this);
|
||||
// partyTab.setOnClickListener(this);
|
||||
squareTab.setOnClickListener(this);
|
||||
msgTab.setOnClickListener(this);
|
||||
|
||||
tabViewList.add(homeTab);
|
||||
tabViewList.add(partyTab);
|
||||
// tabViewList.add(partyTab);
|
||||
tabViewList.add(squareTab);
|
||||
tabViewList.add(msgTab);
|
||||
tabViewList.add(meTab);
|
||||
}
|
||||
|
||||
public void setMainTabInfoList(@NonNull @Size(5) List<MainTabInfo> mainTabInfoList) {
|
||||
public void setMainTabInfoList(@NonNull @Size(4) List<MainTabInfo> mainTabInfoList) {
|
||||
this.mainTabInfoList = mainTabInfoList;
|
||||
for (int i = 0; i < mainTabInfoList.size(); i++) {
|
||||
MainTabInfo mainTabInfo = mainTabInfoList.get(i);
|
||||
@@ -110,22 +110,22 @@ public class MainTabLayout extends LinearLayout implements View.OnClickListener
|
||||
switch (v.getId()) {
|
||||
case R.id.main_home_tab:
|
||||
select(mainTabInfoList.get(0).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOME_FIRST_TAB, "首页tab");
|
||||
break;
|
||||
case R.id.main_party_tab:
|
||||
select(mainTabInfoList.get(1).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_BAR_CLICK, "首页");
|
||||
break;
|
||||
// case R.id.main_party_tab:
|
||||
// select(mainTabInfoList.get(1).getTabType());
|
||||
// break;
|
||||
case R.id.main_square_tab:
|
||||
select(mainTabInfoList.get(2).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_SQUARE_DONG_TAI_CLICK, "点击广场动态页");
|
||||
select(mainTabInfoList.get(1).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_BAR_CLICK, "广场");
|
||||
break;
|
||||
case R.id.main_msg_tab:
|
||||
select(mainTabInfoList.get(3).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_MESSAGE, "消息页");
|
||||
select(mainTabInfoList.get(2).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_BAR_CLICK, "消息");
|
||||
break;
|
||||
case R.id.main_me_tab:
|
||||
select(mainTabInfoList.get(4).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOME_MINE_TAB, "我的tab");
|
||||
select(mainTabInfoList.get(3).getTabType());
|
||||
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_HOMEPAGE_BAR_CLICK, "我的");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public class MainTabLayout extends LinearLayout implements View.OnClickListener
|
||||
if (mLastPosition == tabType) return;
|
||||
squareTab.select(tabType == MainTabType.TAB_TYPE_SQUARE);
|
||||
msgTab.select(tabType == MainTabType.TAB_TYPE_MSG);
|
||||
partyTab.select(tabType == MainTabType.TAB_TYPE_PARTY);
|
||||
// partyTab.select(tabType == MainTabType.TAB_TYPE_PARTY);
|
||||
homeTab.select(tabType == MainTabType.TAB_TYPE_HOME);
|
||||
meTab.select(tabType == MainTabType.TAB_TYPE_ME);
|
||||
if (mOnTabClickListener != null) {
|
||||
|
@@ -22,6 +22,8 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
|
||||
|
||||
private boolean isAlwaysBold;
|
||||
|
||||
private boolean autoResetPivot;
|
||||
|
||||
public ScaleTransitionPagerTitleView(Context context, boolean selectedBold) {
|
||||
super(context);
|
||||
this.selectedBold = selectedBold;
|
||||
@@ -34,6 +36,10 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
|
||||
@Override
|
||||
public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) {
|
||||
super.onEnter(index, totalCount, enterPercent, leftToRight);
|
||||
if (autoResetPivot) {
|
||||
setPivotX(getWidth() / 2f);
|
||||
setPivotY(getHeight() / 2f);
|
||||
}
|
||||
// 实现颜色渐变
|
||||
setScaleX(mMinScale + (1.0f - mMinScale) * enterPercent);
|
||||
setScaleY(mMinScale + (1.0f - mMinScale) * enterPercent);
|
||||
@@ -42,6 +48,10 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
|
||||
@Override
|
||||
public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) {
|
||||
super.onLeave(index, totalCount, leavePercent, leftToRight);
|
||||
if (autoResetPivot) {
|
||||
setPivotX(getWidth() / 2f);
|
||||
setPivotY(getHeight() / 2f);
|
||||
}
|
||||
// 实现颜色渐变
|
||||
setScaleX(1.0f + (mMinScale - 1.0f) * leavePercent);
|
||||
setScaleY(1.0f + (mMinScale - 1.0f) * leavePercent);
|
||||
@@ -82,4 +92,8 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setAutoResetPivot(boolean state) {
|
||||
autoResetPivot = state;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -184,7 +184,7 @@ public class CommonNavigator extends FrameLayout implements IPagerNavigator, Nav
|
||||
if (mAdapter != null) {
|
||||
mIndicator = mAdapter.getIndicator(getContext());
|
||||
if (mIndicator instanceof View) {
|
||||
LayoutParams lp = (LayoutParams) ((View) mIndicator).getLayoutParams();
|
||||
ViewGroup.LayoutParams lp = ((View) mIndicator).getLayoutParams();
|
||||
if (lp == null) {
|
||||
lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
}
|
||||
|
@@ -0,0 +1,177 @@
|
||||
package com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.indicators;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
|
||||
import com.nnbc123.app.ui.widget.magicindicator.FragmentContainerHelper;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
|
||||
import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.model.PositionData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class DrawableIndicator extends View implements IPagerIndicator {
|
||||
public static final int MODE_MATCH_EDGE = 0; // drawable宽度 == title宽度 - 2 * mXOffset
|
||||
public static final int MODE_WRAP_CONTENT = 1; // drawable宽度 == title内容宽度 - 2 * mXOffset
|
||||
public static final int MODE_EXACTLY = 2;
|
||||
|
||||
private int mMode; // 默认为MODE_MATCH_EDGE模式
|
||||
private Drawable mIndicatorDrawable;
|
||||
|
||||
// 控制动画
|
||||
private Interpolator mStartInterpolator = new LinearInterpolator();
|
||||
private Interpolator mEndInterpolator = new LinearInterpolator();
|
||||
|
||||
private float mDrawableHeight;
|
||||
private float mDrawableWidth;
|
||||
private float mYOffset;
|
||||
private float mXOffset;
|
||||
|
||||
private List<PositionData> mPositionDataList;
|
||||
private Rect mDrawableRect = new Rect();
|
||||
|
||||
public DrawableIndicator(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||
if (mIndicatorDrawable == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mPositionDataList == null || mPositionDataList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算锚点位置
|
||||
PositionData current = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position);
|
||||
PositionData next = FragmentContainerHelper.getImitativePositionData(mPositionDataList, position + 1);
|
||||
|
||||
float leftX;
|
||||
float nextLeftX;
|
||||
float rightX;
|
||||
float nextRightX;
|
||||
if (mMode == MODE_MATCH_EDGE) {
|
||||
leftX = current.mLeft + mXOffset;
|
||||
nextLeftX = next.mLeft + mXOffset;
|
||||
rightX = current.mRight - mXOffset;
|
||||
nextRightX = next.mRight - mXOffset;
|
||||
mDrawableRect.top = (int) mYOffset;
|
||||
mDrawableRect.bottom = (int) (getHeight() - mYOffset);
|
||||
} else if (mMode == MODE_WRAP_CONTENT) {
|
||||
leftX = current.mContentLeft + mXOffset;
|
||||
nextLeftX = next.mContentLeft + mXOffset;
|
||||
rightX = current.mContentRight - mXOffset;
|
||||
nextRightX = next.mContentRight - mXOffset;
|
||||
mDrawableRect.top = (int) (current.mContentTop - mYOffset);
|
||||
mDrawableRect.bottom = (int) (current.mContentBottom + mYOffset);
|
||||
} else { // MODE_EXACTLY
|
||||
leftX = current.mLeft + (current.width() - mDrawableWidth) / 2;
|
||||
nextLeftX = next.mLeft + (next.width() - mDrawableWidth) / 2;
|
||||
rightX = current.mLeft + (current.width() + mDrawableWidth) / 2;
|
||||
nextRightX = next.mLeft + (next.width() + mDrawableWidth) / 2;
|
||||
mDrawableRect.top = (int) (getHeight() - mDrawableHeight - mYOffset);
|
||||
mDrawableRect.bottom = (int) (getHeight() - mYOffset);
|
||||
}
|
||||
|
||||
mDrawableRect.left = (int) (leftX + (nextLeftX - leftX) * mStartInterpolator.getInterpolation(positionOffset));
|
||||
mDrawableRect.right = (int) (rightX + (nextRightX - rightX) * mEndInterpolator.getInterpolation(positionOffset));
|
||||
mIndicatorDrawable.setBounds(mDrawableRect);
|
||||
|
||||
invalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (mIndicatorDrawable != null) {
|
||||
mIndicatorDrawable.draw(canvas);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPositionDataProvide(List<PositionData> dataList) {
|
||||
mPositionDataList = dataList;
|
||||
}
|
||||
|
||||
public Drawable getIndicatorDrawable() {
|
||||
return mIndicatorDrawable;
|
||||
}
|
||||
|
||||
public void setIndicatorDrawable(Drawable indicatorDrawable) {
|
||||
mIndicatorDrawable = indicatorDrawable;
|
||||
}
|
||||
|
||||
public Interpolator getStartInterpolator() {
|
||||
return mStartInterpolator;
|
||||
}
|
||||
|
||||
public void setStartInterpolator(Interpolator startInterpolator) {
|
||||
mStartInterpolator = startInterpolator;
|
||||
}
|
||||
|
||||
public Interpolator getEndInterpolator() {
|
||||
return mEndInterpolator;
|
||||
}
|
||||
|
||||
public void setEndInterpolator(Interpolator endInterpolator) {
|
||||
mEndInterpolator = endInterpolator;
|
||||
}
|
||||
|
||||
public int getMode() {
|
||||
return mMode;
|
||||
}
|
||||
|
||||
public void setMode(int mode) {
|
||||
if (mode == MODE_EXACTLY || mode == MODE_MATCH_EDGE || mode == MODE_WRAP_CONTENT) {
|
||||
mMode = mode;
|
||||
} else {
|
||||
throw new IllegalArgumentException("mode " + mode + " not supported.");
|
||||
}
|
||||
}
|
||||
|
||||
public float getDrawableHeight() {
|
||||
return mDrawableHeight;
|
||||
}
|
||||
|
||||
public void setDrawableHeight(float drawableHeight) {
|
||||
mDrawableHeight = drawableHeight;
|
||||
}
|
||||
|
||||
public float getDrawableWidth() {
|
||||
return mDrawableWidth;
|
||||
}
|
||||
|
||||
public void setDrawableWidth(float drawableWidth) {
|
||||
mDrawableWidth = drawableWidth;
|
||||
}
|
||||
|
||||
public float getYOffset() {
|
||||
return mYOffset;
|
||||
}
|
||||
|
||||
public void setYOffset(float yOffset) {
|
||||
mYOffset = yOffset;
|
||||
}
|
||||
|
||||
public float getXOffset() {
|
||||
return mXOffset;
|
||||
}
|
||||
|
||||
public void setXOffset(float xOffset) {
|
||||
mXOffset = xOffset;
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 866 B |
Before Width: | Height: | Size: 924 B |
Before Width: | Height: | Size: 397 B |
Before Width: | Height: | Size: 303 B |
Before Width: | Height: | Size: 650 B |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 584 B |
Before Width: | Height: | Size: 5.1 KiB |
BIN
app/src/main/res/drawable-xxhdpi/base_ic_refresh_header.webp
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxhdpi/game_room_bg_friends.webp
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable-xxhdpi/game_room_bg_item_default.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-xxhdpi/game_room_ic_mic.webp
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_bg_friends_empty.webp
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_bg_indicator.webp
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_bg_match.webp
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_bg_message.webp
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_bg_top.webp
Normal file
After Width: | Height: | Size: 143 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_ic_my_room.webp
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_ic_partner.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_ic_pk.webp
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_ic_rank.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable-xxhdpi/home_ic_resource_more.webp
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_gender_female.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_gender_male.webp
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_home_hot_hot.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |