123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- package com.develop.common.widget
- import android.content.Context
- import android.graphics.drawable.Drawable
- import android.util.AttributeSet
- import android.util.Log
- import android.view.View
- import android.widget.RelativeLayout
- import androidx.constraintlayout.widget.ConstraintLayout
- import androidx.core.graphics.drawable.DrawableCompat
- import com.blankj.utilcode.util.ThreadUtils.runOnUiThread
- import com.bumptech.glide.Glide
- import com.bumptech.glide.load.DataSource
- import com.bumptech.glide.load.engine.DiskCacheStrategy
- import com.bumptech.glide.load.engine.GlideException
- import com.bumptech.glide.request.RequestListener
- import com.bumptech.glide.request.target.Target
- import com.develop.base.ext.background_drawable
- import com.develop.base.ext.getSN
- import com.develop.base.ext.isRecipesList
- import com.develop.base.ext.load
- import com.develop.base.ext.navigateTo
- import com.develop.base.ext.resId2Dimension
- import com.develop.base.ext.setRecipesList
- import com.develop.base.ext.skinBackground
- import com.develop.base.ext.skinSrc
- import com.develop.base.ext.src
- import com.develop.base.ext.updateText
- import com.develop.base.util.TopResumedAtyHolder
- import com.develop.common.R
- import com.develop.common.data_repo.FoodDataProvider
- import com.develop.common.data_repo.db.FoodContentModel
- import com.develop.common.data_repo.db.entity.UserFavoriteRecipes
- import com.develop.common.databinding.FoodContentViewBinding
- import com.develop.common.dialog.CancelConfirmDialog
- import com.develop.common.event.OnLikeDataEvent
- import com.develop.common.event.RefreshDataEvent
- import com.develop.common.event.RefreshLikeDataEvent
- import com.develop.common.router.Screens
- import com.develop.common.tag.*
- import com.develop.common.utils.GsonUtils
- import com.drake.net.utils.scope
- import com.drake.net.utils.withMain
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.withContext
- import org.greenrobot.eventbus.EventBus
- class FoodContentView : ConstraintLayout {
- constructor(context: Context) : super(context) {}
- constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}
- constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
- context, attrs, defStyleAttr
- ) {
- }
- private val cancelConfirmDialog by lazy {
- CancelConfirmDialog()
- }
- private var binding: FoodContentViewBinding
- private var mFoodContent: FoodContentModel? = null
- private var mIsFoodList = false
- var mIsHistoryList = false
- private var is033 = false
- private var numberList = ""
- private var foodSn = getSN()
- init {
- val root = View.inflate(context, R.layout.food_content_view, this)
- is033 = foodSn.startsWith("033")
- binding = FoodContentViewBinding.bind(root)
- binding.contentLayout.skinBackground(R.drawable.food_content_conner)
- binding.likeLayout.skinBackground(R.drawable.white_circle)
- binding.contentLayout.setOnClickListener {
- mFoodContent?.apply {
- TopResumedAtyHolder.getCurrentActivity()?.navigateTo(Screens.Cook.COOK_DETAIL) {
- withString(
- SOURCE_TAG, if (isNetRecipes) {
- "remote"
- } else {
- "local"
- }
- )
- withString(NUMBER_TAG, foodId)
- withBoolean(IS_LIKE_TAG, isLike)
- if (!mIsFoodList) {
- withString(RECIPES_EDITION_TAG, recipesEdition)
- }
- }
- if (numberList.contains(mFoodContent?.foodId ?: "00000000")) {
- //由于存在的numberList
- //处理更新菜谱的标识 ,点击以后消除更新食谱编号
- var listNew = isRecipesList()
- var list = GsonUtils.GsonToList<String>(listNew)
- var strs = ""
- if (list.isNotEmpty()) {
- for (str in list) {
- if (str.equals(foodId)) {
- strs = str
- }
- }
- if (strs.isNotEmpty()) {
- list.remove(strs)
- }
- //保存更新食谱数据
- setRecipesList(GsonUtils.GsonString(list))
- }
- binding.ivContentNew.visibility = View.INVISIBLE
- }
- }
- }
- //喜欢点击
- val tintList = resources.getColorStateList(com.develop.common.R.color.color_cook_tab_tint)
- binding.ivNet.drawable?.apply {
- DrawableCompat.setTintList(this, tintList)
- }
- binding.likeLayout.setOnClickListener {
- //收藏/取消收藏
- mFoodContent?.apply {
- if (isNetRecipes && mIsFoodList) {
- if (foodSn.startsWith("011")) {
- if (isLike) {
- EventBus.getDefault().post(OnLikeDataEvent(false, foodId))
- } else {
- EventBus.getDefault().post(OnLikeDataEvent(true, foodId))
- }
- } else {
- val titleStr = context.getString(R.string.are_you_sure_to_delete)
- val confirmStr = context.getString(R.string.yes)
- val cancelStr = context.getString(R.string.no)
- TopResumedAtyHolder.getCurrentActivity()?.apply {
- cancelConfirmDialog.apply {
- this.title = titleStr
- this.confirmStr = confirmStr
- this.cancelStr = cancelStr
- onDialogClickListener =
- object : CancelConfirmDialog.OnDialogClickListener {
- override fun onConfirm() {
- FoodDataProvider.getUserDatabase().runInTransaction {
- FoodDataProvider.getUserDatabase().userInfoDao()
- .removeOnlineRecipe(
- CURRENT_USER_ID, foodId
- )
- }
- /***
- * 2024.03.04 删除下载记录,只删除记录,不删除食谱
- */
- FoodDataProvider.getDatabase().runInTransaction {
- // val recipeDao =
- // FoodDataProvider.getDatabase().recipeDao()
- // val recipes = recipeDao.queryRecipe(foodId)
- // recipes?.apply {
- // recipeDao.deleteRecipe(this)
- // }
- FoodDataProvider.deleteRecipeResource(foodId)
- }
- EventBus.getDefault().post(RefreshDataEvent())
- }
- override fun onCancel() {
- }
- override fun onKey() {
- }
- }
- showDialog(supportFragmentManager, "cancelConfirmDialog")
- }
- }
- }
- } else {
- if (isLike) {
- if (foodSn.startsWith("011")) {
- EventBus.getDefault().post(OnLikeDataEvent(false, foodId))
- } else {
- isLike = false
- binding.ivLike.skinSrc(R.drawable.ic_unlike)
- FoodDataProvider.getUserDatabase().runInTransaction {
- FoodDataProvider.getUserDatabase().userInfoDao()
- .removeFavoriteRecipe(
- CURRENT_USER_ID, foodId
- )
- }
- /**
- * 不知道之前为什么写这个代码,现在011客户反馈
- * 在历史记录界面收藏或者取消收藏食谱,回到食谱列表没有状态修改估注掉代码
- * */
- // if (!mIsHistoryList) {
- // EventBus.getDefault().post(RefreshLikeDataEvent(false, foodId))
- // }
- EventBus.getDefault().post(RefreshLikeDataEvent(false, foodId))
- }
- } else {
- if (foodSn.startsWith("011")) {
- EventBus.getDefault().post(OnLikeDataEvent(true, foodId))
- } else {
- isLike = true
- binding.ivLike.skinSrc(R.drawable.ic_like)
- FoodDataProvider.getUserDatabase().runInTransaction {
- FoodDataProvider.getUserDatabase().userInfoDao()
- .insertFavoriteRecipe(
- UserFavoriteRecipes(CURRENT_USER_ID, foodId)
- )
- }
- // if (!mIsHistoryList) {
- // EventBus.getDefault().post(RefreshLikeDataEvent(true, foodId))
- // }
- EventBus.getDefault().post(RefreshLikeDataEvent(true, foodId))
- }
- }
- }
- }
- }
- }
- /**
- * 显示菜谱数据
- * @param isFoodList 是否为FoodListActivity
- */
- fun setFoodContent(content: FoodContentModel, isFoodList: Boolean = false) {
- Log.d("------", "---333---")
- mFoodContent = content
- mIsFoodList = isFoodList
- numberList = isRecipesList()
- val isNetRecipes = content.isNetRecipes
- val hasDownload = content.hasDownloaded
- val isLike = content.isLike
- val cover = if (isFoodList) {
- if (isNetRecipes && !content.hasDownloaded) {
- content.cover
- } else {
- FoodDataProvider.getResourcePath(content.cover.toString())
- }
- } else {
- if (isNetRecipes) {
- content.cover
- } else {
- FoodDataProvider.getResourcePath(content.cover.toString())
- }
- }
- Log.d("------", "---444---")
- binding.apply {
- if ("" != cover) ivCover.load(cover, binding.ivCover.width, binding.ivCover.height)
- tvFoodName.updateText(content.foodName)
- Log.d("------", "---666---")
- starView.apply {
- if (is033 || foodSn.startsWith("011")) {
- starView.visibility = View.GONE
- } else {
- starView.visibility = View.VISIBLE
- setCommentNumber(content.useNum.toString())
- setCommentTextColorGray()
- }
- }
- if (foodSn.startsWith("011")) {
- binding.easyLayout.visibility = View.VISIBLE
- content.level.let {
- binding.tvEasy.text = it
- }
- }
- Log.d("------", "---777---")
- tvTimeAndLevel.updateText(content.time)
- if (isNetRecipes) {
- ivNet.visibility = View.VISIBLE
- } else {
- ivNet.visibility = View.GONE
- }
- ivNet.isSelected = hasDownload
- if (hasDownload) {
- ivLike.skinSrc(R.drawable.ic_delete)
- } else {
- if (isLike) {
- ivLike.skinSrc(R.drawable.ic_like)
- } else {
- ivLike.skinSrc(R.drawable.ic_unlike)
- }
- }
- if (numberList.contains(mFoodContent?.foodId ?: "00000000")) {
- ivContentNew.visibility = View.VISIBLE
- } else {
- ivContentNew.visibility = View.GONE
- }
- }
- binding.starView.setStarCount(content.starCount)
- Log.d("------", "---999---")
- }
- fun recycleImageView() {
- binding.ivCover.apply {
- Glide.with(context).clear(this)
- }
- }
- companion object {
- val dp10 = (com.develop.common.R.dimen.convert_10px).resId2Dimension()
- }
- }
|