FoodContentView.kt 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.develop.common.widget
  2. import android.content.Context
  3. import android.util.AttributeSet
  4. import android.view.View
  5. import android.widget.RelativeLayout
  6. import com.blankj.utilcode.util.ThreadUtils.runOnUiThread
  7. import com.develop.base.ext.load
  8. import com.develop.base.ext.navigateTo
  9. import com.develop.base.ext.resId2Dimension
  10. import com.develop.base.ext.updateText
  11. import com.develop.base.util.TopResumedAtyHolder
  12. import com.develop.common.R
  13. import com.develop.common.data_repo.FoodDataProvider
  14. import com.develop.common.data_repo.db.FoodContentModel
  15. import com.develop.common.data_repo.db.entity.UserFavoriteRecipes
  16. import com.develop.common.databinding.FoodContentViewBinding
  17. import com.develop.common.dialog.CancelConfirmDialog
  18. import com.develop.common.event.RefreshDataEvent
  19. import com.develop.common.router.Screens
  20. import com.develop.common.tag.*
  21. import org.greenrobot.eventbus.EventBus
  22. class FoodContentView : RelativeLayout {
  23. constructor(context: Context?) : super(context) {}
  24. constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
  25. constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
  26. context, attrs, defStyleAttr
  27. ) {
  28. }
  29. private val cancelConfirmDialog by lazy {
  30. CancelConfirmDialog()
  31. }
  32. private var binding: FoodContentViewBinding
  33. private var mFoodContent: FoodContentModel? = null
  34. private var mIsFoodList = false
  35. var mIsHistoryList = false
  36. init {
  37. val root = View.inflate(context, R.layout.food_content_view, this)
  38. binding = FoodContentViewBinding.bind(root)
  39. binding.contentLayout.setOnClickListener {
  40. mFoodContent?.apply {
  41. TopResumedAtyHolder.getCurrentActivity()?.navigateTo(Screens.Cook.COOK_DETAIL) {
  42. withString(
  43. SOURCE_TAG, if (isNetRecipes) {
  44. "remote"
  45. } else {
  46. "local"
  47. }
  48. )
  49. withString(NUMBER_TAG, foodId)
  50. withBoolean(IS_LIKE_TAG, isLike)
  51. if (!mIsFoodList) {
  52. withString(RECIPES_EDITION_TAG, recipesEdition)
  53. }
  54. }
  55. }
  56. }
  57. }
  58. /**
  59. * 显示菜谱数据
  60. * @param isFoodList 是否为FoodListActivity
  61. */
  62. fun setFoodContent(content: FoodContentModel, isFoodList: Boolean = false) {
  63. mFoodContent = content
  64. mIsFoodList = isFoodList
  65. val isNetRecipes = content.isNetRecipes
  66. val hasDownload = content.hasDownloaded
  67. val isLike = content.isLike
  68. val cover = if (isFoodList) {
  69. if (isNetRecipes && !content.hasDownloaded) {
  70. content.cover
  71. } else {
  72. FoodDataProvider.getResourcePath(content.cover.toString())
  73. }
  74. } else {
  75. if (isNetRecipes) {
  76. content.cover
  77. } else {
  78. FoodDataProvider.getResourcePath(content.cover.toString())
  79. }
  80. }
  81. binding.apply {
  82. ivCover.load(cover)
  83. tvFoodName.updateText(content.foodName)
  84. FoodDataProvider.getUserDatabase().runInTransaction {
  85. val result = FoodDataProvider.getUserDatabase().userInfoDao()
  86. .queryUserTag(CURRENT_USER_ID, content.foodId)
  87. runOnUiThread {
  88. result?.starCount?.apply {
  89. starView.setStarCount(this)
  90. }
  91. }
  92. }
  93. starView.apply {
  94. setCommentNumber(content.useNum.toString())
  95. setCommentTextColorGray()
  96. }
  97. tvTimeAndLevel.updateText("${content.time}・${content.level}")
  98. if (isNetRecipes) {
  99. ivNet.visibility = View.VISIBLE
  100. } else {
  101. ivNet.visibility = View.GONE
  102. }
  103. if (hasDownload) {
  104. ivLike.load(R.drawable.ic_delete)
  105. } else {
  106. if (isLike) {
  107. ivLike.load(R.drawable.ic_like)
  108. } else {
  109. ivLike.load(R.drawable.ic_unlike)
  110. }
  111. }
  112. //喜欢点击
  113. likeLayout.setOnClickListener {
  114. //收藏/取消收藏
  115. if (content.isNetRecipes && isFoodList) {
  116. val titleStr = context.getString(R.string.are_you_sure_to_delete)
  117. val confirmStr = context.getString(R.string.yes)
  118. val cancelStr = context.getString(R.string.no)
  119. TopResumedAtyHolder.getCurrentActivity()?.apply {
  120. cancelConfirmDialog.apply {
  121. this.title = titleStr
  122. this.confirmStr = confirmStr
  123. this.cancelStr = cancelStr
  124. onDialogClickListener =
  125. object : CancelConfirmDialog.OnDialogClickListener {
  126. override fun onConfirm() {
  127. FoodDataProvider.getUserDatabase().runInTransaction {
  128. FoodDataProvider.getUserDatabase().userInfoDao()
  129. .removeOnlineRecipe(
  130. CURRENT_USER_ID, content.foodId
  131. )
  132. }
  133. FoodDataProvider.getDatabase().runInTransaction {
  134. val recipeDao =
  135. FoodDataProvider.getDatabase().recipeDao()
  136. val recipes = recipeDao.queryRecipe(content.foodId)
  137. recipes?.apply {
  138. recipeDao.deleteRecipe(this)
  139. }
  140. FoodDataProvider.deleteRecipeResource(content.foodId)
  141. }
  142. EventBus.getDefault().post(RefreshDataEvent())
  143. }
  144. override fun onCancel() {
  145. }
  146. }
  147. showDialog(supportFragmentManager, "cancelConfirmDialog")
  148. }
  149. }
  150. } else {
  151. if (content.isLike) {
  152. content.isLike = false
  153. ivLike.load(R.drawable.ic_unlike)
  154. FoodDataProvider.getUserDatabase().runInTransaction {
  155. FoodDataProvider.getUserDatabase().userInfoDao().removeFavoriteRecipe(
  156. CURRENT_USER_ID, content.foodId
  157. )
  158. }
  159. if (!mIsHistoryList) {
  160. EventBus.getDefault().post(RefreshDataEvent())
  161. }
  162. } else {
  163. content.isLike = true
  164. ivLike.load(R.drawable.ic_like)
  165. FoodDataProvider.getUserDatabase().runInTransaction {
  166. FoodDataProvider.getUserDatabase().userInfoDao().insertFavoriteRecipe(
  167. UserFavoriteRecipes(CURRENT_USER_ID, content.foodId)
  168. )
  169. }
  170. if (!mIsHistoryList) {
  171. EventBus.getDefault().post(RefreshDataEvent())
  172. }
  173. }
  174. }
  175. }
  176. }
  177. }
  178. companion object {
  179. val dp10 = (com.develop.base.R.dimen.convert_10px).resId2Dimension()
  180. }
  181. }