Compare commits
12 Commits
dev/molist
...
dev/app_cp
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ce50e32a73 | ||
![]() |
7223db9e9c | ||
![]() |
4a2a9d4400 | ||
![]() |
8049bdf6ea | ||
![]() |
c90a961e2f | ||
![]() |
892f7c3e70 | ||
![]() |
4c8182ee2f | ||
![]() |
343e73c6e3 | ||
![]() |
eabe2ae7f8 | ||
![]() |
36c011d18e | ||
![]() |
f929d78540 | ||
![]() |
8184cdd6e1 |
@@ -51,9 +51,9 @@
|
||||
tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.FLASHLIGHT" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission tools:node="remove" android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<uses-permission tools:node="remove" android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<uses-permission
|
||||
android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
@@ -316,6 +316,9 @@
|
||||
android:name=".ui.user.activity.UserInfoActivity"
|
||||
android:label="@string/main_androidmanifest_016"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".ui.user.activity.UserCpListActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".audio.AudioRecordActivity"
|
||||
android:label="@string/main_androidmanifest_017"
|
||||
|
BIN
app/src/main/assets/mp4/cp_bind.mp4
Normal file
BIN
app/src/main/assets/mp4/cp_userinfo_anim_3.mp4
Normal file
BIN
app/src/main/assets/mp4/cp_userinfo_anim_4.mp4
Normal file
BIN
app/src/main/assets/mp4/cp_userinfo_anim_5.mp4
Normal file
BIN
app/src/main/assets/svga/cp_level_up_1.svga
Normal file
BIN
app/src/main/assets/svga/cp_level_up_2.svga
Normal file
BIN
app/src/main/assets/svga/cp_level_up_3.svga
Normal file
BIN
app/src/main/assets/svga/cp_level_up_4.svga
Normal file
BIN
app/src/main/assets/svga/cp_level_up_5.svga
Normal file
BIN
app/src/main/assets/svga/cp_list_head_1.svga
Normal file
BIN
app/src/main/assets/svga/cp_list_head_2.svga
Normal file
BIN
app/src/main/assets/svga/cp_list_head_3.svga
Normal file
BIN
app/src/main/assets/svga/cp_list_head_4.svga
Normal file
BIN
app/src/main/assets/svga/cp_list_head_5.svga
Normal file
@@ -9,6 +9,7 @@ import android.content.res.Configuration;
|
||||
import android.graphics.Color;
|
||||
import android.net.http.HttpResponseCache;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
@@ -18,7 +18,7 @@ import com.chwl.app.R
|
||||
import com.chwl.app.avroom.widget.VDHLayout
|
||||
import com.chwl.app.ui.widget.dialog.BaseDialog
|
||||
|
||||
abstract class BaseRoomNotifyeBaseDialog<VB : ViewBinding>(context: Context, theme: Int = 0) : BaseDialog(context, theme) {
|
||||
abstract class BaseRoomNotifyDialog<VB : ViewBinding>(context: Context, theme: Int = 0) : BaseDialog(context, theme) {
|
||||
|
||||
protected val handle = Handler(Looper.getMainLooper())
|
||||
protected lateinit var mBinding: VB
|
||||
@@ -39,9 +39,11 @@ abstract class BaseRoomNotifyeBaseDialog<VB : ViewBinding>(context: Context, the
|
||||
|
||||
init()
|
||||
|
||||
handle.postDelayed({
|
||||
dismissDialog()
|
||||
}, (getStaySecond()*1000).toLong())
|
||||
if (useAutoDismiss()) {
|
||||
handle.postDelayed({
|
||||
dismissDialog()
|
||||
}, (getStaySecond()*1000).toLong())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
@@ -110,17 +112,38 @@ abstract class BaseRoomNotifyeBaseDialog<VB : ViewBinding>(context: Context, the
|
||||
super.setContentView(view, params)
|
||||
}
|
||||
|
||||
open fun dismissDialog(){
|
||||
try {
|
||||
dismiss()
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否启动侧滑,左滑:删除,右滑:回到原位置
|
||||
*/
|
||||
protected open fun useSlipSlip(): Boolean {
|
||||
return true
|
||||
}
|
||||
protected open fun useAutoDismiss(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
var mCallBack : CallBack? = null
|
||||
interface CallBack{
|
||||
fun onHide();
|
||||
}
|
||||
|
||||
open fun dismissDialog() {
|
||||
try {
|
||||
dismiss()
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
mCallBack?.onHide()
|
||||
}
|
||||
|
||||
open fun clearDialog() {
|
||||
try {
|
||||
dismiss()
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
open fun showDialog(){
|
||||
show()
|
||||
}
|
||||
}
|
@@ -19,20 +19,26 @@ import com.chwl.app.common.widget.dialog.DialogManager
|
||||
import com.chwl.app.databinding.RoomGameplayDialogBinding
|
||||
import com.chwl.app.home.helper.OpenRoomHelper
|
||||
import com.chwl.core.manager.AvRoomDataManager
|
||||
import com.chwl.core.room.bean.RoomIcon
|
||||
import com.chwl.core.room.bean.RoomInfo
|
||||
import com.chwl.core.room.bean.RoomModeType
|
||||
import com.chwl.core.room.core.RoomDataService
|
||||
import com.chwl.core.room.game.GameModel
|
||||
import com.chwl.core.room.game.GameModel.getGameList
|
||||
import com.chwl.core.room.game.bean.BaiShunGameConfig
|
||||
import com.chwl.core.room.game.bean.GameInfo
|
||||
import com.chwl.core.room.model.AvRoomModel
|
||||
import com.chwl.core.support.room.AudioRoomContext
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.library.utils.JavaUtil
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.ktx.asLifecycle
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.google.gson.Gson
|
||||
import com.unity3d.splash.services.core.lifecycle.LifecycleEvent
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
|
||||
class RoomGameListDialog :
|
||||
BottomSheetDialogFragment(), LifecycleObserver {
|
||||
private var binding: RoomGameplayDialogBinding? = null
|
||||
@@ -40,6 +46,10 @@ class RoomGameListDialog :
|
||||
private val adapter = RoomGameListAdapter()
|
||||
private var dialogManager: DialogManager? = null
|
||||
private lateinit var recycleView: RecyclerView
|
||||
val cacheKey = "game_list#${parentFragment.hashCode()}"
|
||||
private var mStatus = -1
|
||||
private var mGameData = arrayListOf<GameInfo>()
|
||||
var listener: RoomGameplayDialog.GameplayDialogListener? = null
|
||||
override fun getTheme(): Int {
|
||||
return R.style.ErbanBottomSheetDialogDimFalse
|
||||
}
|
||||
@@ -101,27 +111,50 @@ class RoomGameListDialog :
|
||||
}
|
||||
|
||||
private fun requestData() {
|
||||
val dataService =
|
||||
AudioRoomContext.get()
|
||||
?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
|
||||
val cacheKey = "game_list#${parentFragment.hashCode()}"
|
||||
|
||||
val dataService = AudioRoomContext.get()?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
|
||||
// val cacheKey = "game_list#${parentFragment.hashCode()}"
|
||||
val list = dataService?.getData(cacheKey) as? List<GameInfo>
|
||||
if (!list.isNullOrEmpty()) {
|
||||
updateDialogHeight(list.size)
|
||||
loadData(list)
|
||||
return
|
||||
}
|
||||
val disposable = getGameList(AvRoomDataManager.get().roomUid)
|
||||
|
||||
|
||||
val getGameList = getGameList(AvRoomDataManager.get().roomUid)
|
||||
.doOnError {
|
||||
SingleToastUtil.showToast(it.message)
|
||||
switchStatus(-2)
|
||||
if (mStatus != 1)switchStatus(-2)
|
||||
}
|
||||
.subscribe { it: List<GameInfo> ->
|
||||
LogUtils.d(" gamegame getGameList GameInfo = $it")
|
||||
mGameData.addAll(0,it)
|
||||
dataService?.putData(cacheKey, it)
|
||||
updateDialogHeight(it.size)
|
||||
loadData(it)
|
||||
updateDialogHeight(mGameData.size)
|
||||
loadData(mGameData)
|
||||
}
|
||||
getCompositeDisposable().add(disposable)
|
||||
|
||||
val roomGamePlayList = AvRoomModel.get().roomGamePlayList
|
||||
.doOnError {
|
||||
SingleToastUtil.showToast(it.message)
|
||||
if (mStatus != 1)switchStatus(-2)
|
||||
}
|
||||
.subscribe { it: List<RoomIcon> ->
|
||||
LogUtils.d(" gamegame roomGamePlayList RoomIcon = $it")
|
||||
it.forEachIndexed { index, roomIcon ->
|
||||
if (roomIcon.isBaiShunGame()) {
|
||||
mGameData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
|
||||
}
|
||||
}
|
||||
dataService?.putData(cacheKey, mGameData)
|
||||
updateDialogHeight(mGameData.size)
|
||||
loadData(mGameData)
|
||||
}
|
||||
|
||||
getCompositeDisposable().add(getGameList)
|
||||
getCompositeDisposable().add(roomGamePlayList)
|
||||
|
||||
}
|
||||
|
||||
private fun loadData(list: List<GameInfo>?) {
|
||||
@@ -134,6 +167,7 @@ class RoomGameListDialog :
|
||||
}
|
||||
|
||||
private fun switchStatus(status: Int) {
|
||||
mStatus = status
|
||||
when (status) {
|
||||
// loading
|
||||
0 -> {
|
||||
@@ -185,27 +219,55 @@ class RoomGameListDialog :
|
||||
dialogManager?.showOkCancelDialog(
|
||||
getString(R.string.room_switch_game_tips)
|
||||
) {
|
||||
if (gameInfo.isStandardRoom()) {
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
activity as BaseActivity,
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
RoomInfo.ROOMTYPE_HOME_PARTY,
|
||||
0,
|
||||
false
|
||||
)
|
||||
} else {
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
activity as BaseActivity,
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
RoomInfo.ROOMTYPE_GAME,
|
||||
JavaUtil.str2long(gameInfo.mgId),
|
||||
false
|
||||
)
|
||||
|
||||
if (gameInfo.mgId.isNotEmpty()) {
|
||||
if (gameInfo.isStandardRoom()) {
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
activity as BaseActivity,
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
RoomInfo.ROOMTYPE_HOME_PARTY,
|
||||
0,
|
||||
false
|
||||
)
|
||||
} else {
|
||||
OpenRoomHelper.updateRoomInfo(
|
||||
activity as BaseActivity,
|
||||
AvRoomDataManager.get().mCurrentRoomInfo,
|
||||
RoomInfo.ROOMTYPE_GAME,
|
||||
JavaUtil.str2long(gameInfo.mgId),
|
||||
false
|
||||
)
|
||||
}
|
||||
}else if(!gameInfo.skipContent.isNullOrEmpty() || !gameInfo.ruleValue.isNullOrEmpty()){
|
||||
jumpBaiShunGame(gameInfo)
|
||||
}
|
||||
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
||||
private fun jumpBaiShunGame(data: GameInfo) {
|
||||
try {
|
||||
val url = data.skipContent
|
||||
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
|
||||
data.ruleValue,
|
||||
RoomIcon.RuleValueBean::class.java
|
||||
)
|
||||
val config = Gson().fromJson<BaiShunGameConfig>(
|
||||
ruleValue.RESERVE,
|
||||
BaiShunGameConfig::class.java
|
||||
)
|
||||
if (config != null && url != null) {
|
||||
config.reloadDynamicParams()
|
||||
listener?.onShowBaiShunGame(url, config)
|
||||
} else {
|
||||
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
onUnbindContext()
|
||||
@@ -233,4 +295,8 @@ class RoomGameListDialog :
|
||||
return currentRoomInfo != null && currentRoomInfo.type != RoomInfo.ROOM_TYPE_SINGLE &&
|
||||
(currentRoomInfo.roomModeType == RoomModeType.NORMAL_MODE || currentRoomInfo.roomModeType == 2 || currentRoomInfo.roomModeType == 4)
|
||||
}
|
||||
|
||||
interface GameplayDialogListener {
|
||||
fun onShowBaiShunGame(url: String, config: BaiShunGameConfig)
|
||||
}
|
||||
}
|
@@ -0,0 +1,87 @@
|
||||
package com.chwl.app.avroom.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.view.LayoutInflater
|
||||
import com.chwl.app.databinding.RoomNotifyCpBindBinding
|
||||
import com.chwl.app.ui.utils.CpUtils
|
||||
import com.chwl.core.gift.bean.CpMsgBean
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.tencent.qgame.animplayer.inter.IFetchResource
|
||||
import com.tencent.qgame.animplayer.mix.Resource
|
||||
import com.tencent.qgame.animplayer.util.ScaleType
|
||||
|
||||
class RoomNotifyCpBindDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpBindBinding>(context) {
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpBindBinding {
|
||||
return RoomNotifyCpBindBinding.inflate(inflater)
|
||||
}
|
||||
|
||||
var cpMsgBean : CpMsgBean? = null
|
||||
var senderAvatar : Bitmap? = null
|
||||
var receiverAvatar : Bitmap? = null
|
||||
var index = 0
|
||||
|
||||
|
||||
override fun init() {
|
||||
cpMsgBean?.let { data->
|
||||
mBinding.anim.setScaleType(ScaleType.CENTER_CROP)
|
||||
|
||||
|
||||
mBinding.anim.setFetchResource(object : IFetchResource {
|
||||
|
||||
override fun fetchImage(resource: Resource, result: (Bitmap?) -> Unit) {
|
||||
result(if (resource.tag == "avatar1") senderAvatar else receiverAvatar)
|
||||
}
|
||||
|
||||
override fun fetchText(resource: Resource, result: (String?) -> Unit) {
|
||||
var name = ""
|
||||
try {
|
||||
name = if (resource.tag == "name1") data.senderNick else data.receiverNick
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
result(name)
|
||||
}
|
||||
|
||||
override fun releaseResource(resources: List<Resource>) {
|
||||
resources?.forEach {
|
||||
it?.bitmap?.recycle()
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
mBinding.anim.startPlay(context.assets,"mp4/cp_bind.mp4")
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
override fun useSlipSlip() = false
|
||||
override fun useAutoDismiss() = true
|
||||
|
||||
override fun showDialog() {
|
||||
index = 0
|
||||
cpMsgBean?.let {
|
||||
CpUtils.downLoadAvatar(it.senderAvatar) { resource ->
|
||||
index += 1
|
||||
senderAvatar = resource
|
||||
checkImg()
|
||||
}
|
||||
CpUtils.downLoadAvatar(it.receiverAvatar) { resource ->
|
||||
index += 1
|
||||
receiverAvatar = resource
|
||||
checkImg()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun checkImg() {
|
||||
if (index == 2){
|
||||
show()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package com.chwl.app.avroom.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import com.chwl.app.databinding.RoomNotifyCpGiftBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.core.gift.bean.CpMsgBean
|
||||
import kotlin.math.truncate
|
||||
|
||||
/**
|
||||
* cp 飘屏
|
||||
*/
|
||||
class RoomNotifyCpGiftDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpGiftBinding>(context) {
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpGiftBinding {
|
||||
return RoomNotifyCpGiftBinding.inflate(inflater)
|
||||
}
|
||||
|
||||
var cpMsgBean : CpMsgBean? = null
|
||||
|
||||
override fun init() {
|
||||
cpMsgBean?.let {
|
||||
ImageLoadUtils.loadImage(mBinding.sendAvatar,it.senderAvatar)
|
||||
ImageLoadUtils.loadImage(mBinding.receiverAvatar,it.receiverAvatar)
|
||||
ImageLoadUtils.loadImage(mBinding.gift,it.giftUrl)
|
||||
}
|
||||
}
|
||||
|
||||
override fun useSlipSlip() = true
|
||||
|
||||
}
|
@@ -0,0 +1,101 @@
|
||||
package com.chwl.app.avroom.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.text.Layout
|
||||
import android.text.StaticLayout
|
||||
import android.text.TextPaint
|
||||
import android.view.LayoutInflater
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.avroom.helper.AnimHelper
|
||||
import com.chwl.app.databinding.RoomNotifyCpLevelUpBinding
|
||||
import com.chwl.app.ui.utils.CpUtils
|
||||
import com.chwl.app.ui.utils.loadFromAssets
|
||||
import com.chwl.app.utils.SpannableBuilder
|
||||
import com.chwl.core.gift.bean.CpMsgBean
|
||||
import com.chwl.core.utils.SpanUtils
|
||||
import com.example.lib_utils.ktx.getColor
|
||||
import com.example.lib_utils.ktx.getString
|
||||
import com.opensource.svgaplayer.SVGADrawable
|
||||
import com.opensource.svgaplayer.SVGADynamicEntity
|
||||
import com.opensource.svgaplayer.SVGAParser
|
||||
import com.opensource.svgaplayer.SVGAParser.Companion.shareParser
|
||||
import com.opensource.svgaplayer.SVGAVideoEntity
|
||||
|
||||
class RoomNotifyLevelUpDialog (private val context: Context) : BaseRoomNotifyDialog<RoomNotifyCpLevelUpBinding>(context) {
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater): RoomNotifyCpLevelUpBinding {
|
||||
return RoomNotifyCpLevelUpBinding.inflate(inflater)
|
||||
}
|
||||
|
||||
var cpMsgBean : CpMsgBean ? = null
|
||||
|
||||
override fun init() {
|
||||
cpMsgBean?.let {
|
||||
SpanUtils.with(mBinding.text)
|
||||
.append(" ${it.senderNick} ").setForegroundColor(R.color.white.getColor())
|
||||
.append(" ${R.string.avroom_widget_roomeffectview_02.getString()} ").setForegroundColor(R.color.color_fff664.getColor())
|
||||
.append(" ${it.receiverNick} ").setForegroundColor(R.color.white.getColor())
|
||||
.append(" ${R.string.Become.getString()} ").setForegroundColor(R.color.color_fff664.getColor())
|
||||
.append(" ${CpUtils.getCpLevelUpStr(it.cpLevel)} ").setForegroundColor(R.color.white.getColor())
|
||||
.create()
|
||||
mBinding.text.setBackgroundResource(CpUtils.getCpLevelUpTextBg(it.cpLevel))
|
||||
|
||||
if (it.cpLevel < 1) return
|
||||
val svga = "svga/cp_level_up_${it.cpLevel}.svga"
|
||||
try {
|
||||
shareParser().decodeFromAssets(svga, object : SVGAParser.ParseCompletion {
|
||||
override fun onComplete(svgaVideoEntity: SVGAVideoEntity) {
|
||||
val dynamicEntity = SVGADynamicEntity()
|
||||
// val textPaint = TextPaint()
|
||||
// textPaint.color = Color.WHITE //字体颜色
|
||||
// textPaint.textSize = 24f //字体大小
|
||||
// dynamicEntity.setDynamicText(
|
||||
// StaticLayout(
|
||||
// text.build(),
|
||||
// 0,
|
||||
// text.build().length,
|
||||
// textPaint,
|
||||
// 0,
|
||||
// Layout.Alignment.ALIGN_CENTER,
|
||||
// 1.0f,
|
||||
// 0.0f,
|
||||
// false
|
||||
// ), "bg"
|
||||
// )
|
||||
|
||||
AnimHelper.addDynamicImage(
|
||||
mBinding.svga,
|
||||
dynamicEntity,
|
||||
it.senderAvatar,
|
||||
"user_img1"
|
||||
)
|
||||
AnimHelper.addDynamicImage(
|
||||
mBinding.svga,
|
||||
dynamicEntity,
|
||||
it.receiverAvatar,
|
||||
"user_img2"
|
||||
)
|
||||
|
||||
val drawable = SVGADrawable(svgaVideoEntity, dynamicEntity)
|
||||
mBinding.svga.setImageDrawable(drawable)
|
||||
mBinding.svga.stepToFrame(0, true)
|
||||
// mBinding.svga.startAnimation()
|
||||
}
|
||||
|
||||
override fun onError() {
|
||||
}
|
||||
}, null)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
override fun useSlipSlip() = false
|
||||
|
||||
}
|
@@ -18,7 +18,7 @@ import com.example.lib_utils.UiUtils
|
||||
* @Author Vance
|
||||
* 幸运礼物的飘屏,全服但是展示的时候限制只有房间才展示
|
||||
*/
|
||||
class BaseRoomNotifyeLuckGiftDialog(private val context: Context) : BaseRoomNotifyeBaseDialog<RoomNotifyLuckGiftDlgBinding>(context) {
|
||||
class RoomNotifyLuckGiftDialog(private val context: Context) : BaseRoomNotifyDialog<RoomNotifyLuckGiftDlgBinding>(context) {
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater): RoomNotifyLuckGiftDlgBinding {
|
||||
return RoomNotifyLuckGiftDlgBinding.inflate(inflater)
|
||||
@@ -61,15 +61,4 @@ class BaseRoomNotifyeLuckGiftDialog(private val context: Context) : BaseRoomNoti
|
||||
|
||||
}
|
||||
|
||||
var mCallBack : CallBack? = null
|
||||
interface CallBack{
|
||||
fun onHide();
|
||||
}
|
||||
|
||||
override fun dismissDialog() {
|
||||
super.dismissDialog()
|
||||
mCallBack?.onHide()
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -122,31 +122,30 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
true));
|
||||
rvOPtList.setLayoutManager(new FullyGridLayoutManager(getContext(), 5));
|
||||
optAdapter = new OptAdapter(context, null);
|
||||
addRoomAlbum(optAdapter);
|
||||
addDatingAction(optAdapter);
|
||||
// addPKAction(optAdapter);
|
||||
// addRoomPKAction(optAdapter);
|
||||
addSingleRoomPKAction(optAdapter);
|
||||
addSendBroadcastAction(optAdapter);
|
||||
// addInviteFansOptAdapter();
|
||||
addVipSendBroadcastAction(optAdapter);
|
||||
// addRedPacketAction(optAdapter);
|
||||
addRoomSettingAction(optAdapter);
|
||||
addGiftEffectAction(optAdapter);
|
||||
// addOpenOrClosePublicScreenAction(optAdapter);
|
||||
// addRedPackageSwitch();
|
||||
addCleanScreenAction(optAdapter);
|
||||
// addRoomLimit(optAdapter);
|
||||
// addGiftValueAction(optAdapter);
|
||||
addSuperAdminAction(optAdapter);
|
||||
addShieldReportAction(optAdapter);
|
||||
addRoomTypeSwitchAction(optAdapter);
|
||||
//todo-- add pk btn
|
||||
addRoomAlbum(optAdapter); //房间相册
|
||||
addDatingAction(optAdapter); // 相亲 模式
|
||||
addPKAction(optAdapter); //pk PK 模式-同房间
|
||||
addRoomPKAction(optAdapter); //跨房PK
|
||||
addSingleRoomPKAction(optAdapter); //个播PK
|
||||
// addSendBroadcastAction(optAdapter); //发布广播
|
||||
// addInviteFansOptAdapter(); //邀请粉丝
|
||||
addVipSendBroadcastAction(optAdapter); //小喇叭
|
||||
// addRedPacketAction(optAdapter); //红包
|
||||
addRoomSettingAction(optAdapter); //房间设置
|
||||
addGiftEffectAction(optAdapter); //礼物特效
|
||||
// addOpenOrClosePublicScreenAction(optAdapter); //公屏开关
|
||||
// addRedPackageSwitch(); // 开关红包
|
||||
addCleanScreenAction(optAdapter); //清空公屏
|
||||
// addRoomLimit(optAdapter); //添加房间限制
|
||||
// addGiftValueAction(optAdapter); //礼物值
|
||||
addSuperAdminAction(optAdapter); //超管管理
|
||||
addShieldReportAction(optAdapter); //举报屏蔽
|
||||
addRoomTypeSwitchAction(optAdapter); //房间类型切换
|
||||
rvOPtList.setAdapter(optAdapter);
|
||||
}
|
||||
|
||||
/**
|
||||
* PK 模式
|
||||
* PK 模式-同房间
|
||||
*
|
||||
* @param optAdapter
|
||||
*/
|
||||
@@ -171,6 +170,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
int icon = AvRoomDataManager.get().isOpenPKMode() ?
|
||||
R.drawable.ic_room_opt_op_pk :
|
||||
R.drawable.ic_room_opt_in_pk;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01));
|
||||
@@ -187,7 +189,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* 跨房PK
|
||||
* 跨房PK
|
||||
*
|
||||
* @param optAdapter
|
||||
*/
|
||||
@@ -211,6 +213,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
int icon = AvRoomDataManager.get().isOpenAnotherPKMode() ?
|
||||
R.drawable.ic_room_opt_another_pk_in :
|
||||
R.drawable.ic_room_opt_another_pk_open;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05));
|
||||
@@ -231,7 +236,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* 跨房PK
|
||||
* 个播PK
|
||||
*
|
||||
* @param optAdapter
|
||||
*/
|
||||
@@ -261,6 +266,9 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
R.drawable.ic_room_opt_single_pk_open :
|
||||
R.drawable.ic_room_opt_single_pk_in;
|
||||
String finalStr = str;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
|
||||
SingleRoomPKModel.INSTANCE
|
||||
@@ -280,6 +288,8 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//房间相册
|
||||
private void addRoomAlbum(OptAdapter optAdapter) {
|
||||
if (AvRoomDataManager.get().isHasRoomAlbum()) {
|
||||
optAdapter.addData(new OptAction(R.drawable.ic_room_operation_album, ResUtil.getString(R.string.room_album), () -> {
|
||||
@@ -344,7 +354,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* 相亲 模式
|
||||
* 红包
|
||||
*
|
||||
* @param optAdapter
|
||||
*/
|
||||
@@ -593,7 +603,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* 超管管理
|
||||
* 发布广播
|
||||
*/
|
||||
private void addSendBroadcastAction(OptAdapter optAdapter) {
|
||||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
@@ -618,7 +628,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
}
|
||||
|
||||
/**
|
||||
* 超管管理
|
||||
* 小喇叭
|
||||
*/
|
||||
private void addVipSendBroadcastAction(OptAdapter optAdapter) {
|
||||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
|
@@ -79,6 +79,7 @@ import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.bean.RoomMicInfo
|
||||
import com.chwl.core.gift.GiftModel
|
||||
import com.chwl.core.gift.bean.GiftInfo
|
||||
import com.chwl.core.gift.bean.GiftType
|
||||
import com.chwl.core.gift.event.GiftComboEvent
|
||||
import com.chwl.core.gift.event.RoomFreeGiftEvent
|
||||
import com.chwl.core.helper.AtProxy
|
||||
@@ -113,6 +114,7 @@ import com.chwl.core.support.room.RoomWidget
|
||||
import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.BaseInfo
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.core.utils.net.VipLevelNotEnoughException
|
||||
import com.chwl.library.common.util.LimitClickUtils
|
||||
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
|
||||
@@ -122,6 +124,7 @@ import com.chwl.library.utils.ListUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.chwl.library.utils.UIUtils
|
||||
import com.example.lib_utils.ktx.getString
|
||||
import com.google.gson.Gson
|
||||
import com.netease.nim.uikit.common.antispam.AntiSpamEvent
|
||||
import com.netease.nimlib.sdk.StatusCode
|
||||
@@ -645,14 +648,14 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
|
||||
@CallSuper
|
||||
open fun updateMicBtn() {
|
||||
//todo do 关麦开麦
|
||||
val currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo
|
||||
if (currentRoomInfo != null) {
|
||||
if (AudioEngineManager.get().isAudienceRole) {
|
||||
bottomView.setMicBtnEnable(false)
|
||||
bottomView.setMicBtnOpen(false)
|
||||
} else {
|
||||
val roomQueueInfo = AvRoomDataManager.get()
|
||||
.getRoomQueueMemberInfoByAccount(myUid.toString())
|
||||
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(myUid.toString())
|
||||
if (roomQueueInfo?.mChatRoomMember != null
|
||||
&& myUid.toString() == roomQueueInfo.mChatRoomMember.account
|
||||
&& roomQueueInfo.mRoomMicInfo?.isMicMute == true
|
||||
@@ -753,14 +756,13 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
}
|
||||
}
|
||||
R.id.iv_game -> {
|
||||
val dialog = RoomGameplayDialog()
|
||||
dialog.isOnlyPK = false
|
||||
val dialog = RoomGameListDialog();
|
||||
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
|
||||
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
|
||||
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
|
||||
}
|
||||
}
|
||||
dialog.show(childFragmentManager, "ROOM_GAME_PLAY")
|
||||
dialog.show(childFragmentManager, "GAME_LIST")
|
||||
}
|
||||
R.id.input_send -> {
|
||||
sendMsg()
|
||||
@@ -897,10 +899,12 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
callback.onFail()
|
||||
EventBus.getDefault().post(GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_CANCEL))
|
||||
} else {
|
||||
giftDialog?.hide()
|
||||
val giftComboEvent = GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_END)
|
||||
giftComboEvent.giftNumber = gift.data.giftNum
|
||||
EventBus.getDefault().post(giftComboEvent)
|
||||
if (giftInfo.giftType == GiftType.GIFT_TYPE_NORMAL || giftInfo.giftType == GiftType.GIFT_TYPE_SUPER_LUCKY || giftInfo.giftType == GiftType.GIFT_TYPE_LUCKY_24) {
|
||||
giftDialog?.hide()
|
||||
val giftComboEvent = GiftComboEvent(GiftComboEvent.Action.ACT_GIFT_END)
|
||||
giftComboEvent.giftNumber = gift.data.giftNum
|
||||
EventBus.getDefault().post(giftComboEvent)
|
||||
}
|
||||
callback.onSuccess()
|
||||
}
|
||||
}
|
||||
@@ -1334,8 +1338,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
open inner class BaseRoomBottomViewWrapper : BottomViewListenerWrapper() {
|
||||
@SuppressLint("CheckResult")
|
||||
override fun onOpenMicBtnClick() {
|
||||
val roomQueueInfo = AvRoomDataManager.get()
|
||||
.getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
|
||||
//todo do 关麦开麦
|
||||
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
|
||||
if (roomQueueInfo?.mRoomMicInfo == null) return
|
||||
//先判斷麥上是否是開麥的
|
||||
if (!roomQueueInfo.mRoomMicInfo.isMicMute && !AudioEngineManager.get().isAudienceRole) {
|
||||
@@ -1489,7 +1493,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
|
||||
}
|
||||
|
||||
protected open fun onInitMusicPlayerView(view: MusicPlayerView) {
|
||||
//todo-- 音乐按钮
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -22,15 +22,18 @@ import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.chwl.app.avroom.activity.RoomTitleEditActivity;
|
||||
import com.chwl.app.avroom.dialog.BaseRoomNotifyeLuckGiftDialog;
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyLuckGiftDialog;
|
||||
import com.chwl.app.databinding.LayoutRoomNotifyLuckyGiftTipBinding;
|
||||
import com.chwl.app.utils.GiftAnimUtil;
|
||||
import com.chwl.app.utils.NumberUtils;
|
||||
import com.chwl.app.utils.RoomNotifyManager;
|
||||
import com.chwl.app.utils.WeakPool;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.gift.bean.CpMsgBean;
|
||||
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean;
|
||||
import com.chwl.core.gift.bean.LuckyGiftMsgSelfBean;
|
||||
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
|
||||
import com.chwl.core.gift.bean.RoomNotifyDialogBean;
|
||||
import com.chwl.core.utils.ComboUtil;
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
|
||||
import com.chwl.app.ui.widget.BonsellaJoinAttackButtonView;
|
||||
@@ -119,8 +122,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
//收藏房间
|
||||
private String FOLLOW_ROOM_TYPE = "";
|
||||
|
||||
//幸运礼物 飘屏队列
|
||||
private ArrayList<LuckyGiftMsgAllBean> mLuckyGiftList = new ArrayList<>();
|
||||
|
||||
public static HomePartyFragment newInstance() {
|
||||
HomePartyFragment homePartyFragment = new HomePartyFragment();
|
||||
@@ -291,6 +292,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
case RoomEvent.MSG_SUPER_LUCKY_GIFT:
|
||||
onLuckyGiftMsg(roomEvent);
|
||||
break;
|
||||
case RoomEvent.MSG_CP_ABOUT:
|
||||
onCpAboutMsg(roomEvent);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -520,7 +524,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
|
||||
luckyGiftTipPool.clear();
|
||||
handler.removeCallbacksAndMessages(null);
|
||||
mLuckyGiftList.clear();
|
||||
RoomNotifyManager.INSTANCE.clear();
|
||||
|
||||
if (giftView != null) {
|
||||
giftView.release();
|
||||
@@ -694,6 +698,9 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 幸运礼物 飘屏 跟 圆球提示
|
||||
*/
|
||||
private void onLuckyGiftMsg(RoomEvent roomEvent) {
|
||||
MsgSuperLuckyGift msgSuperLuckyGift = roomEvent.getMsgSuperLuckyGift();
|
||||
if (msgSuperLuckyGift != null) {
|
||||
@@ -708,7 +715,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
|
||||
}
|
||||
|
||||
|
||||
private Handler handler = new Handler(Looper.getMainLooper());
|
||||
private WeakPool<View> luckyGiftTipPool = new WeakPool<>(3);
|
||||
private void showLuckyGiftDlgNotify(LuckyGiftMsgSelfBean luckyGiftMsgBean) {
|
||||
@@ -757,39 +763,31 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
|
||||
}, 2300);
|
||||
}
|
||||
|
||||
BaseRoomNotifyeLuckGiftDialog allServiceLuckGiftDialog;
|
||||
private void showLuckyGiftDlg(LuckyGiftMsgAllBean luckyGiftMsgAllBean){
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDlg() ");
|
||||
mLuckyGiftList.add(luckyGiftMsgAllBean);
|
||||
if (!(allServiceLuckGiftDialog != null && allServiceLuckGiftDialog.isShowing())) {
|
||||
LuckyGiftMsgAllBean data = mLuckyGiftList.remove(0);
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDlg() -> showLuckyGiftDialog"+mLuckyGiftList.size());
|
||||
showLuckyGiftDialog(data);
|
||||
private void showLuckyGiftDlg(LuckyGiftMsgAllBean data) {
|
||||
//todo do 校验数据是否异常
|
||||
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
|
||||
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE,
|
||||
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM,
|
||||
data
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* cp 礼物
|
||||
*/
|
||||
private void onCpAboutMsg(RoomEvent roomEvent) {
|
||||
//todo do 校验数据是否异常
|
||||
CpMsgBean cpMsgBean = roomEvent.getCpMsgBean();
|
||||
if (cpMsgBean != null) {
|
||||
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
|
||||
CustomAttachment.CP_FIRST,
|
||||
cpMsgBean.getSecond(),
|
||||
cpMsgBean
|
||||
));
|
||||
}
|
||||
}
|
||||
private void showLuckyGiftDialog(LuckyGiftMsgAllBean luckyGiftMsgAllBean){
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDialog() ");
|
||||
allServiceLuckGiftDialog = new BaseRoomNotifyeLuckGiftDialog(requireContext());
|
||||
allServiceLuckGiftDialog.setLuckyGiftMsgBean(luckyGiftMsgAllBean);
|
||||
allServiceLuckGiftDialog.setMCallBack(new BaseRoomNotifyeLuckGiftDialog.CallBack() {
|
||||
@Override
|
||||
public void onHide() {
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDialog() ->onHide");
|
||||
gameMainBinding.getRoot().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDialog() ->onHide->postDelayed");
|
||||
if (!mLuckyGiftList.isEmpty()){
|
||||
LuckyGiftMsgAllBean data = mLuckyGiftList.remove(0);
|
||||
LogUtils.d(" LuckyGiftDlg -- showLuckyGiftDialog() ->onHide->postDelayed-> "+mLuckyGiftList.size());
|
||||
showLuckyGiftDialog(data);
|
||||
}
|
||||
}
|
||||
},100);
|
||||
}
|
||||
});
|
||||
allServiceLuckGiftDialog.show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -22,6 +22,8 @@ import com.chwl.core.room.bean.RoomIcon;
|
||||
import com.chwl.core.room.core.RoomDataService;
|
||||
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
|
||||
import com.chwl.core.support.room.AudioRoomContext;
|
||||
import com.chwl.core.support.room.RoomAbility;
|
||||
import com.chwl.core.support.room.RoomContext;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.trello.rxlifecycle3.android.FragmentEvent;
|
||||
import com.chwl.app.R;
|
||||
@@ -162,24 +164,30 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
|
||||
}
|
||||
|
||||
private void requestData() {
|
||||
RoomDataService dataService = (RoomDataService) AudioRoomContext.Companion.get().findAbility(RoomDataService.class.getSimpleName());
|
||||
String cacheKey = "gameplay_list#" + hashCode();
|
||||
Disposable disposable = AvRoomModel.get().getRoomGamePlayList().doOnError(new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(Throwable throwable) throws Exception {
|
||||
hasBaishunGames = false;
|
||||
updateConfigButtonArea();
|
||||
RoomContext roomContext = AudioRoomContext.Companion.get();
|
||||
if (roomContext != null) {
|
||||
RoomDataService dataService = roomContext.findAbility(RoomDataService.class.getSimpleName());
|
||||
if (dataService != null) {
|
||||
String cacheKey = "gameplay_list#" + hashCode();
|
||||
Disposable disposable = AvRoomModel.get().getRoomGamePlayList().doOnError(new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(Throwable throwable) throws Exception {
|
||||
hasBaishunGames = false;
|
||||
updateConfigButtonArea();
|
||||
}
|
||||
}).subscribe(new Consumer<List<RoomIcon>>() {
|
||||
@Override
|
||||
public void accept(List<RoomIcon> roomIcons) throws Exception {
|
||||
if (dataService != null) {
|
||||
dataService.putData(cacheKey, roomIcons);
|
||||
}
|
||||
hasBaishunGames = roomIcons.size() > 0;
|
||||
updateConfigButtonArea();
|
||||
}
|
||||
});
|
||||
}
|
||||
}).subscribe(new Consumer<List<RoomIcon>>() {
|
||||
@Override
|
||||
public void accept(List<RoomIcon> roomIcons) throws Exception {
|
||||
if (dataService != null) {
|
||||
dataService.putData(cacheKey, roomIcons);
|
||||
}
|
||||
hasBaishunGames = roomIcons.size() > 0;
|
||||
updateConfigButtonArea();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,7 +21,6 @@ import com.example.lib_utils.ktx.singleClick
|
||||
|
||||
/**
|
||||
* 房间榜单入口
|
||||
* //todo-- 房间榜单入口
|
||||
*/
|
||||
class RoomRankNumberWidget : FrameLayoutRoomWidget, RoomWidget {
|
||||
|
||||
|
@@ -3,6 +3,7 @@ package com.chwl.app.avroom.room_album
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
@@ -11,6 +12,9 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
@@ -25,12 +29,17 @@ import com.chwl.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
|
||||
import com.chwl.core.Constants
|
||||
import com.chwl.core.gift.bean.GiftInfo
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProvider.photoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil.compress
|
||||
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
@@ -45,7 +54,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
private var unlockedGift: GiftInfo? = null
|
||||
|
||||
private var compressJob: Job? = null
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
val dialogManager by lazy {
|
||||
DialogManager(context)
|
||||
}
|
||||
@@ -55,6 +64,17 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog)
|
||||
if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(requireContext())) {
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
val file = MyUriUtils.copyFile(requireContext(),uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
@@ -194,7 +214,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
dialogManager.showProgressDialog(context)
|
||||
// dialogManager.showProgressDialog(context)
|
||||
viewModel.upload(
|
||||
list,
|
||||
type,
|
||||
@@ -204,7 +224,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
|
||||
viewModel.uploadLiveData.observe(this) {
|
||||
it?.getContentIfNotHandled()?.let { success ->
|
||||
dialogManager.hideProgressDialog()
|
||||
// dialogManager.hideProgressDialog()
|
||||
|
||||
if (success) {
|
||||
dismiss()
|
||||
@@ -219,28 +239,37 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
requireContext(),
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
|
||||
else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
100,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES
|
||||
else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
7 - photoAdapter.data.size,
|
||||
true,
|
||||
200,
|
||||
true
|
||||
)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 33){
|
||||
DialogUtil.getDialog(requireActivity(),object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
|
||||
}
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
100,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
7 - photoAdapter.data.size,
|
||||
true,
|
||||
200,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
|
@@ -22,6 +22,7 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
|
||||
import com.chwl.core.utils.extension.StringExtensionKt;
|
||||
import com.chwl.library.utils.SizeUtils;
|
||||
import com.netease.nim.uikit.api.NimUIKit;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nimlib.sdk.msg.model.RecentContact;
|
||||
@@ -73,12 +74,10 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
private ImageView iconMicQueue;
|
||||
private ImageView iconRoomMsg;
|
||||
|
||||
private ImageView iconRoomBaiShunGame;
|
||||
|
||||
private ImageView pkGameView;
|
||||
|
||||
@Nullable
|
||||
private PopupWindow msgTipPopupWindow;
|
||||
private PopupWindow micSetPopupWindow;
|
||||
@NonNull
|
||||
private final Runnable msgRunnable = this::dismissMsgPopupWindow;
|
||||
|
||||
@@ -108,12 +107,10 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
remoteMute = findViewById(R.id.icon_room_open_remote_mic);
|
||||
faceLayout = findViewById(R.id.room_face_layout);
|
||||
micLayout = findViewById(R.id.room_mic_layout);
|
||||
iconRoomBaiShunGame = findViewById(R.id.icon_room_baishun_game);
|
||||
|
||||
iconMicQueue = (ImageView) findViewById(R.id.icon_mic_queue);
|
||||
|
||||
iconRoomMsg = findViewById(R.id.iv_room_message);
|
||||
pkGameView = findViewById(R.id.icon_room_PK_game);
|
||||
openMic.setOnClickListener(this);
|
||||
sendMsgInput.setOnClickListener(this);
|
||||
sendFace.setOnClickListener(this);
|
||||
@@ -122,8 +119,6 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
sendMagic.setOnClickListener(this);
|
||||
iconMicQueue.setOnClickListener(this);
|
||||
iconRoomMsg.setOnClickListener(this);
|
||||
pkGameView.setOnClickListener(this);
|
||||
iconRoomBaiShunGame.setOnClickListener(this);
|
||||
|
||||
setMicBtnEnable(false);
|
||||
setMicBtnOpen(false);
|
||||
@@ -247,9 +242,6 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void setBaiShunBtnOpen(boolean isOpen) {
|
||||
iconRoomBaiShunGame.setVisibility(isOpen ? VISIBLE : GONE);
|
||||
}
|
||||
|
||||
public void notifyStateChanged() {
|
||||
setMagicBtnEnable(true);
|
||||
@@ -261,19 +253,19 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
}
|
||||
|
||||
public void updateGameEntrance() {
|
||||
//todo-- game btn
|
||||
if (AvRoomDataManager.get().isManager() || SuperAdminUtil.isSuperAdmin()) {
|
||||
if (!AvRoomDataManager.get().isCpRoom()) {
|
||||
pkGameView.setVisibility(VISIBLE);
|
||||
iconRoomBaiShunGame.setVisibility(VISIBLE);
|
||||
}
|
||||
} else {
|
||||
pkGameView.setVisibility(GONE);
|
||||
iconRoomBaiShunGame.setVisibility(GONE);
|
||||
}
|
||||
if (AvRoomDataManager.get().isSingleRoom() || AvRoomDataManager.get().isDatingMode()) {
|
||||
pkGameView.setVisibility(GONE);
|
||||
}
|
||||
// game btn pk按钮,游戏按钮 显示控制
|
||||
// if (AvRoomDataManager.get().isManager() || SuperAdminUtil.isSuperAdmin()) {
|
||||
// if (!AvRoomDataManager.get().isCpRoom()) {
|
||||
// pkGameView.setVisibility(VISIBLE);
|
||||
// iconRoomBaiShunGame.setVisibility(VISIBLE);
|
||||
// }
|
||||
// } else {
|
||||
// pkGameView.setVisibility(GONE);
|
||||
// iconRoomBaiShunGame.setVisibility(GONE);
|
||||
// }
|
||||
// if (AvRoomDataManager.get().isSingleRoom() || AvRoomDataManager.get().isDatingMode()) {
|
||||
// pkGameView.setVisibility(GONE);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -328,6 +320,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
if (wrapper != null) {
|
||||
wrapper.onOpenMicBtnClick();
|
||||
}
|
||||
// showMicSetDialog(openMic);
|
||||
break;
|
||||
|
||||
case R.id.tv_room_send_msg_input:
|
||||
@@ -376,16 +369,16 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
wrapper.onRoomMessageClick();
|
||||
}
|
||||
break;
|
||||
case R.id.icon_room_PK_game:
|
||||
if (wrapper != null) {
|
||||
wrapper.onRoomGameplayClick(true);
|
||||
}
|
||||
break;
|
||||
case R.id.icon_room_baishun_game:
|
||||
if (wrapper != null) {
|
||||
wrapper.onRoomGameplayClick(false);
|
||||
}
|
||||
break;
|
||||
// case R.id.icon_room_PK_game:
|
||||
// if (wrapper != null) {
|
||||
// wrapper.onRoomGameplayClick(true);
|
||||
// }
|
||||
// break;
|
||||
// case R.id.icon_room_baishun_game:
|
||||
// if (wrapper != null) {
|
||||
// wrapper.onRoomGameplayClick(false);
|
||||
// }
|
||||
// break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -467,4 +460,40 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
|
||||
parent.postDelayed(msgRunnable, 3000);
|
||||
}
|
||||
|
||||
|
||||
private void showMicSetDialog(View parent){
|
||||
//todo do 关麦开麦
|
||||
View contentView;
|
||||
if (micSetPopupWindow == null) {
|
||||
contentView = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null);
|
||||
micSetPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
micSetPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
// micSetPopupWindow.setAnimationStyle(R.style.style_anim_mic_set);
|
||||
} else {
|
||||
contentView = micSetPopupWindow.getContentView();
|
||||
}
|
||||
|
||||
ImageView micOff = contentView.findViewById(R.id.micOff);
|
||||
ImageView micMusic = contentView.findViewById(R.id.micMusic);
|
||||
ImageView micOn = contentView.findViewById(R.id.micOn);
|
||||
|
||||
micOff.setOnClickListener(v -> {
|
||||
micSetPopupWindow.dismiss();
|
||||
});
|
||||
micMusic.setOnClickListener(v -> {
|
||||
micSetPopupWindow.dismiss();
|
||||
});
|
||||
micOn.setOnClickListener(v -> {
|
||||
micSetPopupWindow.dismiss();
|
||||
});
|
||||
|
||||
int[] vLoc = new int[2];
|
||||
parent.getLocationInWindow(vLoc);
|
||||
try {
|
||||
micSetPopupWindow.showAsDropDown(parent,0, -ScreenUtil.dip2px(180),Gravity.CENTER_HORIZONTAL);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -265,6 +265,18 @@ public abstract class BaseActivity extends RxAppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
public void initBlackTitleBar(String title) {
|
||||
mTitleBar = findViewById(R.id.title_bar);
|
||||
if (mTitleBar != null) {
|
||||
mTitleBar.setTitle(title);
|
||||
mTitleBar.setImmersive(false);
|
||||
mTitleBar.setTitleColor(getResources().getColor(R.color.white));
|
||||
mTitleBar.setLeftImageResource(R.drawable.icon_user_back);
|
||||
mTitleBar.setBackgroundResource(R.color.transparent);
|
||||
mTitleBar.setLeftClickListener(v -> onLeftClickListener());
|
||||
}
|
||||
}
|
||||
|
||||
public void initTitleBar(String title, TitleBar.Action action) {
|
||||
mTitleBar = findViewById(R.id.title_bar);
|
||||
if (mTitleBar != null) {
|
||||
|
@@ -4,6 +4,8 @@ import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -18,6 +20,7 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.chwl.app.application.App;
|
||||
import com.tbruyelle.rxpermissions2.RxPermissions;
|
||||
import com.trello.rxlifecycle3.components.support.RxFragment;
|
||||
import com.chwl.app.R;
|
||||
@@ -585,17 +588,33 @@ public abstract class BaseFragment extends RxFragment implements KeyEvent.Callba
|
||||
}
|
||||
|
||||
protected DialogManager getDialogManager() {
|
||||
|
||||
FragmentActivity activity = getActivity();
|
||||
if (activity instanceof BaseMvpActivity) {
|
||||
return ((BaseMvpActivity) activity).getDialogManager();
|
||||
} else if (activity instanceof BaseActivity) {
|
||||
return ((BaseActivity) activity).getDialogManager();
|
||||
} else {
|
||||
if (dialogManager == null) {
|
||||
dialogManager = new DialogManager(activity);
|
||||
try {
|
||||
if (activity instanceof BaseMvpActivity) {
|
||||
return ((BaseMvpActivity) activity).getDialogManager();
|
||||
} else if (activity instanceof BaseActivity) {
|
||||
return ((BaseActivity) activity).getDialogManager();
|
||||
}
|
||||
return dialogManager;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Activity topActivity = App.gStack.getTopActivity();
|
||||
if (dialogManager == null && topActivity != null) {
|
||||
dialogManager = new DialogManager(topActivity);
|
||||
}
|
||||
|
||||
FragmentActivity fragmentActivity = requireActivity();
|
||||
if (dialogManager == null && fragmentActivity != null) {
|
||||
dialogManager = new DialogManager(fragmentActivity);
|
||||
}
|
||||
|
||||
if (dialogManager == null) {
|
||||
dialogManager = new DialogManager(activity);
|
||||
}
|
||||
|
||||
return dialogManager;
|
||||
}
|
||||
|
||||
public BaseActivity getBaseActivity() {
|
||||
|
@@ -1,279 +0,0 @@
|
||||
package com.chwl.app.common.dialog
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.view.Gravity
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.application.App
|
||||
import com.chwl.app.databinding.PhotoDialogBinding
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.library.common.base.BaseDialogFragment
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
/**
|
||||
* 该对话框的功能提供拍摄和选择图片
|
||||
*/
|
||||
class PhotoDialog : BaseDialogFragment<PhotoDialogBinding>(), EasyPermissions.PermissionCallbacks {
|
||||
private var mOnResultCallBack: OnResultCallBack? = null
|
||||
private var mJob: Job? = null
|
||||
|
||||
companion object {
|
||||
private const val PERMISSION_CODE_CAMERA = 100
|
||||
private const val REQUEST_CODE_CAMERA = 101
|
||||
private const val PERMISSION_CODE_STORAGE_1 = 200
|
||||
private const val REQUEST_CODE_STORAGE_1 = 201
|
||||
private const val PERMISSION_CODE_STORAGE_2 = 202
|
||||
private const val REQUEST_CODE_STORAGE_2 = 203
|
||||
private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 103
|
||||
private const val REQUEST_CODE_OPEN_CAMERA_PROVIDER = 104
|
||||
}
|
||||
|
||||
override fun initBefore(savedInstanceState: Bundle?) {
|
||||
super.initBefore(savedInstanceState)
|
||||
dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||
}
|
||||
|
||||
override fun setListener() {
|
||||
binding?.tvTakePhoto?.setOnClickListener {
|
||||
checkCameraPermission()
|
||||
}
|
||||
binding?.tvChoicePicture?.setOnClickListener {
|
||||
checkStoragePermission1()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initDialog() {
|
||||
dialog?.window?.also {
|
||||
it.decorView.setPadding(0, 0, 0, 0)
|
||||
it.attributes = it.attributes.apply {
|
||||
gravity = Gravity.BOTTOM
|
||||
width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
}
|
||||
it.setBackgroundDrawableResource(R.drawable.photo_dialog_bg)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
initDialog()
|
||||
}
|
||||
|
||||
private fun checkStoragePermission1() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
App.gContext, if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE_1,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkCameraPermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
App.gContext,
|
||||
Manifest.permission.CAMERA
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_camera_rationale),
|
||||
PERMISSION_CODE_CAMERA,
|
||||
Manifest.permission.CAMERA
|
||||
)
|
||||
} else {
|
||||
checkStoragePermission2()
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkStoragePermission2() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
App.gContext, if (Build.VERSION.SDK_INT >= 33)
|
||||
Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE_2,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
PhotoProvider.photoCamera(this, REQUEST_CODE_OPEN_CAMERA_PROVIDER)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<out String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_CAMERA) {
|
||||
checkCameraPermission()
|
||||
} else if (requestCode == PERMISSION_CODE_STORAGE_1) {
|
||||
checkStoragePermission1()
|
||||
} else if (requestCode == PERMISSION_CODE_STORAGE_2) {
|
||||
checkStoragePermission2()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2 || requestCode == PERMISSION_CODE_CAMERA) {
|
||||
val requestTip: String =
|
||||
if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2) {
|
||||
getString(R.string.permission_storage_denied)
|
||||
} else {
|
||||
getString(R.string.permission_camera_denied)
|
||||
}
|
||||
val mPrivacyDialog = CommonTipDialog(context)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri =
|
||||
Uri.parse("package:${activity?.packageName}")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
)
|
||||
if (requestCode == PERMISSION_CODE_STORAGE_1) {
|
||||
startActivityForResult(
|
||||
intent, REQUEST_CODE_STORAGE_1
|
||||
)
|
||||
} else if (requestCode == PERMISSION_CODE_STORAGE_2) {
|
||||
startActivityForResult(
|
||||
intent,
|
||||
REQUEST_CODE_STORAGE_2
|
||||
)
|
||||
} else {
|
||||
startActivityForResult(
|
||||
intent, REQUEST_CODE_CAMERA
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
if (requestCode == PERMISSION_CODE_STORAGE_1 || requestCode == PERMISSION_CODE_STORAGE_2) {
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
} else {
|
||||
ToastUtils.show(getString(R.string.permission_camera_refused))
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == REQUEST_CODE_STORAGE_1) {
|
||||
checkStoragePermission1()
|
||||
} else if (requestCode == REQUEST_CODE_STORAGE_2) {
|
||||
checkStoragePermission2()
|
||||
} else if (requestCode == REQUEST_CODE_CAMERA) {
|
||||
checkCameraPermission()
|
||||
} else
|
||||
if (resultCode == RESULT_OK) {
|
||||
when (requestCode) {
|
||||
REQUEST_CODE_OPEN_CAMERA_PROVIDER -> {
|
||||
if (mOnResultCallBack == null || data == null) return
|
||||
PhotoProvider.getResultPathListAsync(data) { paths ->
|
||||
val list = paths?.mapNotNull { it.path }?.toMutableList() ?: ArrayList()
|
||||
val path = list[0]
|
||||
if (!TextUtils.isEmpty(path)) {
|
||||
mJob?.cancel()
|
||||
mJob = PhotoCompressUtil.compress(
|
||||
App.gContext,
|
||||
path,
|
||||
PhotoCompressUtil.getCompressCachePath(),
|
||||
object : PhotoCompressCallback {
|
||||
override fun onSuccess(compressedImg: String) {
|
||||
mOnResultCallBack?.takePhotoCallBack(compressedImg)
|
||||
}
|
||||
|
||||
override fun onFail(e: Throwable) {
|
||||
mOnResultCallBack?.takePhotoCallBack(path)
|
||||
}
|
||||
})
|
||||
|
||||
} else {
|
||||
mOnResultCallBack?.takePhotoCallBack(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> {
|
||||
if (mOnResultCallBack == null || data == null) return
|
||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
||||
val paths = list?.mapNotNull { it.path }?.toMutableList() ?: ArrayList()
|
||||
if (paths.isEmpty()) {
|
||||
mOnResultCallBack?.choicePhotoCallBack(paths)
|
||||
} else {
|
||||
mJob?.cancel()
|
||||
mJob = PhotoCompressUtil.compress(
|
||||
App.gContext,
|
||||
paths,
|
||||
PhotoCompressUtil.getCompressCachePath(),
|
||||
object : PhotosCompressCallback {
|
||||
override fun onSuccess(compressedImgList: ArrayList<String>) {
|
||||
mOnResultCallBack?.choicePhotoCallBack(compressedImgList)
|
||||
}
|
||||
|
||||
override fun onFail(e: Throwable) {
|
||||
mOnResultCallBack?.choicePhotoCallBack(paths)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
||||
fun setOnResultCallBack(onResultCallBack: OnResultCallBack) {
|
||||
mOnResultCallBack = onResultCallBack
|
||||
}
|
||||
|
||||
override fun onWillDestroy() {
|
||||
mJob?.cancel()
|
||||
super.onWillDestroy()
|
||||
}
|
||||
|
||||
interface OnResultCallBack {
|
||||
|
||||
fun takePhotoCallBack(path: String?)
|
||||
|
||||
fun choicePhotoCallBack(paths: List<String>?)
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -6,10 +6,13 @@ import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.chwl.app.BuildConfig;
|
||||
import com.chwl.app.application.App;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
|
||||
import com.chwl.core.utils.LogUtils;
|
||||
import com.chwl.library.common.util.CoreUtils;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
|
||||
/**
|
||||
* Activity生命周期工具类
|
||||
@@ -27,6 +30,9 @@ public class AppLifeCycleHelper implements Application.ActivityLifecycleCallback
|
||||
|
||||
@Override
|
||||
public void onActivityStarted(@NonNull Activity activity) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
LogUtils.d("当前Activity : "+ activity.getClass().getSimpleName());
|
||||
}
|
||||
if (++AppLifeCycleHelper.sActivityReferences == 1 && !AppLifeCycleHelper.sIsActivityChangingConfigurations) {
|
||||
AppLifeCycleHelper.onForeground();
|
||||
|
||||
|
@@ -0,0 +1,10 @@
|
||||
package com.chwl.app.constants;
|
||||
|
||||
public @interface UserInfoConstants {
|
||||
|
||||
public @interface CpSet{
|
||||
//1-cp头像是否展示,2-cp动画
|
||||
int cpAvatar = 1;
|
||||
int cpAnim = 2;
|
||||
}
|
||||
}
|
@@ -16,6 +16,8 @@ import com.chwl.app.UIHelper
|
||||
import com.chwl.app.application.IReportConstants
|
||||
import com.chwl.app.application.ReportManager
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyCpBindDialog
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyLevelUpDialog
|
||||
import com.chwl.app.base.BaseActivity
|
||||
import com.chwl.app.base.BaseFragment
|
||||
import com.chwl.app.databinding.FragmentMeBinding
|
||||
@@ -38,6 +40,7 @@ import com.chwl.app.view.GenderAgeTextView
|
||||
import com.chwl.app.vip.VipCenterActivity
|
||||
import com.chwl.app.vip.VipViewModel
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.gift.bean.CpMsgBean
|
||||
import com.chwl.core.initial.InitialModel
|
||||
import com.chwl.core.level.UserLevelVo
|
||||
import com.chwl.core.manager.IMNetEaseManager
|
||||
@@ -318,11 +321,12 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
||||
|
||||
override fun onClick(v: View) {
|
||||
when (v.id) {
|
||||
R.id.iv_user_head, R.id.rl_user_info ->
|
||||
R.id.iv_user_head, R.id.rl_user_info ->{
|
||||
mUserInfo?.let { UIHelper.showUserInfoAct(mContext, it.uid) }
|
||||
|
||||
R.id.iv_edit ->
|
||||
mUserInfo?.let { UIHelper.showUserInfoModifyAct(mContext, it.uid) }
|
||||
}
|
||||
//
|
||||
// R.id.iv_edit ->
|
||||
// mUserInfo?.let { UIHelper.showUserInfoModifyAct(mContext, it.uid) }
|
||||
|
||||
R.id.ll_user_attentions -> startActivity(
|
||||
Intent(
|
||||
|
@@ -15,7 +15,7 @@ import com.chwl.core.room.bean.RoomInfo;
|
||||
public class NotificationClickReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
//todo 跳转之前要处理的逻辑
|
||||
//TODO 跳转之前要处理的逻辑
|
||||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||
if (roomInfo != null) {
|
||||
AVRoomActivity.start(context, roomInfo.getUid());
|
||||
|
@@ -4,7 +4,11 @@ import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.widget.ImageView.ScaleType
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
@@ -16,10 +20,14 @@ import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.home.bean.FeedbackTypeBean
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProvider.photoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.easyphoto.utils.settings.SettingsUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
@@ -35,6 +43,7 @@ import com.google.android.flexbox.FlexboxLayoutManager
|
||||
import com.google.android.flexbox.JustifyContent
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -52,6 +61,21 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
private var imagePath: String? = null
|
||||
private var imageUrl: String? = null
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
val file = MyUriUtils.copyFile(this,uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun init() {
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
|
||||
initView()
|
||||
@@ -262,26 +286,37 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
1,
|
||||
true,
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
||||
true,
|
||||
true
|
||||
)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 33){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
1,
|
||||
true,
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
||||
true,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,10 +37,12 @@ enum class PermissionEntity(
|
||||
STORAGE(
|
||||
ResUtil.getString(R.string.setting_bean_permissionentity_011), ResUtil.getString(R.string.setting_bean_permissionentity_012), R.drawable.icon_permission_storage,
|
||||
arrayOf(
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
|
||||
companion object {
|
||||
fun fetchPermission(name: String): PermissionEntity? {
|
||||
if (CoreTextUtils.isEmptyText(name)) return null
|
||||
|
@@ -0,0 +1,192 @@
|
||||
package com.chwl.app.ui.user.activity
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.view.View
|
||||
import androidx.core.content.ContentProviderCompat.requireContext
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.base.TitleBar
|
||||
import com.chwl.app.base.TitleBar.ImageAction
|
||||
import com.chwl.app.common.EmptyViewHelper
|
||||
import com.chwl.app.common.widget.dialog.DialogManager
|
||||
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
|
||||
import com.chwl.app.databinding.ActivityUserCpListBinding
|
||||
import com.chwl.app.ui.user.adapter.UserCpListAdapter
|
||||
import com.chwl.app.ui.webview.CommonWebViewActivity
|
||||
import com.chwl.core.UriProvider
|
||||
import com.chwl.core.bean.response.ServiceResult
|
||||
import com.chwl.core.user.bean.UserCPListBean
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.core.utils.net.DontWarnObserver
|
||||
import com.chwl.core.utils.net.RxHelper
|
||||
import com.chwl.library.net.rxnet.RxNet
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.example.lib_utils.ktx.getString
|
||||
import com.google.gson.JsonElement
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.SingleObserver
|
||||
import io.reactivex.disposables.Disposable
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
import retrofit2.http.Query
|
||||
|
||||
class UserCpListActivity : BaseViewBindingActivity<ActivityUserCpListBinding>() {
|
||||
|
||||
lateinit var mAdapter : UserCpListAdapter
|
||||
var mPageNum = 1;
|
||||
var mPageSize = 20;
|
||||
|
||||
companion object{
|
||||
fun start(context: Context) {
|
||||
val intent = Intent(context, UserCpListActivity::class.java)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
StatusBarUtil.transparencyBar(this)
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
initTitle()
|
||||
initRvList()
|
||||
loadData()
|
||||
}
|
||||
|
||||
private fun initTitle() {
|
||||
initBlackTitleBar(ResUtil.getString(R.string.My_Cp))
|
||||
val titleBar = findViewById<View>(R.id.title_bar) as TitleBar
|
||||
titleBar.addAction(object : ImageAction(R.drawable.ic_cp_list_more) {
|
||||
override fun performAction(view: View?) {
|
||||
CommonWebViewActivity.start(this@UserCpListActivity, UriProvider.getCpRule())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun initRvList(){
|
||||
mAdapter = UserCpListAdapter(R.layout.item_user_cp_list,1)
|
||||
binding.rvList.layoutManager = LinearLayoutManager(context,RecyclerView.VERTICAL,false)
|
||||
binding.rvList.adapter = mAdapter
|
||||
mAdapter.setOnItemChildClickListener { adapter, view, position ->
|
||||
when (view.id) {
|
||||
R.id.cancel -> {
|
||||
mAdapter.data.getOrNull(position)?.let {
|
||||
cancelCp(position, it)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.userAvatarCp -> {
|
||||
mAdapter.data.getOrNull(position)?.let {
|
||||
UserInfoActivity.Companion.start(context, it.cpUid)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
mAdapter.setOnLoadMoreListener {
|
||||
loadData(true)
|
||||
}
|
||||
mAdapter.setEmptyView(EmptyViewHelper.createEmptyTextView(this@UserCpListActivity,R.string.empty_data.getString()))
|
||||
}
|
||||
|
||||
private fun loadData(isAdd: Boolean = false) {
|
||||
if (!isAdd) {
|
||||
mPageNum = 1
|
||||
}
|
||||
getCpList()
|
||||
.compose(bindToLifecycle())
|
||||
.doOnSuccess {
|
||||
if (mPageNum == 1) {
|
||||
mAdapter.setNewData(it)
|
||||
} else {
|
||||
mAdapter.addData(it)
|
||||
}
|
||||
|
||||
if (it.size == mPageSize) {
|
||||
mPageNum += 1
|
||||
mAdapter.setEnableLoadMore(true)
|
||||
binding.noMore.isVisible = false
|
||||
} else {
|
||||
mAdapter.setEnableLoadMore(false)
|
||||
if (mAdapter?.data?.isEmpty() == true){
|
||||
binding.noMore.isVisible = true
|
||||
}
|
||||
}
|
||||
mAdapter.loadMoreComplete()
|
||||
}
|
||||
.doOnError {
|
||||
LogUtils.d(" error = ${it.message}")
|
||||
mAdapter.loadMoreEnd()
|
||||
}
|
||||
.subscribe()
|
||||
}
|
||||
|
||||
|
||||
private fun cancelCp(position: Int, data: UserCPListBean) {
|
||||
val mDialogManager = DialogManager(context)
|
||||
mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.CP_Cancel,data.cancelGoldNum,data.cpNick), true, object :
|
||||
OkCancelDialogListener {
|
||||
override fun onCancel() {
|
||||
mDialogManager?.dismissDialog()
|
||||
}
|
||||
|
||||
override fun onOk() {
|
||||
postCpCancel(data.uid,data.cpUid,data.cancelGoldNum)
|
||||
.compose(bindToLifecycle())
|
||||
.doOnSuccess {
|
||||
mAdapter.remove(position)
|
||||
toast(ResUtil.getString(R.string.CP_Cancel_Success,data.cpNick))
|
||||
}
|
||||
.subscribe()
|
||||
mDialogManager?.dismissDialog()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获-cp列表
|
||||
*/
|
||||
private fun getCpList(): Single<List<UserCPListBean>> {
|
||||
return api.getCpList(mPageNum,mPageSize)
|
||||
.compose(RxHelper.handleBeanData())
|
||||
.compose(RxHelper.handleSchedulers())
|
||||
}
|
||||
|
||||
private fun postCpCancel(uid: Long,loverUid: Long,goldNum: Long): Single<String> {
|
||||
return api.postCpCancel(uid,loverUid,goldNum)
|
||||
.compose(RxHelper.handleIgnoreData())
|
||||
.compose(RxHelper.handleSchedulers())
|
||||
}
|
||||
|
||||
|
||||
private val api: Api = RxNet.create(Api::class.java);
|
||||
interface Api {
|
||||
/**
|
||||
* 获-cp列表
|
||||
* page=1
|
||||
* pageSize=10
|
||||
*/
|
||||
@GET("/user/cp/list")
|
||||
fun getCpList(@Query("page") page: Int,@Query("pageSize") pageSize: Int=20): Single<ServiceResult<List<UserCPListBean>>>
|
||||
|
||||
/**
|
||||
* 取消cp----
|
||||
* Long uid
|
||||
* Long loverUid
|
||||
* Long goldNum //金币(列表有返回该字段:cancelGoldNum)
|
||||
*/
|
||||
@POST("/user/cp/cancel")
|
||||
fun postCpCancel(@Query("uid") uid: Long,@Query("loverUid") loverUid: Long,@Query("goldNum") goldNum: Long): Single<ServiceResult<JsonElement>>
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -7,6 +7,10 @@ import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -14,6 +18,7 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.widget.NestedScrollView;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -24,13 +29,17 @@ import com.chwl.app.avroom.adapter.CommonVPAdapter;
|
||||
import com.chwl.app.ui.user.adapter.UserInfoTopAlbumAdapter;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoDataFragment;
|
||||
import com.chwl.app.ui.user.fragment.UserInfoDynamicFragment;
|
||||
import com.chwl.app.ui.utils.CpUtils;
|
||||
import com.chwl.app.utils.AppBarStateChangeListener;
|
||||
import com.chwl.app.utils.AvatarHelper;
|
||||
import com.chwl.core.utils.LogUtils;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.widget.SVGAView;
|
||||
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
|
||||
import com.example.lib_utils.UiUtils;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
|
||||
import com.netease.nim.uikit.common.util.sys.TimeUtil;
|
||||
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
|
||||
import com.netease.nimlib.sdk.RequestCallbackWrapper;
|
||||
@@ -74,6 +83,9 @@ import com.chwl.core.user.bean.UserPhoto;
|
||||
import com.chwl.core.user.event.LoginUserInfoUpdateEvent;
|
||||
import com.chwl.core.utils.CoreLogger;
|
||||
import com.chwl.library.annatation.ActLayoutRes;
|
||||
import com.tencent.qgame.animplayer.inter.IFetchResource;
|
||||
import com.tencent.qgame.animplayer.mix.Resource;
|
||||
import com.tencent.qgame.animplayer.util.ScaleType;
|
||||
import com.zhpan.bannerview.constants.IndicatorGravity;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
@@ -81,8 +93,12 @@ import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
|
||||
/**
|
||||
* create by lvzebiao on 2018/8/31
|
||||
*/
|
||||
@@ -98,13 +114,15 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
private UserInfo userInfo;
|
||||
private boolean mIslike = false;
|
||||
private int flag = 0;
|
||||
|
||||
private LinearLayout bottomViewLayout = null;
|
||||
private TextView sendMsgLayout;
|
||||
private TextView attentionLayout;
|
||||
private ImageView ivOfficialMask;
|
||||
private TextView tvOfficialMask;
|
||||
private LinearLayout sendMsgLayout;
|
||||
private LinearLayout attentionLayout;
|
||||
private TextView attentionText;
|
||||
private ImageView attentionImg;
|
||||
|
||||
private UserInfoViewModel viewModel;
|
||||
private boolean isFirst = true;
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@Override
|
||||
@@ -131,6 +149,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
viewModel.getUserInfoData().observe(this, infoBean -> {
|
||||
userInfo = infoBean;
|
||||
initData(userInfo);
|
||||
viewModel.getUserInfoDetail();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -138,7 +157,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
viewModel.getUserInfo();
|
||||
viewModel.getUserInfoDetail();
|
||||
|
||||
}
|
||||
|
||||
private void initAttentionView() {
|
||||
@@ -157,11 +176,14 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
if (bottomViewLayout == null) {
|
||||
View view = mBinding.vsBottomLayout.getViewStub().inflate();
|
||||
bottomViewLayout = view.findViewById(R.id.bottom_view_layout);
|
||||
sendMsgLayout = view.findViewById(R.id.send_msg_layout);
|
||||
attentionLayout = view.findViewById(R.id.attention_layout);
|
||||
sendMsgLayout = view.findViewById(R.id.sendMsgLayout);
|
||||
attentionLayout = view.findViewById(R.id.attentionLayout);
|
||||
attentionText = view.findViewById(R.id.attentionText);
|
||||
attentionImg = view.findViewById(R.id.attentionImg);
|
||||
sendMsgLayout.setOnClickListener(this);
|
||||
attentionLayout.setOnClickListener(this);
|
||||
}
|
||||
|
||||
bottomViewLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
@@ -171,6 +193,8 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.ivEdit.setOnClickListener(this);
|
||||
mBinding.tvEdit.setOnClickListener(this);
|
||||
mBinding.layoutLive.setOnClickListener(this);
|
||||
mBinding.cpCardMore.setOnClickListener(this);
|
||||
mBinding.userInfoAnim.setOnClickListener(this);
|
||||
// mBinding.ivTagArrow.setOnClickListener(this);
|
||||
}
|
||||
|
||||
@@ -244,6 +268,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
viewModel.getUserInfoDetailData().observe(this, dataBean -> {
|
||||
initPhoto(dataBean.getPrivatePhoto());
|
||||
setWhereVisible();
|
||||
setCpInfo(dataBean);
|
||||
});
|
||||
viewModel.getUserInfoDetailError().observe(this, String -> {
|
||||
finish();
|
||||
@@ -256,9 +281,11 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
|
||||
private void onFindViews() {
|
||||
mBinding.tbUserInfo.setTitle("");
|
||||
ivOfficialMask = mBinding.inOfficialMask.findViewById(R.id.iv_official_mask);
|
||||
tvOfficialMask = mBinding.inOfficialMask.findViewById(R.id.tv_official_mask);
|
||||
mBinding.ivHeadWear.bindCache(SVGAView.newCache(1));
|
||||
|
||||
if (userId == AuthModel.get().getCurrentUid()) {
|
||||
mBinding.cpCardMore.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@@ -270,19 +297,10 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
|
||||
private void initData(UserInfo userInfo) {
|
||||
LogUtils.d(" userinfo initData ");
|
||||
if (null != userInfo) {
|
||||
ImageLoadUtilsV2.loadImage(mBinding.ivUserHead, userInfo.getAvatar());
|
||||
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
|
||||
if (headWearInfo != null && headWearInfo.getFirstUrl() != null) {
|
||||
AvatarHelper.loadAvatarFrame(mBinding.ivHeadWear, headWearInfo.getFirstUrl(), headWearInfo.getType());
|
||||
mBinding.ivUserHead.setPadding(0, 0, 0, 0);
|
||||
mBinding.ivUserHead.setStrokeWidth(0);
|
||||
} else {
|
||||
int padding = getResources().getDimensionPixelOffset(R.dimen.dp_0_5);
|
||||
mBinding.ivUserHead.setPadding(padding, padding, padding, padding);
|
||||
mBinding.ivUserHead.setStrokeWidth(getResources().getDimensionPixelOffset(R.dimen.dp_1));
|
||||
mBinding.ivHeadWear.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
//设置昵称
|
||||
String nick = RegexUtil.getPrintableString(userInfo.getNick());
|
||||
mBinding.tvNick.setText(nick);
|
||||
@@ -297,14 +315,12 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.tvFollowCount.setText(String.valueOf(userInfo.getFollowNum()));
|
||||
mBinding.tvErbanId.setText(String.valueOf(userInfo.getErbanNo()));
|
||||
if (userInfo.isHasPrettyErbanNo()) {
|
||||
mBinding.ivId.setVisibility(View.GONE);
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.color_FEFFBF));
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.white));
|
||||
mBinding.tvErbanId.setBackgroundResource(R.drawable.user_info_bg_good_id);
|
||||
setMarginTop(mBinding.layoutRegion, getResources().getDimensionPixelOffset(R.dimen.dp_5));
|
||||
} else {
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.color_CC191919));
|
||||
mBinding.tvErbanId.setTextColor(ContextCompat.getColor(context, R.color.white));
|
||||
mBinding.tvErbanId.setBackgroundDrawable(null);
|
||||
mBinding.ivId.setVisibility(View.VISIBLE);
|
||||
setMarginTop(mBinding.layoutRegion, getResources().getDimensionPixelOffset(R.dimen.dp_8));
|
||||
}
|
||||
|
||||
@@ -326,18 +342,98 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
setUserLevel(userInfo.getUserLevelVo());
|
||||
//铭牌
|
||||
setOfficialMask(userInfo.getNameplateWord(), userInfo.getNameplatePic());
|
||||
|
||||
if (AuthModel.get().getCurrentUid() != userInfo.getUid()) {
|
||||
PraiseModel.get().isPraised(AuthModel.get().getCurrentUid(), userInfo.getUid()).subscribe();
|
||||
}
|
||||
|
||||
mBinding.ivChargeAgent.setVisibility(userInfo.isRechargeUser() ? View.VISIBLE : View.GONE);
|
||||
|
||||
mBinding.llId.setOnClickListener(view -> {
|
||||
mBinding.idLayout.setOnClickListener(view -> {
|
||||
copyName();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//cp
|
||||
private void setCpInfo(UserDetailInfo.DataBean dataBean) {
|
||||
UserDetailInfo.DataBean.RelationUserVO cpInfo = dataBean.getRelationUserVO();
|
||||
|
||||
//头像
|
||||
if (cpInfo!= null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty() && cpInfo.showCpAvatar){
|
||||
//cp 头像
|
||||
mBinding.cpViews.setVisibility(View.VISIBLE);
|
||||
mBinding.ivHeadWear.loadFile(CpUtils.INSTANCE.getHeadSvga(cpInfo.cpLevel));
|
||||
mBinding.ivHeadWearCp.loadFile(CpUtils.INSTANCE.getHeadSvga(cpInfo.cpLevel));
|
||||
mBinding.ivHeadWearCpFlag.setImageResource(CpUtils.INSTANCE.getFlag(cpInfo.cpLevel));
|
||||
ImageLoadUtils.loadImage(mBinding.ivUserHeadCp, cpInfo.cpAvatar);
|
||||
mBinding.ivUserHeadCp.setOnClickListener(v -> {
|
||||
UserInfoActivity.Companion.start(context,cpInfo.cpUid);
|
||||
});
|
||||
|
||||
}else {
|
||||
mBinding.cpViews.setVisibility(View.INVISIBLE);
|
||||
|
||||
//正常头像
|
||||
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
|
||||
if (headWearInfo != null && headWearInfo.getFirstUrl() != null) {
|
||||
AvatarHelper.loadAvatarFrame(mBinding.ivHeadWear, headWearInfo.getFirstUrl(), headWearInfo.getType());
|
||||
mBinding.ivUserHead.setPadding(0, 0, 0, 0);
|
||||
mBinding.ivHeadWear.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
int padding = getResources().getDimensionPixelOffset(R.dimen.dp_0_5);
|
||||
mBinding.ivUserHead.setPadding(padding, padding, padding, padding);
|
||||
mBinding.cpViews.setVisibility(View.INVISIBLE);
|
||||
mBinding.ivHeadWear.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
//cp 卡片
|
||||
if (cpInfo!= null && cpInfo.cpAvatar != null && !cpInfo.cpAvatar.isEmpty()) {
|
||||
mBinding.cpCardDay.setText(cpInfo.cpDay + ""+ ResUtil.getString(R.string.days));
|
||||
mBinding.cpCardDay.setVisibility(cpInfo.cpDay > 0? View.VISIBLE : View.INVISIBLE);
|
||||
|
||||
mBinding.cpCardLevel.setImageResource(CpUtils.INSTANCE.getLevelImg(cpInfo.cpLevel));
|
||||
mBinding.cpCardLevel.setVisibility(View.VISIBLE);
|
||||
mBinding.cpCardLevelEmpty.setVisibility(View.INVISIBLE);
|
||||
|
||||
ImageLoadUtilsV2.loadImage(mBinding.cpCardUserAvatar, userInfo.getAvatar());
|
||||
ImageLoadUtilsV2.loadImage(mBinding.cpCardUserAvatarCp, cpInfo.cpAvatar);
|
||||
mBinding.cpCardUserHeadCp.setVisibility(View.VISIBLE);
|
||||
mBinding.cpCardUserAvatarCp.setOnClickListener(v -> {
|
||||
UserInfoActivity.Companion.start(context,cpInfo.cpUid);
|
||||
});
|
||||
}else {
|
||||
mBinding.cpCardDay.setVisibility(View.INVISIBLE);
|
||||
mBinding.cpCardLevelEmpty.setVisibility(View.VISIBLE);
|
||||
mBinding.cpCardLevel.setVisibility(View.INVISIBLE);
|
||||
mBinding.cpCardUserAvatarCp.setImageResource(R.drawable.ic_user_info_cp_def_avatar);
|
||||
mBinding.cpCardUserAvatarCp.setOnClickListener(null);
|
||||
mBinding.cpCardUserHeadCp.setVisibility(View.INVISIBLE);
|
||||
ImageLoadUtilsV2.loadImage(mBinding.cpCardUserAvatar, userInfo.getAvatar());
|
||||
}
|
||||
|
||||
//cp 动画
|
||||
if (cpInfo != null && cpInfo.showCpAnim && isFirst) {
|
||||
String animUrl = CpUtils.INSTANCE.getUserInfoAnim(cpInfo.cpLevel);
|
||||
HashMap<String, String> imgMap = new HashMap<>();
|
||||
imgMap.put("avatar1", cpInfo.avatar);
|
||||
imgMap.put("avatar2", cpInfo.cpAvatar);
|
||||
if (animUrl != null) {
|
||||
CpUtils.INSTANCE.loadVap(
|
||||
mBinding.userInfoAnim,
|
||||
animUrl,
|
||||
imgMap,null
|
||||
);
|
||||
}
|
||||
}else {
|
||||
mBinding.userInfoAnim.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
isFirst = false;
|
||||
|
||||
}
|
||||
|
||||
private void setMarginTop(View view, int top) {
|
||||
if (view.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
|
||||
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
@@ -401,13 +497,26 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
.setOnPageClickListener((clickedView, position) -> {
|
||||
showUserPhoto(position);
|
||||
})
|
||||
.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
|
||||
@Override
|
||||
public void onPageSelected(int position) {
|
||||
try {
|
||||
if (mBinding.bannerViewIndex.getTag() != null) {
|
||||
int itemCount = (int) mBinding.bannerViewIndex.getTag();
|
||||
mBinding.bannerViewIndex.setText((position+1)+"/"+itemCount);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
})
|
||||
.setRTLMode(isRTL)
|
||||
.setIndicatorHeight(width)
|
||||
.setIndicatorGravity(isRTL ? IndicatorGravity.START : IndicatorGravity.END)
|
||||
.setIndicatorSliderWidth(width, width * 2)
|
||||
.setIndicatorSliderGap(context.getResources().getDimensionPixelOffset(R.dimen.dp_6))
|
||||
.setIndicatorMargin(isRTL ? marginEnd : 0, 0, isRTL ? 0 : marginEnd, context.getResources().getDimensionPixelOffset(R.dimen.dp_71))
|
||||
.setAdapter(adapter).create();
|
||||
.setAdapter(adapter)
|
||||
.create();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -416,8 +525,13 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
private void initPhoto(List<UserDetailInfo.DataBean.PrivatePhotoBean> list) {
|
||||
if (list == null) {
|
||||
mBinding.bannerView.refreshData(new ArrayList());
|
||||
mBinding.bannerViewIndex.setTag(0);
|
||||
mBinding.bannerViewIndex.setVisibility(View.INVISIBLE);
|
||||
} else {
|
||||
mBinding.bannerView.refreshData(list);
|
||||
mBinding.bannerViewIndex.setTag(list.size());
|
||||
mBinding.bannerViewIndex.setText(1+"/"+list.size());
|
||||
mBinding.bannerViewIndex.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -453,10 +567,11 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
@Override
|
||||
public void onStateChanged(AppBarLayout appBarLayout, State state) {
|
||||
if (state == State.COLLAPSED) {
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.white));
|
||||
// mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back_black);
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.color_08151a));
|
||||
setTitleVisible(true);
|
||||
setEditButton(identityState, true);
|
||||
setEditButton(identityState, false);
|
||||
}else{
|
||||
mBinding.ivUserBack.setImageResource(R.drawable.icon_user_back);
|
||||
mBinding.tbUserInfo.setBackgroundColor(getResources().getColor(R.color.transparent));
|
||||
@@ -497,11 +612,15 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
mBinding.tvEdit.setVisibility(View.GONE);
|
||||
}
|
||||
if (isExpanded) {
|
||||
mBinding.ivEdit.setImageResource(R.drawable.user_info_ic_more_black);
|
||||
mBinding.tvEdit.setImageResource(R.drawable.user_info_ic_edit_black);
|
||||
mBinding.ivEdit.setImageTintList(ColorStateList.valueOf(Color.BLACK));
|
||||
mBinding.tvEdit.setImageTintList(ColorStateList.valueOf(Color.BLACK));
|
||||
// mBinding.ivEdit.setImageResource(R.drawable.user_info_ic_more_black);
|
||||
// mBinding.tvEdit.setImageResource(R.drawable.user_info_ic_edit_black);
|
||||
} else {
|
||||
mBinding.ivEdit.setImageResource(R.drawable.user_info_ic_more);
|
||||
mBinding.tvEdit.setImageResource(R.drawable.user_info_ic_edit);
|
||||
// mBinding.ivEdit.setImageResource(R.drawable.user_info_ic_more);
|
||||
// mBinding.tvEdit.setImageResource(R.drawable.user_info_ic_edit);
|
||||
mBinding.ivEdit.setImageTintList(ColorStateList.valueOf(Color.WHITE));
|
||||
mBinding.tvEdit.setImageTintList(ColorStateList.valueOf(Color.WHITE));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -570,16 +689,18 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
// UserLabelDialog.newInstance(userInfo.getLabels(), userId).show(this);
|
||||
// break;
|
||||
|
||||
case R.id.iv_user_back:
|
||||
case R.id.ivUserBack:
|
||||
finish();
|
||||
break;
|
||||
|
||||
case R.id.tv_edit:
|
||||
case R.id.iv_edit:
|
||||
|
||||
|
||||
case R.id.tvEdit:
|
||||
case R.id.ivEdit:
|
||||
editClick(identityState);
|
||||
break;
|
||||
|
||||
case R.id.send_msg_layout:
|
||||
case R.id.sendMsgLayout:
|
||||
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(String.valueOf(userId));
|
||||
if (nimUserInfo != null) {
|
||||
NimP2PMessageActivity.start(this, String.valueOf(userId));
|
||||
@@ -597,7 +718,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.attention_layout:
|
||||
case R.id.attentionLayout:
|
||||
if (userInfo == null) {
|
||||
toast(getString(R.string.me_user_information_is_empty));
|
||||
return;
|
||||
@@ -625,7 +746,7 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
PraiseModel.get().praise(userInfo.getUid(), true).subscribe();
|
||||
}
|
||||
break;
|
||||
case R.id.layout_live:
|
||||
case R.id.layoutLive:
|
||||
if (userInfo == null) {
|
||||
toast(getString(R.string.me_user_information_is_empty));
|
||||
return;
|
||||
@@ -635,6 +756,15 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
AVRoomActivity.FROM_TYPE_USER, userInfo.getNick(), String.valueOf(userInfo.getUid()));
|
||||
}
|
||||
break;
|
||||
|
||||
case R.id.cpCardMore:
|
||||
UserCpListActivity.Companion.start(this);
|
||||
break;
|
||||
case R.id.userInfoAnim:
|
||||
mBinding.userInfoAnim.stopPlay();
|
||||
mBinding.userInfoAnim.clearAnimation();
|
||||
mBinding.userInfoAnim.setVisibility(View.GONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -645,7 +775,9 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
|
||||
private void setLikedText(boolean isliked) {
|
||||
mIslike = isliked;
|
||||
attentionLayout.setText(getString((isliked) ? R.string.already_attention : R.string.follow));
|
||||
attentionLayout.setBackgroundResource((isliked) ? R.drawable.user_info_follow_ed : R.drawable.user_info_follow_n);
|
||||
attentionText.setText(getString((isliked) ? R.string.already_attention : R.string.follow));
|
||||
attentionImg.setBackgroundResource((isliked) ? R.drawable.ic_user_info_followed : R.drawable.ic_user_info_follow);
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
@@ -664,13 +796,13 @@ public class UserInfoActivity extends BaseBindingActivity<ActivityUserInfoBindin
|
||||
}
|
||||
|
||||
private void setOfficialMask(String name, String icon) {
|
||||
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(icon)) {
|
||||
if( userInfo.isCustomWord() && !TextUtils.isEmpty(icon)){
|
||||
mBinding.inOfficialMask.setVisibility(View.VISIBLE);
|
||||
|
||||
if (tvOfficialMask != null && ivOfficialMask != null) {
|
||||
tvOfficialMask.setText(name);
|
||||
ImageLoadUtils.loadImage(this, icon, ivOfficialMask);
|
||||
}
|
||||
ImageLoadUtils.loadImage(this, icon, mBinding.ivOfficialMask);
|
||||
}else if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(icon)) {
|
||||
mBinding.inOfficialMask.setVisibility(View.VISIBLE);
|
||||
mBinding.tvOfficialMask.setText(name);
|
||||
ImageLoadUtils.loadImage(this, icon, mBinding.ivOfficialMask);
|
||||
} else {
|
||||
mBinding.inOfficialMask.setVisibility(View.GONE);
|
||||
}
|
||||
|
@@ -10,6 +10,10 @@ import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.fourmob.datetimepicker.date.DatePickerDialog
|
||||
@@ -25,6 +29,7 @@ import com.chwl.app.UIHelper
|
||||
import com.chwl.app.application.App
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.common.util.BitmapUtil
|
||||
import com.chwl.app.constants.UserInfoConstants
|
||||
import com.chwl.app.databinding.ActivityUserInfoModifyBinding
|
||||
import com.chwl.app.ui.login.ModifyInfoActivity
|
||||
import com.chwl.app.ui.user.adapter.UserPhotoAdapter
|
||||
@@ -36,16 +41,22 @@ import com.chwl.app.utils.RegexUtil
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserDetailInfo
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.TimeUtils
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.SingleObserver
|
||||
import io.reactivex.disposables.Disposable
|
||||
@@ -92,10 +103,18 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
userId = intent.getLongExtra("userId", 0)
|
||||
}
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
|
||||
PhotoCompressUtil.clearCompressCache()
|
||||
|
||||
if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
crop(uri, 1, mUri)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun click(position: Int, userPhoto: UserPhoto, isOwner: Boolean) {
|
||||
@@ -133,6 +152,12 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
binding.rvPhotos.visibility = View.GONE
|
||||
}
|
||||
binding.tvArea.text = userInfo.region
|
||||
|
||||
//cp 设置获取
|
||||
UserModel.get().getUserInfoDetail(userId).compose(bindToLifecycle()).doOnSuccess {
|
||||
setSwitchView(binding.swCpShow,it?.data?.relationUserVO?.showCpAvatar?:false)
|
||||
setSwitchView(binding.swCpAnim,it?.data?.relationUserVO?.showCpAnim?:false)
|
||||
}.subscribe()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,6 +168,8 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
binding.layoutPhotos.setOnClickListener(this)
|
||||
binding.llDesc.setOnClickListener(this)
|
||||
binding.layoutArea.setOnClickListener(this)
|
||||
binding.swCpAnim.setOnClickListener(this)
|
||||
binding.swCpShow.setOnClickListener(this)
|
||||
val mLayoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)
|
||||
binding.rvPhotos.layoutManager = mLayoutManager
|
||||
}
|
||||
@@ -284,11 +311,68 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
toast(e.message)
|
||||
}
|
||||
})
|
||||
} R.id.layout_area -> {
|
||||
dialogManager.showProgressDialog(
|
||||
this@UserInfoModifyActivity,
|
||||
ResUtil.getString(R.string.ui_user_userinfomodifyactivity_02)
|
||||
)
|
||||
UserModel.get().areaInfo.subscribe(object : SingleObserver<List<String>> {
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
mCompositeDisposable.add(d)
|
||||
}
|
||||
|
||||
override fun onSuccess(areaList: List<String>) {
|
||||
dialogManager.dismissDialog()
|
||||
if (areaList.isNotEmpty()) {
|
||||
UserAreaDialog.newInstance(areaList)
|
||||
.apply {
|
||||
setAction {
|
||||
reportArea(it)
|
||||
}
|
||||
}.show(this@UserInfoModifyActivity)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
dialogManager.dismissDialog()
|
||||
toast(e.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
R.id.swCpAnim -> {
|
||||
postUpDateCpSwitch(binding.swCpAnim,UserInfoConstants.CpSet.cpAnim)
|
||||
}
|
||||
|
||||
R.id.swCpShow -> {
|
||||
postUpDateCpSwitch(binding.swCpShow,UserInfoConstants.CpSet.cpAvatar)
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
//post update set
|
||||
private fun postUpDateCpSwitch(view: ImageView,type:Int){
|
||||
val tag = view.tag
|
||||
if (tag != null && tag is Boolean){
|
||||
val tagVal = !tag
|
||||
UserModel.get().userCpSettingUpdate(type,tagVal)
|
||||
.compose(bindToLifecycle())
|
||||
.doOnSuccess {
|
||||
setSwitchView(view,tagVal,true)
|
||||
}.subscribe()
|
||||
}
|
||||
}
|
||||
|
||||
// set view
|
||||
private fun setSwitchView(view: ImageView, on:Boolean,notify:Boolean=false){
|
||||
view.setImageResource(if (on) R.drawable.ic_user_edit_sw_on else R.drawable.ic_user_edit_sw_off)
|
||||
view.tag = on
|
||||
if (notify) {
|
||||
//通知 cp设置改变 todo do
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private fun reportArea(area: String) {
|
||||
binding.tvArea.text = area
|
||||
dialogManager.showProgressDialog(
|
||||
@@ -358,24 +442,30 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 33){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(this,Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun getNowTime(): String {
|
||||
@@ -488,14 +578,16 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
toast(R.string.text_bitmap_too_large)
|
||||
return
|
||||
}
|
||||
if (sourceSize > 0) {
|
||||
//不能上传图片的最小文件大小
|
||||
CoreLogger.debug(TAG, "sourceSize: $sourceSize")
|
||||
if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
|
||||
toast(R.string.text_bitmap_too_small)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// if (sourceSize > 0) {
|
||||
// //不能上传图片的最小文件大小
|
||||
// CoreLogger.debug(TAG, "sourceSize: $sourceSize")
|
||||
// if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
|
||||
// toast(R.string.text_bitmap_too_small)
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
|
||||
val options = UCrop.Options().apply {
|
||||
setCompressionQuality(100)
|
||||
setShowCropGrid(false)
|
||||
|
@@ -11,6 +11,9 @@ import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import android.widget.GridView
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.jph.takephoto.app.TakePhotoActivity
|
||||
@@ -30,13 +33,17 @@ import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.net.BeanObserver
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import kotlinx.coroutines.Job
|
||||
import java.io.FileNotFoundException
|
||||
import java.text.SimpleDateFormat
|
||||
@@ -57,6 +64,8 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
private var mUri: Uri? = null
|
||||
private var mJob: Job? = null
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
companion object {
|
||||
const val FLAG_CHANGE = "isChanged"
|
||||
private const val TAG = "UserModifyPhotosActivit"
|
||||
@@ -95,6 +104,14 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
if (userInfo != null) {
|
||||
updateView()
|
||||
}
|
||||
if (ActivityResultContracts.PickVisualMedia.isPhotoPickerAvailable(this)) {
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
crop(it, 0, mUri)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
@@ -219,24 +236,38 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,
|
||||
if (Build.VERSION.SDK_INT >= 33) Manifest.permission.READ_MEDIA_IMAGES else Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 33){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this, Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private fun getNowTime(): String {
|
||||
@@ -309,14 +340,14 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
toast(R.string.text_bitmap_too_large)
|
||||
return
|
||||
}
|
||||
if (sourceSize > 0) {
|
||||
//不能上传图片的最小文件大小
|
||||
CoreLogger.debug(TAG, "sourceSize: $sourceSize")
|
||||
if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
|
||||
toast(R.string.text_bitmap_too_small)
|
||||
return
|
||||
}
|
||||
}
|
||||
// if (sourceSize > 0) {
|
||||
// //不能上传图片的最小文件大小
|
||||
// CoreLogger.debug(TAG, "sourceSize: $sourceSize")
|
||||
// if (sourceSize < MIN_HEAD_PHOTO_SIZE) {
|
||||
// toast(R.string.text_bitmap_too_small)
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
val options = UCrop.Options().apply {
|
||||
setCompressionQuality(100)
|
||||
setShowCropGrid(false)
|
||||
|
@@ -0,0 +1,51 @@
|
||||
package com.chwl.app.ui.user.adapter
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.bindadapter.BaseAdapter
|
||||
import com.chwl.app.bindadapter.BindingViewHolder
|
||||
import com.chwl.app.databinding.ItemUserCpListBinding
|
||||
import com.chwl.app.ui.utils.CpUtils.getHeadSvga
|
||||
import com.chwl.app.ui.utils.CpUtils.getLevelImg
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.app.utils.NumberUtils
|
||||
import com.chwl.core.user.bean.UserCPListBean
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.example.lib_utils.ktx.getString
|
||||
|
||||
class UserCpListAdapter : BaseAdapter<UserCPListBean> {
|
||||
|
||||
constructor(layoutResId: Int, brid: Int) : super(layoutResId, brid)
|
||||
|
||||
|
||||
override fun convert(helper: BindingViewHolder, data: UserCPListBean?) {
|
||||
super.convert(helper, data)
|
||||
if (data == null ) return
|
||||
val mViewBinding = helper.binding as ItemUserCpListBinding
|
||||
|
||||
mViewBinding.cpLevel.setImageResource(getLevelImg(data.cpLevel))
|
||||
|
||||
ImageLoadUtils.loadImage(mViewBinding.userAvatar,data.avatar)
|
||||
ImageLoadUtils.loadImage(mViewBinding.userAvatarCp,data.cpAvatar)
|
||||
|
||||
val max = (data.endExp - data.startExp)
|
||||
val current = (data.currentExp.toFloat() / max.toFloat()) * 100f
|
||||
|
||||
mViewBinding.cpPro.max = 100
|
||||
mViewBinding.cpPro.progress = current.toInt()
|
||||
|
||||
mViewBinding.cpProVal.text = "${NumberUtils.format(data.currentExp)} / ${NumberUtils.format(data.endExp)}"
|
||||
mViewBinding.cpNeedVal.text = ResUtil.getString(R.string.CP_Need_tips,NumberUtils.format((data.endExp - data.currentExp)))
|
||||
|
||||
mViewBinding.cpDay.text = "${data.cpDay}${R.string.days.getString()}"
|
||||
mViewBinding.cpDay.isVisible = data.cpDay > 0
|
||||
|
||||
|
||||
helper.addOnClickListener(mViewBinding.cancel.id)
|
||||
helper.addOnClickListener(mViewBinding.userAvatarCp.id)
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -12,6 +12,7 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
@@ -65,6 +66,8 @@ public class UserInfoDynamicAdapter extends BaseQuickAdapter<WorldDynamicBean, B
|
||||
*/
|
||||
private int divider;
|
||||
|
||||
public boolean isUserInfo = false;
|
||||
|
||||
public UserInfoDynamicAdapter(Context context) {
|
||||
super(R.layout.item_userinfo_dynamic);
|
||||
this.context = context;
|
||||
@@ -174,6 +177,16 @@ public class UserInfoDynamicAdapter extends BaseQuickAdapter<WorldDynamicBean, B
|
||||
//跳转去详情
|
||||
helper.itemView.setOnClickListener(toDetailListener);
|
||||
helper.setGone(R.id.line_bottom, getItemCount() - 1 != helper.getLayoutPosition());
|
||||
|
||||
|
||||
if (isUserInfo) {
|
||||
helper.setTextColor(R.id.tv_time, ContextCompat.getColor(context,R.color.white));
|
||||
helper.setTextColor(R.id.expandable_text, ContextCompat.getColor(context,R.color.white));
|
||||
helper.setTextColor(R.id.tv_mini_world_name, ContextCompat.getColor(context,R.color.white));
|
||||
helper.setTextColor(R.id.tv_like, ContextCompat.getColor(context,R.color.white_tran_60));
|
||||
helper.setTextColor(R.id.tv_comment, ContextCompat.getColor(context,R.color.white_tran_60));
|
||||
helper.setVisible(R.id.line_bottom, false);
|
||||
}
|
||||
}
|
||||
|
||||
private void setLikeCount(BaseViewHolder helper, int likeCount, boolean isLike, boolean isAnim) {
|
||||
|
@@ -12,16 +12,14 @@ import com.chwl.core.user.bean.GiftWallInfo
|
||||
class UserInfoGiftAdapter(private val itemBgRes: Int = R.drawable.user_info_bg_gift) :
|
||||
BaseQuickAdapter<GiftWallInfo, BaseViewHolder>(R.layout.user_info_item_gift) {
|
||||
override fun onCreateDefViewHolder(parent: ViewGroup?, viewType: Int): BaseViewHolder {
|
||||
return super.onCreateDefViewHolder(parent, viewType).apply {
|
||||
getView<ImageView>(R.id.iv_bg).setImageResource(itemBgRes)
|
||||
}
|
||||
return super.onCreateDefViewHolder(parent, viewType)
|
||||
}
|
||||
|
||||
override fun convert(helper: BaseViewHolder, item: GiftWallInfo) {
|
||||
helper.setText(R.id.tv_name, item.giftName)
|
||||
helper.setText(R.id.tv_count, "x${item.reciveCount}")
|
||||
val iconView = helper.getView<ImageView>(R.id.iv_icon)
|
||||
iconView.load(item.picUrl)
|
||||
iconView.load(item.picUrl,0f,R.drawable.transparent_draw)
|
||||
val rankView = helper.itemView.findViewById<ImageView>(R.id.iv_rank)
|
||||
if (helper.bindingAdapterPosition == 0) {
|
||||
rankView.setImageResource(R.drawable.ic_gift_one)
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.chwl.app.ui.user.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.view.Gravity;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
@@ -21,7 +22,7 @@ import java.util.List;
|
||||
public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
private final List<? extends CharSequence> mTitleList;
|
||||
|
||||
private int textSize = 20;
|
||||
private int textSize = 18;
|
||||
private float minScale = 0.9f;
|
||||
private boolean showIndicator = true;
|
||||
private OnItemSelectListener mOnItemSelectListener;
|
||||
@@ -38,8 +39,8 @@ public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
@Override
|
||||
public IPagerTitleView getTitleView(Context context, final int i) {
|
||||
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_7F191919));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_191919));
|
||||
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.white_tran_60));
|
||||
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.white));
|
||||
scaleTransitionPagerTitleView.setMinScale(minScale);
|
||||
scaleTransitionPagerTitleView.setTextSize(textSize);
|
||||
int padding = context.getResources().getDimensionPixelOffset(R.dimen.dp_12);
|
||||
@@ -60,7 +61,7 @@ public class UserInfoIndicatorAdapter extends CommonNavigatorAdapter {
|
||||
indicator.setLineHeight(UIUtil.dip2px(context, 3));
|
||||
indicator.setRoundRadius(UIUtil.dip2px(context, 1.5));
|
||||
indicator.setLineWidth(UIUtil.dip2px(context, 17));
|
||||
indicator.setColors(context.getResources().getColor(R.color.color_26CC9C));
|
||||
indicator.setColors(Color.parseColor("#04d5c6"));
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||
// lp.bottomMargin = mBottomMargin;
|
||||
indicator.setLayoutParams(lp);
|
||||
|
@@ -56,8 +56,9 @@ class UserInfoMedalAdapter :
|
||||
})
|
||||
} else {
|
||||
val imageView = helper.getView<ImageView>(R.id.iv_image)
|
||||
imageView.load(item.picUrl)
|
||||
imageView.load(item.picUrl,0f,R.drawable.transparent_draw)
|
||||
}
|
||||
}
|
||||
helper.setText(R.id.medalName,item.medalName)
|
||||
}
|
||||
}
|
@@ -2,9 +2,9 @@ package com.chwl.app.ui.user.fragment
|
||||
|
||||
import android.content.Intent
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingFragment
|
||||
import com.chwl.app.databinding.UserInfoDataFragmentBinding
|
||||
@@ -16,12 +16,17 @@ import com.chwl.app.ui.user.activity.UserModifyPhotosActivity
|
||||
import com.chwl.app.ui.user.adapter.UserInfoAlbumAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserInfoGameTeamAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserInfoGiftAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserInfoIndicatorAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserInfoMedalAdapter
|
||||
import com.chwl.app.ui.user.viewmodel.UserInfoViewModel
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.SpacingDecoration
|
||||
import com.chwl.core.game_team.UserGameTeamInfo
|
||||
import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.example.lib_utils.ktx.getString
|
||||
|
||||
class UserInfoDataFragment : BaseViewBindingFragment<UserInfoDataFragmentBinding>() {
|
||||
|
||||
@@ -30,9 +35,10 @@ class UserInfoDataFragment : BaseViewBindingFragment<UserInfoDataFragmentBinding
|
||||
override fun init() {
|
||||
initGameTeam()
|
||||
initAlbum()
|
||||
initOther()
|
||||
initMedal()
|
||||
initGift()
|
||||
initLuckyGift()
|
||||
setGuild()
|
||||
FragmentVisibleStateHelper(this).apply {
|
||||
this.start {
|
||||
onVisibleChanged(it, isFirstVisible)
|
||||
@@ -40,6 +46,38 @@ class UserInfoDataFragment : BaseViewBindingFragment<UserInfoDataFragmentBinding
|
||||
}
|
||||
}
|
||||
|
||||
private fun initOther() {
|
||||
val tagList =
|
||||
arrayListOf(ResUtil.getString(R.string.medal), ResUtil.getString(R.string.gift_action))
|
||||
val commonNavigator = CommonNavigator(context)
|
||||
commonNavigator.setTitleWrapContent(false)
|
||||
val magicIndicatorAdapter = UserInfoIndicatorAdapter(context, tagList)
|
||||
magicIndicatorAdapter.textSize = 16
|
||||
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
|
||||
binding.magicIndicator.onPageSelected(position)
|
||||
onOtherTabChange(view?.text?.toString() ?: "")
|
||||
}
|
||||
commonNavigator.adapter = magicIndicatorAdapter
|
||||
binding.magicIndicator.setNavigator(commonNavigator)
|
||||
}
|
||||
|
||||
private fun onOtherTabChange(str: String) {
|
||||
when (str) {
|
||||
ResUtil.getString(R.string.medal) -> {
|
||||
binding.layoutGift.isVisible = false
|
||||
binding.layoutMedal.isVisible = true
|
||||
}
|
||||
|
||||
ResUtil.getString(R.string.gift_action) -> {
|
||||
binding.layoutGift.isVisible = true
|
||||
binding.layoutMedal.isVisible = false
|
||||
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initGameTeam() {
|
||||
val adapter = UserInfoGameTeamAdapter(viewModel.isMe)
|
||||
binding.recyclerViewGameTeam.addItemDecoration(
|
||||
@@ -96,74 +134,81 @@ class UserInfoDataFragment : BaseViewBindingFragment<UserInfoDataFragmentBinding
|
||||
binding.recyclerViewMedal.adapter = medalAdapter
|
||||
viewModel.userInfoDetailData.observe(this) {
|
||||
val list = it.medals?.userMedals
|
||||
binding.tvMedalCount.text = "(${list?.size ?: 0})"
|
||||
if (medalAdapter.itemCount > 0) return@observe
|
||||
medalAdapter.setNewData(list)
|
||||
binding.layoutMedal.isVisible = !list.isNullOrEmpty()
|
||||
binding.tvMedalStatus.isVisible = list.isNullOrEmpty()
|
||||
}
|
||||
}
|
||||
|
||||
var isMiniMode = true
|
||||
private fun initGift() {
|
||||
val giftAdapter = UserInfoGiftAdapter()
|
||||
var isMiniMode = true
|
||||
binding.ivGiftMore.setOnClickListener {
|
||||
isMiniMode = !isMiniMode
|
||||
val list = viewModel.giftListLiveData.value ?: emptyList()
|
||||
loadListData(giftAdapter, 4, isMiniMode, list, binding.ivGiftMore)
|
||||
loadListData(giftAdapter, 4, isMiniMode, binding.ivGiftMore)
|
||||
binding.ivGiftMore.animate().rotationBy(180f).start()
|
||||
}
|
||||
binding.recyclerViewGift.addItemDecoration(
|
||||
GridSpacingItemNewDecoration(
|
||||
resources.getDimensionPixelOffset(R.dimen.dp_12),
|
||||
resources.getDimensionPixelOffset(R.dimen.dp_2),
|
||||
false
|
||||
)
|
||||
)
|
||||
binding.recyclerViewGift.adapter = giftAdapter
|
||||
viewModel.giftListLiveData.observe(this) {
|
||||
loadListData(giftAdapter, 4, isMiniMode, it, binding.ivGiftMore)
|
||||
binding.tvGiftStatus.isVisible = it.isNullOrEmpty()
|
||||
loadListData(giftAdapter, 4, isMiniMode, binding.ivGiftMore)
|
||||
}
|
||||
viewModel.requestGiftList()
|
||||
}
|
||||
|
||||
private fun initLuckyGift() {
|
||||
val luckyGiftAdapter = UserInfoGiftAdapter(R.drawable.user_info_bg_lucku_gift)
|
||||
var isMiniMode = true
|
||||
binding.ivLuckyGiftMore.setOnClickListener {
|
||||
isMiniMode = !isMiniMode
|
||||
val list = viewModel.luckyGiftListLiveData.value ?: emptyList()
|
||||
loadListData(luckyGiftAdapter, 4, isMiniMode, list, binding.ivLuckyGiftMore)
|
||||
binding.ivLuckyGiftMore.animate().rotationBy(180f).start()
|
||||
}
|
||||
binding.recyclerViewLuckyGift.addItemDecoration(
|
||||
GridSpacingItemNewDecoration(
|
||||
resources.getDimensionPixelOffset(R.dimen.dp_12),
|
||||
resources.getDimensionPixelOffset(R.dimen.dp_2),
|
||||
false
|
||||
)
|
||||
)
|
||||
binding.recyclerViewLuckyGift.adapter = luckyGiftAdapter
|
||||
viewModel.luckyGiftListLiveData.observe(this) {
|
||||
loadListData(luckyGiftAdapter, 4, isMiniMode, it, binding.ivLuckyGiftMore)
|
||||
binding.tvLuckyGiftStatus.isVisible = it.isNullOrEmpty()
|
||||
loadListData(giftAdapter, 4, isMiniMode, binding.ivGiftMore)
|
||||
}
|
||||
viewModel.requestLuckyGiftList()
|
||||
viewModel.loadUserInfoGiftWallData()
|
||||
}
|
||||
|
||||
private fun <T> loadListData(
|
||||
adapter: BaseQuickAdapter<T, *>,
|
||||
|
||||
private fun setGuild() {
|
||||
UserModel.get().getUserInfoDetailCache(viewModel.userId).compose(bindToLifecycle())
|
||||
.doOnSuccess {
|
||||
it?.data?.guildInfo?.let {
|
||||
|
||||
//guildName
|
||||
binding.guildName.text = "${R.string.Guild_Nick.getString()}:${it.guildName}"
|
||||
//guildId
|
||||
binding.guildId.text = "${R.string.Guild_ID.getString()}:${it.guildId}"
|
||||
//guildAgentId
|
||||
binding.guildAgentId.text = "${R.string.Agent_ID.getString()}:${it.erbanNo}"
|
||||
|
||||
//guildImg
|
||||
binding.guildImg.load(it.avatar)
|
||||
|
||||
binding.guildLayout.isVisible = true
|
||||
}
|
||||
}.subscribe()
|
||||
}
|
||||
|
||||
private fun loadListData(
|
||||
adapter: UserInfoGiftAdapter,
|
||||
miniCount: Int,
|
||||
miniOrFull: Boolean,
|
||||
list: List<T>,
|
||||
moreView: View
|
||||
) {
|
||||
val finalList = if (miniOrFull) {
|
||||
list.take(miniCount)
|
||||
if (viewModel.luckyGiftIsRead && viewModel.giftIsRead) {
|
||||
if (!viewModel.giftWallIsRead) {
|
||||
val gift = viewModel.giftListLiveData.value ?: emptyList()
|
||||
val luckyGift = viewModel.luckyGiftListLiveData.value ?: emptyList()
|
||||
|
||||
viewModel.userInfoGiftWallData.addAll(gift)
|
||||
viewModel.userInfoGiftWallData.addAll(luckyGift)
|
||||
|
||||
viewModel.userInfoGiftWallData.sortBy { it.reciveCount }
|
||||
|
||||
viewModel.giftWallIsRead = true
|
||||
}
|
||||
} else {
|
||||
list
|
||||
return
|
||||
}
|
||||
|
||||
val finalList = if (miniOrFull) {
|
||||
viewModel.userInfoGiftWallData.take(miniCount)
|
||||
} else {
|
||||
viewModel.userInfoGiftWallData
|
||||
}
|
||||
adapter.setNewData(finalList)
|
||||
moreView.isVisible = list.size > miniCount
|
||||
moreView.isVisible = viewModel.userInfoGiftWallData.size > miniCount
|
||||
binding.tvGiftStatus.isVisible = finalList.isEmpty()
|
||||
}
|
||||
|
||||
private fun showPhotoPreview(list: ArrayList<UserPhoto>, position: Int) {
|
||||
@@ -175,10 +220,8 @@ class UserInfoDataFragment : BaseViewBindingFragment<UserInfoDataFragmentBinding
|
||||
|
||||
private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) {
|
||||
if (isVisible && !isFirstVisible) {
|
||||
if (viewModel.giftListLiveData.value.isNullOrEmpty()) {
|
||||
if (viewModel.userInfoGiftWallData.isEmpty()) {
|
||||
viewModel.requestGiftList()
|
||||
}
|
||||
if (viewModel.luckyGiftListLiveData.value.isNullOrEmpty()) {
|
||||
viewModel.requestLuckyGiftList()
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ class UserInfoDynamicFragment : BaseViewBindingFragment<UserInfoDynamicFragmentB
|
||||
|
||||
private fun initView() {
|
||||
adapter = UserInfoDynamicAdapter(requireContext())
|
||||
adapter?.isUserInfo = true
|
||||
adapter?.setEnableLoadMore(false)
|
||||
adapter?.emptyView = layoutInflater.inflate(R.layout.user_info_tab_empty, null)
|
||||
binding.recyclerView.adapter = adapter
|
||||
|
@@ -34,6 +34,11 @@ class UserInfoViewModel : BaseViewModel() {
|
||||
|
||||
val giftListLiveData = MutableLiveData<List<GiftWallInfo>>()
|
||||
val luckyGiftListLiveData = MutableLiveData<List<GiftWallInfo>>()
|
||||
val userInfoGiftWallData = mutableListOf<GiftWallInfo>()
|
||||
var luckyGiftIsRead = false
|
||||
var giftIsRead = false
|
||||
var giftWallIsRead = false
|
||||
|
||||
|
||||
fun getUserInfo() {
|
||||
UserModel.get().getUserInfoFromServer(userId)
|
||||
@@ -88,14 +93,32 @@ class UserInfoViewModel : BaseViewModel() {
|
||||
}
|
||||
|
||||
fun requestGiftList() {
|
||||
addDisposable(UserModel.get().requestUserGiftWall(userId, 1, 2).subscribe { it ->
|
||||
giftListLiveData.postValue(it)
|
||||
})
|
||||
addDisposable(UserModel.get().requestUserGiftWall(userId, 1, 2)
|
||||
.doOnError {
|
||||
giftIsRead=true
|
||||
}
|
||||
.subscribe { it ->
|
||||
giftIsRead=true
|
||||
giftListLiveData.postValue(it)
|
||||
})
|
||||
}
|
||||
|
||||
fun requestLuckyGiftList() {
|
||||
addDisposable(UserModel.get().requestUserGiftWall(userId, 2, 2).subscribe { it ->
|
||||
luckyGiftListLiveData.postValue(it)
|
||||
})
|
||||
addDisposable(UserModel.get().requestUserGiftWall(userId, 2, 2)
|
||||
.doOnError {
|
||||
luckyGiftIsRead=true
|
||||
}
|
||||
.subscribe { it ->
|
||||
luckyGiftListLiveData.postValue(it)
|
||||
luckyGiftIsRead=true
|
||||
})
|
||||
}
|
||||
|
||||
fun loadUserInfoGiftWallData(){
|
||||
giftIsRead = false
|
||||
luckyGiftIsRead = false
|
||||
userInfoGiftWallData.clear()
|
||||
requestGiftList()
|
||||
requestLuckyGiftList()
|
||||
}
|
||||
}
|
168
app/src/main/java/com/chwl/app/ui/utils/CpUtils.kt
Normal file
@@ -0,0 +1,168 @@
|
||||
package com.chwl.app.ui.utils
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.view.View
|
||||
import android.view.View.OnAttachStateChangeListener
|
||||
import androidx.core.view.isVisible
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestFutureTarget
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.application.App
|
||||
import com.chwl.app.application.GlobalHandleManager
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.netease.nim.uikit.support.glide.GlideApp
|
||||
import com.tencent.qgame.animplayer.AnimConfig
|
||||
import com.tencent.qgame.animplayer.AnimView
|
||||
import com.tencent.qgame.animplayer.inter.IAnimListener
|
||||
import com.tencent.qgame.animplayer.inter.IFetchResource
|
||||
import com.tencent.qgame.animplayer.mix.Resource
|
||||
import com.tencent.qgame.animplayer.util.ScaleType
|
||||
|
||||
object CpUtils {
|
||||
|
||||
fun getHeadSvga(level: Int) : String {
|
||||
return "svga/cp_list_head_$level.svga"
|
||||
}
|
||||
|
||||
fun getUserInfoAnim(level: Int) : String? {
|
||||
if (level < 3) return null
|
||||
return "mp4/cp_userinfo_anim_$level.mp4"
|
||||
}
|
||||
|
||||
|
||||
var flags = arrayListOf(
|
||||
R.drawable.ic_user_info_cp_avatar_flag_0,
|
||||
R.drawable.ic_user_info_cp_avatar_flag_1,
|
||||
R.drawable.ic_user_info_cp_avatar_flag_2,
|
||||
R.drawable.ic_user_info_cp_avatar_flag_3,
|
||||
R.drawable.ic_user_info_cp_avatar_flag_4,
|
||||
R.drawable.ic_user_info_cp_avatar_flag_5,
|
||||
)
|
||||
var levels = arrayListOf(
|
||||
R.drawable.ic_cp_list_level_0,
|
||||
R.drawable.ic_cp_list_level_1,
|
||||
R.drawable.ic_cp_list_level_2,
|
||||
R.drawable.ic_cp_list_level_3,
|
||||
R.drawable.ic_cp_list_level_4,
|
||||
R.drawable.ic_cp_list_level_5,
|
||||
)
|
||||
|
||||
var levelBgs = arrayListOf(
|
||||
R.drawable.transparent_draw,
|
||||
R.drawable.ic_cp_level_up_bg_1,
|
||||
R.drawable.ic_cp_level_up_bg_2,
|
||||
R.drawable.ic_cp_level_up_bg_3,
|
||||
R.drawable.ic_cp_level_up_bg_4,
|
||||
R.drawable.ic_cp_level_up_bg_5
|
||||
)
|
||||
|
||||
var cpLevelUpStr = arrayListOf(
|
||||
R.string.Sweet_Duo,
|
||||
R.string.Dynamic_Duo,
|
||||
R.string.Ldeal_Duo,
|
||||
R.string.Dream_Duo,
|
||||
R.string.Perfect_Duo,
|
||||
R.string.Divine_Duo
|
||||
)
|
||||
|
||||
fun getFlag(level: Int) : Int{
|
||||
return flags.getOrNull(level)?:R.drawable.ic_user_info_cp_avatar_flag_0
|
||||
}
|
||||
|
||||
fun getLevelImg(level: Int) : Int{
|
||||
return levels.getOrNull(level)?:R.drawable.ic_cp_list_level_0
|
||||
}
|
||||
|
||||
fun getCpLevelUpTextBg(level: Int) : Int{
|
||||
return levelBgs.getOrNull(level)?:R.drawable.ic_cp_level_up_bg_1
|
||||
}
|
||||
|
||||
fun getCpLevelUpStr(level: Int) : String{
|
||||
return ResUtil.getString(cpLevelUpStr.getOrNull(level)?:R.string.Sweet_Duo)
|
||||
}
|
||||
|
||||
fun downLoadAvatar(url:String?, onResourceReady:(resource: Bitmap?)->Unit) {
|
||||
if (url.isNullOrEmpty()) return
|
||||
try {
|
||||
val futureTarget = RequestFutureTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
|
||||
GlideApp.with(App.instance())
|
||||
.asBitmap()
|
||||
.circleCrop()
|
||||
.load(url)
|
||||
.addListener(object : RequestListener<Bitmap?> {
|
||||
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Bitmap?>?, isFirstResource: Boolean): Boolean {
|
||||
onResourceReady(null)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target<Bitmap?>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
|
||||
onResourceReady(resource)
|
||||
return true
|
||||
}
|
||||
})
|
||||
.into(futureTarget)
|
||||
.get()
|
||||
} catch (e: Exception) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun loadVap(animView: AnimView, url :String?, imgUrlMap: HashMap<String,String>?=null , textMap: HashMap<String,String>?=null) {
|
||||
if (url == null) return
|
||||
animView.visibility = View.VISIBLE
|
||||
var index = 0
|
||||
val bitmapMap = hashMapOf<String,Bitmap?>()
|
||||
|
||||
if (!imgUrlMap.isNullOrEmpty()){
|
||||
imgUrlMap.keys.forEach { key ->
|
||||
downLoadAvatar(imgUrlMap[key]) { resource ->
|
||||
index++
|
||||
bitmapMap[key] = resource
|
||||
if (index == imgUrlMap.keys.size){
|
||||
animView.setFetchResource(object : IFetchResource {
|
||||
override fun fetchImage(resource: Resource, result: (Bitmap?) -> Unit) {
|
||||
if (bitmapMap.isEmpty()) {
|
||||
result(null)
|
||||
} else {
|
||||
var bitmap : Bitmap?=null
|
||||
bitmapMap.keys.forEach {
|
||||
if (resource.tag == it){
|
||||
bitmap = bitmapMap[it]
|
||||
}
|
||||
}
|
||||
result(bitmap)
|
||||
}
|
||||
}
|
||||
|
||||
override fun fetchText(resource: Resource, result: (String?) -> Unit) {
|
||||
if (textMap.isNullOrEmpty()) {
|
||||
result(null)
|
||||
} else {
|
||||
var text = ""
|
||||
textMap.keys.forEach {
|
||||
if (resource.tag == it){
|
||||
text = textMap[it].toString()
|
||||
}
|
||||
}
|
||||
result(text)
|
||||
}
|
||||
}
|
||||
|
||||
override fun releaseResource(resources: List<Resource>) {
|
||||
resources?.forEach {
|
||||
it?.bitmap?.recycle()
|
||||
}
|
||||
}
|
||||
})
|
||||
LogUtils.d(" animViewSetAnimListener startPlay url = $url")
|
||||
animView.startPlay(animView.context.assets, url)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
22
app/src/main/java/com/chwl/app/ui/utils/VipUtil.kt
Normal file
@@ -0,0 +1,22 @@
|
||||
package com.chwl.app.ui.utils
|
||||
|
||||
import com.chwl.app.R
|
||||
|
||||
object VipUtil {
|
||||
|
||||
val vipIcons = arrayListOf(
|
||||
R.drawable.vip_center_identification_vipidentity_lv1,
|
||||
R.drawable.vip_center_identification_vipidentity_lv2,
|
||||
R.drawable.vip_center_identification_vipidentity_lv3,
|
||||
R.drawable.vip_center_identification_vipidentity_lv4,
|
||||
R.drawable.vip_center_identification_vipidentity_lv5,
|
||||
R.drawable.vip_center_identification_vipidentity_lv6,
|
||||
R.drawable.vip_center_identification_vipidentity_lv7,
|
||||
R.drawable.vip_center_identification_vipidentity_lv8,
|
||||
R.drawable.vip_center_identification_vipidentity_lv9
|
||||
)
|
||||
|
||||
fun getVipIcon(level: Int) {
|
||||
vipIcons.getOrNull(level)?:R.drawable.vip_center_identification_vipidentity_lv1
|
||||
}
|
||||
}
|
@@ -23,6 +23,7 @@ import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.app.ui.utils.SoftPool
|
||||
import com.chwl.core.gift.bean.BonsellaJoinAttack
|
||||
import com.chwl.core.gift.bean.GiftMultiReceiverInfo
|
||||
import com.chwl.core.gift.bean.GiftType
|
||||
import com.chwl.core.utils.LogUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.example.lib_utils.UiUtils
|
||||
@@ -213,19 +214,21 @@ class BonsellaJoinAttackLayout @JvmOverloads constructor(
|
||||
LogUtils.d(" GiftComboLayout onRoomCustomMsg " )
|
||||
if (giftInfo==null) return
|
||||
if (giftInfo.comboCount == 0) return
|
||||
val comboInfo = BonsellaJoinAttack().apply {
|
||||
giftId = giftInfo.giftId
|
||||
sentUserid = giftInfo.uid
|
||||
sentUserName = giftInfo.nick
|
||||
sentAvatar = giftInfo.avatar
|
||||
receiverUserName = giftInfo.targetUsers?.getOrNull(0)?.nick?:""
|
||||
receiverNumber = giftInfo.targetUsers?.size?: giftInfo.targetUids?.size?: 1
|
||||
giftNumber = giftInfo.giftNum
|
||||
giftImgUrl = giftInfo.gift?.giftUrl?:""
|
||||
comboCount = giftInfo.comboCount
|
||||
isMulti = giftInfo.isMulti
|
||||
if (giftInfo.gift != null && giftInfo.gift.giftType == GiftType.GIFT_TYPE_NORMAL || giftInfo.gift.giftType == GiftType.GIFT_TYPE_SUPER_LUCKY || giftInfo.gift.giftType == GiftType.GIFT_TYPE_LUCKY_24) {
|
||||
val comboInfo = BonsellaJoinAttack().apply {
|
||||
giftId = giftInfo.giftId
|
||||
sentUserid = giftInfo.uid
|
||||
sentUserName = giftInfo.nick
|
||||
sentAvatar = giftInfo.avatar
|
||||
receiverUserName = giftInfo.targetUsers?.getOrNull(0)?.nick?:""
|
||||
receiverNumber = giftInfo.targetUsers?.size?: giftInfo.targetUids?.size?: 1
|
||||
giftNumber = giftInfo.giftNum
|
||||
giftImgUrl = giftInfo.gift?.giftUrl?:""
|
||||
comboCount = giftInfo.comboCount
|
||||
isMulti = giftInfo.isMulti
|
||||
}
|
||||
add(comboInfo)
|
||||
}
|
||||
add(comboInfo)
|
||||
}
|
||||
|
||||
override fun onDetachedFromWindow() {
|
||||
|
@@ -1,11 +1,14 @@
|
||||
package com.chwl.app.ui.widget;
|
||||
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_COUNTRY;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_CP;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_CUSTOM;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_LUCKY;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_NOBLE;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_NORMAL;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_SING_ROOM;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_SUPER_LUCKY;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_SUPER_LUCKY_24;
|
||||
import static com.chwl.app.ui.widget.magicindicator.GiftIndicator.TYPE_WEEK;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -626,6 +629,12 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
|
||||
return TYPE_COUNTRY;
|
||||
case GiftType.GIFT_TYPE_SINGLE_ROOM:
|
||||
return TYPE_SING_ROOM;
|
||||
case GiftType.GIFT_TYPE_LUCKY_24:
|
||||
return TYPE_SUPER_LUCKY_24;
|
||||
case GiftType.GIFT_TYPE_CP:
|
||||
return TYPE_CP;
|
||||
case GiftType.GIFT_TYPE_CUSTOM:
|
||||
return TYPE_CUSTOM;
|
||||
}
|
||||
return TYPE_NORMAL;
|
||||
}
|
||||
@@ -721,6 +730,10 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
|
||||
currentGiftInfoList = getSuperLuckyGiftInfos();
|
||||
} else if (position == TYPE_COUNTRY) {
|
||||
currentGiftInfoList = getCountryGiftInfos();
|
||||
}else if (position == TYPE_CP) {
|
||||
currentGiftInfoList = getCpGiftInfos();
|
||||
}else if (position == TYPE_CUSTOM) {
|
||||
currentGiftInfoList = getCustomGiftInfos();
|
||||
}
|
||||
// 有贵族礼物才显示贵族礼物的tab
|
||||
if (ListUtils.isListEmpty(nobleGiftInfos)) {
|
||||
@@ -1226,6 +1239,17 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
|
||||
String.valueOf(AvRoomDataManager.get().getRoomUid()),
|
||||
GiftType.GIFT_TYPE_COUNTRY);
|
||||
}
|
||||
private List<GiftInfo> getCpGiftInfos() {
|
||||
return GiftModel.get().getGiftInfosByType(
|
||||
String.valueOf(AvRoomDataManager.get().getRoomUid()),
|
||||
GiftType.GIFT_TYPE_CP);
|
||||
}
|
||||
|
||||
private List<GiftInfo> getCustomGiftInfos() {
|
||||
return GiftModel.get().getGiftInfosByType(
|
||||
String.valueOf(AvRoomDataManager.get().getRoomUid()),
|
||||
GiftType.GIFT_TYPE_CUSTOM);
|
||||
}
|
||||
|
||||
private List<GiftInfo> getNobleGiftInfos() {
|
||||
return GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_VIP);
|
||||
|
@@ -14,7 +14,6 @@ import androidx.core.view.isVisible
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import com.example.lib_utils.ktx.getColorById
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import com.example.lib_utils.ktx.toStringRes
|
||||
import com.example.lib_utils.spannable.SpannableTextBuilder
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
||||
|
@@ -76,6 +76,18 @@ public class GiftIndicator extends LinearLayout {
|
||||
* 超级幸运礼物
|
||||
*/
|
||||
public static final int TYPE_SUPER_LUCKY = 8;
|
||||
/**
|
||||
* 超级幸运24礼物
|
||||
*/
|
||||
public static final int TYPE_SUPER_LUCKY_24 = 9;
|
||||
/**
|
||||
* cp礼物
|
||||
*/
|
||||
public static final int TYPE_CP = 10;
|
||||
/**
|
||||
* 定制礼物
|
||||
*/
|
||||
public static final int TYPE_CUSTOM = 11;
|
||||
|
||||
private List<GiftTab> tabList = new ArrayList<>();
|
||||
|
||||
|
81
app/src/main/java/com/chwl/app/utils/RoomNotifyManager.kt
Normal file
@@ -0,0 +1,81 @@
|
||||
package com.chwl.app.utils
|
||||
|
||||
import com.chwl.app.application.GlobalHandleManager
|
||||
import com.chwl.app.avroom.dialog.BaseRoomNotifyDialog
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyCpBindDialog
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyCpGiftDialog
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyLevelUpDialog
|
||||
import com.chwl.app.avroom.dialog.RoomNotifyLuckGiftDialog
|
||||
import com.chwl.core.gift.bean.CpMsgBean
|
||||
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean
|
||||
import com.chwl.core.gift.bean.RoomNotifyDialogBean
|
||||
import com.chwl.core.im.custom.bean.CustomAttachment
|
||||
import java.util.LinkedList
|
||||
|
||||
object RoomNotifyManager {
|
||||
private val queue = LinkedList<RoomNotifyDialogBean>()
|
||||
private var dialog : BaseRoomNotifyDialog<*>?=null
|
||||
|
||||
|
||||
fun addDialog(data : RoomNotifyDialogBean) {
|
||||
queue.add(data)
|
||||
showNextDialog()
|
||||
}
|
||||
|
||||
private fun showNextDialog() {
|
||||
if (dialog?.isShowing == true){
|
||||
return
|
||||
}
|
||||
|
||||
if (queue.isNotEmpty()) {
|
||||
val data = queue.removeAt(0)
|
||||
dialog = createDialog(data)
|
||||
dialog?.mCallBack = object : BaseRoomNotifyDialog.CallBack {
|
||||
override fun onHide() {
|
||||
showNextDialog()
|
||||
}
|
||||
}
|
||||
dialog?.showDialog()
|
||||
}
|
||||
}
|
||||
|
||||
private fun createDialog(bean: RoomNotifyDialogBean): BaseRoomNotifyDialog<*>?{
|
||||
var dialog : BaseRoomNotifyDialog<*>? = null
|
||||
val activity = GlobalHandleManager.get().activity ?: return null
|
||||
|
||||
if (bean.first == CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE) {
|
||||
if (bean.second == CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM || bean.second == CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ALL){
|
||||
if (bean.data is LuckyGiftMsgAllBean){
|
||||
dialog = RoomNotifyLuckGiftDialog(activity)
|
||||
dialog.luckyGiftMsgBean = bean.data as LuckyGiftMsgAllBean
|
||||
return dialog
|
||||
}
|
||||
}
|
||||
} else if(bean.first == CustomAttachment.CP_FIRST){
|
||||
if (bean.data is CpMsgBean){
|
||||
if (bean.second == CustomAttachment.CP_SECOND_GIFT){
|
||||
dialog = RoomNotifyCpGiftDialog(activity).apply {
|
||||
cpMsgBean = bean.data as CpMsgBean
|
||||
}
|
||||
}else if (bean.second == CustomAttachment.CP_SECOND_UPGRADE){
|
||||
dialog = RoomNotifyLevelUpDialog(activity).apply {
|
||||
cpMsgBean = bean.data as CpMsgBean
|
||||
}
|
||||
}else if (bean.second == CustomAttachment.CP_SECOND_BIND){
|
||||
dialog = RoomNotifyCpBindDialog(activity).apply {
|
||||
cpMsgBean = bean.data as CpMsgBean
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return dialog
|
||||
}
|
||||
|
||||
fun clear() {
|
||||
dialog?.clearDialog()
|
||||
dialog = null
|
||||
queue.clear()
|
||||
}
|
||||
|
||||
}
|
@@ -226,7 +226,11 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
|
||||
it?.let {
|
||||
// lifecycleScope.launch {
|
||||
// delay(500)
|
||||
banner.setCurrentItem(it.vipLevel-1)
|
||||
banner?.postDelayed(object : Runnable {
|
||||
override fun run() {
|
||||
banner.setCurrentItem(it.vipLevel-1)
|
||||
}
|
||||
}, 200)
|
||||
// }
|
||||
if (it.ownAuthTypes?.contains(13) == true && mTitleBar.actionCount == 1) {
|
||||
mTitleBar.addAction(object : TitleBar.ImageAction(R.drawable.ic_vip_setting) {
|
||||
@@ -403,7 +407,6 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
|
||||
}
|
||||
if (it.buyAmount == 0) {
|
||||
binding.tvNoticeText.visibility = View.VISIBLE
|
||||
binding.tvAdditionalText.visibility = View.GONE
|
||||
binding.tvOpenVip.visibility = View.GONE
|
||||
binding.layoutOpenVip.visibility = View.GONE
|
||||
binding.tvIcon.visibility = View.GONE
|
||||
@@ -419,7 +422,6 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
|
||||
}
|
||||
|
||||
binding.tvNoticeText.visibility = View.GONE
|
||||
binding.tvAdditionalText.visibility = View.VISIBLE
|
||||
binding.tvOpenVip.visibility = View.VISIBLE
|
||||
binding.layoutOpenVip.visibility = View.VISIBLE
|
||||
binding.tvIcon.visibility = View.VISIBLE
|
||||
@@ -429,12 +431,7 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
|
||||
)
|
||||
}".also { binding.tvOpenVip.text = it }
|
||||
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.DAY_OF_YEAR, 30)
|
||||
val dateFormat = SimpleDateFormat("yyyy/MM/dd 00:00", Locale.getDefault())
|
||||
val formattedDate = dateFormat.format(calendar.time)
|
||||
val result = "$formattedDate ${getString(R.string.vip_center_6)}"
|
||||
binding.tvAdditionalText.text = result
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -455,12 +452,6 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
|
||||
}".also { binding.tvOpenVip.text = it }
|
||||
}
|
||||
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.DAY_OF_YEAR, 30)
|
||||
val dateFormat = SimpleDateFormat("yyyy/MM/dd 00:00", Locale.getDefault())
|
||||
val formattedDate = dateFormat.format(calendar.time)
|
||||
val result = "$formattedDate ${getString(R.string.vip_center_6)}"
|
||||
binding.tvAdditionalText.text = result
|
||||
|
||||
} else {
|
||||
currentChargeInfo = null
|
||||
|
@@ -61,28 +61,20 @@ class VipViewModel : BaseViewModel() {
|
||||
vipPageInfo?.let {
|
||||
_authInfosLiveData.value = it.vipAuthInfos
|
||||
_vipInfosLiveData.value = it.vipInfos
|
||||
if (it.currLevel == 0) {
|
||||
_myVipInfoLiveData.value = null
|
||||
onItemSelect(0)
|
||||
} else {
|
||||
var position = 0
|
||||
_myVipInfoLiveData.value =
|
||||
it.vipInfos?.find { vipInfo -> it.currLevel == vipInfo.vipLevel }
|
||||
?.copy()
|
||||
?.apply {
|
||||
position = it.vipInfos?.indexOf(this) ?: -1
|
||||
val nextVipInfo =
|
||||
it.vipInfos?.getOrNull(position + 1)
|
||||
nextVipName =
|
||||
if (nextVipInfo?.vipName == vipName) null else nextVipInfo?.vipName
|
||||
remainSeconds = it.remainSeconds
|
||||
currLevel = it.currLevel
|
||||
currScore = it.currScore
|
||||
isMaxLevel = it.isMaxLevel
|
||||
}
|
||||
|
||||
onItemSelect(if (position < 0) 0 else position)
|
||||
}
|
||||
var position = 0
|
||||
_myVipInfoLiveData.value = it.vipInfos?.findLast { vipInfo ->
|
||||
vipInfo.remainSeconds > 0
|
||||
}?.copy()
|
||||
?.apply {
|
||||
position = it.vipInfos?.indexOf(this) ?: -1
|
||||
val nextVipInfo = it.vipInfos?.getOrNull(position + 1)
|
||||
nextVipName = if (nextVipInfo?.vipName == vipName) null else nextVipInfo?.vipName
|
||||
// remainSeconds = it.remainSeconds
|
||||
currLevel = it.currLevel
|
||||
currScore = it.currScore
|
||||
isMaxLevel = it.isMaxLevel
|
||||
}
|
||||
onItemSelect(if (position < 0) 0 else position)
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -7,7 +7,6 @@ import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.utils.loadAnim
|
||||
import com.chwl.core.vip.bean.VipInfo
|
||||
import com.chwl.library.download.DownloadException
|
||||
import com.chwl.library.download.DownloadManager.download
|
||||
@@ -22,8 +21,10 @@ import com.tencent.qgame.animplayer.inter.IAnimListener
|
||||
import com.tencent.qgame.animplayer.util.ScaleType
|
||||
import com.youth.banner.adapter.BannerAdapter
|
||||
import java.io.File
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
||||
class VipCenterBannerAdapter(
|
||||
@@ -43,25 +44,35 @@ class VipCenterBannerAdapter(
|
||||
}
|
||||
|
||||
override fun onBindView(holder: BannerViewHolder, data: VipInfo, position: Int, size: Int) {
|
||||
|
||||
//todo do 旧bug 买完VIP不刷新item
|
||||
holder.dueText.visibility = View.GONE
|
||||
myVipInfo?.let {
|
||||
if (it.vipLevel == data.vipLevel) {
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.SECOND, it.remainSeconds)
|
||||
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
|
||||
val formattedDate = dateFormat.format(calendar.time)
|
||||
val result = "${getString(R.string.vip_center_2)}$formattedDate"
|
||||
holder.dueText.text = result
|
||||
holder.dueText.visibility = View.VISIBLE
|
||||
} else if (it.vipLevel < data.vipLevel) {
|
||||
holder.dueText.text = getString(R.string.vip_center_8)
|
||||
holder.dueText.visibility = View.VISIBLE
|
||||
} else {
|
||||
holder.dueText.visibility = View.GONE
|
||||
|
||||
if (myVipInfo != null) {
|
||||
myVipInfo.let {
|
||||
if (it.vipLevel >= data.vipLevel) {
|
||||
var result = getString(R.string.vip_center_8)
|
||||
if (data.remainSeconds>0){
|
||||
val calendar = Calendar.getInstance()
|
||||
calendar.add(Calendar.SECOND, data.remainSeconds)
|
||||
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
|
||||
val formattedDate = dateFormat.format(calendar.time)
|
||||
result = "${getString(R.string.vip_center_2)}$formattedDate"
|
||||
}
|
||||
holder.dueText.text = result
|
||||
holder.dueText.visibility = View.VISIBLE
|
||||
} else if (it.vipLevel < data.vipLevel) {
|
||||
holder.dueText.text = getString(R.string.vip_center_8)
|
||||
holder.dueText.visibility = View.VISIBLE
|
||||
} else {
|
||||
holder.dueText.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}else{
|
||||
holder.dueText.text = getString(R.string.vip_center_8)
|
||||
holder.dueText.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
|
||||
when(position) {
|
||||
0-> {
|
||||
holder.dueText.setTextColor(context.resources.getColor(R.color.color_3A4D14))
|
||||
@@ -147,5 +158,8 @@ class VipCenterBannerAdapter(
|
||||
val dueText: TextView = view.findViewById(R.id.due_date_textview)
|
||||
}
|
||||
|
||||
fun millis2String(millis: Long, format: DateFormat): String {
|
||||
return format.format(Date(millis))
|
||||
}
|
||||
|
||||
}
|
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:bottomLeftRadius="0px"
|
||||
android:bottomRightRadius="@dimen/dp_11"
|
||||
android:topLeftRadius="0px"
|
||||
android:topRightRadius="@dimen/dp_11" />
|
||||
|
||||
<gradient
|
||||
android:endColor="#FFD936"
|
||||
android:startColor="#F2A20F" />
|
||||
</shape>
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 41 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_copy.png
Normal file
After Width: | Height: | Size: 755 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_gift_bg.png
Normal file
After Width: | Height: | Size: 519 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_level_up_bg_1.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_level_up_bg_2.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_level_up_bg_3.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_level_up_bg_4.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_level_up_bg_5.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_item_bg.png
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_0.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_1.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_2.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_3.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_4.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_level_5.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_cp_list_more.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_edit_sw_off.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_edit_sw_on.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_cp_bg.png
Normal file
After Width: | Height: | Size: 196 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_cp_cancel.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_cp_def_avatar.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
After Width: | Height: | Size: 133 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_cp_heart.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_edit.png
Normal file
After Width: | Height: | Size: 715 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_follow.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_followed.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_guild_bg.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_live.png
Normal file
After Width: | Height: | Size: 764 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_more.png
Normal file
After Width: | Height: | Size: 601 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_user_info_send_msg.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 6.6 KiB |