半小时屏保
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ed48cb0..bf5d0b9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,10 +33,6 @@
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
 
-    <!--写时钟权限-->
-    <uses-permission
-            android:name="android.permission.WRITE_SETTINGS"
-            serviceandroid:ignore="ProtectedPermissions"/>
     <uses-permission
             android:name="android.permission.WRITE_SECURE_SETTINGS"
             serviceandroid:ignore="ProtectedPermissions"/>
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 0e959eb..3a336af 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -173,6 +173,7 @@
     @SuppressLint("SetTextI18n")
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {
         if (event.action == KeyEvent.ACTION_DOWN) {
+            presenter.resetOperationTime()
             when (payMode) {
                 PayMode.FIXPAY -> fixInputPay(event.keyCode)
                 PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)
@@ -305,6 +306,14 @@
         }
     }
 
+    override fun screenSaver(flag: Boolean) {
+        if (flag) {
+            CommonUtil.setAppBrightness(this, PublicDef.SCREEN_SAVER_BRIGHTNESS)
+        } else {
+            CommonUtil.setAppBrightness(this, PublicDef.SCREEN_NORMAL_BRIGHTNESS)
+        }
+    }
+
     private var lastshowtime: String? = null
     override fun clearUserInfo(datetime: String) {
         if (!isBackRunning) {
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
index 6c5d277..4c8340c 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -44,23 +44,24 @@
                     PublicDef.MSG_CARD_PAY_QUERY -> iConsumeView.showConsumeQuery(msg.obj as String)
                     PublicDef.MSG_CARD_PAY_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "pay fail,reason=$ret")
                         iConsumeView.showConsumeFail(ret)
                     }
                     PublicDef.MSG_PAYING_INTERRUPT -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "pay interrupt,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "pay interrupt,reason=$ret")
                         iConsumeView.showConsumeInterrupt(ret)
                     }
                     PublicDef.MSG_CARD_REVERSE_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "reverse fail,reason=$ret")
                         iConsumeView.showReverseFail(msg.obj as CardUserInfoBean)
                     }
                     PublicDef.MSG_CARD_REVERSE_SUC -> iConsumeView.showReverseSuc(msg.obj as CardUserInfoBean)
                     PublicDef.MSG_USER_INFO_SHOW -> iConsumeView.showUserInfo(msg.obj as CardUserInfoBean)
                     PublicDef.MSG_USER_INFO_CLEAR -> iConsumeView.clearUserInfo(msg.obj as String)
                     PublicDef.MSG_LINK_STATUS -> iConsumeView.refreshLinkStatus(msg.obj as Boolean)
+                    PublicDef.MSG_SCREEN_SAVER -> iConsumeView.screenSaver((msg.obj as String) == "on")
                 }
             }
         }
@@ -90,6 +91,10 @@
         cardPayService.clickToInterrupt()
     }
 
+    fun resetOperationTime() {
+        cardPayService.resetOperationTime()
+    }
+
     fun setFixMode(isFixMode: Boolean) {
         cardPayService.isFixMode = isFixMode
         codePayService.isFixMode = isFixMode
diff --git a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
index 3ac4df7..3561af7 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -38,4 +38,6 @@
      * 是否正在刷卡支付
      */
     fun cardPayingStatus(isPaying: Boolean)
+
+    fun screenSaver(flag: Boolean)
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
index 047d57b..286b664 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
@@ -21,6 +21,10 @@
     var transdate: String? = null
     var transtime: String? = null
     var payway: String? = null //card,code
+
+    override fun toString(): String {
+        return "name=$username,cardno=$cardno,amount=$amount,payway=$payway,retcode=$retcode,retmsg=$retmsg"
+    }
 }
 
 enum class CardStatus(val desc: String) {
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
new file mode 100644
index 0000000..bcbf64e
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
@@ -0,0 +1,11 @@
+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 //是否屏保
+}
\ 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 b00585f..5266df9 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
@@ -39,7 +39,14 @@
     /**
      * 防止定额连续消费
      */
-    private var lastPayBean = LastPayBean()
+    private val lastPayBean = LastPayBean()
+    @Volatile
+    private var operation = false
+    private val screenSaverBean = ScreenSaverBean()
+
+    init {
+        screenSaverBean.operationTime = System.currentTimeMillis()
+    }
 
     fun start() {
         isExist = false
@@ -75,6 +82,10 @@
         payQueryConfirm = false
     }
 
