Răsfoiți Sursa

feat fusion相关开发

RobinTan1024 4 ani în urmă
părinte
comite
594aaa5a46

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -18,7 +18,7 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.Issp">
         <activity
-            android:name=".view.PreferenceActivity"
+            android:name=".view.SettingsActivity"
             android:label="@string/preference" />
         <activity
             android:name=".view.LoginActivity">

+ 71 - 3
app/src/main/java/com/doverfuelingsolutions/issp/fusion/FusionManager.kt

@@ -3,12 +3,80 @@ package com.doverfuelingsolutions.issp.fusion
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleObserver
 import androidx.lifecycle.OnLifecycleEvent
+import com.doverfuelingsolutions.issp.data.DataStore
+import com.doverfuelingsolutions.issp.utils.log.DFSLog
+import com.doverfuelingsolutions.issp.utils.sp.SPKeys
+import com.doverfuelingsolutions.issp.utils.sp.SPUtil
+import com.wayne.www.waynelib.fdc.FdcClient
+import com.wayne.www.waynelib.fdc.OnFdcClientStateChangedListener
+import com.wayne.www.waynelib.fdc.OnFdcMessageReceivedListener
+import com.wayne.www.waynelib.fdc.OnFdcServiceResponseReceivedListener
+import com.wayne.www.waynelib.fdc.message.FdcMessage
+import com.wayne.www.waynelib.fdc.message.ServiceResponse
+import com.wayne.www.waynelib.fdc.message.ServiceResponseLogOn
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
 
