Merge tag '1.1.1' into develop

tag 1.1.1
diff --git a/app/build.gradle b/app/build.gradle
index 3debf66..08a41f1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -40,7 +40,7 @@
         release {

             minifyEnabled false

             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

-            signingConfig signingConfigs.release

+            signingConfig signingConfigs.sign

         }

         debug {

             signingConfig signingConfigs.sign

diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 39de86e..2b2575c 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -23,10 +23,7 @@
 import com.supwisdom.entity.PeriodFixPayRecord

 import com.supwisdom.entity.ReversalFlag

 import com.supwisdom.entity.TransdtlUnionRecord

-import com.supwisdom.utils.CommonUtil

-import com.supwisdom.utils.DateUtil

-import com.supwisdom.utils.PublicDef

-import com.supwisdom.utils.SoundUtil

+import com.supwisdom.utils.*

 import com.supwisdom.view.DialogPurchase

 import java.util.*

 import java.util.concurrent.locks.ReentrantLock

@@ -39,6 +36,7 @@
 @Suppress("DEPRECATION")

 @SuppressLint("NewApi")

 class ConsumeActivity : BaseActivity(), IConsumeView {

+    private val TAG = "ConsumeActivity"

     private lateinit var amountTxt: TextView

     private lateinit var presenter: ConsumePresenter

     private lateinit var vLinkstat: TextView

@@ -60,6 +58,7 @@
     private val pos = SPApplication.getInstance().getPos()

     private var beepManager: BeepManager? = null

     private val scanLock = ReentrantLock()

+    private var appreboottime: Long = 0

 

     @Volatile

     private var cardPaying = false

@@ -189,6 +188,17 @@
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {

         if (event.action == KeyEvent.ACTION_DOWN) {

             presenter.resetOperationTime()

+            if (event.keyCode == KeyEvent.KEYCODE_DPAD_UP) {

+                //F2 连续按重启app

+                val tt = System.currentTimeMillis()

+                if (tt - appreboottime < PublicDef.APP_REBOOT_GAP) {

+                    LogUtil.i(TAG, "设备双击F2,待机界面重启APP!!")

+                    CommonUtil.restartAPP(this)

+                } else {

+                    appreboottime = tt

+                }

+                return super.dispatchKeyEvent(event)

+            }

             when (payMode) {

                 PayMode.FIXPAY -> fixInputPay(event.keyCode)

                 PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)

@@ -447,7 +457,7 @@
     }

 

     private fun parsePeriodFixPay() {

-        val nowtime = DateUtil.getNowTimeNoFormat().substring(0, 4)

+        val nowtime = DateUtil.getTimeHHmm()

         periodFixPayList?.forEach {

             if (it.beginTime!! <= nowtime && nowtime < it.endTime!!) {

                 if (payMode != PayMode.FIXPAY || amount != it.amount) {

@@ -688,7 +698,8 @@
         return try {

             CommonUtil.YuanToFen(

                 java.lang.Double.parseDouble(

-                    amountTxt.text.toString().trim { it <= ' ' })

+                    amountTxt.text.toString()

+                )

             )

         } catch (ex: Exception) {

             ex.printStackTrace()

@@ -708,7 +719,7 @@
             }

         } else {

             //限制消费金额<10000

-            if (str.length < 4) {

+            if (str.length < 5) {

                 amountTxt.text = "$str$value"

             }

         }

diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
index bcbf64e..f7ed535 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
@@ -1,11 +1,12 @@
-package com.supwisdom.activities.consume.bean
-
-/**
- ** create by zzq on 2019/11/5
- ** @desc 屏保参数
- **/
-class ScreenSaverBean {
-    var operationTime = 0L //ms
-    var operationFlag = false //是否操作
-    var flag = false //是否屏保
+package com.supwisdom.activities.consume.bean

+

+/**

+ ** create by zzq on 2019/11/5

+ ** @desc 屏保参数

+ **/

+class ScreenSaverBean {

+    var operationTime = 0L //ms

+    var operationFlag = false //是否操作

+    var flag = false //是否屏保

+    var gcTime = 0L //ms

 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index 6ebab3c..20791e7 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -15,37 +15,49 @@
 import com.supwisdom.service.EpayApiImpl

 import com.supwisdom.utils.*

 import org.apache.http.HttpStatus

+import java.util.concurrent.locks.ReentrantLock

 

 /**

  ** create by zzq on 2019/7/25

  ** @desc 刷卡消费

  **/

-class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {

+class CardPayService constructor(

+    private val iConsumeView: IConsumeView,

+    private val handler: Handler

+) {

     private val TAG = "CardPayService"

     private val pos = SPApplication.getInstance().getPos()

     private val runnable = CardPayRunnable()

     private val consumeApi = ConsumeApi()

+

     @Volatile

     private var isExist = false

+

     @Volatile

     private var clickStat = ClickStat.INIT

+

     @Volatile

     private var amount: Int = 0

+

     @Volatile

     private var payQueryConfirm = false

     var isFixMode = false

     private var thread: Thread? = null

     private var cardBean: CardBean? = null

+

     /**

      * 防止定额连续消费

      */

     private val lastPayBean = LastPayBean()

+    private val lock = ReentrantLock()

+

     @Volatile

     private var operation = false

     private val screenSaverBean = ScreenSaverBean()

 

     init {

         screenSaverBean.operationTime = System.currentTimeMillis()

+        screenSaverBean.gcTime = screenSaverBean.operationTime

     }

 

     fun start() {

@@ -63,23 +75,32 @@
     }

 

     fun clickNoPay() {

+        lock.lock()

         clickStat = ClickStat.INIT

         amount = 0

+        lock.unlock()

     }

 

     fun clickToPay(amount: Int) {

+        lock.lock()

         clickStat = ClickStat.PAY

         this.amount = amount

+        lock.unlock()

     }

 

     fun clickToReverse(amount: Int) {

+        lock.lock()

         clickStat = ClickStat.REVERSE

         this.amount = amount

+        lock.unlock()

     }

 

     fun clickToInterrupt() {

+        lock.lock()

         clickStat = ClickStat.INIT

+        this.amount = 0

         payQueryConfirm = false

+        lock.unlock()

     }

 

     fun resetOperationTime() {

@@ -118,6 +139,10 @@
                     when (clickStat) {

                         ClickStat.PAY -> {

                             try {

+                                lock.lock()

+                                if (clickStat != ClickStat.PAY) {

+                                    throw CardPayInterruptError("支付状态已改变")

+                                }

                                 doConsume()

                             } catch (ex: CardPayFailError) {

                                 sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))

@@ -130,14 +155,23 @@
                                             + "exception=${CommonUtil.getExceptionStack(ex)}"

                                 )

                                 sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))

+                            } finally {

+                                clickStat = ClickStat.INIT

+                                lock.unlock()

                             }

-                            clickStat = ClickStat.INIT

                         }

                         ClickStat.REVERSE -> {

                             try {

+                                lock.lock()

+                                if (clickStat != ClickStat.REVERSE) {

+                                    throw CardPayInterruptError("支付状态已改变")

+                                }

                                 doReverse()

                             } catch (ex: CardPayCancelFailError) {

-                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))

+                                sendMsg(

+                                    PublicDef.MSG_CARD_REVERSE_FAIL,

+                                    getRvsErrorInfo(ex.message)

+                                )

                             } catch (ex: Exception) {

                                 ex.printStackTrace()

                                 LogUtil.d(

@@ -145,8 +179,10 @@
                                             + "exception=${CommonUtil.getExceptionStack(ex)}"

                                 )

                                 sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))

+                            } finally {

+                                clickStat = ClickStat.INIT

+                                lock.unlock()

                             }

-                            clickStat = ClickStat.INIT

                         }

                         ClickStat.INIT -> {

                             if (SPApplication.getInstance().isOnline() && !onlineBalance) {

@@ -180,18 +216,19 @@
             )

             if (resp != null && resp.retcode == HttpStatus.SC_OK) {

                 try {

-                    val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)

+                    val retBean =

+                        GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)

                     if (retBean.retcode == PublicDef.SUCCESS) {

                         cardBean!!.username = retBean.username

                         cardBean!!.userid = retBean.userid

                         cardBean!!.balance = retBean.balance

-                        when {

-                            "normal" == retBean.status -> cardBean!!.cardstatus = CardStatus.NORMAL

-                            "expire" == retBean.status -> cardBean!!.cardstatus = CardStatus.EXPIRE

-                            "lost" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOCK

-                            "logout" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOGOUT

-                            "frozen" == retBean.status -> cardBean!!.cardstatus = CardStatus.FROZEN

-                            "lock" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOST

+                        when (retBean.status) {

+                            "normal" -> cardBean!!.cardstatus = CardStatus.NORMAL

+                            "expire" -> cardBean!!.cardstatus = CardStatus.EXPIRE

+                            "lost" -> cardBean!!.cardstatus = CardStatus.LOCK

+                            "logout" -> cardBean!!.cardstatus = CardStatus.LOGOUT

+                            "frozen" -> cardBean!!.cardstatus = CardStatus.FROZEN

+                            "lock" -> cardBean!!.cardstatus = CardStatus.LOST

                         }

                     }

                 } catch (ex: Exception) {

@@ -207,22 +244,63 @@
                 screenSaverBean.operationTime = tt

                 screenSaverBean.operationFlag = true

             }

-            if (tt > screenSaverBean.operationTime &&

+            if (tt < screenSaverBean.operationTime ||

                 tt - screenSaverBean.operationTime > PublicDef.SCREEN_SAVER_GAP

             ) {

                 /**

                  * 连续半小时无操作屏保

                  */

                 screenSaverBean.operationTime = tt

-                screenSaverBean.flag = true

                 screenSaverBean.operationFlag = false

-                sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")

+                val screenCtl = pos.getControlPara(PublicDef.CONTROL_SCREEN_PROTECT)

+                if (screenCtl?.paraval != null && "1" == screenCtl.paraval) {

+                    screenSaverBean.flag = true

+                    sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")

+                }

+                val rebootCtl = pos.getControlPara(PublicDef.CONTROL_REBOOT_ENABLE)

+                if (rebootCtl?.paraval != null && "1" == rebootCtl.paraval) {

+                    val nowtime = DateUtil.getNowTimeNoFormat()

+                    /**

+                     * 凌晨1点-3点判断做设备重启

+                     */

+                    if (nowtime > "010000" && nowtime < "030000") {

+                        val ctlRecord = pos.getControlPara(PublicDef.CONTROL_REBOOT_DATE)

+                        val nowdate = DateUtil.getNowDateNoFormat()

+                        if (ctlRecord?.paraval == null || ctlRecord.paraval != nowdate) {

+                            LogUtil.i(TAG, "设备已自动重启")

+                            pos.replaceControlPara(ControlParaRecord().apply {

+                                this.paraname = PublicDef.CONTROL_REBOOT_DATE

+                                this.paraval = nowdate

+                            })

+                            CommonUtil.restartDevice(iConsumeView.getActivity())

+                        }

+                    }

+                }

             } else {

                 if (screenSaverBean.operationFlag && screenSaverBean.flag) {

                     screenSaverBean.flag = false

                     sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")

                 }

             }

+            if (SPApplication.getInstance().isSynoCodeActive()) {

+                if (tt < screenSaverBean.gcTime ||

+                    tt - screenSaverBean.gcTime > PublicDef.APP_GC_SYNO_PERIOD

+                ) {

+//                LogUtil.d(TAG, "app auto do gc!!!!!!!!!!!!")

+//                Log.e(TAG, "app auto do gc!!!!!!!!!!!!")

+                    screenSaverBean.gcTime = tt

+                    CommonUtil.GC()

+                }

+            } else {

+                if (tt < screenSaverBean.gcTime ||

+                    tt - screenSaverBean.gcTime > PublicDef.APP_GC_PERIOD

+                ) {

+//                LogUtil.d(TAG, "app auto do gc!!!!!!!!!!!!")

+//                Log.e(TAG, "app auto do gc!!!!!!!!!!!!")

+                    screenSaverBean.gcTime = tt

+                    CommonUtil.GC()

+                }

+            }

         }

 

         private fun showCardUserInfo() {

@@ -327,7 +405,10 @@
             }

         }

 

-        private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {

+        private fun checkOnlineReverseVaild(

+            unionRecord: TransdtlUnionRecord,

+            record: TransdtlOnlineRecord

+        ) {

             if (record.cardphyid != cardBean!!.cardphyid) {

                 throw CardPayCancelFailError("该卡不是最后消费")

             }

@@ -353,7 +434,10 @@
             }

         }

 

-        private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {

+        private fun checkOfflineReverseVaild(

+            unionRecord: TransdtlUnionRecord,

+            record: TransdtlOfflineRecord

+        ) {

             if (record.cardphyid != cardBean!!.cardphyid) {

                 throw CardPayCancelFailError("该卡不是最后消费")

             }

@@ -418,7 +502,10 @@
             /**

              * 手动取消交易

              */

-            LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")

+            LogUtil.e(

+                TAG,

+                "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]"

+            )

             throw CardPayInterruptError("交易取消")

         }

 

@@ -526,7 +613,8 @@
             }

 

             val whiteRecord =

-                pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")

+                pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!)

+                    ?: throw CardPayFailError("卡无权限")

             when (whiteRecord.status) {

                 "normal" -> {

 

@@ -539,7 +627,11 @@
                 else -> throw CardPayFailError("卡状态:${whiteRecord.status}")

             }

 

-            val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)

+            val payamt = pos.getTransdtlOfflineAmt(

+                offRecord.transdate!!,

+                offRecord.cardno!!,

+                offRecord.cardphyid!!

+            )

             if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {

                 throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))

             }

diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index c3a16c7..fc78d1c 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -68,6 +68,18 @@
         } else {

             kvMap[index++] = ControlParaRecord("晟元扫码>>", "关闭")

         }

+        var ctl = pos.getControlPara(PublicDef.CONTROL_REBOOT_ENABLE)

+        if (ctl?.paraval == "1") {

+            kvMap[index++] = ControlParaRecord("凌晨重启>>", "开启")

+        } else {

+            kvMap[index++] = ControlParaRecord("凌晨重启>>", "关闭")

+        }

+        ctl = pos.getControlPara(PublicDef.CONTROL_SCREEN_PROTECT)

+        if (ctl?.paraval == "1") {

+            kvMap[index++] = ControlParaRecord("设备屏保>>", "开启")

+        } else {

+            kvMap[index++] = ControlParaRecord("设备屏保>>", "关闭")

+        }

         kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")

         kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")

         kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())

diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index dec3a26..da6eee5 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -115,6 +115,28 @@
                 "max_day_offline_amt" -> record.maxDayOfflineAmt = it.paraval!!.toInt()

                 "communicate_time" -> record.commTime = it.paraval!!.toInt()

                 "syno_code" -> record.synoCode = it.paraval == "1"

+                "reboot_enable" -> {

+                    /**

+                     * 设备凌晨自重启 1--开启

+                     */

+                    pos.replaceControlPara(

+                        ControlParaRecord(

+                            PublicDef.CONTROL_REBOOT_ENABLE,

+                            it.paraval ?: "0"

+                        )

+                    )

+                }

