Browse Source

fix 处理网络中断

robin 4 years ago
parent
commit
d35d7cd985

+ 14 - 2
app/src/main/java/com/doverfuelingsolutions/issp/fusion/FusionManager.kt

@@ -29,6 +29,8 @@ object FusionManager : LifecycleObserver, OnFdcClientStateChangedListener,
 
     var stateFusion: FdcClient.FdcClientState = FdcClient.FdcClientState.Stopped
     private const val timeoutMax = 4000
+    var firstLink = false
+        private set
     private var isLogin = false
     val pumpList = arrayListOf<PumpInfo>()
 
@@ -42,10 +44,19 @@ object FusionManager : LifecycleObserver, OnFdcClientStateChangedListener,
 
         stateFusion = state
         when (state) {
-            FdcClient.FdcClientState.Connected -> loginFetchInfo()
+            FdcClient.FdcClientState.Connected -> {
+                firstLink = true
+                loginFetchInfo()
+            }
             // 中途断网重连
             FdcClient.FdcClientState.Connecting -> onFusionEvent?.onFusionReconnect()
-            FdcClient.FdcClientState.MyAddReConnect -> onFusionEvent?.onFusionInit(FusionError.WrongAddress, StringUtil.get(R.string.wrong_fusion_address))
+            FdcClient.FdcClientState.MyAddReConnect -> {
+                if (!firstLink) {
+                    onFusionEvent?.onFusionInit(FusionError.WrongAddress, StringUtil.get(R.string.wrong_fusion_address))
+                } else {
+                    onFusionEvent?.onFusionReconnect()
+                }
+            }
             else -> {}
         }
     }
@@ -92,6 +103,7 @@ object FusionManager : LifecycleObserver, OnFdcClientStateChangedListener,
             FdcClient.getDefault().removeOnFdcServiceResponseReceivedListeners(manager)
             FdcClient.getDefault().removeOnFdcMessageReceivedListeners(manager)
             FdcClient.getDefault().stop()
+            firstLink = false
         }
     }
 

+ 16 - 0
app/src/main/java/com/doverfuelingsolutions/issp/utils/NetworkUtil.kt

@@ -0,0 +1,16 @@
+package com.doverfuelingsolutions.issp.utils
+
+import android.content.Context
+import android.net.ConnectivityManager
+
+class NetworkUtil {
+
+    companion object {
+
+        // confirm TEST
+        fun isAvailable(context: Context): Boolean {
+            val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+            return connectivityManager.isDefaultNetworkActive
+        }
+    }
+}

+ 6 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/MainActivity.kt

@@ -21,6 +21,7 @@ import com.doverfuelingsolutions.issp.fusion.FusionError
 import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.fusion.callback.OnFusionEvent
 import com.doverfuelingsolutions.issp.utils.ActivityUtil
+import com.doverfuelingsolutions.issp.utils.NetworkUtil
 import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.view.fragment.*
 import com.wayne.www.waynelib.fdc.FdcClient
@@ -179,7 +180,11 @@ class MainActivity : AppCompatActivity(),
     override fun onFusionReconnect() {
         lifecycleScope.launch {
             setFragment(fragmentHolder)
-            fragmentHolder.loading(StringUtil.get(R.string.in_reconnect_fusion))
+            if (NetworkUtil.isAvailable(this@MainActivity)) {
+                fragmentHolder.loading(StringUtil.get(R.string.in_reconnect_fusion))
+            } else {
+                fragmentHolder.loading(StringUtil.get(R.string.network_error))
+            }
         }
     }