-object FusionManager : LifecycleObserver {
+object FusionManager : LifecycleObserver, OnFdcClientStateChangedListener,
+    OnFdcServiceResponseReceivedListener,
+    OnFdcMessageReceivedListener {
+
+    private val coroutineIO = CoroutineScope(Dispatchers.IO)
+
+    override fun onFdcClientStateChanged(sender: FdcClient?, state: FdcClient.FdcClientState?) {
+        DFSLog.i("onFdcClientStateChanged: ${state?.name}")
+        if (sender == null || state == null) return
+
+        when (state) {
+            FdcClient.FdcClientState.Connected -> {
+                // TODO 获取油站相关信息
+                val port = SPUtil.getString(SPKeys.MIDDLE_PORT).toInt()
+                DFSLog.d("try login in Fusion")
+                sender.sendLogonRequestAsync(port, port, "00.07", OnFdcServiceResponseReceivedListener { _, response ->
+                    DFSLog.d("login Fusion respond")
+                    if (response == null || response !is ServiceResponseLogOn) return@OnFdcServiceResponseReceivedListener
+                    DFSLog.d(response.requestID, response.requestType, response.singleFdcData.fdcStatus)
+                    if (response.singleFdcData.fdcStatus.equals("ERRCD_NOPERM", true)) {
+                        DFSLog.w("Unsuccessful LogOn request, may cause by previous unfinished session, trying LogOff and LogOn again...")
+                        FdcClient.getDefault().sendLogOffRequestAsync({ _, _ ->
+                            sender.sendLogonRequestAsync(port, port, "00.07", null, 60000)
+                        }, 0)
+                    }
+                }, 60000)
+            }
+            else -> {}
+        }
+    }
+
+    override fun onServiceResponseReceived(sender: FdcClient?, serviceResponse: ServiceResponse?) {
+        DFSLog.d("onServiceResponseReceived")
+    }
+
+    override fun onFdcMessageReceived(sender: FdcClient?, fdcMessage: FdcMessage?) {
+        DFSLog.d("onFdcMessageReceived")
+    }
 
     @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
-    fun start() {}
+    fun initialize() {
+        DFSLog.i("initialize")
+        FdcClient.getDefault().addOnFdcClientStateChangedListeners(this)
+        FdcClient.getDefault().addOnFdcServiceResponseReceivedListeners(this)
+        FdcClient.getDefault().addOnFdcMessageReceivedListeners(this)
+        FdcClient.getDefault().start(
+            SPUtil.getString(SPKeys.MIDDLE_IP),
+            SPUtil.getString(SPKeys.MIDDLE_PORT).toInt(),
+            DataStore.sn,
+            SPUtil.getString(SPKeys.MIDDLE_WORKSTATION_ID).toInt(),
+            null
+        )
+    }
 
     @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
-    fun stop() {}
+    fun close() {
+        DFSLog.i("close")
+        FdcClient.getDefault().removeOnFdcClientStateChangedListeners(this)
+        FdcClient.getDefault().removeOnFdcServiceResponseReceivedListeners(this)
+        FdcClient.getDefault().removeOnFdcMessageReceivedListeners(this)
+        FdcClient.getDefault().stop()
+    }
 }

+ 14 - 7
app/src/main/java/com/doverfuelingsolutions/issp/utils/ActivityUtil.kt

@@ -1,6 +1,7 @@
 package com.doverfuelingsolutions.issp.utils
 
 import android.os.Build
+import android.os.Handler
 import android.view.View
 import android.view.WindowInsets
 import androidx.appcompat.app.AppCompatActivity
@@ -10,15 +11,21 @@ class ActivityUtil {
 
     companion object {
 
+        fun setFullscreen(activity: AppCompatActivity) {
+            makeFullscreen(activity)
+            Handler(activity.mainLooper).postDelayed({
+                makeFullscreen(activity)
+            }, 1000)
+
+        }
+
         @Suppress("DEPRECATION")
-        fun fullscreen(activity: AppCompatActivity) {
+        private fun makeFullscreen(activity: AppCompatActivity) {
+            if (activity.isFinishing || activity.isDestroyed) return
+
             activity.supportActionBar?.hide()
-            if (Build.VERSION.SDK_INT >= 30) {
-                activity.window.insetsController?.hide(WindowInsets.Type.navigationBars())
-            } else {
-                activity.window.decorView.systemUiVisibility =
-                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
-            }
+            activity.window.decorView.systemUiVisibility =
+                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
         }
     }
 }

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/utils/log/DFSLog.kt

@@ -6,7 +6,7 @@ class DFSLog {
 
     companion object {
 
-        const val TAG = "dfs"
+        const val TAG = "robin"
         var console = true
         var file = true
         @Suppress("DEPRECATION")

+ 2 - 1
app/src/main/java/com/doverfuelingsolutions/issp/view/LoginActivity.kt

@@ -49,7 +49,7 @@ class LoginActivity : AppCompatActivity(), View.OnClickListener {
     override fun onClick(v: View?) {
         when (v) {
             activityLoginBinding.buttonLogin -> submit()
-            activityLoginBinding.buttonPreference -> PreferenceActivity.start(this)
+            activityLoginBinding.buttonPreference -> SettingsActivity.start(this)
         }
     }
 
@@ -83,6 +83,7 @@ class LoginActivity : AppCompatActivity(), View.OnClickListener {
                     else {
                         MainActivity.start(this@LoginActivity)
                         finish()
+                        return@launch
                     }
                 }
             }

+ 16 - 4
app/src/main/java/com/doverfuelingsolutions/issp/view/MainActivity.kt

@@ -4,6 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
+import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
@@ -15,11 +16,10 @@ import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.ActivityUtil
 import com.youth.banner.adapter.BannerImageAdapter
 import com.youth.banner.holder.BannerImageHolder
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.*
 import java.io.File
 
-class MainActivity : AppCompatActivity() {
+class MainActivity : AppCompatActivity(), View.OnClickListener {
 
     companion object {
 
@@ -38,7 +38,6 @@ class MainActivity : AppCompatActivity() {
         activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
         activityMainBinding.lifecycleOwner = this
         activityMainBinding.mainViewModel = mainViewModel
-        ActivityUtil.fullscreen(this)
 
         activityMainBinding.stationLogo.setImageURI(Uri.fromFile(File(filesDir, DataStore.stationLogoFile)))
         mainViewModel.stationName.value = DataStore.buName
@@ -46,6 +45,19 @@ class MainActivity : AppCompatActivity() {
         initBanner()
 
         lifecycle.addObserver(FusionManager)
+
+        activityMainBinding.textClock.setOnClickListener(this)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        ActivityUtil.setFullscreen(this)
+    }
+
+    override fun onClick(v: View?) {
+        when (v) {
+            activityMainBinding.textClock -> SettingsActivity.start(this)
+        }
     }
 
     private fun initBanner() {

+ 2 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/PreferenceActivity.kt → app/src/main/java/com/doverfuelingsolutions/issp/view/SettingsActivity.kt

@@ -8,12 +8,12 @@ import androidx.appcompat.app.AppCompatActivity
 import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.view.fragment.SettingsFragment
 
-class PreferenceActivity : AppCompatActivity() {
+class SettingsActivity : AppCompatActivity() {
 
     companion object {
 
         fun start(context: Context) {
-            Intent(context, PreferenceActivity::class.java).let { context.startActivity(it) }
+            Intent(context, SettingsActivity::class.java).let { context.startActivity(it) }
         }
     }
 

+ 3 - 0
app/src/main/res/layout/activity_main.xml

@@ -14,6 +14,8 @@
         style="@style/match"
         android:background="@mipmap/activity_background"
         android:orientation="vertical"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
         tools:context=".view.MainActivity">
 
         <LinearLayout
@@ -47,6 +49,7 @@
                 android:contentDescription="@string/app_name" />
 
             <TextClock
+                android:id="@+id/textClock"
                 style="@style/wrap"
                 android:layout_marginStart="8dp"
                 android:format12Hour="@string/format_date"