123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- 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.load
- import com.develop.base.ext.navigateTo
- import com.develop.base.ext.resId2Dimension
- 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.RefreshDataEvent
- import com.develop.common.event.RefreshLikeDataEvent
- import com.develop.common.router.Screens
- import com.develop.common.tag.*
- 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
- init {
- val root = View.inflate(context, R.layout.food_content_view, this)
- 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)
- }
- }
- }
- }
- //喜欢点击
- 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) {
- 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() {
- }
- }
- showDialog(supportFragmentManager, "cancelConfirmDialog")
- }
- }
- } else {
- if (isLike) {
- isLike = false
- binding.ivLike.skinSrc(R.drawable.ic_unlike)
- FoodDataProvider.getUserDatabase().runInTransaction {
- FoodDataProvider.getUserDatabase().userInfoDao().removeFavoriteRecipe(
- CURRENT_USER_ID, foodId
- )
- }
- if (!mIsHistoryList) {
- EventBus.getDefault().post(RefreshLikeDataEvent(false, 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))
- }
- }
- }
- }
- }
- }
- /**
- * 显示菜谱数据
- * @param isFoodList 是否为FoodListActivity
- */
- fun setFoodContent(content: FoodContentModel, isFoodList: Boolean = false) {
- Log.d("------", "---333---")
- mFoodContent = content
- mIsFoodList = isFoodList
- 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 {
- setCommentNumber(content.useNum.toString())
- setCommentTextColorGray()
- }
- 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)
- }
- }
- }
- 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()
- }
- }
|