123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- package com.develop.main.ui
- import android.content.Intent
- import android.os.Bundle
- import android.util.Log
- import android.view.Gravity
- import android.view.KeyEvent
- import android.view.LayoutInflater
- import android.view.View
- import android.widget.LinearLayout
- import androidx.databinding.ViewDataBinding
- import com.alibaba.android.arouter.facade.annotation.Route
- import com.develop.base.ext.background_drawable
- import com.develop.base.ext.getGoneLogin
- import com.develop.base.ext.getSN
- import com.develop.base.ext.isBrand062
- import com.develop.base.ext.isFrLanguage
- import com.develop.base.ext.navigateTo
- import com.develop.base.ext.resId2Dimension
- import com.develop.base.ext.src
- import com.develop.base.manager.WifiHelp
- import com.develop.base.widgets.CommonPopupWindow
- import com.develop.common.data_repo.FoodDataProvider
- import com.develop.common.data_repo.db.NewsModel
- import com.develop.common.data_repo.db.RecipesType
- import com.develop.common.data_repo.db.entity.UserInfo
- import com.develop.common.router.Screens
- import com.develop.common.tag.*
- import com.develop.common.ui.CommonBVMActivity
- import com.develop.common.widget.HomeFunctionTopBar
- import com.develop.common.widget.HomeOrBack
- import com.develop.common.widget.NewsLayout
- import com.develop.main.R
- import com.develop.main.databinding.ActivityHomeBinding
- import com.develop.main.viewmodel.HomeViewModel
- import org.greenrobot.eventbus.EventBus
- import org.greenrobot.eventbus.Subscribe
- import java.lang.reflect.Method
- @Route(path = Screens.Main.HOME)
- class HomeActivity : CommonBVMActivity<ActivityHomeBinding, HomeViewModel>() {
- private val modesFragment by lazy {
- ModesFragment()
- }
- private val recipesFragment by lazy {
- RecipesFragment()
- }
- private var newsLayout: NewsLayout? = null
- private var newsList = mutableListOf<NewsModel>()
- var lastKeyTime = 0L
- private val newsPopupWindow by lazy {
- CommonPopupWindow.ViewBuilder<NewsLayout>().width(dp750)
- .height(LinearLayout.LayoutParams.MATCH_PARENT).outsideTouchable(true).focusable(true)
- .alpha(0.5f)
- .clippingEnabled(false).view(NewsLayout(this)).onShowBefore { popupWindow, view ->
- view.apply {
- newsLayout = this
- updateNewsData(newsList)
- onNewsBackClickListener = object : NewsLayout.OnNewsNewsBackClickListener {
- override fun onNewsBackClick() {
- popupWindow.dismiss()
- }
- }
- }
- }.build<ViewDataBinding>(this)
- }
- private var currModeEntrance = Recipes
- private lateinit var wifiHelp: WifiHelp
- override fun createViewModel(): HomeViewModel {
- return getViewModel(HomeViewModel::class.java)
- }
- override fun createViewBinding(inflater: LayoutInflater): ActivityHomeBinding {
- return ActivityHomeBinding.inflate(inflater)
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- initFragment(intent)
- initCallbackAndListener()
- }
- override fun onNewIntent(intent: Intent?) {
- super.onNewIntent(intent)
- initFragment(intent, true)
- }
- private fun initFragment(intent: Intent?, isFromNewIntent: Boolean = false) {
- val extras = intent?.extras
- currModeEntrance = extras?.getInt(MODE_ENTRANCE) ?: Recipes
- binding.functionTopBar.setTitle(extras?.getString(HOME_TITLE) ?: "")
- if ((extras?.getInt(RECIPES_TYPE) ?: LocalFood) == LocalFood) {
- viewModel.apply {
- recipesType = RecipesType.LOCAL
- isFromDownloadNewRecipesEntrance = false
- }
- } else {
- viewModel.apply {
- recipesType = RecipesType.ONLINE
- isFromDownloadNewRecipesEntrance = true
- }
- }
- binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
- if (currModeEntrance == Recipes) {
- if (isFromNewIntent) {
- replaceFragment(R.id.fragment_container, recipesFragment)
- } else {
- addFragment(R.id.fragment_container, recipesFragment)
- }
- } else {
- if (isFromNewIntent) {
- replaceFragment(R.id.fragment_container, modesFragment)
- } else {
- addFragment(R.id.fragment_container, modesFragment)
- }
- }
- binding.favouriteLayout.background_drawable =
- com.develop.common.R.drawable.home_menu_corners
- //2024.01.04 客户需要把法语的字体变回来
- // if (isFrLanguage()) {
- // binding.tvFavourite.textSize = dp20
- // binding.tvSetting.textSize = dp20
- // binding.tvHistory.textSize = dp20
- // binding.tvPolicy.textSize = dp20
- // binding.tvHelp.textSize = dp20
- // }
- }
- private fun initCallbackAndListener() {
- wifiHelp = WifiHelp.Build(this).setAlreadyConnectionCallback {
- it?.apply {
- binding.functionTopBar.setNetRssi(rssi)
- }
- }.build()
- binding.functionTopBar.onHomeFunctionClickListener =
- object : HomeFunctionTopBar.OnHomeFunctionClickListener {
- override fun onNotifyClick() {
- viewModel.getNotices()
- newsPopupWindow.showAtLocation(binding.functionTopBar, Gravity.END, 0, 0)
- }
- override fun onHomeOrBackClick(homeOrBack: HomeOrBack) {
- if (homeOrBack == HomeOrBack.Home) {
- if (isBrand062()){
- navigateTo(Screens.Main.ENTRANCE_CHOSEN_TWO)
- }else{
- navigateTo(Screens.Main.ENTRANCE_CHOSEN)
- }
- finish()
- } else {
- EventBus.getDefault().post(HomeBackClickEvent(true))
- //搜索后,返回后当前还是onLine的菜谱,还是显示返回,可以返回本地菜谱
- if (viewModel.recipesType == RecipesType.ONLINE && viewModel.isSearch
- && !viewModel.isFromDownloadNewRecipesEntrance
- ) {
- binding.functionTopBar.setHomeOrBack(HomeOrBack.Back)
- } else {
- binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
- }
- viewModel.apply {
- refreshRecipesLiveData.postValue(true)
- isSearch = false
- }
- }
- }
- override fun onTabClick() {
- binding.contentView.openDrawer(binding.rightContentLayout)
- }
- override fun onWifiClick() {
- navigateTo(Screens.Setting.WIFI) {
- val bundle = Bundle()
- bundle.putBoolean(WIFI_FROM_MAIN_SETTING, true)
- with(bundle)
- }
- }
- override fun onUserClick() {
- navigateTo(Screens.Auth.MEMBER) {
- withBoolean("enter_from_home", true)
- }
- }
- }
- binding.rightContentLayout.setOnClickListener {
- }
- binding.settingLayout.setOnClickListener {
- navigateTo(Screens.Setting.MAIN_SETTING)
- binding.contentView.closeDrawers()
- }
- binding.favouriteLayout.setOnClickListener {
- val bundle = Bundle()
- bundle.putString(
- FOOL_LIST_TITLE, getString(com.develop.common.R.string.favourite_recipes)
- )
- bundle.putInt(FOOD_LIST_TYPE, Favourite)
- navigateTo(Screens.Cook.FOOD_LIST) {
- with(bundle)
- }
- binding.contentView.closeDrawers()
- }
- binding.historyLayout.setOnClickListener {
- val bundle = Bundle()
- bundle.putString(FOOL_LIST_TITLE, getString(com.develop.common.R.string.cook_history))
- bundle.putInt(FOOD_LIST_TYPE, History)
- navigateTo(Screens.Cook.FOOD_LIST) {
- with(bundle)
- }
- binding.contentView.closeDrawers()
- }
- binding.policyLayout.setOnClickListener {
- val bundle = Bundle()
- bundle.putBoolean(POLICY_FROM_MAIN_SETTING, true)
- navigateTo(Screens.Setting.POLICY) {
- with(bundle)
- }
- binding.contentView.closeDrawers()
- }
- binding.helpLayout.setOnClickListener {
- navigateTo(Screens.Setting.HELP)
- binding.contentView.closeDrawers()
- }
- viewModel.apply {
- homeOrBackLiveData.observe(this@HomeActivity) {
- binding.functionTopBar.setHomeOrBack(it)
- }
- }
- viewModel.noticesLiveData.observe(this) { data ->
- val newsModelList = mutableListOf<NewsModel>()
- data?.forEach {
- newsModelList.add(NewsModel(it.title, it.content, false))
- }
- newsList.clear()
- newsList.addAll(newsModelList)
- newsLayout?.updateNewsData(newsList)
- }
- binding.ivAvatar.setOnClickListener {
- navigateTo(Screens.Auth.MEMBER) {
- withBoolean("enter_from_home", true)
- }
- }
- //032客户需要隐藏登录和注册
- if (getGoneLogin()){
- binding.tvUserName.visibility = View.GONE
- //头像需要占位显示
- binding.ivAvatar.visibility = View.INVISIBLE
- }
- }
- private fun updateUserInfoUi(userInfo: UserInfo?) {
- if (userInfo?.userName != null) {
- binding.functionTopBar.setUserName(userInfo.userName ?: "")
- binding.tvUserName.text = userInfo.userName ?: ""
- val icon = when (userInfo.userAvatar?.toInt() ?: 0) {
- 0 -> {
- com.develop.common.R.drawable.ic_icon1
- }
- 1 -> {
- com.develop.common.R.drawable.ic_icon2
- }
- 2 -> {
- com.develop.common.R.drawable.ic_icon3
- }
- 3 -> {
- com.develop.common.R.drawable.ic_icon4
- }
- 4 -> {
- com.develop.common.R.drawable.ic_icon5
- }
- else -> {
- com.develop.common.R.drawable.ic_icon6
- }
- }
- binding.ivAvatar.src = icon
- } else {
- binding.ivAvatar.src = com.develop.common.R.drawable.ic_user
- binding.functionTopBar.setUserName(getString(com.develop.common.R.string.login))
- binding.tvUserName.text = getString(com.develop.common.R.string.login)
- }
- }
- companion object {
- var dp1080 = (com.develop.common.R.dimen.convert_1080px).resId2Dimension().toInt()
- var dp160 = (com.develop.common.R.dimen.convert_160px).resId2Dimension().toInt()
- var dp750 = (com.develop.common.R.dimen.convert_750px).resId2Dimension().toInt()
- var dp20 = (com.develop.common.R.dimen.convert_12px).resId2Dimension()
- }
- override fun onResume() {
- super.onResume()
- wifiHelp.scan()
- val userInfo = FoodDataProvider
- .getUserDatabase()
- .userInfoDao()
- .queryUserInfoByUserId(CURRENT_USER_ID)
- updateUserInfoUi(userInfo)
- }
- @Subscribe
- fun onLocalRecipesClickEvent(event: RecipesFragment.OnLocalRecipesEvent) {
- //搜索后,返回后当前还是onLine的菜谱,还是显示返回,可以返回本地菜谱
- if (viewModel.recipesType == RecipesType.ONLINE && viewModel.isSearch
- && !viewModel.isFromDownloadNewRecipesEntrance
- ) {
- binding.functionTopBar.setHomeOrBack(HomeOrBack.Back)
- } else {
- binding.functionTopBar.setHomeOrBack(HomeOrBack.Home)
- }
- viewModel.apply {
- refreshRecipesLiveData.postValue(true)
- isSearch = false
- }
- }
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- var spend = (System.currentTimeMillis() - lastKeyTime);
- if (spend < 10) {
- return super.dispatchKeyEvent(event);
- }
- lastKeyTime = System.currentTimeMillis();
- if (event.action != KeyEvent.ACTION_UP) {
- when (event.keyCode) {
- //旋转+
- TURN_UP_KEY_CODE -> {
- Log.d("TAG aaaaaa", "TURN_UP_KEY_CODE : ${event.keyCode}")
- viewModel.positionRecycle.postValue("TURN_UP_KEY_CODE")
- // 创建一个新的KeyEvent对象,并设置新的keyCode值
- }
- //旋转-
- TURN_DOWN_KEY_CODE -> {
- Log.d("TAG aaaaaa", "TURN_DOWN_KEY_CODE : ${event.keyCode}")
- viewModel.positionRecycle.postValue("TURN_DOWN_KEY_CODE")
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
- class HomeBackClickEvent(showOnline: Boolean)
- override fun onDestroy() {
- super.onDestroy()
- wifiHelp.destroy()
- }
- }
|