+    fun resetOperationTime() {
+        operation = true
+    }
+
     private inner class CardPayRunnable : Runnable {
         private lateinit var onlRecord: TransdtlOnlineRecord
         private lateinit var onlRvsRecord: TransdtlOnlineRecord
@@ -89,9 +100,9 @@
         override fun run() {
             while (!isExist) {
                 iConsumeView.cardPayingStatus(false)
+                checkShowScreen()
                 if (iConsumeView.isBackRunning()) {
                     CommonUtil.doSleep(1000)
-                    doClear()
                     continue
                 }
                 CommonUtil.doSleep(100)
@@ -188,6 +199,31 @@
             }
         }
 
+        private fun checkShowScreen() {
+            val tt = System.currentTimeMillis()
+            if (operation) {
+                operation = false
+                screenSaverBean.operationTime = tt
+                screenSaverBean.operationFlag = true
+            }
+            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")
+            } else {
+                if (screenSaverBean.operationFlag && screenSaverBean.flag) {
+                    screenSaverBean.flag = false
+                    sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")
+                }
+            }
+        }
+
         private fun showCardUserInfo() {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
             if (cardBean!!.username != cardBean!!.cardNo) {
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 917f39c..253a752 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -5,6 +5,7 @@
 import android.annotation.SuppressLint
 import android.app.Activity
 import android.app.ActivityManager
+import android.content.ContentResolver
 import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
@@ -12,6 +13,7 @@
 import android.os.Build
 import android.os.PowerManager
 import android.provider.Settings
+import android.view.WindowManager
 import android.widget.EditText
 import com.supwisdom.activities.SPApplication
 import java.io.File
@@ -191,4 +193,95 @@
             else -> " "
         }
     }
+
+    /**
+     * @param activity
+     * @param brightness [1-255]
+     * @desc 根据亮度值修改当前window亮度
+     */
+    fun setAppBrightness(activity: Activity, brightness: Int) {
+        val window = activity.window
+        val lp = window.attributes
+        if (brightness == -1) {
+            if (lp.screenBrightness < 0) {
+                /**
+                 * 已经是正常亮度
+                 */
+                return
+            }
+            lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
+        } else {
+            if (lp.screenBrightness > 0) {
+                /**
+                 * 已经屏保亮度
+                 */
+                return
+            }
+//            stopAutoBrightness(activity)
+            lp.screenBrightness = (if (brightness <= 0) 1 else brightness) / 255f
+        }
+        window.attributes = lp
+        /**
+         * 生效?
+         */
+//        getActivityBrightness(activity)
+    }
+
+    /**
+     * 获取当前activity的屏幕亮度
+     *
+     * @param activity 当前的activity对象
+     * @return 亮度值范围为0-0.1f,如果为-1.0,则亮度与全局同步。
+     */
+    private fun getActivityBrightness(activity: Activity): Float {
+        val localWindow = activity.window
+        val params = localWindow.attributes
+        return params.screenBrightness
+    }
+
+    /**
+     * 判断是否开启了自动亮度调节
+     * *
+     * * @param aContext
+     * * @return
+     *      
+     */
+    private fun isAutoBrightness(aContentResolver: ContentResolver): Boolean {
+        try {
+            return Settings.System.getInt(
+                aContentResolver,
+                Settings.System.SCREEN_BRIGHTNESS_MODE
+            ) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+        } catch (e: Settings.SettingNotFoundException) {
+            e.printStackTrace()
+        }
+
+        return false
+    }
+
+    /**
+     * 停止自动亮度调节
+     *
+     * @param activity
+     */
+    private fun stopAutoBrightness(activity: Activity) {
+        Settings.System.putInt(
+            activity.contentResolver,
+            Settings.System.SCREEN_BRIGHTNESS_MODE,
+            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
+        )
+    }
+
+    /**
+     * 开启亮度自动调节
+     *
+     * @param activity
+     */
+    private fun startAutoBrightness(activity: Activity) {
+        Settings.System.putInt(
+            activity.contentResolver,
+            Settings.System.SCREEN_BRIGHTNESS_MODE,
+            Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+        )
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 140f9a8..18c7074 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -33,8 +33,15 @@
     const val MSG_LINK_STATUS = 19
     const val MSG_PAYING_QUERY = 20
     const val MSG_PAYING_INTERRUPT = 21
+    const val MSG_SCREEN_SAVER = 22
     /*************************不能重复*****************************/
     /**
+     * 屏保亮度
+     */
+    const val SCREEN_SAVER_BRIGHTNESS = 1
+    const val SCREEN_NORMAL_BRIGHTNESS = -1
+    const val SCREEN_SAVER_GAP: Long = 30 * 60 * 1000
+    /**
      * 卡消费标志(1 byte)
      */
     /*high 4 bit*/