+                "screen_protect" -> {

+                    /**

+                     * 设备长时间待机时屏保 1--开启

+                     */

+                    pos.replaceControlPara(

+                        ControlParaRecord(

+                            PublicDef.CONTROL_SCREEN_PROTECT,

+                            it.paraval ?: "0"

+                        )

+                    )

+                }

             }

         }

         if (record.heatBeat == 0) {

diff --git a/app/src/main/java/com/supwisdom/service/SynoCodeService.kt b/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
index c39bb27..4eae1ef 100644
--- a/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
+++ b/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
@@ -33,7 +33,7 @@
         val posid = CommonUtil.getSerialNumber()

         var resp = getRegisterStatus(posid) ?: return BaseResp(PublicDef.ERROR, "获取设备注册状态超时")

         if (resp.retcode != HttpURLConnection.HTTP_OK) {

-            return BaseResp(resp.retcode, resp.retmsg)

+            return BaseResp(resp.retcode, "获取注册状态失败:${resp.retcode},${resp.retmsg}")

         }

         val registerStatusRetBean =

             GsonUtil.GsonToBean(resp.retjson!!, EpaySynoRegisterStatusRetBean::class.java)

@@ -42,7 +42,7 @@
                 resp = registerDevice(posid, PublicDef.SCHOOL_NO)

                     ?: return BaseResp(PublicDef.ERROR, "注册设备超时")

                 if (resp.retcode != HttpURLConnection.HTTP_OK) {

-                    return BaseResp(resp.retcode, resp.retmsg)

+                    return BaseResp(resp.retcode, "注册失败:${resp.retcode},${resp.retmsg}")

                 }

                 return BaseResp(PublicDef.ERROR, "等待后台授权")

             }

