Эх сурвалжийг харах

feat 40% 设置校验功能

RobinTan1024 4 жил өмнө
parent
commit
8b6be02c77

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

@@ -18,17 +18,17 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.Issp">
         <activity
-            android:name=".PreferenceActivity"
+            android:name=".view.PreferenceActivity"
             android:label="@string/preference" />
         <activity
-            android:name=".LoginActivity">
+            android:name=".view.LoginActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".MainActivity" />
+        <activity android:name=".view.MainActivity" />
 
         <provider
             android:name="androidx.startup.InitializationProvider"

+ 0 - 83
app/src/main/java/com/doverfuelingsolutions/issp/PreferenceActivity.kt

@@ -1,83 +0,0 @@
-package com.doverfuelingsolutions.issp
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.text.InputType
-import android.view.MenuItem
-import androidx.appcompat.app.AppCompatActivity
-import androidx.preference.EditTextPreference
-import androidx.preference.Preference
-import androidx.preference.PreferenceFragmentCompat
-import com.doverfuelingsolutions.issp.utils.StringUtil
-import com.doverfuelingsolutions.issp.utils.sp.SPKeys
-
-class PreferenceActivity : AppCompatActivity() {
-
-    companion object {
-
-        fun start(context: Context) {
-            Intent(context, PreferenceActivity::class.java).let { context.startActivity(it) }
-        }
-    }
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setContentView(R.layout.settings_activity)
-        supportActionBar?.setDisplayHomeAsUpEnabled(true)
-        if (savedInstanceState == null) {
-            supportFragmentManager
-                .beginTransaction()
-                .replace(R.id.settings, SettingsFragment())
-                .commit()
-        }
-    }
-
-    override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        when (item.itemId) {
-            android.R.id.home -> finish()
-        }
-        return super.onOptionsItemSelected(item)
-    }
-
-    class SettingsFragment : PreferenceFragmentCompat() {
-
-        private val editTextPreferenceSummaryProvider = Preference.SummaryProvider<EditTextPreference> {
-            if (it.text.isNullOrEmpty()) StringUtil.get(R.string.not_set) else it.text
-        }
-
-        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
-            setPreferencesFromResource(R.xml.root_preferences, rootKey)
-
-            val p1 = findPreference<EditTextPreference>(SPKeys.SERVER_PORT_BASE)
-            val p2 = findPreference<EditTextPreference>(SPKeys.SERVER_PORT_TRX)
-            val p3 = findPreference<EditTextPreference>(SPKeys.SERVER_PORT_CONFIG)
-            val p4 = findPreference<EditTextPreference>(SPKeys.MIDDLE_PORT)
-            val p5 = findPreference<EditTextPreference>(SPKeys.MIDDLE_WORKSTATION_ID)
-            val p6 = findPreference<EditTextPreference>(SPKeys.FUEL_PORT)
-            val p7 = findPreference<EditTextPreference>(SPKeys.MIDDLE_IP)
-            val p8 = findPreference<EditTextPreference>(SPKeys.FUEL_IP)
-
-            InputType.TYPE_CLASS_NUMBER.let { type ->
-                p1?.setOnBindEditTextListener { it.inputType = type }
-                p2?.setOnBindEditTextListener { it.inputType = type }
-                p3?.setOnBindEditTextListener { it.inputType = type }
-                p4?.setOnBindEditTextListener { it.inputType = type }
-                p5?.setOnBindEditTextListener { it.inputType = type }
-                p6?.setOnBindEditTextListener { it.inputType = type }
-            }
-
-            editTextPreferenceSummaryProvider.let {
-                p1?.summaryProvider = it
-                p2?.summaryProvider = it
-                p3?.summaryProvider = it
-                p4?.summaryProvider = it
-                p5?.summaryProvider = it
-                p6?.summaryProvider = it
-                p7?.summaryProvider = it
-                p8?.summaryProvider = it
-            }
-        }
-
-    }
-}

+ 7 - 7
app/src/main/java/com/doverfuelingsolutions/issp/LoginActivity.kt → app/src/main/java/com/doverfuelingsolutions/issp/view/LoginActivity.kt

