HomeActivity.kt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. package com.develop.main.ui
  2. import android.content.Intent
  3. import android.os.Bundle
  4. import android.util.Log
  5. import android.view.Gravity
  6. import android.view.KeyEvent
  7. import android.view.LayoutInflater
  8. import android.view.View
  9. import android.widget.LinearLayout
  10. import androidx.databinding.ViewDataBinding
  11. import com.alibaba.android.arouter.facade.annotation.Route
  12. import com.develop.base.ext.background_drawable
  13. import com.develop.base.ext.getGoneLogin
  14. import com.develop.base.ext.getSN
  15. import com.develop.base.ext.isBrand062
  16. import com.develop.base.ext.isFrLanguage
  17. import com.develop.base.ext.navigateTo
  18. import com.develop.base.ext.resId2Dimension
  19. import com.develop.base.ext.src
  20. import com.develop.base.manager.WifiHelp
  21. import com.develop.base.widgets.CommonPopupWindow
  22. import com.develop.common.data_repo.FoodDataProvider
  23. import com.develop.common.data_repo.db.NewsModel
  24. import com.develop.common.data_repo.db.RecipesType
  25. import com.develop.common.data_repo.db.entity.UserInfo
  26. import com.develop.common.router.Screens
  27. import com.develop.common.tag.*
  28. import com.develop.common.ui.CommonBVMActivity
  29. import com.develop.common.widget.HomeFunctionTopBar
  30. import com.develop.common.widget.HomeOrBack
  31. import com.develop.common.widget.NewsLayout
  32. import com.develop.main.R
  33. import com.develop.main.databinding.ActivityHomeBinding
  34. import com.develop.main.viewmodel.HomeViewModel
  35. import org.greenrobot.eventbus.EventBus
  36. import org.greenrobot.eventbus.Subscribe
  37. import java.lang.reflect.Method
  38. @Route(path = Screens.Main.HOME)
  39. class HomeActivity : CommonBVMActivity<ActivityHomeBinding, HomeViewModel>() {
  40. private val modesFragment by lazy {
  41. ModesFragment()
  42. }
  43. private val recipesFragment by lazy {
  44. RecipesFragment()
  45. }
  46. private var newsLayout: NewsLayout? = null
  47. private var newsList = mutableListOf<NewsModel>()
  48. var lastKeyTime = 0L
  49. private val newsPopupWindow by lazy {
  50. CommonPopupWindow.ViewBuilder<NewsLayout>().width(dp750)
  51. .height(LinearLayout.LayoutParams.MATCH_PARENT).outsideTouchable(true).focusable(true)
  52. .alpha(0.5f)
  53. .clippingEnabled(false).view(NewsLayout(this)).onShowBefore { popupWindow, view ->
  54. view.apply {
  55. newsLayout = this
  56. updateNewsData(newsList)
  57. onNewsBackClickListener = object : NewsLayout.OnNewsNewsBackClickListener {
  58. override fun onNewsBackClick() {
  59. popupWindow.dismiss()
  60. }
  61. }
  62. }
  63. }.build<ViewDataBinding>(this)
  64. }
  65. private var currModeEntrance = Recipes
  66. private lateinit var wifiHelp: WifiHelp
  67. override fun createViewModel(): HomeViewModel {
  68. return getViewModel(HomeViewModel::class.java)
  69. }
  70. override fun createViewBinding(inflater: LayoutInflater): ActivityHomeBinding {
  71. return ActivityHomeBinding.inflate(inflater)
  72. }
  73. override fun onCreate(savedInstanceState: Bundle?) {
  74. super.onCreate(savedInstanceState)
  75. initFragment(intent)
  76. initCallbackAndListener()
  77. }
  78. override fun onNewIntent(intent: Intent?) {
  79. super.onNewIntent(intent)
  80. initFragment(intent, true)
  81. }
  82. private fun initFragment(intent: Intent?, isFromNewIntent: Boolean = false) {
  83. val extras = intent?.extras
  84. currModeEntrance = extras?.getInt(MODE_ENTRANCE) ?: Recipes
  85. binding.functionTopBar.setTitle(extras?.getString(HOME_TITLE) ?: "")
  86. if ((extras?.getInt(RECIPES_TYPE) ?: LocalFood) == LocalFood) {
  87. viewModel.apply {
  88. recipesType = RecipesType.LOCAL
  89. isFromDownloadNewRecipesEntrance = false
  90. }
  91. } else {
  92. viewModel.apply {
  93. recipesType = RecipesType.ONLINE
  94. isFromDownloadNewRecipesEntrance = true
  95. }
  96. }
  97. binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
  98. if (currModeEntrance == Recipes) {
  99. if (isFromNewIntent) {
  100. replaceFragment(R.id.fragment_container, recipesFragment)
  101. } else {
  102. addFragment(R.id.fragment_container, recipesFragment)
  103. }
  104. } else {
  105. if (isFromNewIntent) {
  106. replaceFragment(R.id.fragment_container, modesFragment)
  107. } else {
  108. addFragment(R.id.fragment_container, modesFragment)
  109. }
  110. }
  111. binding.favouriteLayout.background_drawable =
  112. com.develop.common.R.drawable.home_menu_corners
  113. //2024.01.04 客户需要把法语的字体变回来
  114. // if (isFrLanguage()) {
  115. // binding.tvFavourite.textSize = dp20
  116. // binding.tvSetting.textSize = dp20
  117. // binding.tvHistory.textSize = dp20
  118. // binding.tvPolicy.textSize = dp20
  119. // binding.tvHelp.textSize = dp20
  120. // }
  121. }
  122. private fun initCallbackAndListener() {
  123. wifiHelp = WifiHelp.Build(this).setAlreadyConnectionCallback {
  124. it?.apply {
  125. binding.functionTopBar.setNetRssi(rssi)
  126. }
  127. }.build()
  128. binding.functionTopBar.onHomeFunctionClickListener =
  129. object : HomeFunctionTopBar.OnHomeFunctionClickListener {
  130. override fun onNotifyClick() {
  131. viewModel.getNotices()
  132. newsPopupWindow.showAtLocation(binding.functionTopBar, Gravity.END, 0, 0)
  133. }
  134. override fun onHomeOrBackClick(homeOrBack: HomeOrBack) {
  135. if (homeOrBack == HomeOrBack.Home) {
  136. if (isBrand062()){
  137. navigateTo(Screens.Main.ENTRANCE_CHOSEN_TWO)
  138. }else{
  139. navigateTo(Screens.Main.ENTRANCE_CHOSEN)
  140. }
  141. finish()
  142. } else {
  143. EventBus.getDefault().post(HomeBackClickEvent(true))
  144. //搜索后,返回后当前还是onLine的菜谱,还是显示返回,可以返回本地菜谱
  145. if (viewModel.recipesType == RecipesType.ONLINE && viewModel.isSearch
  146. && !viewModel.isFromDownloadNewRecipesEntrance
  147. ) {
  148. binding.functionTopBar.setHomeOrBack(HomeOrBack.Back)
  149. } else {
  150. binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
  151. }
  152. viewModel.apply {
  153. refreshRecipesLiveData.postValue(true)
  154. isSearch = false
  155. }
  156. }
  157. }
  158. override fun onTabClick() {
  159. binding.contentView.openDrawer(binding.rightContentLayout)
  160. }
  161. override fun onWifiClick() {
  162. navigateTo(Screens.Setting.WIFI) {
  163. val bundle = Bundle()
  164. bundle.putBoolean(WIFI_FROM_MAIN_SETTING, true)
  165. with(bundle)
  166. }
  167. }
  168. override fun onUserClick() {
  169. navigateTo(Screens.Auth.MEMBER) {
  170. withBoolean("enter_from_home", true)
  171. }
  172. }
  173. }
  174. binding.rightContentLayout.setOnClickListener {
  175. }
  176. binding.settingLayout.setOnClickListener {
  177. navigateTo(Screens.Setting.MAIN_SETTING)
  178. binding.contentView.closeDrawers()
  179. }
  180. binding.favouriteLayout.setOnClickListener {
  181. val bundle = Bundle()
  182. bundle.putString(
  183. FOOL_LIST_TITLE, getString(com.develop.common.R.string.favourite_recipes)
  184. )
  185. bundle.putInt(FOOD_LIST_TYPE, Favourite)
  186. navigateTo(Screens.Cook.FOOD_LIST) {
  187. with(bundle)
  188. }
  189. binding.contentView.closeDrawers()
  190. }
  191. binding.historyLayout.setOnClickListener {
  192. val bundle = Bundle()
  193. bundle.putString(FOOL_LIST_TITLE, getString(com.develop.common.R.string.cook_history))
  194. bundle.putInt(FOOD_LIST_TYPE, History)
  195. navigateTo(Screens.Cook.FOOD_LIST) {
  196. with(bundle)
  197. }
  198. binding.contentView.closeDrawers()
  199. }
  200. binding.policyLayout.setOnClickListener {
  201. val bundle = Bundle()
  202. bundle.putBoolean(POLICY_FROM_MAIN_SETTING, true)
  203. navigateTo(Screens.Setting.POLICY) {
  204. with(bundle)
  205. }
  206. binding.contentView.closeDrawers()
  207. }
  208. binding.helpLayout.setOnClickListener {
  209. navigateTo(Screens.Setting.HELP)
  210. binding.contentView.closeDrawers()
  211. }
  212. viewModel.apply {
  213. homeOrBackLiveData.observe(this@HomeActivity) {
  214. binding.functionTopBar.setHomeOrBack(it)
  215. }
  216. }
  217. viewModel.noticesLiveData.observe(this) { data ->
  218. val newsModelList = mutableListOf<NewsModel>()
  219. data?.forEach {
  220. newsModelList.add(NewsModel(it.title, it.content, false))
  221. }
  222. newsList.clear()
  223. newsList.addAll(newsModelList)
  224. newsLayout?.updateNewsData(newsList)
  225. }
  226. binding.ivAvatar.setOnClickListener {
  227. navigateTo(Screens.Auth.MEMBER) {
  228. withBoolean("enter_from_home", true)
  229. }
  230. }
  231. //032客户需要隐藏登录和注册
  232. if (getGoneLogin()){
  233. binding.tvUserName.visibility = View.GONE
  234. //头像需要占位显示
  235. binding.ivAvatar.visibility = View.INVISIBLE
  236. }
  237. }
  238. private fun updateUserInfoUi(userInfo: UserInfo?) {
  239. if (userInfo?.userName != null) {
  240. binding.functionTopBar.setUserName(userInfo.userName ?: "")
  241. binding.tvUserName.text = userInfo.userName ?: ""
  242. val icon = when (userInfo.userAvatar?.toInt() ?: 0) {
  243. 0 -> {
  244. com.develop.common.R.drawable.ic_icon1
  245. }
  246. 1 -> {
  247. com.develop.common.R.drawable.ic_icon2
  248. }
  249. 2 -> {
  250. com.develop.common.R.drawable.ic_icon3
  251. }
  252. 3 -> {
  253. com.develop.common.R.drawable.ic_icon4
  254. }
  255. 4 -> {
  256. com.develop.common.R.drawable.ic_icon5
  257. }
  258. else -> {
  259. com.develop.common.R.drawable.ic_icon6
  260. }
  261. }
  262. binding.ivAvatar.src = icon
  263. } else {
  264. binding.ivAvatar.src = com.develop.common.R.drawable.ic_user
  265. binding.functionTopBar.setUserName(getString(com.develop.common.R.string.login))
  266. binding.tvUserName.text = getString(com.develop.common.R.string.login)
  267. }
  268. }
  269. companion object {
  270. var dp1080 = (com.develop.common.R.dimen.convert_1080px).resId2Dimension().toInt()
  271. var dp160 = (com.develop.common.R.dimen.convert_160px).resId2Dimension().toInt()
  272. var dp750 = (com.develop.common.R.dimen.convert_750px).resId2Dimension().toInt()
  273. var dp20 = (com.develop.common.R.dimen.convert_12px).resId2Dimension()
  274. }
  275. override fun onResume() {
  276. super.onResume()
  277. wifiHelp.scan()
  278. val userInfo = FoodDataProvider
  279. .getUserDatabase()
  280. .userInfoDao()
  281. .queryUserInfoByUserId(CURRENT_USER_ID)
  282. updateUserInfoUi(userInfo)
  283. }
  284. @Subscribe
  285. fun onLocalRecipesClickEvent(event: RecipesFragment.OnLocalRecipesEvent) {
  286. //搜索后,返回后当前还是onLine的菜谱,还是显示返回,可以返回本地菜谱
  287. if (viewModel.recipesType == RecipesType.ONLINE && viewModel.isSearch
  288. && !viewModel.isFromDownloadNewRecipesEntrance
  289. ) {
  290. binding.functionTopBar.setHomeOrBack(HomeOrBack.Back)
  291. } else {
  292. binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
  293. }
  294. viewModel.apply {
  295. refreshRecipesLiveData.postValue(true)
  296. isSearch = false
  297. }
  298. }
  299. override fun dispatchKeyEvent(event: KeyEvent): Boolean {
  300. var spend = (System.currentTimeMillis() - lastKeyTime);
  301. if (spend < 10) {
  302. return super.dispatchKeyEvent(event);
  303. }
  304. lastKeyTime = System.currentTimeMillis();
  305. if (event.action != KeyEvent.ACTION_UP) {
  306. when (event.keyCode) {
  307. //旋转+
  308. TURN_UP_KEY_CODE -> {
  309. Log.d("TAG aaaaaa", "TURN_UP_KEY_CODE : ${event.keyCode}")
  310. viewModel.positionRecycle.postValue("TURN_UP_KEY_CODE")
  311. // 创建一个新的KeyEvent对象,并设置新的keyCode值
  312. }
  313. //旋转-
  314. TURN_DOWN_KEY_CODE -> {
  315. Log.d("TAG aaaaaa", "TURN_DOWN_KEY_CODE : ${event.keyCode}")
  316. viewModel.positionRecycle.postValue("TURN_DOWN_KEY_CODE")
  317. }
  318. }
  319. }
  320. return super.dispatchKeyEvent(event)
  321. }
  322. class HomeBackClickEvent(showOnline: Boolean)
  323. override fun onDestroy() {
  324. super.onDestroy()
  325. wifiHelp.destroy()
  326. }
  327. }