@@ -53,7 +53,7 @@
             "activated" -> {

                 resp = getActiveStatus(posid) ?: return BaseResp(PublicDef.ERROR, "下载激活文件超时")

                 if (resp.retcode != HttpURLConnection.HTTP_OK) {

-                    return BaseResp(resp.retcode, resp.retmsg)

+                    return BaseResp(resp.retcode, "下载激活文件失败:${resp.retcode},${resp.retmsg}")

                 }

                 val activeRetBean =

                     GsonUtil.GsonToBean(resp.retjson!!, EpaySynoActiveRetBean::class.java)

@@ -85,7 +85,7 @@
         val resp = activeDevice(CommonUtil.getSerialNumber(), UrlBase64.encode(licenseByte))

             ?: return BaseResp(PublicDef.ERROR, "上传激活文件超时")

         if (resp.retcode != HttpURLConnection.HTTP_OK) {

-            return BaseResp(PublicDef.ERROR, resp.retmsg)

+            return BaseResp(PublicDef.ERROR, "上传激活文件失败:${resp.retcode},${resp.retmsg}")

         }

         return BaseResp(PublicDef.SUCCESS, "上传激活文件成功")

     }

diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 119217b..0e7cc2e 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -12,10 +12,12 @@
 import android.net.Uri

 import android.os.Build

 import android.os.PowerManager

