Quellcode durchsuchen

使用master最新提交来实现simple demo

Frankensteinly vor 10 Monaten
Ursprung
Commit
f3acf2b8fe

+ 9 - 0
app/src/main/AndroidManifest.xml

@@ -22,6 +22,15 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.ISCS"
         tools:targetApi="31">
+        <activity
+            android:name=".presentation.simple.SimpleProcessActivity"
+            android:exported="false" />
+        <activity
+            android:name=".presentation.simple.SimpleSettingActivity"
+            android:exported="false" />
+        <activity
+            android:name=".presentation.simple.SimpleLoginActivity"
+            android:exported="false" />
         <activity
             android:name=".activity.test.ProcessDemoActivity"
             android:exported="false" />

+ 5 - 0
app/src/main/java/com/grkj/iscs/activity/MainActivity.kt

@@ -11,6 +11,7 @@ import com.grkj.iscs.activity.test.ModbusActivity
 import com.grkj.iscs.activity.test.ProcessDemoActivity
 import com.grkj.iscs.activity.test.SopActivity
 import com.grkj.iscs.activity.test.WebSocketActivity
+import com.grkj.iscs.presentation.simple.SimpleLoginActivity
 
 class MainActivity : BaseActivity<ActivityMainBinding>() {
 
@@ -65,5 +66,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
         mBinding?.processDemo?.setOnClickListener {
             startActivity(Intent(this, ProcessDemoActivity::class.java))
         }
+
+        mBinding?.simpleDemo?.setOnClickListener {
+            startActivity(Intent(this, SimpleLoginActivity::class.java))
+        }
     }
 }

+ 140 - 0
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleLoginActivity.kt