@@ -1,4 +1,4 @@
-package com.doverfuelingsolutions.issp
+package com.doverfuelingsolutions.issp.view
 
 import android.content.pm.PackageManager
 import androidx.appcompat.app.AppCompatActivity
@@ -7,10 +7,10 @@ import android.view.View
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
+import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.api.WayneApi
 import com.doverfuelingsolutions.issp.data.DataStore
 import com.doverfuelingsolutions.issp.databinding.ActivityLoginBinding
-import com.doverfuelingsolutions.issp.utils.ActivityUtil
 import com.doverfuelingsolutions.issp.utils.PermissionUtil
 import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.utils.log.DFSLog
@@ -64,11 +64,11 @@ class LoginActivity : AppCompatActivity(), View.OnClickListener {
     }
 
     private fun autoLogin() {
-        if (DataStore.accountName.isNotEmpty() && DataStore.password.isNotEmpty()) {
-            // submit() // FIXME 调试代码
-            MainActivity.start(this)
-            finish()
-        }
+//        if (DataStore.accountName.isNotEmpty() && DataStore.password.isNotEmpty()) {
+//            // submit() // FIXME 调试代码
+//            MainActivity.start(this)
+//            finish()
+//        }
     }
 
     private fun submit() {

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

@@ -1,4 +1,4 @@
-package com.doverfuelingsolutions.issp
+package com.doverfuelingsolutions.issp.view
 
 import android.content.Context
 import android.content.Intent
@@ -8,6 +8,7 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
+import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.data.DataStore
 import com.doverfuelingsolutions.issp.databinding.ActivityMainBinding
 import com.doverfuelingsolutions.issp.fusion.FusionManager

+ 38 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/PreferenceActivity.kt

@@ -0,0 +1,38 @@
+package com.doverfuelingsolutions.issp.view
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.MenuItem
+import androidx.appcompat.app.AppCompatActivity
+import com.doverfuelingsolutions.issp.R
+import com.doverfuelingsolutions.issp.view.fragment.SettingsFragment
+
+class PreferenceActivity : AppCompatActivity() {
+
+    companion object {
+
+        fun start(context: Context) {
+            Intent(context, PreferenceActivity::class.java).let { context.startActivity(it) }
+        }
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.settings_activity)
+        supportActionBar?.setDisplayHomeAsUpEnabled(true)
+        if (savedInstanceState == null) {
+            supportFragmentManager
+                .beginTransaction()
+                .replace(R.id.settings, SettingsFragment())
+                .commit()
+        }
+    }
+
+    override fun onOptionsItemSelected(item: MenuItem): Boolean {
+        when (item.itemId) {
+            android.R.id.home -> finish()
+        }
+        return super.onOptionsItemSelected(item)
+    }
+}

+ 62 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/SettingsFragment.kt

@@ -0,0 +1,62 @@
+package com.doverfuelingsolutions.issp.view.fragment
+
+import android.os.Bundle
+import android.text.InputType
+import android.widget.EditText
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.OnLifecycleEvent
+import androidx.preference.EditTextPreference
+import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
+import com.doverfuelingsolutions.issp.R
+import com.doverfuelingsolutions.issp.utils.log.DFSLog
+import com.doverfuelingsolutions.issp.utils.sp.SPKeys
+
+class SettingsFragment : PreferenceFragmentCompat(), EditTextPreference.OnBindEditTextListener, Preference.OnPreferenceChangeListener {
+
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+        setPreferencesFromResource(R.xml.root_preferences, rootKey)
+
+        setNumberInput(SPKeys.SERVER_PORT_BASE)
+        setNumberInput(SPKeys.SERVER_PORT_TRX)
+        setNumberInput(SPKeys.SERVER_PORT_CONFIG)
+        setNumberInput(SPKeys.MIDDLE_PORT)
+        setNumberInput(SPKeys.MIDDLE_WORKSTATION_ID)
+        setNumberInput(SPKeys.FUEL_PORT)
+    }
+
+    override fun onBindEditText(editText: EditText) {
+        editText.inputType = InputType.TYPE_CLASS_NUMBER
+    }
+
+    override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
+        val inputValue = newValue.toString()
+        DFSLog.i("${preference.key} = $inputValue")
+        return true
+    }
+
+    private fun setNumberInput(key: String): EditTextPreference? {
+        return findPreference<EditTextPreference>(key)?.apply {
+            setOnBindEditTextListener(this@SettingsFragment)
+            onPreferenceChangeListener = this@SettingsFragment
+        }
+    }
+
+    class PortValidator(private val preference: Preference) : LifecycleObserver, Preference.OnPreferenceChangeListener {
+
+        @OnLifecycleEvent(Lifecycle.Event.ON_START)
+        fun listen() {
+            preference.onPreferenceChangeListener = this
+        }
+
+        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+        fun remove() {
+            preference.onPreferenceChangeListener = null
+        }
+
+        override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean {
+            return true
+        }
+    }
+}