+import android.os.Process

 import android.provider.Settings

 import android.view.WindowManager

 import android.widget.EditText

 import com.supwisdom.activities.SPApplication

+import com.supwisdom.activities.splash.SplashActivity

 import okhttp3.internal.and

 import java.io.File

 import java.io.FileOutputStream

@@ -311,4 +313,33 @@
         }

         return ""

     }

+

+    /**

+     * 手动GC

+     */

+    fun GC() {

+        Runtime.getRuntime().gc()

+    }

+

+    /**

+     * 重启整个APP

+     *

+     * @param context

+     */

+    fun restartAPP(context: Context) {

+//        val intent = Intent(context, SplashActivity::class.java)

+//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

+//        context.startActivity(intent)

+//        Process.killProcess(Process.myPid())

+    }

+

+    /**

+     * 重启设备

+     *

+     * @param context

+     */

+    fun restartDevice(context: Context) {

+        val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager

+        pm.reboot(null)

+    }

 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index 0430400..c8a358d 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -16,6 +16,7 @@
     private val FORMAT_yyMMddHHmmss2 =

         org.apache.commons.lang3.time.FastDateFormat.getInstance("yy-MM-dd HH:mm:ss")

     private val FORMAT_HHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HHmmss")

+    private val FORMAT_HHmm = org.apache.commons.lang3.time.FastDateFormat.getInstance("HHmm")

     private val FORMAT_MMdd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MMdd")

     private val FORMAT_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MM-dd")

     private val FORMAT_yyyyMMddHHmmss =