@@ -0,0 +1,140 @@
+package com.grkj.iscs.presentation.simple
+
+import android.content.Intent
+import android.os.Environment
+import android.view.View
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.grkj.iscs.BusinessManager
+import com.grkj.iscs.R
+import com.grkj.iscs.base.BaseActivity
+import com.grkj.iscs.databinding.ActivitySimpleLoginBinding
+import com.grkj.iscs.extentions.removeLeadingZeros
+import com.grkj.iscs.extentions.toHexStrings
+import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
+import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
+import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_LOCK
+import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
+import com.grkj.iscs.model.WorkTicketStatusBean
+import com.grkj.iscs.presentation.LockerActivity
+import com.grkj.iscs.presentation.LockerTogetherActivity
+import com.grkj.iscs.presentation.PresentationManager
+import com.grkj.iscs.util.ActivityUtils
+import com.grkj.iscs.util.Executor
+import com.grkj.iscs.util.FileUtil
+import com.grkj.iscs.util.ToastUtils
+
+class SimpleLoginActivity : BaseActivity<ActivitySimpleLoginBinding>() {
+
+    override val viewBinding: ActivitySimpleLoginBinding
+        get() = ActivitySimpleLoginBinding.inflate(layoutInflater)
+
+    override fun initView() {
+        mBinding?.tvSetting?.setOnClickListener {
+            startActivity(Intent(this, SimpleSettingActivity::class.java))
+        }
+
+
+        val path =
+            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + "/presentation/presentation.txt"
+        val str = FileUtil.readTxt(path)
+
+        if (str.isEmpty()) {
+            ToastUtils.tip(R.string.simple_config_file_tip)
+            return
+        }
+        println("Mac Json : $str")
+        PresentationManager.cardList =
+            Gson().fromJson(str, object : TypeToken<List<PresentationManager.PCardInfoBean>>() {}.type)
+
+        val lockerList = PresentationManager.cardList.filter { it.isLocker }
+        for (i in lockerList.indices) {
+            PresentationManager.mLockerList.add(PresentationManager.PLockerBean("上锁人${i + 1}", lockerList[i].rfid, 0))
+        }
+        val togetherList = PresentationManager.cardList.filter { !it.isLocker }
+        for (i in togetherList.indices) {
+            PresentationManager.mLockerTogetherList.add(
+                PresentationManager.PLockerTogetherBean(
+                    "共锁人${i + 1}",
+                    false,
+                    togetherList[i].rfid,
+                    0
+                )
+            )
+        }
+
+        handleLoading(true, getString(R.string.simple_device_is_initializing))
+        BusinessManager.connectDock(true)
+        Executor.delayOnMain(2000) {
+            handleLoading(false)
+        }
+
+        BusinessManager.registerStatusListener(this) { dockBean ->
+            when (dockBean.type) {
+                DOCK_TYPE_PORTABLE -> {
+                    dockBean.deviceList.forEach { deviceBean ->
+                        if (deviceBean.isExist) {
+                            when (deviceBean.type) {
+                                DEVICE_TYPE_CARD -> {
+                                    ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
+                                        if (res.size >= 11) {
+                                            val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
+                                            println("卡片RFID : $rfid")
+                                            if(window.decorView.visibility != View.VISIBLE) {
+//                                            ToastUtils.tip("当前页面不可见")
+                                                val current = ActivityUtils.currentActivity()
+                                                if (current is LockerActivity) {
+                                                    current.showDlg(rfid)
+                                                } else if (current is LockerTogetherActivity) {
+                                                    current.showDlg(rfid)
+                                                }
+                                            } else {
+                                                if (PresentationManager.cardList.any { it.rfid == rfid && it.isLocker}) {
+                                                    ToastUtils.tip(getString(R.string.simple_login_success_welcome, rfid))
+                                                    val intent = Intent(this, LockerActivity::class.java)
+                                                    intent.putExtra("card", rfid)
+                                                    startActivity(intent)
+                                                } else if (PresentationManager.cardList.any { it.rfid == rfid && !it.isLocker}) {
+                                                    ToastUtils.tip(getString(R.string.simple_login_success_welcome, rfid))
+                                                    val intent = Intent(this, LockerTogetherActivity::class.java)
+                                                    intent.putExtra("card", rfid)
+                                                    startActivity(intent)
+                                                } else {
+                                                    ToastUtils.tip("登录失败,$rfid 没有权限")
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+
+
+                                DEVICE_TYPE_KEY -> {
+                                    Executor.runOnMain {
+                                        BusinessManager.getTicketStatusBusiness(PresentationManager.keyMac, this) { b, s ->
+                                            handleLoading(b, s)
+                                            if (!s.isNullOrEmpty() && s.startsWith("工作票完成接收")) {
+                                                val ticket = s.substring(7)
+                                                val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
+                                                PresentationManager.updateWorkTicket(ticketStatusBean)
+                                            }
+                                        }
+                                    }
+                                }
+                                DEVICE_TYPE_LOCK -> {
+                                    Executor.runOnMain {
+                                        ModBusController.readLockRfid(dockBean.addr.toInt() - 1, deviceBean.idx) { res ->
+                                            val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
+                                            PresentationManager.updateLockReturnStatus(rfid)
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 13 - 0
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleProcessActivity.kt

@@ -0,0 +1,13 @@
+package com.grkj.iscs.presentation.simple
+
+import com.grkj.iscs.base.BaseActivity
+import com.grkj.iscs.databinding.ActivitySimpleProcessBinding
+
+class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
+
+    override val viewBinding: ActivitySimpleProcessBinding
+        get() = ActivitySimpleProcessBinding.inflate(layoutInflater)
+
+    override fun initView() {
+    }
+}

+ 14 - 0
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleSettingActivity.kt

@@ -0,0 +1,14 @@
+package com.grkj.iscs.presentation.simple
+
+import com.grkj.iscs.base.BaseActivity
+import com.grkj.iscs.databinding.ActivitySimpleSettingBinding
+
+class SimpleSettingActivity : BaseActivity<ActivitySimpleSettingBinding>() {
+
+    override val viewBinding: ActivitySimpleSettingBinding
+        get() = ActivitySimpleSettingBinding.inflate(layoutInflater)
+
+    override fun initView() {
+
+    }
+}

+ 9 - 0
app/src/main/res/drawable/simple_btn_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/white" />
+    <corners android:radius="@dimen/selectable_input_radius" />
+    <stroke
+        android:width="@dimen/simple_btn_stroke"
+        android:color="@color/simple_btn_stroke" />
+</shape>

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

@@ -120,6 +120,16 @@
             android:text="Process Demo"
             android:textSize="10sp"
             android:layout_margin="5dp"/>
+
+        <Button
+            android:id="@+id/simple_demo"
+            android:layout_width="wrap_content"
+            android:layout_height="50dp"
+            android:minWidth="0dp"
+            android:minHeight="0dp"
+            android:text="Simple Demo"
+            android:textSize="10sp"
+            android:layout_margin="5dp"/>
     </LinearLayout>
 
     <LinearLayout

+ 22 - 0
app/src/main/res/layout/activity_simple_login.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".presentation.simple.SimpleLoginActivity">
+
+    <TextView
+        style="@style/SimpleTextView"
+        android:layout_centerInParent="true"
+        android:text="@string/simple_please_swipe_card" />
+
+    <TextView
+        android:id="@+id/tv_setting"
+        style="@style/SimpleButton"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentBottom="true"
+        android:layout_margin="10dp"
+        android:text="@string/simple_setting" />
+
+</RelativeLayout>

+ 10 - 0
app/src/main/res/layout/activity_simple_process.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".presentation.simple.SimpleProcessActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 0
app/src/main/res/layout/activity_simple_setting.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".presentation.simple.SimpleSettingActivity">
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
app/src/main/res/values/colors.xml

@@ -20,4 +20,6 @@
     <color name="selectable_input_prefix">#bd3124</color>
     <color name="switch_track_on">#298EFF</color>
     <color name="switch_track_off">#E9E9E9</color>
+
+    <color name="simple_btn_stroke">#107eff</color>
 </resources>

+ 2 - 0
app/src/main/res/values/dimens.xml

@@ -51,4 +51,6 @@
 
     <dimen name="dialog_card_login_width">320dp</dimen>
     <dimen name="dialog_card_login_height">180dp</dimen>
+
+    <dimen name="simple_btn_stroke">2dp</dimen>
 </resources>

+ 8 - 0
app/src/main/res/values/strings.xml

@@ -98,4 +98,12 @@
     <string name="presentation_hint_content">请输入作业内容</string>
 
     <string name="presentation_login_tip">请刷卡登录</string>
+
+    <!--  简易版单机演示Demo  -->
+    <string name="simple_config_file_tip">未找到 presentation.txt 文件,请先在手机Download目录创建 presentation 文件夹,并将 presentation.txt 文件放入</string>
+    <string name="simple_please_swipe_card">请刷卡</string>
+    <string name="simple_device_is_initializing">正在初始化设备...</string>
+    <string name="simple_login_success_welcome">登录成功,欢迎 %s</string>
+    <string name="simple_setting">设置</string>
+    <string name="simple_do_job_ticket">执行作业票</string>
 </resources>

+ 18 - 0
app/src/main/res/values/styles.xml

@@ -43,4 +43,22 @@
         <item name="android:singleLine">true</item>
         <item name="android:ellipsize">end</item>
     </style>
+
+    <style name="SimpleTextView">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">@dimen/common_text_size</item>
+    </style>
+
+    <style name="SimpleButton">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textSize">@dimen/common_text_size</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:padding">5dp</item>
+        <item name="android:background">@drawable/simple_btn_bg</item>
+    </style>
 </resources>