+ 2 - 2
app/src/main/res/layout/activity_login.xml

@@ -7,13 +7,13 @@
 
         <variable
             name="mainViewModel"
-            type="com.doverfuelingsolutions.issp.LoginActivity.MainViewModel" />
+            type="com.doverfuelingsolutions.issp.view.LoginActivity.MainViewModel" />
     </data>
 
     <androidx.constraintlayout.widget.ConstraintLayout
         style="@style/match"
         android:background="@mipmap/activity_background"
-        tools:context=".LoginActivity">
+        tools:context=".view.LoginActivity">
 
         <LinearLayout
             android:id="@+id/loginForm"

+ 2 - 2
app/src/main/res/layout/activity_main.xml

@@ -7,14 +7,14 @@
 
         <variable
             name="mainViewModel"
-            type="com.doverfuelingsolutions.issp.MainActivity.MainViewModel" />
+            type="com.doverfuelingsolutions.issp.view.MainActivity.MainViewModel" />
     </data>
 
     <LinearLayout
         style="@style/match"
         android:background="@mipmap/activity_background"
         android:orientation="vertical"
-        tools:context=".MainActivity">
+        tools:context=".view.MainActivity">
 
         <LinearLayout
             style="@style/fullWidth"

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

@@ -5,6 +5,7 @@
     <string name="password">密码</string>
     <string name="login">登录</string>
     <string name="preference">应用设置</string>
+    <string name="blank"> </string>
 
     <string name="in_login">登录中&#8230;</string>
     <string name="login_fail">登录失败:%1$s</string>
@@ -21,6 +22,9 @@
     <string name="device_hardware_sn">设备硬件编码</string>
     <string name="device_sn">设备SN编码</string>
     <string name="cloud_info">云端服务器信息</string>
+    <string name="hint_cloud_info">请填写「云端服务器信息」,格式参考「http://ipos.biz」</string>
+    <string name="hint_port_input">请填写「端口号」数值</string>
+    <string name="hint_ip_input">请填写「IP地址」,形如「192.168.1.1」</string>
     <string name="cloud_domain">云端服务器域名</string>
     <string name="port_auth">认证端口</string>
     <string name="port_trx">交易端口</string>

+ 9 - 0
app/src/main/res/xml/root_preferences.xml

@@ -20,21 +20,25 @@
         <EditTextPreference
             app:key="@string/sp_server_domain"
             app:title="@string/cloud_domain"
+            app:dialogTitle="@string/hint_cloud_info"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_server_port_base"
             app:title="@string/port_auth"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_server_port_trx"
             app:title="@string/port_trx"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_server_port_config"
             app:title="@string/port_config"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
     </PreferenceCategory>
 
@@ -43,16 +47,19 @@
         <EditTextPreference
             app:key="@string/sp_middle_ip"
             app:title="@string/ip_address"
+            app:dialogTitle="@string/hint_ip_input"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_middle_port"
             app:title="@string/port"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_middle_workstation_id"
             app:title="@string/workstation_id"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
     </PreferenceCategory>
 
@@ -61,11 +68,13 @@
         <EditTextPreference
             app:key="@string/sp_fuel_ip"
             app:title="@string/ip_address"
+            app:dialogTitle="@string/hint_ip_input"
             app:useSimpleSummaryProvider="true" />
 
         <EditTextPreference
             app:key="@string/sp_fuel_port"
             app:title="@string/port"
+            app:dialogTitle="@string/hint_port_input"
             app:useSimpleSummaryProvider="true" />
     </PreferenceCategory>