@@ -111,16 +112,15 @@
         }

     }

 

+    fun getTimeHHmm(): String {

+        return FORMAT_HHmm.format(Date())

+    }

+

     /**

      * @return MM-dd

      */

     fun getDate_MMdd(): String? {

-        try {

-            return FORMAT_MM_dd.format(Date())

-        } catch (e: Exception) {

-            e.printStackTrace()

-        }

-        return null

+        return FORMAT_MM_dd.format(Date())

     }

 

     /**

@@ -149,12 +149,7 @@
      * @return

      */

     fun getNowDateTime(dateStr: String): Date? {

-        try {

-            return FORMAT_yyyy_MM_dd.parse(dateStr)

-        } catch (e: ParseException) {

-            e.printStackTrace()

-        }

-        return null

+        return FORMAT_yyyy_MM_dd.parse(dateStr)

     }

 

     /**

@@ -206,12 +201,7 @@
      * @return yyyyMMdd

      */

     fun getNowDateNoFormat(date: Date): String? {

-        try {

-            return FORMAT_yyyyMMdd.format(date)

-        } catch (e: Exception) {

-            e.printStackTrace()

-        }

-        return null

+        return FORMAT_yyyyMMdd.format(date)

     }

 

     /**

diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 2ddbf96..9a6db16 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -82,6 +82,9 @@
 

     const val CODE_SAME_FORBID_TIME: Long = 10 * 1000

     const val CAMERA_FIX_PAY_PERIOD: Long = 30 * 60 * 1000

+    const val APP_GC_PERIOD: Long = 10 * 60 * 1000

+    const val APP_GC_SYNO_PERIOD: Long = 6 * 60 * 60 * 1000

+    const val APP_REBOOT_GAP: Long = 500

 

     /**

      * 本地全局控制参数

@@ -90,7 +93,9 @@
     const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"

     const val CONTROL_DEBUG_ENABLE = "debugenable"

     const val CONTROL_SYNOCODE_ACTIVE = "synocodeactive"

-

+    const val CONTROL_REBOOT_ENABLE = "rebootenable"

+    const val CONTROL_REBOOT_DATE = "rebootdate"

+    const val CONTROL_SCREEN_PROTECT = "screenprotect"

     /**

      * 消费冲正时限

      */

diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index 4566945..874260e 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -41,6 +41,7 @@
     private val waitTime = 60
     private var syPreview: Preview? = null
     private var payQueryConfirm = false
+    private var appreboottime: Long = 0
     var codePayingNoCancelEnable = false
     var codePaying = false
     var isFixPay = false
@@ -171,6 +172,17 @@
 
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {
         if (event.action == KeyEvent.ACTION_DOWN) {
+            if (event.keyCode == KeyEvent.KEYCODE_DPAD_UP) {
+                //F2 连续按重启app
+                val tt = System.currentTimeMillis()
+                if (tt - appreboottime < PublicDef.APP_REBOOT_GAP) {
+                    LogUtil.i(TAG, "设备双击F2,支付界面重启APP!!")
+                    CommonUtil.restartAPP(context)
+                } else {
+                    appreboottime = tt
+                }
+                return super.dispatchKeyEvent(event)
+            }
             if (codePayingNoCancelEnable) {
                 return super.dispatchKeyEvent(event)
             }