MainActivity.kt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package com.doverfuelingsolutions.issp.view
  2. import android.content.Context
  3. import android.content.Intent
  4. import android.net.Uri
  5. import android.os.Bundle
  6. import android.view.View
  7. import androidx.activity.viewModels
  8. import androidx.appcompat.app.AppCompatActivity
  9. import androidx.databinding.DataBindingUtil
  10. import androidx.fragment.app.Fragment
  11. import androidx.lifecycle.MutableLiveData
  12. import androidx.lifecycle.ViewModel
  13. import androidx.lifecycle.lifecycleScope
  14. import com.doverfuelingsolutions.issp.R
  15. import com.doverfuelingsolutions.issp.data.GlobalData
  16. import com.doverfuelingsolutions.issp.databinding.ActivityMainBinding
  17. import com.doverfuelingsolutions.issp.fusion.FusionError
  18. import com.doverfuelingsolutions.issp.fusion.FusionManager
  19. import com.doverfuelingsolutions.issp.fusion.callback.OnFusionEvent
  20. import com.doverfuelingsolutions.issp.utils.ActivityUtil
  21. import com.doverfuelingsolutions.issp.utils.NetworkUtil
  22. import com.doverfuelingsolutions.issp.utils.StringUtil
  23. import com.doverfuelingsolutions.issp.view.fragment.FragmentAction
  24. import com.doverfuelingsolutions.issp.view.fragment.FragmentLoading
  25. import com.doverfuelingsolutions.issp.view.fragment.FragmentSelect
  26. import com.wayne.www.waynelib.fdc.FdcClient
  27. import com.youth.banner.adapter.BannerImageAdapter
  28. import com.youth.banner.holder.BannerImageHolder
  29. import kotlinx.coroutines.launch
  30. import java.io.File
  31. class MainActivity : AppCompatActivity(),
  32. OnFusionEvent,
  33. View.OnLongClickListener {
  34. companion object {
  35. fun start(context: Context) {
  36. Intent(context, MainActivity::class.java).let { context.startActivity(it) }
  37. }
  38. }
  39. private val binding: ActivityMainBinding by lazy {
  40. DataBindingUtil.setContentView(
  41. this,
  42. R.layout.activity_main
  43. )
  44. }
  45. private val mainViewModel: MainViewModel by viewModels()
  46. private var isBlockBackPress = false
  47. override fun onCreate(savedInstanceState: Bundle?) {
  48. super.onCreate(savedInstanceState)
  49. binding.lifecycleOwner = this
  50. binding.mainViewModel = mainViewModel
  51. initView()
  52. initFusion()
  53. }
  54. override fun onResume() {
  55. super.onResume()
  56. ActivityUtil.setFullscreen(this)
  57. }
  58. override fun onDestroy() {
  59. super.onDestroy()
  60. FusionManager.onFusionEvent = null
  61. }
  62. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  63. super.onActivityResult(requestCode, resultCode, data)
  64. lifecycleScope.launch {
  65. when (requestCode) {
  66. PreferenceActivity.codeRequestResult -> {
  67. data?.let {
  68. val isMiddleModified =
  69. it.getBooleanExtra(PreferenceActivity.isMiddleModified, false)
  70. val isFuelModified =
  71. it.getBooleanExtra(PreferenceActivity.isFuelModified, false)
  72. if (!isFuelModified && !isMiddleModified) return@let
  73. setFragment(FragmentLoading.build(R.string.in_reconnect_fusion))
  74. if (isMiddleModified || FusionManager.stateFusion != FdcClient.FdcClientState.Connected) {
  75. FusionManager.restart()
  76. } else if (isFuelModified && FusionManager.stateFusion == FdcClient.FdcClientState.Connected) {
  77. setFragment(FragmentLoading.build(R.string.in_get_fuel))
  78. FusionManager.loginFetchInfo()
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. override fun onBackPressed() {
  86. if (!isBlockBackPress) super.onBackPressed()
  87. }
  88. override fun onLongClick(v: View?): Boolean {
  89. when (v) {
  90. binding.clock -> {
  91. PreferenceActivity.startForResult(this)
  92. }
  93. }
  94. return false
  95. }
  96. override fun onFusionInit(code: FusionError, msg: String) {
  97. lifecycleScope.launch {
  98. // WrongAddress Timeout 需要修改中控信息,返回时如已修改则重启Fusion
  99. // GetNozzleInfo 不重启Fusion,重新请求加油信息即可
  100. when (code) {
  101. FusionError.Success -> {
  102. setFragment(FragmentSelect())
  103. }
  104. FusionError.WrongAddress, FusionError.Timeout, FusionError.GetNozzleInfo -> {
  105. val buttonText = if (code == FusionError.GetNozzleInfo) {
  106. StringUtil.get(R.string.go_check_fuel)
  107. } else {
  108. StringUtil.get(R.string.go_check_fusion)
  109. }
  110. setFragment(FragmentAction.build(StringUtil.get(R.string.connect_fail_reason, msg), buttonText) {
  111. PreferenceActivity.startForResult(this@MainActivity)
  112. })
  113. }
  114. FusionError.Login -> {
  115. setFragment(FragmentAction.build(StringUtil.get(R.string.connect_fail_reason, msg), StringUtil.get(R.string.retry_login)) {
  116. FusionManager.loginFetchInfo()
  117. })
  118. }
  119. }
  120. }
  121. }
  122. override fun onFusionReconnect() {
  123. lifecycleScope.launch {
  124. if (NetworkUtil.isAvailable(this@MainActivity)) {
  125. FragmentLoading.build(R.string.in_reconnect_fusion)
  126. } else {
  127. FragmentLoading.build(R.string.network_error)
  128. }
  129. }
  130. }
  131. private fun initView() {
  132. supportActionBar?.hide()
  133. mainViewModel.stationName.value = GlobalData.businessName.get()
  134. if (GlobalData.stationLogoFileName.get().isNotEmpty())
  135. binding.stationLogo.setImageURI(
  136. Uri.fromFile(
  137. File(
  138. filesDir,
  139. GlobalData.stationLogoFileName.get()
  140. )
  141. )
  142. )
  143. binding.banner.run {
  144. addBannerLifecycleObserver(this@MainActivity)
  145. scrollTime = 500
  146. adapter =
  147. object : BannerImageAdapter<Int>(listOf(R.mipmap.banner_1, R.mipmap.banner_2)) {
  148. override fun onBindView(
  149. holder: BannerImageHolder,
  150. data: Int,
  151. position: Int,
  152. size: Int
  153. ) {
  154. holder.imageView.setImageResource(data)
  155. }
  156. }
  157. }
  158. binding.clock.setOnLongClickListener(this)
  159. setFragment(FragmentLoading.build(R.string.in_connect_fusion))
  160. }
  161. private fun initFusion() {
  162. FusionManager.onFusionEvent = this
  163. lifecycle.addObserver(FusionManager)
  164. }
  165. fun setFragment(fragment: Fragment, back: Boolean = false) {
  166. supportFragmentManager.beginTransaction().run {
  167. replace(R.id.fragmentBox, fragment)
  168. if (back) {
  169. addToBackStack(fragment::class.java.simpleName)
  170. }
  171. commit()
  172. }
  173. }
  174. fun backToLogin() {
  175. LoginActivity.start(this)
  176. finish()
  177. }
  178. fun blockBackPress(isBlock: Boolean) {
  179. isBlockBackPress = isBlock
  180. }
  181. class MainViewModel : ViewModel() {
  182. val stationName = MutableLiveData("")
  183. }
  184. }