init
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..3881173
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,72 @@
+plugins {
+    id 'com.gladed.androidgitversion' version '0.4.9'
+}
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+    compileSdkVersion 28
+    defaultConfig {
+        applicationId "com.supwisdom.posa711dali"
+        minSdkVersion 22
+        targetSdkVersion 28
+        versionCode 1
+        versionName "1.0"
+        ndk {
+            abiFilters "arm64-v8a"
+        }
+        multiDexEnabled true
+    }
+    signingConfigs {
+        release {
+            storeFile file("$rootDir/keys-app.jks")
+            storePassword "123456"
+            keyAlias "sup"
+            keyPassword "123456"
+        }
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility 1.8
+        targetCompatibility 1.8
+    }
+    packagingOptions {
+        exclude 'META-INF/DEPENDENCIES'
+        exclude 'META-INF/LICENSE'
+        exclude 'META-INF/LICENSE.txt'
+        exclude 'META-INF/license.txt'
+        exclude 'META-INF/NOTICE'
+        exclude 'META-INF/NOTICE.txt'
+        exclude 'META-INF/notice.txt'
+        exclude 'META-INF/ASL2.0'
+    }
+}
+
+dependencies {
+//    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+    implementation 'com.android.support:appcompat-v7:28.0.0'
+    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'com.android.support.test:runner:1.0.2'
+    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+
+    compile 'com.alibaba:fastjson:1.1.70.android'
+    compile 'com.nineoldandroids:parent:2.4.0'
+    compile 'com.squareup.okhttp3:okhttp:3.10.0'
+    compile 'net.java.dev.jna:jna:4.5.0@aar'
+    compile 'com.koushikdutta.async:androidasync:2.2.1'
+    compile group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
+    compile 'org.apache.commons:commons-lang3:3.7'
+    compile 'com.android.support:multidex:1.0.3'
+    compile 'org.jetbrains.kotlin:kotlin-reflect:1.3.41'
+    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
+    compile files('libs/apache-httpcomponents-httpcore.jar')
+    compile files('libs/zxinglibsl.jar')
+}
diff --git a/app/libs/apache-httpcomponents-httpcore.jar b/app/libs/apache-httpcomponents-httpcore.jar
new file mode 100644
index 0000000..a357c07
--- /dev/null
+++ b/app/libs/apache-httpcomponents-httpcore.jar
Binary files differ
diff --git a/app/libs/zxinglibsl.jar b/app/libs/zxinglibsl.jar
new file mode 100644
index 0000000..c645c93
--- /dev/null
+++ b/app/libs/zxinglibsl.jar
Binary files differ
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/com/supwisdom/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/supwisdom/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..2aff141
--- /dev/null
+++ b/app/src/androidTest/java/com/supwisdom/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.supwisdom
+
+import android.support.test.InstrumentationRegistry
+import android.support.test.runner.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+    @Test
+    fun useAppContext() {
+        // Context of the app under test.
+        val appContext = InstrumentationRegistry.getTargetContext()
+        assertEquals("com.supwisdom", appContext.packageName)
+    }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..6830380
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:serviceandroid="http://schemas.android.com/tools"
+          package="com.supwisdom"
+          android:sharedUserId="android.uid.system">
+
+    <uses-permission android:name="android.permission.VIBRATE"/>
+    <uses-permission
+            android:name="android.permission.WRITE_SETTINGS"
+            serviceandroid:ignore="ProtectedPermissions"/>
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+    <uses-permission
+            android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
+            serviceandroid:ignore="ProtectedPermissions"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.NFC"/>
+    <uses-permission android:name="android.permission.READ_PROFILE"/>
+    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/>
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
+    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
+    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+    <uses-permission android:name="android.permission.FLASHLIGHT"/>
+    <uses-permission android:name="android.permission.WEITE_EXTERNAL_STORAGE"/>
+    <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"/>
+
+    <uses-feature android:name="android.hardware.camera"/>
+    <uses-feature android:name="android.hardware.camera.autofocus"/>
+
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
+    <uses-permission
+            android:name="android.permission.READ_LOGS"
+            serviceandroid:ignore="ProtectedPermissions"/>
+
+    <application
+            android:name=".activities.SPApplication"
+            android:allowBackup="true"
+            android:icon="@drawable/app_logo"
+            android:label="@string/app_name"
+            android:persistent="false"
+            android:supportsRtl="true"
+            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
+        <activity
+                android:name=".activities.splash.SplashActivity"
+                android:launchMode="singleTask"
+                android:screenOrientation="portrait">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+
+                <!--<category android:name="android.intent.category.HOME" />-->
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"/>
+            </intent-filter>
+
+            <meta-data
+                    android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
+                    android:resource="@xml/device_filter"/>
+        </activity>
+
+        <service android:name=".activities.ServiceDemo">
+            <intent-filter>
+                <category android:name="android.intent.category.default"/>
+            </intent-filter>
+        </service>
+
+        <!--<activity-->
+        <!--android:name=".activities.consume.WaitActivity"-->
+        <!--android:label="@string/title_activity_consume"-->
+        <!--android:launchMode="singleInstance"/>-->
+
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
new file mode 100644
index 0000000..c400b57
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
@@ -0,0 +1,136 @@
+package com.supwisdom.activities
+
+import android.content.Context
+import android.content.pm.PackageManager
+import android.os.Build
+import android.os.Looper
+import com.supwisdom.dcpos.utils.CommonUtil
+import com.supwisdom.dcpos.view.ToastUtil
+import com.supwisdom.utils.AppExitUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.FileUtil
+import com.supwisdom.utils.ThreadPool
+import java.io.PrintWriter
+import java.io.StringWriter
+import java.util.HashMap
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+class CrashHandler : Thread.UncaughtExceptionHandler {
+    private var context: Context? = null
+    private var mDefaultHandler: Thread.UncaughtExceptionHandler? = null
+    private val info = HashMap<String, String>()
+
+    companion object {
+        private var INSTANCE: CrashHandler? = null
+
+        fun getInstance(): CrashHandler {
+            if (INSTANCE == null) {
+                synchronized(CrashHandler::class) {
+                    if (INSTANCE == null) {
+                        INSTANCE = CrashHandler()
+                    }
+                }
+            }
+            return INSTANCE!!
+        }
+    }
+
+    fun init(context: Context) {
+        this.context = context
+        // 获取系统默认的 UncaughtException 处理器
+        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler()
+        // 设置该 CrashHandler 为程序的默认处理器
+        Thread.setDefaultUncaughtExceptionHandler(this)
+    }
+
+    override fun uncaughtException(thread: Thread, ex: Throwable) {
+        if (!handleException(ex) && mDefaultHandler != null) {
+            // 如果自定义的没有处理则让系统默认的异常处理器来处理
+            mDefaultHandler!!.uncaughtException(thread, ex)
+        } else {
+            AppExitUtil.exit()
+        }
+    }
+
+    /**
+     * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
+     *
+     * @param ex 异常信息
+     * @return true 如果处理了该异常信息;否则返回false.
+     */
+    private fun handleException(ex: Throwable?): Boolean {
+//        CommonUtil.showBar(context!!)
+        ThreadPool.getShortPool().execute(Runnable {
+            CommonUtil.doSleep(500)
+            Looper.prepare()
+            ToastUtil.show(context!!, "很抱歉,程序运行异常")
+            Looper.loop()
+        })
+        if (ex == null) {
+            return false
+        }
+        // 收集设备参数信息
+        collectDeviceInfo()
+        // 保存日志文件
+        saveCrashInfo2File(ex)
+        return true
+    }
+
+    /**
+     * 收集设备参数信息
+     */
+
+    private fun collectDeviceInfo() {
+        try {
+            val pm = context!!.packageManager// 获得包管理器
+            val pi = pm.getPackageInfo(
+                context!!.packageName,
+                PackageManager.GET_ACTIVITIES
+            )// 得到该应用的信息,即主Activity
+            if (pi != null) {
+                info["versionName"] = pi.versionName ?: "null"
+                info["versionCode"] = pi.versionCode.toString()
+            }
+        } catch (e: PackageManager.NameNotFoundException) {
+            e.printStackTrace()
+        }
+
+        val fields = Build::class.java.declaredFields// 反射机制
+        for (field in fields) {
+            try {
+                field.isAccessible = true
+                info[field.name] = field.get("").toString()
+            } catch (e: IllegalArgumentException) {
+                e.printStackTrace()
+            } catch (e: IllegalAccessException) {
+                e.printStackTrace()
+            }
+        }
+    }
+
+    private fun saveCrashInfo2File(ex: Throwable): Boolean {
+        val sb = StringBuffer()
+        sb.append("\r\n crash time :").append(DateUtil.getNowTime()).append("\r\n")
+        for ((key, value) in info) {
+            sb.append("$key=$value\r\n")
+        }
+        val writer = StringWriter()
+        val pw = PrintWriter(writer)
+        ex.printStackTrace(pw)
+        var cause: Throwable? = ex.cause
+        // 循环着把所有的异常信息写入writer中
+        while (cause != null) {
+            cause.printStackTrace(pw)
+            cause = cause.cause
+        }
+        pw.close()// 记得关闭
+        val result = writer.toString()
+        sb.append(result)
+        // 保存文件
+        FileUtil.writeCrashFile(sb.toString())
+        return true
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
new file mode 100644
index 0000000..06040ca
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.activities
+
+import android.support.multidex.MultiDexApplication
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+class SPApplication: MultiDexApplication() {
+    override fun onCreate() {
+        super.onCreate()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
new file mode 100644
index 0000000..c0bc6b1
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
@@ -0,0 +1,15 @@
+package com.supwisdom.activities
+
+import android.app.Service
+import android.content.Intent
+import android.os.IBinder
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+class ServiceDemo : Service() {
+    override fun onBind(intent: Intent): IBinder? {
+        return null
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/AppExitUtil.kt b/app/src/main/java/com/supwisdom/utils/AppExitUtil.kt
new file mode 100644
index 0000000..d9f3f3a
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/AppExitUtil.kt
@@ -0,0 +1,53 @@
+package com.supwisdom.utils
+
+import android.app.Activity
+import java.util.*
+
+/**
+ * @author zzq
+ * @date 2018/3/20.
+ * @version 1.0.1
+ * @desc : activity管理
+ */
+object AppExitUtil {
+    private val acys = HashSet<Activity>()
+
+    fun add(acy: Activity) {
+        acys.add(acy)
+    }
+
+    fun remove(acy: Activity) {
+        acys.remove(acy)
+        if (!acy.isFinishing) {
+            acy.finish()
+        }
+        if (acys.size == 0) {
+            killprocess()
+        }
+    }
+
+    fun exit() {
+        val iter = acys.iterator()
+        val arrs = arrayOfNulls<Activity>(acys.size)
+        var i = 0
+        while (iter.hasNext()) {
+            arrs[i] = iter.next()
+            i += 1
+        }
+        acys.clear()
+        for (j in arrs.indices) {
+            if (arrs[j] != null && !arrs[j]!!.isFinishing) {
+                arrs[j]!!.finish()
+                arrs[j] = null
+            }
+        }
+        killprocess()
+    }
+
+    private fun killprocess() {
+        ThreadPool.getShortPool().execute(Runnable {
+            CommonUtil.doSleep(2000)
+            android.os.Process.killProcess(android.os.Process.myPid())
+        })
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
new file mode 100644
index 0000000..2f3e62b
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -0,0 +1,117 @@
+@file:Suppress("DEPRECATION")
+
+package com.supwisdom.utils
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.os.Build
+import android.os.PowerManager
+import android.provider.Settings
+import java.io.File
+import java.io.FileOutputStream
+
+/**
+ * @author zzq
+ * @date 2018/5/9.
+ * @version 1.0.1
+ * @desc  公共类
+ */
+object CommonUtil {
+    fun doSleep(ms: Long) {
+        try {
+            Thread.sleep(ms)
+        } catch (e: InterruptedException) {
+            e.printStackTrace()
+        }
+    }
+
+    fun YuanToFen(yuan: Double): Int {
+        return Math.round(yuan * 100).toInt()
+    }
+
+    fun upgrade(context: Context, filename: String) {
+        val intent = Intent(Intent.ACTION_VIEW)
+        val uri = Uri.fromFile(File(filename))
+        intent.setDataAndType(uri, "application/vnd.android.package-archive")
+        (context as Activity).startActivityForResult(intent, 0)
+    }
+
+    /*优化a811扫码*/
+    fun writeLinnuuxParams() {
+        try {
+            val fos = FileOutputStream("/sys/module/gc0308/parameters/exposure")
+            fos.write("20".toByteArray())
+            fos.close()
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+    }
+
+    /**
+     * get App versionName
+     *
+     * @param context
+     * @return
+     */
+    fun getVersionName(context: Context): String {
+        try {
+            val packageManager = context.packageManager
+            val packageInfo = packageManager.getPackageInfo(context.packageName, 0)
+            return packageInfo.versionName
+        } catch (e: PackageManager.NameNotFoundException) {
+            e.printStackTrace()
+            return "error:" + e.message
+        }
+
+    }
+
+    /**
+     * 跳转网络设置页;
+     */
+    fun startNetSetting(context: Context) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            context.startActivity(Intent(Settings.ACTION_SETTINGS))
+        } else {
+            context.startActivity(Intent(Settings.ACTION_WIRELESS_SETTINGS))
+        }
+    }
+
+    /**
+     * 唤醒屏幕
+     */
+    fun acquireWakeLock(context: Context) {
+        /*FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
+          ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
+          ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间*/
+        try {
+            val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+            @SuppressLint("InvalidWakeLockTag") val wakeLock = pm.newWakeLock(
+                PowerManager.ON_AFTER_RELEASE
+                        or PowerManager.ACQUIRE_CAUSES_WAKEUP
+                        or PowerManager.FULL_WAKE_LOCK, "Tag"
+            )
+            wakeLock.acquire()
+            wakeLock.release()
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+
+    }
+
+    fun getPasswordStar(len: Int): String {
+        return when (len) {
+            0 -> " "
+            1 -> "*"
+            2 -> "**"
+            3 -> "***"
+            4 -> "****"
+            5 -> "*****"
+            6 -> "******"
+            else -> " "
+        }
+    }
+}
\ 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
new file mode 100644
index 0000000..8354b4a
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -0,0 +1,481 @@
+package com.supwisdom.utils
+
+import java.text.ParseException
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+object DateUtil {
+    private val FORMAT_yyyyMMdd = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMdd")
+    private val FORMAT_yyMMddHHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyMMddHHmmss")
+    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_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 = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmmss")
+    private val FORMAT_yyyyMMddHHmm = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmm")
+    private val FORMAT_MMddHHmmyy = org.apache.commons.lang3.time.FastDateFormat.getInstance("MMddHHmmyy")
+    private val FORMAT_yyyy_MM_dd_HH_mm_ss =
+        org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss")
+    private val FORMAT_yyyy_MM_dd_HH_mm_ss_SSS =
+        org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss.SSS")
+    private val FORMAT_HH_mm_ss_SSS = org.apache.commons.lang3.time.FastDateFormat.getInstance("HHmmssSSS")
+    private val FORMAT_yyyy_MM_dd_HH_mm = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm")
+    private val FORMAT_yyyy_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd")
+    private val FORMAT_HH_mm_ss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm:ss")
+    private val FORMAT_HH_mm = org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm")
+
+    /**
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    fun getNow(): String {
+        return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
+    }
+
+    /**
+     * @return yyyy-MM-dd HH:mm:ss.SSS
+     */
+    fun getNow5(): String {
+        return FORMAT_yyyy_MM_dd_HH_mm_ss_SSS.format(Date())
+    }
+
+    /**
+     * @return yyyy-MM-dd HH:mm
+     */
+    fun getNow4(): String {
+        return FORMAT_yyyy_MM_dd_HH_mm.format(Date())
+    }
+
+    /**
+     * @return yyMMddHHmmss
+     */
+    fun getNow2(): String {
+        return FORMAT_yyMMddHHmmss.format(Date())
+    }
+
+    /**
+     * @param dateTime yyyyMMddHHmmss
+     * @return yyyyMMdd.HHmmss
+     */
+    fun getNow4(dateTime: String): String? {
+        try {
+            val str1 = dateTime.substring(0, 8)
+            val str2 = dateTime.substring(8)
+            return "$str1.$str2"
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @return yy-MM-dd HH:mm:ss
+     */
+    fun getNow3(): String {
+        return FORMAT_yyMMddHHmmss2.format(Date())
+    }
+
+    /**
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    fun getDateTimeFormat(date: Date): String {
+        return FORMAT_yyyy_MM_dd_HH_mm_ss.format(date)
+    }
+
+    /**
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    fun getDateTimeFormat(timeInMillis: Long?): String {
+        return FORMAT_yyyy_MM_dd_HH_mm_ss.format(timeInMillis)
+    }
+
+    /**
+     * @param datetime yyyyMMddHHmmss
+     * @return yyyy-MM-dd HH:mm:ss
+     */
+    fun getNowDatetimeFromNoFormat(datetime: String): String {
+        try {
+            return datetime.substring(0, 4) + "-" +
+                    datetime.substring(4, 6) + "-" +
+                    datetime.substring(6, 8) + " " +
+                    datetime.substring(8, 10) + ":" +
+                    datetime.substring(10, 12) + ":" +
+                    datetime.substring(12)
+        } catch (ex: Exception) {
+        }
+        return ""
+    }
+
+    /**
+     * @param datetime yyyyMMddHHmm
+     * @return yyyy-MM-dd HH:mm
+     */
+    fun getNowDatetimeFromNoFormat3(datetime: String): String {
+        try {
+            return datetime.substring(0, 4) + "-" +
+                    datetime.substring(4, 6) + "-" +
+                    datetime.substring(6, 8) + " " +
+                    datetime.substring(8, 10) + ":" +
+                    datetime.substring(10)
+        } catch (ex: Exception) {
+        }
+        return ""
+    }
+
+    /**
+     * @param datetime yyyyMMddHHmmss
+     * @return yy-MM-dd HH:mm:ss
+     */
+    fun getNowDatetimeFromNoFormat2(datetime: String): String {
+        try {
+            return datetime.substring(2, 4) + "-" +
+                    datetime.substring(4, 6) + "-" +
+                    datetime.substring(6, 8) + " " +
+                    datetime.substring(8, 10) + ":" +
+                    datetime.substring(10, 12) + ":" +
+                    datetime.substring(12)
+        } catch (ex: Exception) {
+        }
+        return ""
+    }
+
+    /**
+     * @param date yyyyMMdd
+     * @return yyyy-MM-dd
+     */
+    fun getNowDateFromNoFormat(date: String): String {
+        try {
+            return date.substring(0, 4) + "-" +
+                    date.substring(4, 6) + "-" +
+                    date.substring(6, 8)
+        } catch (ex: Exception) {
+        }
+        return ""
+    }
+
+    /**
+     * @param date yyyy-MM-dd HH:mm:ss
+     * @return yyyyMMddHHmmss
+     */
+    fun getNowDateFromNoFormat2(date: String): String {
+        return date.replace("-", "")
+            .replace(" ", "")
+            .replace(":", "")
+    }
+
+
+    /**
+     * @return HH:mm:ss
+     */
+    fun getNowTimeWithArg(date: Date): String? {
+        try {
+            return FORMAT_HH_mm_ss.format(date)
+        } catch (e: Exception) {
+            return null
+        }
+    }
+
+    /**
+     * @param time HHmm
+     * @return HH:mm
+     */
+    fun formatTime(time: String): String {
+        try {
+            val sb = StringBuilder()
+            sb.append(time.substring(0, 2)).append(":")
+                .append(time.substring(2, 4))
+            return sb.toString()
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return ""
+    }
+
+    /**
+     * @return MMdd
+     */
+    fun getDateMMdd(): String? {
+        try {
+            return FORMAT_MMdd.format(Date())
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @return MM-dd
+     */
+    fun getDate_MMdd(): String? {
+        try {
+            return FORMAT_MM_dd.format(Date())
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @return yyyy-MM-dd
+     */
+    fun getNowDate(): String {
+        return FORMAT_yyyy_MM_dd.format(Date())
+    }
+
+    /**
+     * @return yyyy-MM-dd
+     */
+    fun getNowDate2(date: Date): String? {
+        try {
+            return FORMAT_yyyy_MM_dd.format(date)
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @param dateStr yyyy-MM-dd
+     * @return
+     */
+    fun getNowDate(dateStr: String): Date? {
+        try {
+            return FORMAT_yyyy_MM_dd.parse(dateStr)
+        } catch (e: ParseException) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @return HHmmssSSS
+     */
+    fun getNowTime1(): String {
+        return FORMAT_HH_mm_ss_SSS.format(Date())
+    }
+
+    /**
+     * @return HH:mm:ss
+     */
+    fun getNowTime(): String {
+        return FORMAT_HH_mm_ss.format(Date())
+    }
+
+    /**
+     * @return format
+     */
+    fun getDayofWeek(offsetWeek: Int, dayOfWeek: Int, format: String): String {
+        val cal = Calendar.getInstance()
+        // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推
+        val retday: String
+        cal.add(Calendar.DATE, offsetWeek * 7)
+        cal.set(Calendar.DAY_OF_WEEK, dayOfWeek)
+        retday = org.apache.commons.lang3.time.FastDateFormat.getInstance(format).format(cal.time)
+        return retday
+    }
+
+    /**
+     * 计算超时时间,精确到毫秒
+     *
+     * @param milliSeconds
+     * @return L
+     */
+    fun getExpireTime(milliSeconds: Long): Long {
+        return Date().time + milliSeconds
+    }
+
+    /**
+     * @return yyyyMMddHHmmss
+     */
+    fun getNowDateTimeNoFormat(): String {
+        return FORMAT_yyyyMMddHHmmss.format(Date())
+    }
+
+    /**
+     * @return yyyyMMdd
+     */
+    fun getNowDateNoFormat(): String {
+        return FORMAT_yyyyMMdd.format(Date())
+    }
+
+    /**
+     * @param date
+     * @return yyyyMMdd
+     */
+    fun getNowDateNoFormat(date: Date): String? {
+        try {
+            return FORMAT_yyyyMMdd.format(date)
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+        return null
+    }
+
+    /**
+     * @return HHmmss
+     */
+    fun getNowTimeNoFormat(): String {
+        return FORMAT_HHmmss.format(Date())
+    }
+
+    /**
+     * @param datetime yyyyMMddHHmmss
+     * @return ms
+     * @desc 将日期格式的字符串转换为长整型
+     */
+    fun dateFormatConvertToLong(datetime: String): Long {
+        try {
+            return FORMAT_yyyyMMddHHmmss.parse(datetime).time
+        } catch (ex: ParseException) {
+            return 0L
+        }
+    }
+
+    /**
+     * @param time ms
+     * @return yyyyMMddHHmmss
+     * @desc 将长整型数字转换为日期格式的字符串
+     */
+    fun dateLongConvertToFormat(time: Long): String {
+        return if (time > 0L) {
+            FORMAT_yyyyMMddHHmmss.format(Date(time))
+        } else ""
+    }
+
+    /**
+     * @param time ms
+     * @return MMddHHmmyy
+     * @desc 将长整型数字转换为日期格式的字符串
+     */
+    fun dateLongConvertToFormat2(time: Long): String {
+        return if (time > 0L) {
+            FORMAT_MMddHHmmyy.format(Date(time))
+        } else ""
+    }
+
+    /**
+     * @param datetime yyyy-MM-dd HH:mm:ss
+     * @return
+     * @desc 将日期格式的字符串转换为长整型
+     */
+    fun dateFormatConvertToDate(datetime: String): Date? {
+        try {
+            return FORMAT_yyyy_MM_dd_HH_mm_ss.parse(datetime)
+        } catch (ex: ParseException) {
+            return null
+        }
+    }
+
+    /**
+     * @param daynum 天数
+     * @return 返回当前日期的第 daynum 天前的日期  yyyyMMdd
+     */
+    fun getDayDateNoFormatBefore(daynum: Int): String {
+        val calendar = Calendar.getInstance()
+        calendar.add(Calendar.DATE, -daynum)
+        return FORMAT_yyyyMMdd.format(calendar.time)
+    }
+
+    /**
+     * 获得指定日期的前一天
+     *
+     * @param specifiedDay yyyyMMdd
+     * @return yyyyMMdd
+     */
+    fun getSpecifiedDayBefore(specifiedDay: String): String {
+        try {
+            val c = Calendar.getInstance()
+            val date = FORMAT_yyyyMMdd.parse(specifiedDay)
+            c.time = date
+            val day = c.get(Calendar.DATE)
+            c.set(Calendar.DATE, day - 1)
+            return FORMAT_yyyyMMdd.format(c.time)
+        } catch (e: ParseException) {
+            return ""
+        }
+    }
+
+    /**
+     * 获得指定日期的前一天
+     *
+     * @param dayBefore 往前推迟的天数
+     * @return Date
+     */
+    fun getSomeDayBefore(dayBefore: Int): Date {
+        val c = Calendar.getInstance()
+        c.add(Calendar.DAY_OF_MONTH, -dayBefore)
+        return c.time
+    }
+
+    /**
+     * 获得指定日期的后一天
+     *
+     * @param specifiedDay yyyyMMdd
+     * @return yyyyMMdd
+     */
+    fun getSpecifiedDayAfter(specifiedDay: String): String {
+        try {
+            val c = Calendar.getInstance()
+            val date = FORMAT_yyyyMMdd.parse(specifiedDay)
+            c.time = date
+            val day = c.get(Calendar.DATE)
+            c.set(Calendar.DATE, day + 1)
+            return FORMAT_yyyyMMdd.format(c.time)
+        } catch (e: ParseException) {
+            return ""
+        }
+    }
+
+    /**
+     * 获得指定日期的后一天
+     *
+     * @param specifiedDay yyyy-MM-dd
+     * @return yyyy-MM-dd
+     */
+    fun getSpecifiedDayAfter1(specifiedDay: String): String {
+        try {
+            val c = Calendar.getInstance()
+            val date = FORMAT_yyyy_MM_dd.parse(specifiedDay)
+            c.time = date
+            val day = c.get(Calendar.DATE)
+            c.set(Calendar.DATE, day + 1)
+            return FORMAT_yyyy_MM_dd.format(c.time)
+        } catch (e: ParseException) {
+            return ""
+        }
+    }
+
+    /**
+     * 分钟转化为未来时间yyyyMMddHHmm
+     *
+     * @param minute 分钟数
+     * @return yyyyMMddHHmm
+     */
+    fun format2FutureTime(minute: Int): String {
+        val calendar = Calendar.getInstance()
+        calendar.add(Calendar.MINUTE, minute)
+        return FORMAT_yyyyMMddHHmm.format(calendar.time)
+    }
+
+    /**
+     * @return yyyyMMddHHmm
+     */
+    fun getNowDateTimeFormat(): String {
+        return FORMAT_yyyyMMddHHmm.format(Date())
+    }
+
+    /**
+     * @param datetime yyyyMMddHHmm
+     * @return 毫秒数
+     */
+    fun formatDateTime(datetime: String): Long {
+        try {
+            return FORMAT_yyyyMMddHHmm.parse(datetime).time
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+        return 0
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/FileUtil.kt b/app/src/main/java/com/supwisdom/utils/FileUtil.kt
new file mode 100644
index 0000000..bf18ee0
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/FileUtil.kt
@@ -0,0 +1,142 @@
+package com.supwisdom.utils
+
+import android.os.Environment
+import java.io.*
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+object FileUtil {
+    private val ROOT_DIR = "/YueXiao/pos/"
+    private val ROOT_PRIVATE_DIR = "/supwisdom/"
+    private val CACHE_FILE_DIR = ROOT_DIR + "cache/"
+    private val CRASH_FILE_DIR = ROOT_DIR + "crash/"
+    private val CRASH_FILE_PRE = "crash-"
+    private val LOG_FILE_DIR = ROOT_DIR + "log/"
+    private val LOG_FILE_PRE = "log-"
+    private val DTL_FILE_DIR = ROOT_DIR + "dtl/"
+    private val DTL_FILE_PRE = "dtl-"
+
+    fun getUpdateFile(fileName: String): File? {
+        return createFile(CACHE_FILE_DIR, fileName)
+    }
+
+    fun getCfgFile(fileName: String): File? {
+        return createFile(ROOT_PRIVATE_DIR, fileName)
+    }
+
+    fun getCfgFileStream(fileName: String): InputStream? {
+        if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+            val rootFile = File(Environment.getExternalStorageDirectory().toString() + ROOT_PRIVATE_DIR)
+            if (!rootFile.exists()) {
+                return null
+            }
+            val retFile = File(rootFile, fileName)
+            if (retFile.exists()) {
+                try {
+                    return FileInputStream(retFile)
+                } catch (e: FileNotFoundException) {
+                    e.printStackTrace()
+                }
+
+            }
+        }
+        return null
+    }
+
+    fun removeDtlFile(beforeday: Int) {
+        removeFile(DTL_FILE_DIR, DTL_FILE_PRE, beforeday)
+    }
+
+    fun removeLogFile(beforeday: Int) {
+        removeFile(LOG_FILE_DIR, LOG_FILE_PRE, beforeday)
+    }
+
+    fun removeCrashFile(beforeday: Int) {
+        removeFile(CRASH_FILE_DIR, CRASH_FILE_PRE, beforeday)
+    }
+
+
+    fun writeDtlFile(msg: String) {
+        val pathfile = DTL_FILE_DIR + DTL_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+        writeFile(pathfile, msg, true)
+    }
+
+    fun writeCrashFile(msg: String) {
+        val pathfile = CRASH_FILE_DIR + CRASH_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+        writeFile(pathfile, msg, true)
+    }
+
+    fun writeLogFile(msg: String) {
+        val pathfile = LOG_FILE_DIR + LOG_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+        writeFile(pathfile, msg, true)
+    }
+
+    private fun writeFile(targetPath: String, msg: String, append: Boolean) {
+        if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+            val targetFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
+            if (!targetFile.parentFile.exists()) {
+                targetFile.parentFile.mkdirs()
+            }
+            try {
+                val osw = OutputStreamWriter(
+                    FileOutputStream(targetFile, append), "utf-8"
+                )
+                try {
+                    osw.write(msg)
+                    osw.write("</br>\n")
+                    osw.flush()
+                    osw.close()
+                } catch (e: IOException) {
+                    e.printStackTrace()
+                }
+
+            } catch (e1: UnsupportedEncodingException) {
+                e1.printStackTrace()
+            } catch (e1: FileNotFoundException) {
+                e1.printStackTrace()
+            }
+
+        }
+    }
+
+    private fun removeFile(targetPath: String, prefile: String, beforeday: Int) {
+        if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+            val rootFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
+            if (!rootFile.exists()) {
+                return
+            }
+            val logname = prefile + DateUtil.getDayDateNoFormatBefore(beforeday) + ".txt"
+            val files = rootFile.listFiles()
+            for (file in files!!) {
+                val fullfilename = file.absolutePath
+                val filename = fullfilename.substring(fullfilename.lastIndexOf('/') + 1)
+                if (filename.startsWith(prefile) && filename.endsWith(".txt")) {
+                    if (filename.compareTo(logname) < 0) {
+                        file.delete()
+                    }
+                }
+            }
+        }
+    }
+
+    private fun createFile(path: String, fileName: String): File? {
+        if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+            val rootFile = File(Environment.getExternalStorageDirectory().toString() + path)
+            if (!rootFile.exists()) {
+                rootFile.mkdirs()
+            }
+            val retFile = File(rootFile, fileName)
+            if (!retFile.exists()) {
+                try {
+                    retFile.createNewFile()
+                } catch (e: IOException) {
+                    return null
+                }
+            }
+            return retFile
+        }
+        return null
+    }
+}
\ 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
new file mode 100644
index 0000000..372f8a7
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -0,0 +1,159 @@
+package com.supwisdom.utils
+
+/**
+ * @author zzq
+ * @date 2018/4/26.
+ * @version 1.0.1
+ * @desc  APP module常量定义
+ */
+object PublicDef {
+    /**
+     * 错误码
+     */
+    const val SUCCESS = 0
+    const val ERROR = 1
+    /**
+     * 商户默认密码 111111
+     * 维护默认密码 914387
+     */
+    const val PASSWD_SHOP_DEFAULT = "111111"
+    const val PASSWD_ADMIN_DEFAULT = "914387"
+
+    /**************************************************************/
+    /*************************handler 状态码***********************/
+    /*************************不能重复*****************************/
+    /**
+     * @desc 刷卡消费
+     */
+    const val MSG_CARD_USER_INFO_CLEAR = 10
+    const val MSG_CARD_USER_INFO_SHOW = 11
+    const val MSG_CARD_READ_AGAIN = 12
+    const val MSG_CARD_PASSWORD_CHECK = 13
+    const val MSG_CARD_PAY_SUCCESS = 14
+    const val MSG_CARD_PAY_FAIL = 15
+    const val MSG_CARD_PAYING_HINT = 16
+    const val MSG_CARD_REVERSE_SUCCESS = 17
+    const val MSG_CARD_REVERSE_FAIL = 18
+    const val MSG_HOME_CLEAR = 19
+
+    const val MSG_QRCODE_PASSWORD_CHECK = 20
+    const val MSG_QRCODE_PAY_SUCCESS = 21
+    const val MSG_QRCODE_PAY_FAIL = 22
+    const val MSG_QRCODE_REVERSE_SUCCESS = 23
+    const val MSG_QRCODE_REVERSE_FAIL = 24
+    const val MSG_QRCODE_PAYING_HINT = 25
+
+    const val MSG_GOODS_UPDATE = 26
+    const val MSG_LINK_STATUS_UPDATE = 27
+    const val MSG_PHONE_BILL_UPDATE = 28
+
+    const val MSG_ORDER_HISTORY_SHOW = 29
+    const val MSG_ORDER_PHONE_SHOW = 30
+    const val MSG_ORDER_WEIGH_WEIGHT = 31
+
+    const val MSG_ORDINARY_REFRESH_LASTORDER = 32
+    const val MSG_NO_CARD_PAY_SUCCESS = 33
+    const val MSG_PRINT_ERROR = 34
+    const val MSG_PRINT = 35
+
+    const val MSG_TAKE_NOTIFY_SUC = 45
+    const val MSG_TAKE_NOTIFY_FAIL = 46
+    /**
+     * dialog 创建类型
+     */
+    const val DIALOG_TYPE_PHONE_BILL_HINT = 3 //在线订单提醒弹窗
+    const val DIALOG_TYPE_ORDERX_HISTORY_BILL = 4 //服务器点餐模式历史订单
+    const val DIALOG_TYPE_NSD_CONFIG = 5 //NSD 参数配置列表
+    /**
+     * 点餐界面显示模式
+     */
+    const val ORDER_VIEW_SHOW_PIC4 = 1 //2列
+    const val ORDER_VIEW_SHOW_PIC9 = 2 //3列
+    const val ORDER_VIEW_SHOW_PIC16 = 3//4列
+    const val ORDER_VIEW_SHOW_PIC20 = 4//5列
+    const val ORDER_VIEW_SHOW_PIC25 = 5//5列
+    const val ORDER_VIEW_SHOW_PIC30 = 6//5列
+    const val ORDER_VIEW_SHOW_SIMPLE35 = 7//5列
+    const val ORDER_VIEW_SHOW_SIMPLE40 = 8//5列
+    const val ORDER_VIEW_SHOW_SIMPLE45 = 9//5列
+    const val ORDER_VIEW_SHOW_SIMPLE50 = 10//5列
+    const val ORDER_VIEW_SHOW_SIMPLE55 = 11//5列
+    const val ORDER_VIEW_SHOW_SIMPLE60 = 12//5列
+    /**
+     *点餐界面可点单份菜品最大数量
+     */
+    const val SHOW_FOOD_ONCE_SOLD_MAXNUM = 9
+    /**
+     *点餐界面历史流水最大数量
+     */
+    const val SHOW_FOOD_CLIENT_HISTORY_MAXNUM = 15
+    const val SHOW_FOOD_WAITER_HISTORY_MAXNUM = 50
+    /**
+     * 点餐菜品对应菜品ID
+     */
+    const val Food_Zhcn_MiFan = "米饭"
+    const val Food_MiFan = "110200000014"
+    /**
+     * 菜品启用状态
+     */
+    const val FOOD_ENABLE = "A"
+    const val FOOD_DISABLE = "C"
+    /**
+     * 点餐背景图配色
+     */
+    const val COLOR_BG_0 = 0
+    const val COLOR_BG_1 = 1
+    const val COLOR_BG_2 = 2
+    const val COLOR_BG_3 = 3
+    const val COLOR_BG_4 = 4
+    const val COLOR_BG_5 = 5
+    const val COLOR_BG_6 = 6
+    const val COLOR_BG_7 = 7
+    const val COLOR_BG_8 = 8
+    const val COLOR_BG_9 = 9
+
+    /**
+     * 寻卡间隔
+     */
+    const val FIND_CARD_GAP = 200L
+
+
+    /**
+     * 包间点餐(ms)
+     */
+    const val ROOM_ANIMATION_BUTTON_GAP: Long = 600
+    /**
+     *反扫二维码间隔(ms)
+     */
+    const val ORDER_QRCODE_GAP: Long = 5000
+    /**
+     * 点餐模式
+     */
+    const val ORDER_MODE_CLIENT_POPULAR = "clientPopular" //用户大众模式
+    const val ORDER_MODE_WAITER_POPULAR = "waiterPopular" //服务员大众模式
+    const val ORDER_MODE_CALL_POPULAR = "callPopular" //叫号模式
+    const val ORDER_MODE_PRIVATE_ROOM = "privateRoom" //包间模式
+
+
+    /**
+     * 包间模式参数key
+     */
+    const val ARG_ROOM_ID = "roomId"
+    const val ARG_ROOM_NAME = "roomName"
+    const val ARG_ROOM_BILLNO = "roomBillno"
+
+    const val SYSPROP_NAVIBAR = "persist.sys.hidenavibar"
+
+    const val PRINT_FOOD_ALL = 0
+    const val PRINT_FOOD_HUN = 1
+    const val PRINT_FOOD_SU = 2
+    const val BG_SERVICE_NAME = "com.supwisdom.dcpos.service.BackgroundTaskService"
+
+
+    /**
+     * 人脸识别常量
+     */
+    const val KEY_EXTRA_BUNDLE = "key_extra_bundle"
+    const val KEY_EXTRA_AMT = "key_extra_amt"
+    const val KEY_BUNDLE_FACEDATA = "key_bundle_facedata"
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/ThreadPool.kt b/app/src/main/java/com/supwisdom/utils/ThreadPool.kt
new file mode 100644
index 0000000..eab9150
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/ThreadPool.kt
@@ -0,0 +1,170 @@
+package com.supwisdom.utils
+
+import java.util.concurrent.Executors
+import java.util.concurrent.LinkedBlockingQueue
+import java.util.concurrent.ThreadPoolExecutor
+import java.util.concurrent.TimeUnit
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+object ThreadPool {
+    private val DEFAULT_SINGLE_POOL_NAME = "DEFAULT_SINGLE_POOL_NAME"
+
+    private var mLongPool: ThreadPoolProxy? = null
+    private var mShortPool: ThreadPoolProxy? = null
+    private var mDownloadPool: ThreadPoolProxy? = null
+    private val mMap = hashMapOf<String, ThreadPoolProxy>()
+
+    /**
+     * 获取下载线程
+     */
+    fun getDownloadPool(): ThreadPoolProxy {
+        if (mDownloadPool == null) {
+            synchronized(ThreadPool::class.java) {
+                if (mDownloadPool == null) {
+                    //获取CPU核数
+                    val num = Runtime.getRuntime().availableProcessors()
+                    val corePoolSize = num + 1
+                    val maximumPoolSize = 2 * num + 1
+                    mDownloadPool = ThreadPoolProxy(corePoolSize, maximumPoolSize, 1L)
+                }
+            }
+        }
+        return mDownloadPool!!
+    }
+
+    /**
+     * 获取一个用于执行长耗时任务的线程池,避免和短耗时任务处在同一个队列而阻塞了重要的短耗时任务,通常用来联网操作
+     */
+
+    fun getLongPool(): ThreadPoolProxy {
+        if (mLongPool == null) {
+            synchronized(ThreadPool::class.java) {
+                if (mLongPool == null) {
+                    //获取CPU核数
+                    val num = Runtime.getRuntime().availableProcessors()
+                    val corePoolSize = num + 1
+                    val maximumPoolSize = 2 * num + 1
+                    mLongPool = ThreadPoolProxy(corePoolSize, maximumPoolSize, 1L)
+                }
+            }
+        }
+        return mLongPool!!
+    }
+
+    /**
+     * 获取一个用于执行短耗时任务的线程池,避免因为和耗时长的任务处在同一个队列而长时间得不到执行,通常用来执行本地的IO/SQL
+     */
+    fun getShortPool(): ThreadPoolProxy {
+        if (mShortPool == null) {
+            synchronized(ThreadPool::class.java) {
+                if (mShortPool == null) {
+                    //获取CPU核数
+                    val num = Runtime.getRuntime().availableProcessors()
+                    val corePoolSize = num + 1
+                    val maximumPoolSize = 2 * num + 1
+                    mShortPool = ThreadPoolProxy(corePoolSize, maximumPoolSize, 1L)
+                }
+            }
+        }
+        return mShortPool!!
+    }
+
+    /**
+     * 获取一个单线程池,所有任务将会被按照加入的顺序执行,免除了同步开销的问题
+     */
+    fun getSinglePool(): ThreadPoolProxy {
+        return getSinglePool(DEFAULT_SINGLE_POOL_NAME)
+    }
+
+    /**
+     * 获取一个单线程池,所有任务将会被按照加入的顺序执行,免除了同步开销的问题
+     */
+    fun getSinglePool(name: String): ThreadPoolProxy {
+        synchronized(ThreadPool::class.java) {
+            var singlePool: ThreadPoolProxy? = mMap[name]
+            if (singlePool == null) {
+                singlePool = ThreadPoolProxy(1, 1, 1L)
+                mMap[name] = singlePool
+            }
+            return singlePool
+        }
+    }
+
+    class ThreadPoolProxy constructor(
+        private val mCorePoolSize: Int,
+        private val mMaximumPoolSize: Int,
+        private val mKeepAliveTime: Long
+    ) {
+        private var mPool: ThreadPoolExecutor? = null
+
+        /**
+         * 执行任务,当线程池处于关闭,将会重新创建新的线程池
+         */
+        @Synchronized
+        fun execute(run: Runnable) {
+            if (mPool == null || mPool!!.isShutdown) {
+                //参数说明
+                //当线程池中的线程小于mCorePoolSize,直接创建新的线程加入线程池执行任务
+                //当线程池中的线程数目等于mCorePoolSize,将会把任务放入任务队列BlockingQueue中
+                //当BlockingQueue中的任务放满了,将会创建新的线程去执行,
+                //但是当总线程数大于mMaximumPoolSize时,将会抛出异常,交给RejectedExecutionHandler处理
+                //mKeepAliveTime是线程执行完任务后,且队列中没有可以执行的任务,存活的时间,后面的参数是时间单位
+                //ThreadFactory是每次创建新的线程工厂
+                mPool = ThreadPoolExecutor(
+                    mCorePoolSize,
+                    mMaximumPoolSize,
+                    mKeepAliveTime,
+                    TimeUnit.MILLISECONDS,
+                    LinkedBlockingQueue(),
+                    Executors.defaultThreadFactory(),
+                    ThreadPoolExecutor.AbortPolicy()
+                )
+            }
+            mPool!!.execute(run)
+        }
+
+        /**
+         * 取消线程池中某个还未执行的任务
+         */
+        @Synchronized
+        fun cancel(run: Runnable) {
+            if (mPool != null && (!mPool!!.isShutdown || mPool!!.isTerminating)) {
+                mPool!!.queue.remove(run)
+            }
+        }
+
+        /**
+         * 取消线程池中某个还未执行的任务
+         */
+        @Synchronized
+        operator fun contains(run: Runnable): Boolean {
+            return if (mPool != null && (!mPool!!.isShutdown || mPool!!.isTerminating)) {
+                mPool!!.queue.contains(run)
+            } else {
+                false
+            }
+        }
+
+        /**
+         * 立刻关闭线程池,并且正在执行的任务也将会被中断
+         */
+        fun stop() {
+            if (mPool != null && (!mPool!!.isShutdown || mPool!!.isTerminating)) {
+                mPool!!.shutdownNow()
+            }
+        }
+
+        /**
+         * 平缓关闭单任务线程池,但是会确保所有已经加入的任务都将会被执行完毕才关闭
+         */
+        @Synchronized
+        fun shutdown() {
+            if (mPool != null && (!mPool!!.isShutdown || mPool!!.isTerminating)) {
+                mPool!!.shutdownNow()
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/Util.kt b/app/src/main/java/com/supwisdom/utils/Util.kt
new file mode 100644
index 0000000..e9fb0df
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/Util.kt
@@ -0,0 +1,167 @@
+package com.supwisdom.utils
+
+import java.lang.Exception
+import java.util.regex.Pattern
+
+/**
+ * @author zzq
+ * @date 2018/3/20.
+ * @version 1.0.1
+ * @desc  TODO
+ */
+fun ByteArray.encodeHex(): String {
+    val res = StringBuilder()
+    forEach {
+        res.append("%02X".format(it.toInt() and 0xFF))
+    }
+    return res.toString()
+}
+
+fun String.decodeHex(): ByteArray {
+    if (this.isEmpty() || this.length % 2 != 0) {
+        throw Exception("不合法的数据")
+    }
+    return (0 until this.length step 2).map {
+        val v = this.substring(it, it + 2).toInt(16)
+        (v and 0xFF).toByte()
+    }.toByteArray()
+}
+
+fun String.encodeBCD(): ByteArray {
+    if (this.isEmpty() || this.length % 2 != 0) {
+        throw Exception("不合法的数据")
+    }
+    return (0 until this.length step 2).map {
+        val d = this.substring(it, it + 2)
+        val b1 = d[0].toInt() - 0x30
+        val b2 = d[1].toInt() - 0x30
+        if (b1 !in 0..9 || b2 !in 0..9) {
+            throw Exception("不合法的BCD格式数据<$this>")
+        }
+        ((b1.shl(4) or b2) and 0xFF).toByte()
+    }.toByteArray()
+}
+
+fun ByteArray.decodeBCD(): String {
+    return joinToString(separator = "") {
+        val b1 = it.unsignedToInt().shr(4)
+        val b2 = it.unsignedToInt() and 0x0F
+        if (b1 !in 0..9 || b2 !in 0..9) {
+            throw Exception("不合法的数据")
+        }
+        "%01d%01d".format(b1, b2)
+    }
+}
+
+fun byteArrayTohex(data: ByteArray, startPos: Int, byteLength: Int): String {
+    val res = StringBuilder()
+    data.forEachIndexed { index, s ->
+        if (index >= startPos && index < startPos + byteLength) {
+            res.append("%02X".format(s.unsignedToInt() and 0xFF))
+        }
+    }
+    return res.toString()
+}
+
+fun Byte.unsignedToInt(): Int {
+    return this.toInt() and 0xFF
+}
+
+fun Byte.unsignedToLong(): Long {
+    return this.toLong() and 0xFF
+}
+
+fun byteArrayToIntLe(data: ByteArray, startPos: Int, byteLength: Int): Int {
+    var res = 0
+    data.forEachIndexed { index, s ->
+        if (index >= startPos && index < startPos + byteLength) {
+            res = res or (s.unsignedToInt() shl ((index - startPos) shl 3))
+        }
+    }
+    return res
+}
+
+fun byteArrayToIntBe(data: ByteArray, startPos: Int, byteLength: Int): Int {
+    var res = 0
+    data.forEachIndexed { index, s ->
+        if (index >= startPos && index < startPos + byteLength) {
+            res = (res shl 8) or s.unsignedToInt()
+        }
+    }
+    return res
+}
+
+fun byteArrayToLongBe(data: ByteArray, startPos: Int, byteLength: Int): Long {
+    var res: Long = 0
+    data.forEachIndexed { index, s ->
+        if (index >= startPos && index < startPos + byteLength) {
+            res = (res shl 8) or s.toLong()
+        }
+    }
+    return res
+}
+
+fun byteArrayToLongLe(data: ByteArray): Long {
+    var res: Long = 0
+    data.forEachIndexed { index, s ->
+        res = res or ((s.toLong() and 0xFF) shl (index shl 3))
+    }
+    return res
+}
+
+
+fun intBeToByteArray(value: Int, byteLen: Int = 4): ByteArray {
+    if (byteLen !in 1..4) {
+        throw Exception("数据长度错误")
+    }
+    val res = "%08X".format(value).decodeHex()
+    return res.copyOfRange(4 - byteLen, 4)
+}
+
+fun intBeToByteArray(value: Int, data: ByteArray, startPos: Int, byteLen: Int) {
+    if (byteLen !in 1..4) {
+        throw Exception("数据长度错误")
+    }
+    val res = "%08X".format(value).decodeHex()
+    (startPos until startPos + byteLen).forEach {
+        data[it] = res[4 - byteLen + it - startPos]
+    }
+
+}
+
+fun longBeToByteArray(value: Long, byteLen: Int = 4): ByteArray {
+    if (byteLen !in 1..8) {
+        throw Exception("数据长度错误")
+    }
+    val res = ByteArray(8) { 0x00 }
+    (0..7).forEach {
+        res[it] = ((value shr ((7 - it) shl 3)) and 0xFF).toByte()
+    }
+    return res.copyOfRange(8 - byteLen, 8)
+}
+
+fun intLeToByteArray(value: Int, byteLen: Int = 4): ByteArray {
+    if (byteLen !in 1..4) {
+        throw Exception("数据长度错误")
+    }
+    val res = ByteArray(4) { 0x00 }
+    (0..3).forEach {
+        res[it] = ((value shr (it shl 3)) and 0xFF).toByte()
+    }
+    return res.copyOfRange(0, byteLen)
+}
+
+fun intLeToByteArray(value: Int, data: ByteArray, startPos: Int, byteLen: Int) {
+    if (byteLen !in 1..4) {
+        throw Exception("数据长度错误")
+    }
+    (0..3).forEach {
+        data[it + startPos] = ((value shr (it shl 3)) and 0xFF).toByte()
+    }
+}
+
+/**验证IP格式*/
+fun verifyIpFormat(ip: String): Boolean {
+    val pattern = Pattern.compile("")
+    return pattern.matcher(ip).matches()
+}
diff --git a/app/src/main/java/com/supwisdom/view/DialogBase.kt b/app/src/main/java/com/supwisdom/view/DialogBase.kt
new file mode 100644
index 0000000..bb6d40b
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/view/DialogBase.kt
@@ -0,0 +1,47 @@
+package com.supwisdom.view
+
+import android.app.Activity
+import android.app.Dialog
+import android.content.Context
+import com.supwisdom.R
+
+/**
+ * @author zzq
+ * @date 2018/6/7
+ * @desc 基类dialog
+ */
+open class DialogBase constructor(context: Context) : Dialog(context, R.style.FloatingDialog) {
+    private val ctx = context
+
+    override fun show() {
+        if (ctx is Activity) {
+            if (!ctx.isFinishing) {
+                //防止activity处于销毁状态
+                //android.view.WindowManager$BadTokenException: Unable to add window
+                // -- token android.os.BinderProxy@41b43ec0 is not valid; is your activity running
+                super.show()
+            }
+        } else {
+//            val activity = (ctx as ContextWrapper).baseContext as Activity
+//            if (!activity.isFinishing) {
+            //防止activity处于销毁状态
+            //android.view.WindowManager$BadTokenException: Unable to add window
+            // -- token android.os.BinderProxy@41b43ec0 is not valid; is your activity running
+            super.show()
+//            }
+        }
+    }
+
+    override fun dismiss() {
+        if (ctx is Activity) {
+            if (!ctx.isFinishing) {
+                super.dismiss()
+            }
+        } else {
+//            val activity = (ctx as ContextWrapper).baseContext as Activity
+//            if (!activity.isFinishing) {
+            super.dismiss()
+//            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/view/ListViewUtil.kt b/app/src/main/java/com/supwisdom/view/ListViewUtil.kt
new file mode 100644
index 0000000..cef2581
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/view/ListViewUtil.kt
@@ -0,0 +1,43 @@
+package com.supwisdom.view
+
+import android.widget.ListView
+
+/**
+ * @author zzq
+ * @date 2018/5/9.
+ * @version 1.0.1
+ * @desc  动态测量adapter listview的高度
+ */
+object ListViewUtil {
+    fun setListViewHeightBasedOnChildren(listView: ListView) {
+        val listAdapter = listView.adapter ?: return
+
+        var totalHeight = 0
+        for (i in 0 until listAdapter.count) {
+            val listItem = listAdapter.getView(i, null, listView)
+            listItem.measure(0, 0)
+            totalHeight += listItem.measuredHeight
+        }
+
+        val params = listView.layoutParams
+        params.height = totalHeight + listView.dividerHeight * (listAdapter.count - 1)
+        listView.layoutParams = params
+    }
+
+    fun getListViewHeightBasedOnChildren(listView: ListView): Int {
+        val listAdapter = listView.adapter
+        var totalHeight = 0
+        for (i in 0 until listAdapter.count) {
+            val listItem = listAdapter.getView(i, null, listView)
+            listItem.measure(0, 0)
+            totalHeight += listItem.measuredHeight
+        }
+        return totalHeight + listView.dividerHeight * (listAdapter.count - 1)
+    }
+
+    fun setListViewHeight(listView: ListView, height: Int) {
+        val params = listView.layoutParams
+        params.height = height
+        listView.layoutParams = params
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/view/RecyclerViewUtil.kt b/app/src/main/java/com/supwisdom/view/RecyclerViewUtil.kt
new file mode 100644
index 0000000..58d4fa2
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/view/RecyclerViewUtil.kt
@@ -0,0 +1,26 @@
+package com.supwisdom.view
+
+import android.graphics.Rect
+import android.support.v7.widget.RecyclerView
+import android.view.View
+
+/**
+ * @author zzq
+ * @date 2018/6/21
+ * @desc TODO
+ */
+class RecyclerViewUtil {
+    class ItemDecoration constructor(top: Int, bottom: Int, left: Int, right: Int) : RecyclerView.ItemDecoration() {
+        private val top = top
+        private val bottom = bottom
+        private val left = left
+        private val right = right
+        override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
+            super.getItemOffsets(outRect, view, parent, state)
+            outRect!!.top = top
+            outRect.left = left
+            outRect.bottom = bottom
+            outRect.right = right
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/view/ToastUtil.kt b/app/src/main/java/com/supwisdom/view/ToastUtil.kt
new file mode 100644
index 0000000..7d82257
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/view/ToastUtil.kt
@@ -0,0 +1,86 @@
+package com.supwisdom.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.os.CountDownTimer
+import android.view.Gravity
+import android.view.LayoutInflater
+import android.widget.TextView
+import android.widget.Toast
+import com.supwisdom.R
+
+/**
+ * @author zzq
+ * @date 2018/3/20.
+ * @version 1.0.1
+ * @desc  界面操作提示
+ */
+@SuppressLint("StaticFieldLeak")
+object ToastUtil {
+    private var toast: Toast? = null
+    private var toastText: TextView? = null
+    private var counter: CountDownTimer? = null
+
+    private var toast1: Toast? = null
+    private var toastText1: TextView? = null
+
+    fun show(context: Context, msg: String) {
+        if (toast1 == null) {
+            toast1 = Toast(context)
+            val view = LayoutInflater.from(context).inflate(R.layout.toast_util, null)
+            toastText1 = view.findViewById(R.id.toasttext) as TextView
+            toast1!!.setGravity(Gravity.CENTER, 0, 0)
+            toast1!!.duration = Toast.LENGTH_SHORT
+            toast1!!.view = view
+        }
+        toastText1!!.text = msg
+        toast1!!.show()
+    }
+
+    fun show(context: Context, msg: String, listener: ShowListener?) {
+        if (toast == null) {
+            toast = Toast(context)
+            val view = LayoutInflater.from(context).inflate(R.layout.toast_util, null)
+
+            toastText = view.findViewById(R.id.toasttext) as TextView
+            toast!!.setGravity(Gravity.CENTER, 0, 0)
+            toast!!.duration = Toast.LENGTH_LONG
+            toast!!.view = view
+        }
+        toastText!!.text = msg
+        toast!!.show()
+        if (counter == null) {
+            counter = object : CountDownTimer(2000, 200) {
+                override fun onTick(millisUntilFinished: Long) {
+
+                }
+
+                override fun onFinish() {
+                    listener?.callback()
+                    toast!!.cancel()
+                }
+            }
+        } else {
+            counter!!.cancel()
+            counter = object : CountDownTimer(2000, 200) {
+                override fun onTick(millisUntilFinished: Long) {
+
+                }
+
+                override fun onFinish() {
+                    listener?.callback()
+                    toast!!.cancel()
+                }
+            }
+        }
+        counter!!.start()
+    }
+
+    fun cancel() {
+        toast!!.cancel()
+    }
+
+    interface ShowListener {
+        fun callback()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/jniLibs/arm64-v8a/libalipay_code_verify.so b/app/src/main/jniLibs/arm64-v8a/libalipay_code_verify.so
new file mode 100644
index 0000000..8437590
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libalipay_code_verify.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libauxScreen.so b/app/src/main/jniLibs/arm64-v8a/libauxScreen.so
new file mode 100644
index 0000000..01741bf
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libauxScreen.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libcrypto.so b/app/src/main/jniLibs/arm64-v8a/libcrypto.so
new file mode 100644
index 0000000..e4841ff
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libcrypto.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libiccV108.so b/app/src/main/jniLibs/arm64-v8a/libiccV108.so
new file mode 100644
index 0000000..608edea
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libiccV108.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libiccV110.so b/app/src/main/jniLibs/arm64-v8a/libiccV110.so
new file mode 100644
index 0000000..c2ef8cc
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libiccV110.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libiccV115.so b/app/src/main/jniLibs/arm64-v8a/libiccV115.so
new file mode 100644
index 0000000..61635a1
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libiccV115.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libiccV116.so b/app/src/main/jniLibs/arm64-v8a/libiccV116.so
new file mode 100644
index 0000000..c2ef8cc
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libiccV116.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libpiccV108.so b/app/src/main/jniLibs/arm64-v8a/libpiccV108.so
new file mode 100644
index 0000000..c62695a
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libpiccV108.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libpiccV115.so b/app/src/main/jniLibs/arm64-v8a/libpiccV115.so
new file mode 100644
index 0000000..df17f28
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libpiccV115.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libpiccV116.so b/app/src/main/jniLibs/arm64-v8a/libpiccV116.so
new file mode 100644
index 0000000..df17f28
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libpiccV116.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libserial_port.so b/app/src/main/jniLibs/arm64-v8a/libserial_port.so
new file mode 100644
index 0000000..7cd1a8a
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libserial_port.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libssl.so b/app/src/main/jniLibs/arm64-v8a/libssl.so
new file mode 100644
index 0000000..cea745d
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libssl.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libswbarcode.so b/app/src/main/jniLibs/arm64-v8a/libswbarcode.so
new file mode 100644
index 0000000..f7c2d94
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libswbarcode.so
Binary files differ
diff --git a/app/src/main/jniLibs/armeabi-v7a/libalipay_code_verify.so b/app/src/main/jniLibs/armeabi-v7a/libalipay_code_verify.so
new file mode 100644
index 0000000..2419998
--- /dev/null
+++ b/app/src/main/jniLibs/armeabi-v7a/libalipay_code_verify.so
Binary files differ
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..6348baa
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:aapt="http://schemas.android.com/aapt"
+        android:width="108dp"
+        android:height="108dp"
+        android:viewportHeight="108"
+        android:viewportWidth="108">
+    <path
+            android:fillType="evenOdd"
+            android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+            android:strokeColor="#00000000"
+            android:strokeWidth="1">
+        <aapt:attr name="android:fillColor">
+            <gradient
+                    android:endX="78.5885"
+                    android:endY="90.9159"
+                    android:startX="48.7653"
+                    android:startY="61.0927"
+                    android:type="linear">
+                <item
+                        android:color="#44000000"
+                        android:offset="0.0"/>
+                <item
+                        android:color="#00000000"
+                        android:offset="1.0"/>
+            </gradient>
+        </aapt:attr>
+    </path>
+    <path
+            android:fillColor="#FFFFFF"
+            android:fillType="nonZero"
+            android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+            android:strokeColor="#00000000"
+            android:strokeWidth="1"/>
+</vector>
diff --git a/app/src/main/res/drawable/anonymous.jpg b/app/src/main/res/drawable/anonymous.jpg
new file mode 100644
index 0000000..9e4672e
--- /dev/null
+++ b/app/src/main/res/drawable/anonymous.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/bcg.png b/app/src/main/res/drawable/bcg.png
new file mode 100644
index 0000000..1664e83
--- /dev/null
+++ b/app/src/main/res/drawable/bcg.png
Binary files differ
diff --git a/app/src/main/res/drawable/bg_dps_corner.xml b/app/src/main/res/drawable/bg_dps_corner.xml
new file mode 100644
index 0000000..9236194
--- /dev/null
+++ b/app/src/main/res/drawable/bg_dps_corner.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#ee1"/>
+    <corners android:radius="8dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#e22221"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/big_progress_bg.xml b/app/src/main/res/drawable/big_progress_bg.xml
new file mode 100644
index 0000000..55134ec
--- /dev/null
+++ b/app/src/main/res/drawable/big_progress_bg.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/loading_white"
+    android:fromDegrees="0"
+    android:interpolator="@android:anim/cycle_interpolator"
+    android:pivotX="50%"
+    android:pivotY="50%"
+    android:toDegrees="1440" />
diff --git a/app/src/main/res/drawable/btn_cancel_selector.xml b/app/src/main/res/drawable/btn_cancel_selector.xml
new file mode 100644
index 0000000..5543cba
--- /dev/null
+++ b/app/src/main/res/drawable/btn_cancel_selector.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_focused="true" android:state_pressed="false">
+        <shape>
+            <solid android:color="#cccccc" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_selected="true">
+        <shape>
+            <solid android:color="#bfbfbf" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#bfbfbf" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_pressed="false">
+        <shape>
+            <solid android:color="#cccccc" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_num_selector.xml b/app/src/main/res/drawable/btn_num_selector.xml
new file mode 100644
index 0000000..498dc49
--- /dev/null
+++ b/app/src/main/res/drawable/btn_num_selector.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_focused="true" android:state_pressed="false">
+        <shape>
+            <solid android:color="#fff" />
+            <corners android:radius="8.0dip" />
+            <stroke android:width="1.0dip" android:color="#DEDBDE" />
+        </shape>
+    </item>
+    <item android:state_selected="true">
+        <shape>
+            <solid android:color="#bfbfbf" />
+            <corners android:radius="8.0dip" />
+            <stroke android:width="1.0dip" android:color="#DEDBDE" />
+        </shape>
+    </item>
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#bfbfbf" />
+            <corners android:radius="8.0dip" />
+            <stroke android:width="1.0dip" android:color="#DEDBDE" />
+        </shape>
+    </item>
+    <item android:state_pressed="false">
+        <shape>
+            <solid android:color="#fff" />
+            <corners android:radius="8.0dip" />
+            <stroke android:width="1.0dip" android:color="#DEDBDE" />
+        </shape>
+    </item>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_ok_selector.xml b/app/src/main/res/drawable/btn_ok_selector.xml
new file mode 100644
index 0000000..8ee6c40
--- /dev/null
+++ b/app/src/main/res/drawable/btn_ok_selector.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_focused="true" android:state_pressed="false">
+        <shape>
+            <solid android:color="#08ae9e" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_selected="true">
+        <shape>
+            <solid android:color="#08a191" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#08a191" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+    <item android:state_pressed="false">
+        <shape>
+            <solid android:color="#08ae9e" />
+            <corners android:radius="8.0dip" />
+        </shape>
+    </item>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_ok_selector_nocorner.xml b/app/src/main/res/drawable/btn_ok_selector_nocorner.xml
new file mode 100644
index 0000000..4cdb60c
--- /dev/null
+++ b/app/src/main/res/drawable/btn_ok_selector_nocorner.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_focused="true" android:state_pressed="false">
+        <shape>
+            <solid android:color="#08ae9e" />
+        </shape>
+    </item>
+    <item android:state_selected="true">
+        <shape>
+            <solid android:color="#08a191" />
+        </shape>
+    </item>
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#08a191" />
+        </shape>
+    </item>
+    <item android:state_pressed="false">
+        <shape>
+            <solid android:color="#08ae9e" />
+        </shape>
+    </item>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_ok_white_selector.xml b/app/src/main/res/drawable/btn_ok_white_selector.xml
new file mode 100644
index 0000000..1db82f7
--- /dev/null
+++ b/app/src/main/res/drawable/btn_ok_white_selector.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:state_focused="true" android:state_pressed="false">
+        <shape>
+            <solid android:color="#fff" />
+        </shape>
+    </item>
+    <item android:state_selected="true">
+        <shape>
+            <solid android:color="#fff4f4f4" />
+        </shape>
+    </item>
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#fff4f4f4" />
+        </shape>
+    </item>
+    <item android:state_pressed="false">
+        <shape>
+            <solid android:color="#fff" />
+        </shape>
+    </item>
+
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg.xml b/app/src/main/res/drawable/corner_bg.xml
new file mode 100644
index 0000000..40c5b82
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#80ffffff" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="#ffc5c5c5" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_1.xml b/app/src/main/res/drawable/corner_bg_1.xml
new file mode 100644
index 0000000..e6721a9
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#e0e0e0e0" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="#80ffffff" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_dialog.xml b/app/src/main/res/drawable/corner_bg_dialog.xml
new file mode 100644
index 0000000..2276ba2
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_dialog.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#e6e6e6"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#e6e6e6"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_dps_crashbtn_focus.xml b/app/src/main/res/drawable/corner_bg_dps_crashbtn_focus.xml
new file mode 100644
index 0000000..1108b54
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_dps_crashbtn_focus.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#7e1508"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#721307"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_dps_crashbtn_normal.xml b/app/src/main/res/drawable/corner_bg_dps_crashbtn_normal.xml
new file mode 100644
index 0000000..7b7d04f
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_dps_crashbtn_normal.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#e24c17"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#cc4616"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_gray.xml b/app/src/main/res/drawable/corner_bg_gray.xml
new file mode 100644
index 0000000..a198688
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_gray.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/light_gray" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="@color/light_gray" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_keyboard_focus.xml b/app/src/main/res/drawable/corner_bg_keyboard_focus.xml
new file mode 100644
index 0000000..0f93672
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_keyboard_focus.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#807c7c"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#807c7c"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_keyboard_normal.xml b/app/src/main/res/drawable/corner_bg_keyboard_normal.xml
new file mode 100644
index 0000000..7732d4b
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_keyboard_normal.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#ffffff"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#ffffff"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_order_count_green.xml b/app/src/main/res/drawable/corner_bg_order_count_green.xml
new file mode 100644
index 0000000..fe44a58
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_order_count_green.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/light_green"/>
+    <corners android:radius="30dip"/>
+    <!--<stroke-->
+        <!--android:width="1.0dip"-->
+        <!--android:color="@color/light_green"/>-->
+    <gradient
+        android:angle="90"
+        android:endColor="@color/light_green2"
+        android:startColor="@color/light_green1"/>
+    <padding
+        android:bottom="1dp"
+        android:left="1dp"
+        android:right="1dp"
+        android:top="1dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_order_red.xml b/app/src/main/res/drawable/corner_bg_order_red.xml
new file mode 100644
index 0000000..5fa9c71
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_order_red.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <corners android:radius="30dip"/>
+    <!--<stroke-->
+        <!--android:width="1.0dip"-->
+        <!--android:color="@color/cl_red"/>-->
+    <gradient
+        android:angle="90"
+        android:endColor="@color/cl_red"
+        android:startColor="@color/light_purple1"/>
+    <padding
+        android:bottom="1dp"
+        android:left="1dp"
+        android:right="1dp"
+        android:top="1dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_ordinary_consume_focus.xml b/app/src/main/res/drawable/corner_bg_ordinary_consume_focus.xml
new file mode 100644
index 0000000..0f93672
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_ordinary_consume_focus.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#807c7c"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#807c7c"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_ordinary_consume_green.xml b/app/src/main/res/drawable/corner_bg_ordinary_consume_green.xml
new file mode 100644
index 0000000..d644a75
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_ordinary_consume_green.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#E3EFFF"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#E3EFFF"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_ordinary_consume_normal.xml b/app/src/main/res/drawable/corner_bg_ordinary_consume_normal.xml
new file mode 100644
index 0000000..19b5879
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_ordinary_consume_normal.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#e0e0e0e0"/>
+    <corners android:radius="12dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="#e0e0e0e0"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_qrcode_hint.xml b/app/src/main/res/drawable/corner_bg_qrcode_hint.xml
new file mode 100644
index 0000000..4f37389
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_qrcode_hint.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/orange1" />
+    <corners android:radius="30dip" />
+    <!--<stroke-->
+        <!--android:width="1.0dip"-->
+        <!--android:color="@color/cl_red" />-->
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_simple_order.xml b/app/src/main/res/drawable/corner_bg_simple_order.xml
new file mode 100644
index 0000000..3fd3f7e
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_simple_order.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/light_green"/>
+    <corners android:radius="30dip"/>
+    <stroke
+        android:width="0.5dip"
+        android:color="@color/cl_red"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_simple_order_1.xml b/app/src/main/res/drawable/corner_bg_simple_order_1.xml
new file mode 100644
index 0000000..a33bba1
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_simple_order_1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/light_yellow_3"/>
+    <corners android:radius="8dip"/>
+    <stroke
+        android:width="1.0dip"
+        android:color="@color/light_yellow_3"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_simple_order_2.xml b/app/src/main/res/drawable/corner_bg_simple_order_2.xml
new file mode 100644
index 0000000..10191d2
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_simple_order_2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/order_food_list_bak" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="@color/order_food_list_bak" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/corner_bg_white.xml b/app/src/main/res/drawable/corner_bg_white.xml
new file mode 100644
index 0000000..48324a8
--- /dev/null
+++ b/app/src/main/res/drawable/corner_bg_white.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@android:color/white" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="@android:color/white" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dps_crash_selector.xml b/app/src/main/res/drawable/dps_crash_selector.xml
new file mode 100644
index 0000000..fa50427
--- /dev/null
+++ b/app/src/main/res/drawable/dps_crash_selector.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/corner_bg_dps_crashbtn_focus" android:state_selected="true"/>
+    <item android:drawable="@drawable/corner_bg_dps_crashbtn_focus" android:state_pressed="true"/>
+    <item android:drawable="@drawable/corner_bg_dps_crashbtn_normal"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/food_corner_bg.xml b/app/src/main/res/drawable/food_corner_bg.xml
new file mode 100644
index 0000000..5c1aca5
--- /dev/null
+++ b/app/src/main/res/drawable/food_corner_bg.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#999999" />
+    <corners android:radius="8dip" />
+    <stroke
+        android:width="1.0dip"
+        android:color="#999999" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/fudan_logo.png b/app/src/main/res/drawable/fudan_logo.png
new file mode 100644
index 0000000..1a53460
--- /dev/null
+++ b/app/src/main/res/drawable/fudan_logo.png
Binary files differ
diff --git a/app/src/main/res/drawable/fudan_logo2.png b/app/src/main/res/drawable/fudan_logo2.png
new file mode 100644
index 0000000..350562b
--- /dev/null
+++ b/app/src/main/res/drawable/fudan_logo2.png
Binary files differ
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..a0ad202
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:height="108dp"
+        android:width="108dp"
+        android:viewportHeight="108"
+        android:viewportWidth="108">
+    <path android:fillColor="#008577"
+          android:pathData="M0,0h108v108h-108z"/>
+    <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+</vector>
diff --git a/app/src/main/res/drawable/item_pressed_selector.xml b/app/src/main/res/drawable/item_pressed_selector.xml
new file mode 100644
index 0000000..d1e814b
--- /dev/null
+++ b/app/src/main/res/drawable/item_pressed_selector.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@android:color/darker_gray" android:state_pressed="true"/>
+    <item android:drawable="@android:color/darker_gray" android:state_focused="true"/>
+    <item android:drawable="@android:color/white" android:state_enabled="true"/>
+    <item android:drawable="@android:color/white"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/minus_btn_selector.xml b/app/src/main/res/drawable/minus_btn_selector.xml
new file mode 100644
index 0000000..5f5ba45
--- /dev/null
+++ b/app/src/main/res/drawable/minus_btn_selector.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true" android:drawable="@drawable/minus_click" />
+    <item android:state_pressed="true" android:drawable="@drawable/minus_click" />
+    <item android:drawable="@drawable/corner_bg_order_red" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/order_clear_selector.xml b/app/src/main/res/drawable/order_clear_selector.xml
new file mode 100644
index 0000000..f10f556
--- /dev/null
+++ b/app/src/main/res/drawable/order_clear_selector.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/order_clear_normal" />
+    <item android:state_selected="true" android:drawable="@drawable/order_clear_focus" />
+    <item android:state_pressed="true" android:drawable="@drawable/order_clear_focus" />
+    <item android:state_pressed="false" android:drawable="@drawable/order_clear_normal" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/order_pay_selector.xml b/app/src/main/res/drawable/order_pay_selector.xml
new file mode 100644
index 0000000..4c123ac
--- /dev/null
+++ b/app/src/main/res/drawable/order_pay_selector.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true" android:drawable="@drawable/order_purchase_focus" />
+    <item android:state_pressed="true" android:drawable="@drawable/order_purchase_focus" />
+    <item android:drawable="@drawable/order_purchase_normal" />
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/pay_ret_dialog_bg.xml b/app/src/main/res/drawable/pay_ret_dialog_bg.xml
new file mode 100644
index 0000000..705a8f3
--- /dev/null
+++ b/app/src/main/res/drawable/pay_ret_dialog_bg.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape android:shape="rectangle"
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/viewfinder_mask" />
+    <corners android:radius="6.0dip" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/progress_bg.xml b/app/src/main/res/drawable/progress_bg.xml
new file mode 100644
index 0000000..55134ec
--- /dev/null
+++ b/app/src/main/res/drawable/progress_bg.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rotate xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/loading_white"
+    android:fromDegrees="0"
+    android:interpolator="@android:anim/cycle_interpolator"
+    android:pivotX="50%"
+    android:pivotY="50%"
+    android:toDegrees="1440" />
diff --git a/app/src/main/res/drawable/progress_horizontal.xml b/app/src/main/res/drawable/progress_horizontal.xml
new file mode 100644
index 0000000..8014563
--- /dev/null
+++ b/app/src/main/res/drawable/progress_horizontal.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
+
+<item
+    android:id="@android:id/background"
+    android:drawable="@color/pos_theme_color">
+</item>
+<item android:id="@android:id/secondaryProgress">
+  <scale
+      android:drawable="@color/light_gray"
+      android:scaleWidth="100%" />
+</item>
+<item android:id="@android:id/progress">
+  <scale
+      android:drawable="@color/cl_red"
+      android:scaleWidth="100%" />
+</item>
+
+</layer-list>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/purchase_cardagain.jpg b/app/src/main/res/drawable/purchase_cardagain.jpg
new file mode 100644
index 0000000..ae09d7f
--- /dev/null
+++ b/app/src/main/res/drawable/purchase_cardagain.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/purchase_cardread.jpg b/app/src/main/res/drawable/purchase_cardread.jpg
new file mode 100644
index 0000000..5ab9972
--- /dev/null
+++ b/app/src/main/res/drawable/purchase_cardread.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/purchase_fail.jpg b/app/src/main/res/drawable/purchase_fail.jpg
new file mode 100644
index 0000000..68c4cb9
--- /dev/null
+++ b/app/src/main/res/drawable/purchase_fail.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/purchase_suc.jpg b/app/src/main/res/drawable/purchase_suc.jpg
new file mode 100644
index 0000000..f39ebdb
--- /dev/null
+++ b/app/src/main/res/drawable/purchase_suc.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/qr_none320.png b/app/src/main/res/drawable/qr_none320.png
new file mode 100644
index 0000000..99b9039
--- /dev/null
+++ b/app/src/main/res/drawable/qr_none320.png
Binary files differ
diff --git a/app/src/main/res/drawable/select_bg_keyboard.xml b/app/src/main/res/drawable/select_bg_keyboard.xml
new file mode 100644
index 0000000..83ae4c5
--- /dev/null
+++ b/app/src/main/res/drawable/select_bg_keyboard.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/corner_bg_keyboard_normal" android:state_selected="true"/>
+    <item android:drawable="@drawable/corner_bg_keyboard_normal" android:state_pressed="true"/>
+    <item android:drawable="@drawable/corner_bg_keyboard_focus"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/select_ordinary_consume.xml b/app/src/main/res/drawable/select_ordinary_consume.xml
new file mode 100644
index 0000000..e44edf1
--- /dev/null
+++ b/app/src/main/res/drawable/select_ordinary_consume.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/corner_bg_ordinary_consume_focus" android:state_selected="true"/>
+    <item android:drawable="@drawable/corner_bg_ordinary_consume_focus" android:state_pressed="true"/>
+    <item android:drawable="@drawable/corner_bg_ordinary_consume_normal"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_image_border.xml b/app/src/main/res/drawable/shape_image_border.xml
new file mode 100644
index 0000000..6d801b9
--- /dev/null
+++ b/app/src/main/res/drawable/shape_image_border.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
+    <!-- Bottom 2dp Shadow -->
+    <item>
+
+        <shape android:shape="rectangle">
+
+            <solid android:color="#BBB"/>
+
+            <corners android:radius="7dp"/>
+        </shape>
+    </item>
+
+    <!-- White Top color -->
+    <item android:bottom="3px">
+
+        <shape android:shape="rectangle">
+
+            <solid android:color="#FFF"/>
+
+            <corners android:radius="7dp"/>
+
+            <padding
+                android:bottom="5dp"
+                android:left="5dp"
+                android:right="5dp"
+                android:top="5dp"/>
+        </shape>
+    </item>
+</layer-list>
diff --git a/app/src/main/res/drawable/toast_cry.jpg b/app/src/main/res/drawable/toast_cry.jpg
new file mode 100644
index 0000000..6c54f93
--- /dev/null
+++ b/app/src/main/res/drawable/toast_cry.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/toast_doubt.jpg b/app/src/main/res/drawable/toast_doubt.jpg
new file mode 100644
index 0000000..1ed3097
--- /dev/null
+++ b/app/src/main/res/drawable/toast_doubt.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/toast_smile.jpg b/app/src/main/res/drawable/toast_smile.jpg
new file mode 100644
index 0000000..b74ff81
--- /dev/null
+++ b/app/src/main/res/drawable/toast_smile.jpg
Binary files differ
diff --git a/app/src/main/res/drawable/wireless_off.png b/app/src/main/res/drawable/wireless_off.png
new file mode 100644
index 0000000..c9e117e
--- /dev/null
+++ b/app/src/main/res/drawable/wireless_off.png
Binary files differ
diff --git a/app/src/main/res/drawable/wireless_on.png b/app/src/main/res/drawable/wireless_on.png
new file mode 100644
index 0000000..61a9506
--- /dev/null
+++ b/app/src/main/res/drawable/wireless_on.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..980638c
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:context=".MainActivity">
+
+    <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Hello World!"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent"/>
+
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/toast_util.xml b/app/src/main/res/layout/toast_util.xml
new file mode 100644
index 0000000..0524e5b
--- /dev/null
+++ b/app/src/main/res/layout/toast_util.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/toasttext"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/corner_bg"
+        android:padding="30dp"
+        android:text="测试"
+        android:textColor="@color/black"
+        android:textSize="200dp"
+        android:textStyle="bold"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..bbd3e02
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_foreground"/>
+</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/bill_lastdtl.png b/app/src/main/res/mipmap-hdpi/bill_lastdtl.png
new file mode 100644
index 0000000..de03aa0
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/bill_lastdtl.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/default_photo.png b/app/src/main/res/mipmap-hdpi/default_photo.png
new file mode 100644
index 0000000..ca377a9
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/default_photo.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..898f3ed
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..dffca36
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/pay_with_bar.png b/app/src/main/res/mipmap-hdpi/pay_with_bar.png
new file mode 100644
index 0000000..9c1f31a
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/pay_with_bar.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/pay_with_card.png b/app/src/main/res/mipmap-hdpi/pay_with_card.png
new file mode 100644
index 0000000..1b2d929
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/pay_with_card.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/pay_with_scan.png b/app/src/main/res/mipmap-hdpi/pay_with_scan.png
new file mode 100644
index 0000000..afc2bb1
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/pay_with_scan.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/pay_with_virtualcard.png b/app/src/main/res/mipmap-hdpi/pay_with_virtualcard.png
new file mode 100644
index 0000000..f8cf8a6
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/pay_with_virtualcard.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/scan_default_photo.jpg b/app/src/main/res/mipmap-hdpi/scan_default_photo.jpg
new file mode 100644
index 0000000..34adcad
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/scan_default_photo.jpg
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/shop_logo.png b/app/src/main/res/mipmap-hdpi/shop_logo.png
new file mode 100644
index 0000000..79ba1ec
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/shop_logo.png
Binary files differ
diff --git a/app/src/main/res/mipmap-hdpi/show_card_info.png b/app/src/main/res/mipmap-hdpi/show_card_info.png
new file mode 100644
index 0000000..c622914
--- /dev/null
+++ b/app/src/main/res/mipmap-hdpi/show_card_info.png
Binary files differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..64ba76f
--- /dev/null
+++ b/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..dae5e08
--- /dev/null
+++ b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..e5ed465
--- /dev/null
+++ b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..14ed0af
--- /dev/null
+++ b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b0907ca
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..d8ae031
--- /dev/null
+++ b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..2c18de9
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..beed3cd
--- /dev/null
+++ b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/app/src/main/res/raw/beep.ogg b/app/src/main/res/raw/beep.ogg
new file mode 100644
index 0000000..1419947
--- /dev/null
+++ b/app/src/main/res/raw/beep.ogg
Binary files differ
diff --git a/app/src/main/res/raw/card_passwd.wav b/app/src/main/res/raw/card_passwd.wav
new file mode 100644
index 0000000..f53ffb4
--- /dev/null
+++ b/app/src/main/res/raw/card_passwd.wav
Binary files differ
diff --git a/app/src/main/res/raw/consume_fail.wav b/app/src/main/res/raw/consume_fail.wav
new file mode 100644
index 0000000..37905b9
--- /dev/null
+++ b/app/src/main/res/raw/consume_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/consume_suc.wav b/app/src/main/res/raw/consume_suc.wav
new file mode 100644
index 0000000..29dba78
--- /dev/null
+++ b/app/src/main/res/raw/consume_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/dps_fail.wav b/app/src/main/res/raw/dps_fail.wav
new file mode 100644
index 0000000..3dd255e
--- /dev/null
+++ b/app/src/main/res/raw/dps_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/dps_feeamt_suc.wav b/app/src/main/res/raw/dps_feeamt_suc.wav
new file mode 100644
index 0000000..976f337
--- /dev/null
+++ b/app/src/main/res/raw/dps_feeamt_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/dps_login_fail.wav b/app/src/main/res/raw/dps_login_fail.wav
new file mode 100644
index 0000000..cc7f082
--- /dev/null
+++ b/app/src/main/res/raw/dps_login_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/dps_login_suc.wav b/app/src/main/res/raw/dps_login_suc.wav
new file mode 100644
index 0000000..f93d948
--- /dev/null
+++ b/app/src/main/res/raw/dps_login_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/dps_suc.wav b/app/src/main/res/raw/dps_suc.wav
new file mode 100644
index 0000000..7fc83cf
--- /dev/null
+++ b/app/src/main/res/raw/dps_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/eastcompeace_a711.json b/app/src/main/res/raw/eastcompeace_a711.json
new file mode 100644
index 0000000..c768ceb
--- /dev/null
+++ b/app/src/main/res/raw/eastcompeace_a711.json
@@ -0,0 +1,16 @@
+{
+  "desc": "东信和平(哈工程)",
+  "manufactory": "eastcompeace",
+  "fingerprint": [
+    {
+      "fingerprint": "127880B0024D540081",
+      "offset": 4,
+      "defaultRootKey": "00000000000000000000000000000000"
+    },
+    {
+      "fingerprint": "057880B002",
+      "offset": 4,
+      "defaultRootKey": "00000000000000000000000000000000"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/app/src/main/res/raw/epaycard.cfg b/app/src/main/res/raw/epaycard.cfg
new file mode 100644
index 0000000..c55ad32
--- /dev/null
+++ b/app/src/main/res/raw/epaycard.cfg
@@ -0,0 +1,122 @@
+{
+  "version": "1.0",
+  "custname": "supwisdom",
+  "id": "com.supwisdom.epaycard.cpucard.a711",
+  "desc": "新开普A711读卡器",
+  "issue_date": "20171221",
+  "custom_version": "v1.0",
+  "authcode": "08712016070002",
+  "atr_pretend": true,
+  "support_platform": [
+    "linux"
+  ],
+  "expire_date": "20300517",
+  "cardtype": [
+    {
+      "name": "SupCpuCardType",
+      "class": "com.supwisdom.epaycard.impl.SupCpuCardtype",
+      "psamcard": "sup_psamcard",
+      "keymachine": "SupKeyMachine",
+      "debug": false,
+      "fingerprint": [
+        {
+          "initializer": "com.supwisdom.epaycard.impl.FM201810Initializer",
+          "config": [
+            "classpath:res/raw/fmcos_a711.json"
+          ]
+        },
+        {
+          "config": [
+            "classpath:fingerprint/goldpac_e711.json"
+          ],
+          "initializer": "com.supwisdom.epaycard.impl.GoldPacCardInitializer"
+        }
+      ]
+    },
+    {
+      "name": "SupCpuCardTypeWithoutMac",
+      "class": "com.supwisdom.epaycard.impl.SupCardtypeRWOM",
+      "psamcard": "sup_psamcard",
+      "keymachine": "SupKeyMachine",
+      "debug": false,
+      "fingerprint": [
+        {
+          "config": [
+            "classpath:res/raw/eastcompeace_a711.json"
+          ],
+          "initializer": "com.supwisdom.epaycard.impl.GoldPacCardInitializer"
+        }
+      ]
+    },
+    {
+      "name": "SupM1Cardtype",
+      "class": "com.supwisdom.epaycard.impl.SupM1CardType",
+      "psamcard": "sup_psamcard",
+      "keymachine": "SupKeyMachine",
+      "keyalg": "normal2",
+      "version": 2008,
+      "water_packet": 6,
+      "minsect": 0,
+      "maxsect": 6,
+      "init_sections": [
+        1,
+        2,
+        4,
+        5,
+        6
+      ],
+      "debug": false
+    }
+  ],
+  "reader": [
+    {
+      "name": "a711_reader",
+      "class": "com.supwisdom.epaycard.android.A711Reader",
+      "picc_req_times": 1,
+      "rf_interval": 100,
+      "rf_timeout": 300,
+      "debug": false
+    }
+  ],
+  "psamcard": [
+    {
+      "name": "sup_psamcard",
+      "reader": "a711_reader",
+      "keymachine": "SupKeyMachine",
+      "class": "com.supwisdom.epaycard.impl.SupPsamCard",
+      "debug": false,
+      "max_sect_len": 48,
+      "fingerprint": [
+        {
+          "manufactory": "einolda",
+          "fingerprint": "FFFF",
+          "max_block": 56,
+          "offset": 4,
+          "default": true
+        },
+        {
+          "manufactory": "broadstar",
+          "fingerprint": "4253",
+          "offset": 5,
+          "defaultRootKey": "57415443484441544154696D65434F53"
+        }
+      ]
+    }
+  ],
+  "keymachine": [
+    {
+      "name": "SupKeyMachine",
+      "reader": "a711_reader",
+      "debug": false,
+      "class": "com.supwisdom.epaycard.impl.SupKeyCard"
+    }
+  ],
+  "water_setting_card": [
+    {
+      "name": "sup_watercard",
+      "reader": "a711_reader",
+      "keymachine": "SupKeyMachine",
+      "class": "com.supwisdom.epaycard.impl.SupWaterSettingCard"
+    }
+  ]
+}
diff --git a/app/src/main/res/raw/epaycard_hit.cfg b/app/src/main/res/raw/epaycard_hit.cfg
new file mode 100644
index 0000000..7b99201
--- /dev/null
+++ b/app/src/main/res/raw/epaycard_hit.cfg
@@ -0,0 +1,101 @@
+{
+  "version": "1.0",
+  "custname": "supwisdom",
+  "id": "com.supwisdom.epaycard.cpucard.a711",
+  "desc": "新开普A711读卡器",
+  "issue_date": "20171221",
+  "custom_version": "v1.0",
+  "authcode": "08712016070002",
+  "atr_pretend": true,
+  "support_platform": [
+    "linux"
+  ],
+  "expire_date": "20300517",
+  "cardtype": [
+    {
+      "name": "SupCpuCardTypeWithoutMac",
+      "class": "com.supwisdom.epaycard.impl.SupCardtypeRWOM",
+      "psamcard": "sup_psamcard",
+      "keymachine": "SupKeyMachine",
+      "debug": false,
+      "fingerprint": [
+        {
+          "config": [
+            "classpath:res/raw/eastcompeace_a711.json"
+          ],
+          "initializer": "com.supwisdom.epaycard.impl.GoldPacCardInitializer"
+        }
+      ]
+    },
+    {
+      "name": "SupM1Cardtype",
+      "class": "com.supwisdom.epaycard.impl.SupM1CardType",
+      "psamcard": "sup_psamcard",
+      "keymachine": "SupKeyMachine",
+      "keyalg": "normal2",
+      "version": 2008,
+      "water_packet": 6,
+      "minsect": 0,
+      "maxsect": 6,
+      "init_sections": [
+        1,
+        2,
+        4,
+        5,
+        6
+      ],
+      "debug": false
+    }
+  ],
+  "reader": [
+    {
+      "name": "a711_reader",
+      "class": "com.supwisdom.epaycard.android.A711Reader",
+      "picc_req_times": 1,
+      "rf_interval": 100,
+      "rf_timeout": 300,
+      "debug": false
+    }
+  ],
+  "psamcard": [
+    {
+      "name": "sup_psamcard",
+      "reader": "a711_reader",
+      "keymachine": "SupKeyMachine",
+      "class": "com.supwisdom.epaycard.impl.SupPsamCard",
+      "debug": false,
+      "max_sect_len": 48,
+      "fingerprint": [
+        {
+          "manufactory": "einolda",
+          "fingerprint": "FFFF",
+          "max_block": 56,
+          "offset": 4,
+          "default": true
+        },
+        {
+          "manufactory": "broadstar",
+          "fingerprint": "4253",
+          "offset": 5,
+          "defaultRootKey": "57415443484441544154696D65434F53"
+        }
+      ]
+    }
+  ],
+  "keymachine": [
+    {
+      "name": "SupKeyMachine",
+      "reader": "a711_reader",
+      "debug": false,
+      "class": "com.supwisdom.epaycard.impl.SupKeyCard"
+    }
+  ],
+  "water_setting_card": [
+    {
+      "name": "sup_watercard",
+      "reader": "a711_reader",
+      "keymachine": "SupKeyMachine",
+      "class": "com.supwisdom.epaycard.impl.SupWaterSettingCard"
+    }
+  ]
+}
diff --git a/app/src/main/res/raw/fmcos_a711.json b/app/src/main/res/raw/fmcos_a711.json
new file mode 100644
index 0000000..20035ee
--- /dev/null
+++ b/app/src/main/res/raw/fmcos_a711.json
@@ -0,0 +1,11 @@
+{
+  "desc" : "FM1208卡",
+  "manufactory" :"fmcos1208",
+  "fingerprint" : [
+    {
+      "fingerprint": "20900000000000",
+      "offset": 0,
+      "defaultRootKey": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/app/src/main/res/raw/gatein_fail.wav b/app/src/main/res/raw/gatein_fail.wav
new file mode 100644
index 0000000..0de1b71
--- /dev/null
+++ b/app/src/main/res/raw/gatein_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/gatein_suc.wav b/app/src/main/res/raw/gatein_suc.wav
new file mode 100644
index 0000000..56b106c
--- /dev/null
+++ b/app/src/main/res/raw/gatein_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/gateout_fail.wav b/app/src/main/res/raw/gateout_fail.wav
new file mode 100644
index 0000000..4b2c39c
--- /dev/null
+++ b/app/src/main/res/raw/gateout_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/gateout_suc.wav b/app/src/main/res/raw/gateout_suc.wav
new file mode 100644
index 0000000..e04a659
--- /dev/null
+++ b/app/src/main/res/raw/gateout_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/goldpac_a711.json b/app/src/main/res/raw/goldpac_a711.json
new file mode 100644
index 0000000..20a5f2d
--- /dev/null
+++ b/app/src/main/res/raw/goldpac_a711.json
@@ -0,0 +1,16 @@
+{
+  "desc" : "金邦达卡",
+  "manufactory" :"goldpac",
+  "fingerprint" : [
+    {
+      "fingerprint": "80318066",
+      "offset": 2,
+      "defaultRootKey": "00000000000000000000000000000000"
+    },
+    {
+      "fingerprint": "057880A002",
+      "offset": 4,
+      "defaultRootKey": "00000000000000000000000000000000"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/app/src/main/res/raw/key_add.wav b/app/src/main/res/raw/key_add.wav
new file mode 100644
index 0000000..8fe2703
--- /dev/null
+++ b/app/src/main/res/raw/key_add.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_clear.wav b/app/src/main/res/raw/key_clear.wav
new file mode 100644
index 0000000..3c29559
--- /dev/null
+++ b/app/src/main/res/raw/key_clear.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_dot.wav b/app/src/main/res/raw/key_dot.wav
new file mode 100644
index 0000000..69232dc
--- /dev/null
+++ b/app/src/main/res/raw/key_dot.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_eight.wav b/app/src/main/res/raw/key_eight.wav
new file mode 100644
index 0000000..484f755
--- /dev/null
+++ b/app/src/main/res/raw/key_eight.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_enter.wav b/app/src/main/res/raw/key_enter.wav
new file mode 100644
index 0000000..5386f86
--- /dev/null
+++ b/app/src/main/res/raw/key_enter.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_ffour.wav b/app/src/main/res/raw/key_ffour.wav
new file mode 100644
index 0000000..6b94cb9
--- /dev/null
+++ b/app/src/main/res/raw/key_ffour.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_five.wav b/app/src/main/res/raw/key_five.wav
new file mode 100644
index 0000000..830e234
--- /dev/null
+++ b/app/src/main/res/raw/key_five.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_fone.wav b/app/src/main/res/raw/key_fone.wav
new file mode 100644
index 0000000..59adfde
--- /dev/null
+++ b/app/src/main/res/raw/key_fone.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_four.wav b/app/src/main/res/raw/key_four.wav
new file mode 100644
index 0000000..5580975
--- /dev/null
+++ b/app/src/main/res/raw/key_four.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_fthree.wav b/app/src/main/res/raw/key_fthree.wav
new file mode 100644
index 0000000..1291d25
--- /dev/null
+++ b/app/src/main/res/raw/key_fthree.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_ftwo.wav b/app/src/main/res/raw/key_ftwo.wav
new file mode 100644
index 0000000..07fd91c
--- /dev/null
+++ b/app/src/main/res/raw/key_ftwo.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_nine.wav b/app/src/main/res/raw/key_nine.wav
new file mode 100644
index 0000000..7013cb5
--- /dev/null
+++ b/app/src/main/res/raw/key_nine.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_one.wav b/app/src/main/res/raw/key_one.wav
new file mode 100644
index 0000000..3b998f3
--- /dev/null
+++ b/app/src/main/res/raw/key_one.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_seven.wav b/app/src/main/res/raw/key_seven.wav
new file mode 100644
index 0000000..e5226ce
--- /dev/null
+++ b/app/src/main/res/raw/key_seven.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_six.wav b/app/src/main/res/raw/key_six.wav
new file mode 100644
index 0000000..2e25469
--- /dev/null
+++ b/app/src/main/res/raw/key_six.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_three.wav b/app/src/main/res/raw/key_three.wav
new file mode 100644
index 0000000..ad00780
--- /dev/null
+++ b/app/src/main/res/raw/key_three.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_two.wav b/app/src/main/res/raw/key_two.wav
new file mode 100644
index 0000000..56fc1de
--- /dev/null
+++ b/app/src/main/res/raw/key_two.wav
Binary files differ
diff --git a/app/src/main/res/raw/key_zero.wav b/app/src/main/res/raw/key_zero.wav
new file mode 100644
index 0000000..4fd1864
--- /dev/null
+++ b/app/src/main/res/raw/key_zero.wav
Binary files differ
diff --git a/app/src/main/res/raw/login_fail.wav b/app/src/main/res/raw/login_fail.wav
new file mode 100644
index 0000000..3e901c7
--- /dev/null
+++ b/app/src/main/res/raw/login_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/login_suc.wav b/app/src/main/res/raw/login_suc.wav
new file mode 100644
index 0000000..70a4ee2
--- /dev/null
+++ b/app/src/main/res/raw/login_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/pay_fail.wav b/app/src/main/res/raw/pay_fail.wav
new file mode 100644
index 0000000..85dbb67
--- /dev/null
+++ b/app/src/main/res/raw/pay_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/pay_suc.wav b/app/src/main/res/raw/pay_suc.wav
new file mode 100644
index 0000000..e0e8945
--- /dev/null
+++ b/app/src/main/res/raw/pay_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/query_fail.wav b/app/src/main/res/raw/query_fail.wav
new file mode 100644
index 0000000..4532286
--- /dev/null
+++ b/app/src/main/res/raw/query_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/query_suc.wav b/app/src/main/res/raw/query_suc.wav
new file mode 100644
index 0000000..d156756
--- /dev/null
+++ b/app/src/main/res/raw/query_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/reversal_done.wav b/app/src/main/res/raw/reversal_done.wav
new file mode 100644
index 0000000..72804bb
--- /dev/null
+++ b/app/src/main/res/raw/reversal_done.wav
Binary files differ
diff --git a/app/src/main/res/raw/reversal_fail.wav b/app/src/main/res/raw/reversal_fail.wav
new file mode 100644
index 0000000..2e314be
--- /dev/null
+++ b/app/src/main/res/raw/reversal_fail.wav
Binary files differ
diff --git a/app/src/main/res/raw/reversal_suc.wav b/app/src/main/res/raw/reversal_suc.wav
new file mode 100644
index 0000000..61f1c8a
--- /dev/null
+++ b/app/src/main/res/raw/reversal_suc.wav
Binary files differ
diff --git a/app/src/main/res/raw/scan_beep.ogg b/app/src/main/res/raw/scan_beep.ogg
new file mode 100644
index 0000000..1419947
--- /dev/null
+++ b/app/src/main/res/raw/scan_beep.ogg
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_eight.wav b/app/src/main/res/raw/sound_key_eight.wav
new file mode 100644
index 0000000..82d8b26
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_eight.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_five.wav b/app/src/main/res/raw/sound_key_five.wav
new file mode 100644
index 0000000..b35596c
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_five.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_four.wav b/app/src/main/res/raw/sound_key_four.wav
new file mode 100644
index 0000000..f56c4ee
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_four.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_nine.wav b/app/src/main/res/raw/sound_key_nine.wav
new file mode 100644
index 0000000..20722db
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_nine.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_one.wav b/app/src/main/res/raw/sound_key_one.wav
new file mode 100644
index 0000000..faf8bdb
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_one.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_seven.wav b/app/src/main/res/raw/sound_key_seven.wav
new file mode 100644
index 0000000..9baaafc
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_seven.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_six.wav b/app/src/main/res/raw/sound_key_six.wav
new file mode 100644
index 0000000..cb4b14e
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_six.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_three.wav b/app/src/main/res/raw/sound_key_three.wav
new file mode 100644
index 0000000..354a26d
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_three.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_two.wav b/app/src/main/res/raw/sound_key_two.wav
new file mode 100644
index 0000000..87898f3
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_two.wav
Binary files differ
diff --git a/app/src/main/res/raw/sound_key_zero.wav b/app/src/main/res/raw/sound_key_zero.wav
new file mode 100644
index 0000000..be4f0cb
--- /dev/null
+++ b/app/src/main/res/raw/sound_key_zero.wav
Binary files differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..dae37ff
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,106 @@
+<resources>
+
+    <color name="black_overlay">#66000000</color>
+    <color name="btn_light_blue">#5bc0de</color>
+    <color name="light_gray">#ffa2a2a2</color>
+    <color name="light_gray1">#cdcdcd</color>
+    <color name="light_green">#46d608</color>
+    <color name="light_green1">#83f800</color>
+    <color name="light_green2">#05a910</color>
+    <color name="light_blue1">#00bb9c</color>
+    <color name="light_purple">#ed07d0</color>
+    <color name="light_purple1">#f57cc3</color>
+    <color name="light_purple2">#b20469</color>
+    <color name="light_blue">#7899c4</color>
+    <color name="light_yellow">#e1cb28</color>
+    <color name="light_yellow_2">#ffffe928</color>
+    <color name="light_yellow_3">#fffe9f</color>
+    <color name="light_black">#424652</color>
+    <color name="white_gray">#f9f9f9</color>
+    <color name="white">#FFFFFF</color>
+    <color name="pwdColor">#999999</color>
+    <color name="password_hint">#666666</color>
+    <color name="orange">#FD7201</color>
+    <color name="orange1">#FF6600</color>
+    <color name="black">#000</color>
+    <color name="blue">#0c0de1</color>
+    <color name="dark_blue1">#13227a</color>
+    <color name="light_blue2">#2D95E0</color>
+    <color name="dark_blue">#0E1C36</color>
+    <color name="lit_light_gray">#23292E</color>
+    <color name="light_gray_white">#EEEEEE</color>
+    <color name="result_view">#b0000000</color>
+    <color name="viewfinder_mask">#60000000</color>
+    <color name="possible_result_points">#c0ffff00</color>
+    <color name="key_btn_color">#EEEEEE</color>
+    <color name="cl_red">#FF0000</color>
+    <color name="pos_theme_color">#08ae9e</color>
+    <color name="consume_caption">#434343</color>
+    <color name="consume_font">#666666</color>
+    <color name="consume_background">#f3f3f3</color>
+    <color name="main_back_consume_normal">#F15D5D</color>
+    <color name="main_back_consume_click">#E55A5A</color>
+    <color name="main_back_online_deposit_normal">#7E62F8</color>
+    <color name="main_back_online_deposit_click">#785EEB</color>
+    <color name="main_back_device_manage_normal">#7E62F8</color>
+    <color name="main_back_device_manage_click">#785EEB</color>
+    <!--<color custname="main_back_cancel_consume_normal">#25A3B3</color>-->
+    <!--<color custname="main_back_cancel_consume_click">#2396A6</color>-->
+    <color name="main_back_query_revenue_normal">#999999</color>
+    <!--<color custname="main_back_query_revenue_click">#85A629</color>-->
+    <color name="main_back_library_normal">#8EB32C</color>
+    <color name="main_back_library_click">#85A629</color>
+    <color name="main_back_manual_auth_normal">#8EB32C</color>
+    <color name="main_back_manual_auth_click">#85A629</color>
+    <color name="bk_set_block">#F3F3F3</color>
+    <!--<color custname="main_back_update_blacklist_normal">#7E62F8</color>-->
+    <!--<color custname="main_back_update_blacklist_click">#785EEB</color>-->
+    <color name="main_back_update_blacklist_normal">#F28923</color>
+    <color name="main_back_update_blacklist_click">#F28923</color>
+    <color name="main_back_online_order_normal">#F28923</color>
+    <color name="main_back_online_order_click">#F28923</color>
+    <color name="main_back_transdtl_normal">#20A193</color>
+    <color name="main_back_transdtl_click">#1E9486</color>
+    <!--<color custname="main_back_test_net_normal">#F15D5D</color>-->
+    <!--<color custname="main_back_test_net_click">#E55A5A</color>-->
+    <color name="main_back_test_net_normal">#F15D5D</color>
+    <color name="main_back_test_net_click">#E55A5A</color>
+
+    <color name="main_back_query_para_normal">#20A193</color>
+    <color name="main_back_query_para_click">#1E9486</color>
+    <!--<color custname="main_back_device_manage_normal">#2f87d2</color>-->
+    <!--<color custname="main_back_device_manage_click">#2b7dc4</color>-->
+    <color name="main_online_bak">#f1f1f1</color>
+    <color name="main_offline_font">#888888</color>
+    <!--启用界面-->
+    <color name="enable_text_font_color">#333333</color>
+    <color name="enable_devphyid_edit_font_color">#666666</color>
+    <color name="enable_bak">#f1f1f1</color>
+    <color name="enable_step_doing">#333333</color>
+    <color name="enable_step_fail">#ff0000</color>
+    <color name="enable_step_success">#8fccc6</color>
+    <!--设置界面-->
+    <color name="main_divide_line">#e8e8e8</color>
+    <color name="set_menu_bak_normal">#f3f3f3</color>
+    <color name="set_menu_bak_focus">#e4e4e4</color>
+    <color name="set_menu_words">#333333</color>
+    <color name="rf_words_info">#666666</color>
+    <color name="pos_theme_font_color">#333333</color>
+    <!--查询界面下一页按钮的颜色-->
+    <color name="query_next_btn_focus">#08a191</color>
+    <color name="query_next_btn_normal">#08ae9e</color>
+    <!--点餐-->
+    <color name="order_food_list_bak">#fffece</color>
+    <color name="order_picture_food_price">#434343</color>
+    <color name="order_picture_dec">#333333</color>
+    <color name="order_left_count_one">#434343</color>
+    <color name="order_left_count_over_two">#ff0000</color>
+    <color name="order_count_price_col">#ff6a00</color>
+    <color name="order_picture_price_bak">#80161616</color>
+    <color name="order_dec_btn_normal">#333333</color>
+    <color name="order_dec_btn_focus">#FF9900</color>
+    <color name="order_picture_history">#999999</color>
+    <color name="bak_order">#eeeeee</color>
+    <color name="query_font_color">#ffffff</color>
+    <color name="query_background_color">#eeeeee</color>
+</resources>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..6b58d35
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,309 @@
+<resources>
+    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+         (such as screen margins) for screens with more than 820dp of available width. This
+         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+    <dimen name="activity_horizontal_margin">64dp</dimen>
+    <!--dimen custname="activity_horizontal_margin">16dp</dimen-->
+    <dimen name="activity_vertical_margin">16dp</dimen>
+    <dimen name="key_text_size">100sp</dimen>
+    <!--密码界面-->
+    <dimen name="password_margin_horizontal">10dip</dimen>
+    <dimen name="password_margin_vertical">1dip</dimen>
+    <dimen name="password_left_width">320dip</dimen>
+    <dimen name="password_left_obj_gap">10dip</dimen>
+    <dimen name="password_left_word_margin_top">50dip</dimen>
+    <dimen name="password_hint_size">50sp</dimen>
+    <dimen name="password_char_size">80sp</dimen>
+    <dimen name="password_pwd_char_margin_top">-13dip</dimen>
+    <!--密码界面下-->
+    <dimen name="password_right_btn_margin">20dip</dimen>
+    <dimen name="password_right_margin_left">50dip</dimen>
+    <dimen name="password_pwd_size">110dip</dimen>
+    <dimen name="password_pwd_inner_size">102dip</dimen>
+    <dimen name="password_pwd_inner_length">4dip</dimen>
+    <dimen name="password_btn_size">150dip</dimen>
+    <dimen name="password_right_margin_top">30dip</dimen>
+
+    <!--消费界面左-->
+    <dimen name="consume_left_middle_height">241dip</dimen>
+    <dimen name="consume_waiting_margin_left">18dip</dimen>
+    <dimen name="consume_waiting_margin_top">104dip</dimen>
+    <dimen name="consume_waiting_size">19sp</dimen>
+    <dimen name="consume_left_middle_line_height">52dip</dimen>
+    <dimen name="consume_left_middle_line_margin_left">18dip</dimen>
+    <dimen name="consume_left_middle_line_margin_top">18dip</dimen>
+    <dimen name="consume_caption_width">78dip</dimen>
+    <dimen name="consume_caption_size">19sp</dimen>
+    <dimen name="consume_left_down_height">62dip</dimen>
+    <dimen name="consume_left_down_words_margin_left">18dip</dimen>
+    <dimen name="consume_left_down_words_margin_top">12dip</dimen>
+    <dimen name="consume_amount_margin_top">12dip</dimen>
+    <dimen name="consume_title_size">22sp</dimen>
+    <dimen name="consume_amount_size">21sp</dimen>
+    <dimen name="consume_left_width">250dip</dimen>
+    <!--消费界面右-->
+    <dimen name="consume_right_margin_left">12dip</dimen>
+    <dimen name="consume_right_line_height">67dip</dimen>
+    <dimen name="consume_key_button_width">128dip</dimen>
+    <dimen name="consume_right_down_btn_width">181dip</dimen>
+    <dimen name="main_words_size">20sp</dimen>
+    <dimen name="main_caption_size">26sp</dimen>
+    <dimen name="main_top_caption_indent">10dip</dimen>
+    <dimen name="main_icon_marginRight">27dip</dimen>
+    <dimen name="main_icon_marginBottom">45dip</dimen>
+    <!---普通消费界面-->
+    <dimen name="consume_ordinary_key_height">580dp</dimen>
+    <!--主界面-->
+    <dimen name="main_top_height">485dip</dimen>
+    <dimen name="main_top_line_height">241.5dip</dimen>
+    <dimen name="main_bottom_line_height">119.75dip</dimen>
+    <dimen name="main_bottom_icon_size">49dip</dimen>
+    <dimen name="main_transdtl_icon_size">41dip</dimen>
+    <dimen name="main_words_margin">26dip</dimen>
+    <dimen name="main_top_icon_size">100dip</dimen>
+    <dimen name="main_divide_horizontal">2dip</dimen>
+    <dimen name="main_divide_vertical">2dip</dimen>
+    <dimen name="main_online_height">69dip</dimen>
+    <dimen name="main_online_img_size">40dip</dimen>
+    <dimen name="main_online_font_size">22sp</dimen>
+    <dimen name="main_online_gap">39dip</dimen>
+    <!--主界面上-->
+    <dimen name="main_top_img_margin_top">38dip</dimen>
+    <dimen name="main_query_revenue_margin_big">29dip</dimen>
+    <dimen name="main_query_revenue_margin_title">248dip</dimen>
+    <dimen name="main_query_revenue_margin_giant">88dip</dimen>
+    <dimen name="main_query_revenue_words_gap_vertical">4dip</dimen>
+    <!--主界面上左-->
+    <dimen name="main_top_left_width">508.67dip</dimen>
+    <dimen name="main_transdtl_width">508.67dip</dimen>
+    <dimen name="main_button_width">253.33dip</dimen>
+    <dimen name="main_transdtl_hint_margin_left">156dip</dimen>
+    <dimen name="main_transdtl_hint_margin_top">98dip</dimen>
+    <dimen name="main_trussdtl_hint_margin_top">138dip</dimen>
+    <dimen name="main_transdtl_icon_marginBottom">10dip</dimen>
+    <dimen name="main_transdtl_icon_marginRight">142dip</dimen>
+    <dimen name="main_transdtl_words_marginBottom">10dip</dimen>
+    <dimen name="main_transdtl_words_marginRight">40dip</dimen>
+    <!--主界面底部-->
+    <dimen name="main_bottom_icon_margin_top">38dip</dimen>
+    <dimen name="main_bottom_icon_margin_left">8dip</dimen>
+    <dimen name="main_bottom_words_margin_left">23dip</dimen>
+    <dimen name="main_upd_blacklist_words_margin_left">15dip</dimen>
+    <dimen name="main_bottom_words_margin_top">48dip</dimen>
+    <!--查询界面-->
+    <dimen name="query_title_height">55dip</dimen>
+    <dimen name="query_thick_line_width">3dip</dimen>
+    <dimen name="query_thick_line_height">18dip</dimen>
+    <dimen name="query_content_height">55dip</dimen>
+    <dimen name="query_line_margin_top">3dip</dimen>
+    <dimen name="query_words_margin_left">144dip</dimen>
+    <dimen name="query_words_size">26sp</dimen>
+    <dimen name="query_icon_margin_left">12dip</dimen>
+    <dimen name="query_title_margin_left">6dip</dimen>
+    <dimen name="query_half_width">320dip</dimen>
+    <dimen name="query_right_block_margin_top">6dip</dimen>
+    <!--查询界面翻页按钮-->
+    <dimen name="query_turn_page_words_margin_left">6dip</dimen>
+    <dimen name="query_turn_page_btn_size">25dip</dimen>
+    <dimen name="query_turn_page_btn_margin_left">220dip</dimen>
+    <dimen name="query_prev_margin_top">230dip</dimen>
+    <!--消费流水界面-->
+    <dimen name="revenue_btn_size">35dp</dimen>
+    <dimen name="revenue_serch_text_size">30dp</dimen>
+    <dimen name="revenue_list_size">25dp</dimen>
+    <dimen name="revenue_item_size">22dp</dimen>
+    <!--设置界面通用-->
+    <dimen name="set_menu_height">100dip</dimen>
+    <dimen name="set_menu_text_size">30sp</dimen>
+    <dimen name="set_block_words_margin_left">12dip</dimen>
+    <dimen name="set_block_words_width">360dip</dimen>
+    <dimen name="set_arrow_size">19dip</dimen>
+    <dimen name="set_block_width">300dip</dimen>
+    <dimen name="set_block_margin_top">35dip</dimen>
+    <dimen name="set_block_margin_bottom">35dip</dimen>
+
+    <!--恢复出厂界面-->
+    <dimen name="rf_middle_btn_width">108dip</dimen>
+    <dimen name="rf_middle_btn_height">49dip</dimen>
+    <dimen name="rf_middle_words_height">117dip</dimen>
+    <dimen name="rf_words_size">25sp</dimen>
+    <dimen name="rf_middle_btn_margin_bottom">18dip</dimen>
+    <dimen name="rf_progress_bar_height">3dip</dimen>
+    <dimen name="rf_progress_bar_width">481dip</dimen>
+    <!--启用界面-->
+    <dimen name="enable_devphyid_line_inner_gap">15dip</dimen>
+    <dimen name="enable_title_text_size">32sp</dimen>
+    <dimen name="enable_devphyid_font_size">28sp</dimen>
+    <dimen name="enable_devphyid_line_gap">20dip</dimen>
+    <dimen name="enable_devphyid_btn_margin_top">50dip</dimen>
+    <dimen name="enable_devphyid_line_margin_top">80dip</dimen>
+    <dimen name="enable_devphyid_text_width">110dip</dimen>
+    <dimen name="enable_devphyid_edit_width">560dip</dimen>
+    <dimen name="enable_confirm_width">100dip</dimen>
+    <dimen name="enable_confirm_height">50dip</dimen>
+    <dimen name="enable_devphyid_middle_width">668dip</dimen>
+    <dimen name="enable_devphyid_middle_height">660dip</dimen>
+    <dimen name="enable_devphyid_margin_top">70dip</dimen>
+    <dimen name="enable_devphyid_middle_margin_top">20dip</dimen>
+    <dimen name="enable_btn_width">150dip</dimen>
+    <dimen name="enable_btn_height">80dip</dimen>
+    <dimen name="enable_devphyid_btn_gap">150dip</dimen>
+    <!--启用步骤页面-->
+    <dimen name="enable_step_text_size">26sp</dimen>
+    <dimen name="enable_step_line_margin_top">35dip</dimen>
+    <dimen name="enable_step_line_gap">32dip</dimen>
+    <dimen name="enable_step_words_margin_left">20dip</dimen>
+    <dimen name="enable_step_middle_width">668dip</dimen>
+    <dimen name="enable_step_middle_height">660dip</dimen>
+    <dimen name="enable_auth_btn_margin_top">520dip</dimen>
+    <dimen name="enable_auth_text_margin_top">360dip</dimen>
+    <!--设置通讯参数界面-->
+    <dimen name="set_server_line_height">120dip</dimen>
+    <dimen name="set_server_middle_width">600dip</dimen>
+    <dimen name="set_server_middle_height">570dip</dimen>
+    <dimen name="set_server_btn_width">150dip</dimen>
+    <dimen name="set_server_btn_height">60dip</dimen>
+    <dimen name="set_server_btns_text_size">22sp</dimen>
+    <dimen name="set_server_btn_margin_right">100dip</dimen>
+    <!--所有界面的返回按钮-->
+    <dimen name="all_back_line_height">72dip</dimen>
+    <dimen name="all_back_img_size">45dip</dimen>
+    <dimen name="all_back_word_width">115dip</dimen>
+    <dimen name="all_back_word_height">58dip</dimen>
+    <dimen name="all_back_word_margin_left">5dip</dimen>
+    <dimen name="all_back_words_size">30sp</dimen>
+    <dimen name="all_back_img_padtop">60dp</dimen>
+    <dimen name="all_back_img_padleft">20dp</dimen>
+    <!--本地控制参数-->
+    <dimen name="control_para_gap">20dp</dimen>
+    <dimen name="control_para_text_size">28dp</dimen>
+    <!--行间间隔-->
+    <dimen name="line_divide">20dp</dimen>
+    <!--点餐上-->
+    <dimen name="order_picture_section_line_height">252dip</dimen>
+    <dimen name="order_picture_out_width">184dip</dimen>
+    <dimen name="order_picture_inner_width">183dip</dimen>
+    <dimen name="order_picture_inner_height">196dip</dimen>
+    <dimen name="order_picture_simple_inner_width">252dip</dimen>
+    <dimen name="order_picture_simple_inner_height18">135dip</dimen>
+    <dimen name="order_picture_simple_inner_height21">115dip</dimen>
+    <dimen name="order_picture_simple_inner_height24">100dip</dimen>
+    <dimen name="order_picture_simple_inner_height27">90dip</dimen>
+    <dimen name="order_picture_simple_inner_height30">80dip</dimen>
+    <dimen name="order_picture_inner_margin">5dip</dimen>
+    <dimen name="order_picture_out_margin">2dip</dimen>
+    <dimen name="order_picture_price_margin_left">5dip</dimen>
+    <dimen name="order_picture_price_left_width">100dip</dimen>
+    <dimen name="order_picture_big_price_text_size">40sp</dimen>
+    <dimen name="order_picture_price_text_size">28sp</dimen>
+    <dimen name="order_picture_dec_text_size">20sp</dimen>
+    <dimen name="order_zoom_btn_width">57dip</dimen>
+    <dimen name="order_zoom_btn_height">67dip</dimen>
+    <dimen name="order_picture_count_text_size">28sp</dimen>
+    <dimen name="order_picture_section_height">830dip</dimen>
+    <dimen name="order_picture_food_name_height">57dip</dimen>
+    <dimen name="order_order_num_control_btn_size">55dip</dimen>
+    <dimen name="order_purchase_count_margin">10dip</dimen>
+    <dimen name="order_picture_text_si">10dip</dimen>
+    <!--点餐下-->
+    <dimen name="order_food_count_pack_margin_left">20dip</dimen>
+    <dimen name="order_food_name_margin_left">5dip</dimen>
+    <dimen name="order_down_height">200dip</dimen>
+    <dimen name="order_food_name_width">150dip</dimen>
+    <dimen name="order_food_count_width">50dip</dimen>
+    <dimen name="order_food_count_pack_width">170dip</dimen>
+    <dimen name="order_down_btn_text">45sp</dimen>
+    <dimen name="order_down_btn_margin_top">45dip</dimen>
+    <dimen name="order_down_gap">10dip</dimen>
+    <dimen name="order_down_left_width">324dip</dimen>
+    <dimen name="order_list_item_text_size">24sp</dimen>
+    <dimen name="order_total_price_text_size">48sp</dimen>
+    <dimen name="order_clear_btn_width">132dip</dimen>
+    <dimen name="order_clear_btn_height">100dip</dimen>
+    <dimen name="order_purchase_btn_width">216dip</dimen>
+    <dimen name="order_list_item_height">38dip</dimen>
+    <dimen name="order_purchase_btn_height">100dip</dimen>
+    <dimen name="order_total_price_margin_top">20dip</dimen>
+    <dimen name="order_picture_text_size1">30dip</dimen>
+    <dimen name="order_picture_text_size2">35dip</dimen>
+    <dimen name="order_picture_text_size3">40dip</dimen>
+    <!--点餐等待-->
+    <dimen name="order_purchase_star_gap">20dip</dimen>
+    <dimen name="order_purchase_title_height">100dip</dimen>
+    <dimen name="order_purchase_star_height">100dip</dimen>
+    <dimen name="order_wait_purchase_width">650dip</dimen>
+    <dimen name="order_wait_purchase_height">500dip</dimen>
+    <!--普通消费弹窗-->
+    <dimen name="ordinary_consume_home_width">600dip</dimen>
+    <dimen name="ordinary_consume_home_height">450dip</dimen>
+    <dimen name="ordinary_consume_text_size">40sp</dimen>
+    <dimen name="ordinary_consume_uint_size">30dp</dimen>
+    <!--点餐大图-->
+    <dimen name="order_big_picture_price_margin_left">25dip</dimen>
+    <dimen name="order_big_picture_margin_top">70dip</dimen>
+    <dimen name="order_add_food_btn_size">60dip</dimen>
+    <dimen name="order_big_picture_out_width">670dip</dimen>
+    <dimen name="order_big_picture_out_height">562dip</dimen>
+    <dimen name="order_big_picture_inner_width">654dip</dimen>
+    <dimen name="order_big_picture_inner_height">457dip</dimen>
+    <dimen name="order_big_picture_inner_margin">8dip</dimen>
+    <dimen name="order_big_picture_text">50sp</dimen>
+    <dimen name="order_big_picture_food_info_height">119dip</dimen>
+    <dimen name="order_big_picture_food_info_height_half">59dip</dimen>
+    <dimen name="order_big_picture_close_btn_size">75dip</dimen>
+    <dimen name="order_big_picture_confirm_btn_width">200dip</dimen>
+    <dimen name="order_big_picture_confirm_btn_height">75dip</dimen>
+    <dimen name="order_big_picture_confirm_btn_margin_left">170dip</dimen>
+    <dimen name="order_big_picture_count_width">140dip</dimen>
+    <dimen name="order_big_picture_count_height">70dip</dimen>
+    <dimen name="order_big_picture_price_width">200dip</dimen>
+    <dimen name="order_big_picture_dec_margin_left">150dip</dimen>
+    <dimen name="order_picture_history_text_size">12sp</dimen>
+    <dimen name="order_picture_minus_height">43dip</dimen>
+    <dimen name="order_picture_minus_width">80dip</dimen>
+    <dimen name="order_picture_minus_margin_right">6dip</dimen>
+    <dimen name="main_bottom_button_width">381dip</dimen>
+    <!--悬浮密码界面-->
+    <dimen name="float_password_margin_horizontal">5dip</dimen>
+    <dimen name="float_password_margin_vertical">1dip</dimen>
+    <dimen name="float_password_left_width">160dip</dimen>
+    <dimen name="float_password_left_obj_gap">5dip</dimen>
+    <dimen name="float_password_left_word_margin_top">25dip</dimen>
+    <dimen name="float_password_hint_size">35sp</dimen>
+    <dimen name="float_password_char_size">40sp</dimen>
+    <dimen name="float_password_pwd_char_margin_top">-7dip</dimen>
+    <!--悬浮密码界面下-->
+    <dimen name="float_password_right_btn_margin">20dip</dimen>
+    <dimen name="float_password_right_margin_left">25dip</dimen>
+    <dimen name="float_password_pwd_size">70dip</dimen>
+    <dimen name="float_password_pwd_inner_size">70dip</dimen>
+    <dimen name="float_password_pwd_inner_length">2dip</dimen>
+    <dimen name="float_password_btn_size">100dip</dimen>
+    <dimen name="float_password_right_margin_top">15dip</dimen>
+    <!--充值界面-->
+    <dimen name="deposit_userinfo_gap">20dp</dimen>
+    <dimen name="deposit_text_gap">15dp</dimen>
+    <dimen name="deposit_text_size">30sp</dimen>
+    <dimen name="deposit_item_size">20sp</dimen>
+    <dimen name="deposit_bg_crash_width">200dp</dimen>
+    <dimen name="deposit_bg_crash_height">80dp</dimen>
+    <dimen name="deposit_crash_size">50dp</dimen>
+    <dimen name="deposit_dialog_width">300dp</dimen>
+    <dimen name="deposit_dialog_size">40dp</dimen>
+    <dimen name="deposit_shopname_text_size_small">28sp</dimen>
+    <dimen name="deposit_shopname_text_size_normal">35sp</dimen>
+    <!--支付界面-->
+    <dimen name="pay_text_pad_size">10dp</dimen>
+    <dimen name="pay_text_marginleft">30dp</dimen>
+    <dimen name="pay_module_top_size">10dp</dimen>
+    <dimen name="pay_text_size">35sp</dimen>
+    <dimen name="pay_text_title_size">25sp</dimen>
+    <!--待机界面-->
+    <dimen name="consume_text_pad_size">10dp</dimen>
+    <dimen name="consume_text_size">25sp</dimen>
+    <dimen name="consume_text_size1">30sp</dimen>
+    <dimen name="consume_text_size2">30sp</dimen>
+    <dimen name="consume_text_pad_size1">5dp</dimen>
+    <dimen name="consume_shopname_text_size_middle">28sp</dimen>
+    <dimen name="consume_shopname_text_size_normal">35sp</dimen>
+</resources>
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
new file mode 100644
index 0000000..056a511
--- /dev/null
+++ b/app/src/main/res/values/ids.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright (C) 2008 ZXing authors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<resources>
+    <!-- Messages IDs -->
+    <item name="auto_focus" type="id" />
+    <item name="decode" type="id" />
+    <item name="decode_failed" type="id" />
+    <item name="jump_to_read_card" type="id" />
+    <item name="decode_succeeded" type="id" />
+    <item name="encode_failed" type="id" />
+    <item name="encode_succeeded" type="id" />
+    <item name="launch_product_query" type="id" />
+    <item name="quit" type="id" />
+    <item name="restart_preview" type="id" />
+    <item name="return_scan_result" type="id" />
+    <item name="search_book_contents_failed" type="id" />
+    <item name="search_book_contents_succeeded" type="id" />
+
+
+    <item name="gridview" type="id" />
+    <item name="webview" type="id" />
+
+    <item name="about_version_code" type="id" />
+    <item name="split" type="id" />
+
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..44fc515
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">消费POS机</string>
+    <string name="title_activity_base">基类</string>
+    <string name="action_settings">设置</string>
+    <string name="title_activity_main">主界面</string>
+    <string name="title_activity_psam">操作psam卡</string>
+    <string name="title_activity_readcard">读卡</string>
+    <string name="title_activity_mode">模式</string>
+    <string name="title_activity_init">初始化</string>
+    <string name="title_activity_load">加载</string>
+    <string name="title_activity_comm">通讯</string>
+    <string name="title_activity_control">控制参数</string>
+    <string name="title_activity_consumecancel">消费撤销</string>
+    <string name="title_activity_library">图书缴费</string>
+    <string name="title_activity_recharge">在线充值</string>
+    <string name="cardlib_name">supwisdom.kscpucard</string>
+    <string name="connfail">连接失败</string>
+    <string name="msg_read_card_error">读卡错误</string>
+    <string name="msg_notsupport_card_oper">不支持卡操作</string>
+    <string name="msg_card_data_error">卡数据错误</string>
+    <string name="nfc_not_support">不支持NFC</string>
+    <string name="nfc_disabled">NFC未启动</string>
+    <string name="confirm_open_nfc">是否打开NFC</string>
+    <string name="action_exit">退出</string>
+    <string name="wait_msg">请刷卡</string>
+    <string name="menu_name_set">设置</string>
+    <string name="menu_name_purchase">消费</string>
+    <string name="title_activity_set">设置</string>
+    <string name="hello_world">hello</string>
+    <string name="devtimefmt">yyyyMMddHHmmss</string>
+    <string name="title_activity_transdtl">交易流水查询</string>
+    <string name="no_mf_files">\"无MF文件\"</string>
+    <string name="creat_mf_files">创建MF文件</string>
+    <string name="creat_mf_success">创建MF文件成功</string>
+    <string name="creat_mf_fail">创建MF文件失败</string>
+    <string name="mf_exist">MF退出</string>
+    <string name="error">错误</string>
+    <string name="reset_psam1_success">重设PSAM1成功</string>
+    <string name="reset_psam1_failed">重设psam1失败</string>
+    <string name="reset_psam2_success">重设psam2成功</string>
+    <string name="reset_psam2_failed">重设psam2失败</string>
+    <string name="get_random_number_failed">获取随机数失败</string>
+    <string name="reset_import1">初始化1失败</string>
+    <string name="reset_failed_cannot_get_random_number1">不能获取随机数1</string>
+    <string name="reset_import2">重设2失败</string>
+    <string name="reset_failed_cannot_get_random_number2">获取随机数2失败</string>
+    <string name="title_activity_show_day_consume">营业额查询</string>
+    <string name="title_activity_password">密码设置</string>
+    <string name="isPasswordCancel">isPassWordCancel</string>
+    <string name="consume_img">消费</string>
+    <string name="title_activity_auth">签到</string>
+    <string name="action_saoma">扫码</string>
+    <string name="scan_text">将二维码或条码放入框内完成扫描</string>
+    <string name="home_back">返回</string>
+    <string name="title_activity_consume">普通消费</string>
+    <string name="title_activity_qrcamera">扫码</string>
+    <string name="title_activity_splash">树维pos</string>
+    <string name="waiting_msg">正在识别,请稍后…</string>
+    <string name="username">姓    名</string>
+    <string name="userStuEmpNo">学工号</string>
+    <string name="userExpireDate">有效期</string>
+    <string name="userBalance">余    额</string>
+    <string name="consumeAmount">消费额(元)</string>
+    <string name="title_activity_consume_cancel">消费撤销</string>
+    <string name="title_activity_update_blacklist">更新黑名单</string>
+    <string name="title_activity_recover_factory">恢复出厂</string>
+    <string name="dialogTitle">提示</string>
+    <string name="all_home_words">主页</string>
+    <string name="all_back_words">返回</string>
+    <string name="title_activity_order_online">在线点餐</string>
+    <string name="title_activity_query_parameter_second">查询第二页</string>
+    <string name="devphyid">终端机编号</string>
+    <string name="samNo">SAM卡号</string>
+    <string name="softVerNo">软件版本号</string>
+    <string name="feerateVerNo">收费参数版本号</string>
+    <string name="sysparaVerNo">主参数版本号</string>
+    <string name="cardverno">黑名单参数版本号</string>
+    <string name="devseqno">POS当前流水号</string>
+    <string name="opentime">开机时间</string>
+    <string name="nextPage">下一页</string>
+    <string name="queryParameters">终端参数查询</string>
+    <string name="title_activity_change_mode">更改模式</string>
+    <string name="title_activity_enable">设备启用</string>
+    <string name="offline_words">脱机状态</string>
+    <string name="online_words">联机状态</string>
+    <string name="title_activity_set_server_info">设置通讯参数</string>
+    <string name="title_activity_test_touch">TestTouchActivity</string>
+    <string name="wait_put_card_words"><![CDATA[请刷卡 >>]]></string>
+    <string name="title_activity_hotel">酒店消费</string>
+    <string name="title_activity_manage">设备管理</string>
+    <string name="title_activity_revenue">营业额</string>
+    <string name="title_activity_pay">支付</string>
+    <string name="title_activity_modifypwd">修改密码</string>
+    <string name="title_activity_syspara">系统参数</string>
+    <string name="title_activity_department">部门限制</string>
+    <string name="title_activity_sddtl">SD卡流水</string>
+    <string name="title_activity_cardlib">卡库</string>
+    <string name="title_activity_upgrade">本地升级</string>
+    <!--消费菜单-->
+    <string name="consume_menu_revenue">1-营业额</string>
+    <string name="consume_menu_transdtl_upload">2-上传流水</string>
+    <string name="consume_menu_link_check">3-链路检测</string>
+    <string name="consume_menu_auth">4-手工签到</string>
+    <string name="consume_menu_syspara_query">5-参数查询</string>
+    <string name="consume_menu_manage">6-管理功能</string>
+    <string name="consume_menu_shop_password_set">7-商户密码</string>
+    <string name="consume_menu_consume_mode">8-消费模式</string>
+    <string name="consume_menu_reverse">9-手工冲正</string>
+    <!--消费维护菜单-->
+    <string name="consume_menu_shop_passwd">1-查看商户密码</string>
+    <string name="consume_menu_comm_set">2-通讯参数设置</string>
+    <string name="consume_menu_unconfirm_transdtl">3-查询未上传流水</string>
+    <string name="consume_menu_out_dtl">4-导出本地流水</string>
+    <string name="consume_menu_upgrade">5-软件在线升级</string>
+    <string name="consume_menu_app_exit">6-退出应用程序</string>
+    <string name="consume_menu_setting">7-进入设置界面</string>
+    <string name="consume_menu_clear_blklist">8-清空黑名单</string>
+    <string name="consume_menu_control_set">9-本地参数设置</string>
+    <!--充值菜单-->
+    <string name="deposit_menu_revenue">1-营业额查询</string>
+    <string name="deposit_menu_login_out">2-退出登录</string>
+    <string name="deposit_menu_reverse">3-手工冲正</string>
+    <string name="deposit_menu_param_query">4-参数查询</string>
+    <string name="deposit_menu_param_manage">5-设备管理</string>
+    <string name="deposit_menu_param_link">6-链路检测</string>
+    <!--充值维护菜单-->
+    <string name="deposit_manage_transdtl_clear">1-清空流水</string>
+    <string name="deposit_manage_comm_set">2-参数设置</string>
+    <string name="deposit_manage_upgrade">3-在线升级</string>
+    <string name="deposit_manage_app_exit">4-退出应用</string>
+    <string name="deposit_manage_setting">5-网络设置</string>
+    <!--充值参数-->
+    <string name="deposit_param_opername">操作员</string>
+</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..0e8c119
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,483 @@
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+    </style>
+
+    <style name="FloatingDialog" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:background">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowCloseOnTouchOutside">false</item>
+        <item name="android:windowIsTranslucent">true</item>
+    </style>
+
+    <style name="CustomDialog" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowCloseOnTouchOutside">false</item>
+        <item name="android:windowIsTranslucent">true</item>
+    </style>
+
+    <style name="CustomProgressDialog" parent="@style/CustomDialog">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+    </style>
+
+    <style name="myProgressBarStyleSmal">
+        <item name="android:indeterminateDrawable">@drawable/progress_bg</item>
+        <item name="android:minWidth">100dip</item>
+        <item name="android:maxWidth">100dip</item>
+        <item name="android:minHeight">100dip</item>
+        <item name="android:maxHeight">100dip</item>
+    </style>
+
+    <style name="myProgressBarStyleLarge">
+        <item name="android:indeterminateDrawable">@drawable/big_progress_bg</item>
+        <item name="android:width">200dp</item>
+        <item name="android:height">200dp</item>
+    </style>
+
+    <style name="PayDialog" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:background">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowCloseOnTouchOutside">false</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowNoDisplay">true</item>
+    </style>
+
+    <style name="OtherDialog" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
+        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:background">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowCloseOnTouchOutside">false</item>
+        <item name="android:windowIsTranslucent">false</item>
+    </style>
+    <!--activity_deposit-->
+    <style name="deposit_user_info_layout_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:padding">5dp</item>
+    </style>
+
+    <style name="deposit_user_info_name_style">
+        <item name="android:textSize">@dimen/deposit_text_size</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+    </style>
+
+    <style name="deposit_user_info_value_style">
+        <item name="android:textSize">@dimen/deposit_text_size</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/blue</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:maxLines">1</item>
+    </style>
+
+    <style name="deposit_result_layout_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:paddingLeft">10dp</item>
+        <item name="android:paddingTop">5dp</item>
+    </style>
+
+    <style name="deposit_result_name_style">
+        <item name="android:textSize">@dimen/deposit_text_size</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:maxLines">1</item>
+    </style>
+
+    <style name="deposit_result_value_style">
+        <item name="android:textSize">@dimen/deposit_text_size</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/blue</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:maxLines">1</item>
+    </style>
+    <!--deposit revenue-->
+    <style name="deposit_revenue_statics_layout_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">20dp</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:weightSum">4</item>
+    </style>
+
+    <style name="deposit_revenue_statics_name_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">20sp</item>
+    </style>
+
+    <style name="deposit_revenue_statics_value_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">20sp</item>
+    </style>
+
+    <style name="deposit_revenue_detail_style">
+        <item name="android:textSize">25sp</item>
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:maxLines">1</item>
+    </style>
+
+    <style name="deposit_revenue_date_style">
+        <item name="android:textSize">@dimen/revenue_serch_text_size</item>
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:maxLines">1</item>
+        <item name="android:padding">5dp</item>
+    </style>
+
+    <style name="deposit_revenue_dtl_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:maxLines">1</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">20sp</item>
+    </style>
+
+    <style name="init_param_title_btn_name_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:gravity">center</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">28sp</item>
+    </style>
+
+    <style name="init_param_name_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:gravity">start|center</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">28sp</item>
+    </style>
+
+    <style name="init_param_mode_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">@dimen/enable_devphyid_font_size</item>
+    </style>
+
+    <style name="deposit_dialog_result_name_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">40sp</item>
+    </style>
+
+    <style name="deposit_dialog_result_unit_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:text">" 元"</item>
+    </style>
+
+    <style name="deposit_menu_text_style">
+        <item name="android:textSize">30sp</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/light_blue2</item>
+    </style>
+
+    <style name="deposit_param_ll_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:weightSum">3</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:orientation">horizontal</item>
+    </style>
+
+    <style name="deposit_param_text_name_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">30sp</item>
+    </style>
+
+    <style name="deposit_param_text_value_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">30sp</item>
+    </style>
+
+    <style name="head_title_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">center</item>
+        <item name="android:padding">20dp</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">50sp</item>
+    </style>
+
+    <style name="head_title_inner_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_margin">20dp</item>
+        <item name="android:background">@drawable/corner_bg_white</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+
+    <style name="head_title_out_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:background">@color/light_blue2</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+    <!--菜单项-->
+    <style name="menu_item_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:paddingLeft">5dp</item>
+        <item name="android:paddingTop">5dp</item>
+    </style>
+    <!--参数查询-->
+    <style name="syspara_item_text_ll_sytle">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:weightSum">2</item>
+    </style>
+
+    <style name="syspara_item_text_name_sytle">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">30sp</item>
+    </style>
+
+    <style name="param_set_item_radio_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:paddingTop">5dp</item>
+        <item name="android:paddingLeft">5dp</item>
+    </style>
+
+    <style name="param_item_text_btn_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:background">@drawable/select_bg_keyboard</item>
+        <item name="android:gravity">center</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:textColor">@color/white</item>
+        <item name="android:textSize">@dimen/enable_devphyid_font_size</item>
+    </style>
+
+    <style name="load_info_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">start</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">@dimen/enable_step_text_size</item>
+    </style>
+
+    <style name="control_item_ll_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center_horizontal</item>
+        <item name="android:layout_marginTop">@dimen/control_para_gap</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+
+    <style name="control_item_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:gravity">start|center</item>
+        <item name="android:textColor">@color/enable_text_font_color</item>
+        <item name="android:textSize">@dimen/control_para_text_size</item>
+    </style>
+
+    <style name="control_text_btn_style">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_marginLeft">20dp</item>
+        <item name="android:layout_marginRight">20dp</item>
+        <item name="android:gravity">center</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:background">@drawable/select_bg_keyboard</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">35sp</item>
+    </style>
+
+    <style name="gate_content_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:gravity">center</item>
+        <item name="android:layout_height">0dp</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:padding">@dimen/consume_text_pad_size</item>
+        <item name="android:textSize">90sp</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/orange1</item>
+    </style>
+
+    <style name="gate_dialog_result_text_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:maxLines">1</item>
+        <item name="android:textSize">@dimen/ordinary_consume_text_size</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/orange1</item>
+    </style>
+
+    <style name="consume_wait_account_ll_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:padding">@dimen/consume_text_pad_size1</item>
+    </style>
+
+    <style name="consume_wait_account_paraname_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">@dimen/consume_text_size2</item>
+    </style>
+
+    <style name="consume_wait_account_paraval_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:textColor">@color/blue</item>
+        <item name="android:textSize">@dimen/consume_text_size2</item>
+        <item name="android:maxLines">1</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="consume_wait_account_spec_paraval_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">0dp</item>
+        <item name="android:ellipsize">end</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:textColor">@color/blue</item>
+        <item name="android:textSize">@dimen/consume_text_size2</item>
+        <item name="android:maxLines">1</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="consume_pay_way_hint_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_marginTop">50dp</item>
+        <item name="android:textSize">25sp</item>
+        <item name="android:textStyle">bold</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:gravity">center</item>
+    </style>
+
+    <style name="consume_pay_way_text_style">
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_marginLeft">20dp</item>
+        <item name="android:layout_marginTop">60dp</item>
+        <item name="android:layout_marginRight">20dp</item>
+        <item name="android:background">@drawable/corner_bg_qrcode_hint</item>
+        <item name="android:gravity">center</item>
+        <item name="android:padding">5dp</item>
+        <item name="android:textColor">@color/white</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="consume_pay_way_layout_style">
+        <item name="android:layout_height">380dp</item>
+        <item name="android:layout_marginLeft">20dp</item>
+        <item name="android:layout_marginRight">20dp</item>
+        <item name="android:layout_marginTop">20dp</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:orientation">horizontal</item>
+        <item name="android:background">@drawable/corner_bg_white</item>
+    </style>
+
+    <style name="consume_pay_default_photo_style">
+        <item name="android:layout_width">300dp</item>
+        <item name="android:layout_height">300dp</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:scaleType">fitXY</item>
+    </style>
+
+    <style name="activity_pay_out_ll_style">
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:background">@color/light_blue2</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+
+    <style name="upgrade_text_desc_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:padding">10dp</item>
+        <item name="android:textColor">@color/black</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:maxLines">1</item>
+    </style>
+
+    <style name="upgrade_text_value_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginLeft">10dp</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">30sp</item>
+        <item name="android:maxLines">1</item>
+    </style>
+</resources>
diff --git a/app/src/test/java/com/supwisdom/ExampleUnitTest.kt b/app/src/test/java/com/supwisdom/ExampleUnitTest.kt
new file mode 100644
index 0000000..f32e492
--- /dev/null
+++ b/app/src/test/java/com/supwisdom/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.supwisdom
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+    @Test
+    fun addition_isCorrect() {
+        assertEquals(4, 2 + 2)
+    }
+}
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..3b61f16
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,28 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    ext.kotlin_version = '1.3.31'
+    repositories {
+        google()
+        jcenter()
+        
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:3.4.0'
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
+
+allprojects {
+    repositories {
+        google()
+        jcenter()
+        
+    }
+}
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..85be9ea
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,15 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/keys-app.jks b/keys-app.jks
new file mode 100644
index 0000000..3331a8b
--- /dev/null
+++ b/keys-app.jks
Binary files differ
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/upgrade.py b/upgrade.py
new file mode 100644
index 0000000..8de756f
--- /dev/null
+++ b/upgrade.py
@@ -0,0 +1,48 @@
+#coding=utf-8
+#使用python做升级文件打包
+
+import hashlib
+import sys
+import zipfile
+from os import path
+import subprocess
+
+hashFileName = 'hash256.sign'
+
+	
+def sha256_checknum(apk):
+	hash256 = hashlib.sha256()
+	srcFile = open(apk,'rb')
+	with srcFile as f:
+		for block in iter(lambda:f.read(4096),b''):
+			hash256.update(block);
+	srcFile.close()
+	hash256.update(b'nzoqPYMIu91VViA/mEIG5FtJXi8=')
+	
+	hashFile = path.dirname(apk)+'/'+hashFileName
+	print('hashFile = '+hashFile)
+	destFile = open(hashFile,'w+')
+	destFile.write(hash256.hexdigest())
+	destFile.close()
+	
+def zip_file(apk):
+	fileDir = path.dirname(apk)
+	version = subprocess.check_output(['git', 'describe', '--abbrev=4','--dirty','--always','--tags']).strip().decode('utf-8')
+	zipFile = fileDir+'/posa711'+'-'+version+'.zip'
+	print('zipFile = '+zipFile)
+	
+	zf = zipfile.ZipFile(zipFile,'w',zipfile.ZIP_DEFLATED)
+	zf.write(fileDir+'/'+hashFileName,hashFileName)
+	zf.write(apk,'posa711.apk')
+	zf.close()
+
+if __name__ == '__main__':
+	appFile = './app/release/app-release.apk'
+	print('appFile = ' + appFile)
+	
+	if not path.exists(appFile):
+		print(appFile +' is not exist')
+		exit()
+	sha256_checknum(appFile)
+	zip_file(appFile)
+	print('build upgrade zip success!')
\ No newline at end of file