diff --git a/app/src/main/java/com/sw/platecabinet/GlobalData.kt b/app/src/main/java/com/sw/platecabinet/GlobalData.kt
index b8cd872..cd9ceed 100644
--- a/app/src/main/java/com/sw/platecabinet/GlobalData.kt
+++ b/app/src/main/java/com/sw/platecabinet/GlobalData.kt
@@ -34,10 +34,13 @@ object GlobalData {
* 具体业务baseurl
*/
var appBaseUrl: String = ""
- //测试环境
- const val TEST_URL: String = "http://192.168.1.201:14801"
- //生产环境
- const val PRO_URL: String = "https://dev.yixiong-tech.com:8081"
+
+ /**
+ * 具体业务 BaseUrl
+ */
+ const val TEST_BASE_URL: String = "http://192.168.1.201:14801"
+ const val UAT_BASE_URL: String = "https://dev.yixiong-tech.com:8081"
+ const val PROD_BASE_URL: String = "https://api.dm.yixiong-tech.com:8443"
/**
* 设备id
@@ -65,4 +68,5 @@ object GlobalKey {
const val KEY_FIRST_RUN = "firstRun"
const val KEY_USER_INFO = "userInfoKey"
const val PARAM_EQUIPMENT_INFO = "equipmentUserInfo"
+ const val KEY_BASE_URL = "baseUrlKey"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/MyApp.kt b/app/src/main/java/com/sw/platecabinet/MyApp.kt
index fbb0705..a7c4e8c 100644
--- a/app/src/main/java/com/sw/platecabinet/MyApp.kt
+++ b/app/src/main/java/com/sw/platecabinet/MyApp.kt
@@ -5,6 +5,7 @@ import android.util.Log
import com.sw.plate.App
import com.sw.plate.utils.AppUtil
import com.sw.platecabinet.utils.CrashHandler
+import com.sw.platecabinet.utils.SpTool
import timber.log.Timber
class MyApp : App() {
@@ -35,7 +36,16 @@ class MyApp : App() {
Log.d("MyApp", "initialize: deviceId=$deviceId")
GlobalData.deviceId = deviceId
- GlobalData.appBaseUrl = if ("14d2dad5-7d33-3ced-8a59-f14cb1ef2d21" == deviceId) GlobalData.TEST_URL else GlobalData.PRO_URL
+ val url = SpTool.baseUrl
+ if (url.isNotBlank()) {
+ GlobalData.appBaseUrl = url
+ } else {
+ GlobalData.appBaseUrl =
+ if ("14d2dad5-7d33-3ced-8a59-f14cb1ef2d21" == deviceId)
+ GlobalData.TEST_BASE_URL
+ else
+ GlobalData.PROD_BASE_URL
+ }
// TODO: 临时测试----------------
// if ("2987f0c5-5754-33e9-b00a-251db5e2e55f" == deviceId) {
diff --git a/app/src/main/java/com/sw/platecabinet/dialog/BaseDialog.kt b/app/src/main/java/com/sw/platecabinet/dialog/BaseDialog.kt
new file mode 100644
index 0000000..bcec634
--- /dev/null
+++ b/app/src/main/java/com/sw/platecabinet/dialog/BaseDialog.kt
@@ -0,0 +1,38 @@
+package com.sw.platecabinet.dialog
+
+import android.app.Dialog
+import android.content.Context
+import android.graphics.drawable.ColorDrawable
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import com.sw.platecabinet.R
+import com.sw.platecabinet.ext.dp
+import com.sw.platecabinet.ext.hideKeyboard
+
+abstract class BaseDialog(
+ context: Context,
+ var defWidth: Int = 400.dp,
+ var defHeight: Int = 300.dp
+) : Dialog(context, R.style.MyDialog) {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val rootView = getRootView()
+ setContentView(rootView)
+ setCancelable(false)
+ setCanceledOnTouchOutside(false)
+ window?.apply {
+ setLayout(defWidth, defHeight)
+ setBackgroundDrawable(ColorDrawable())
+ setGravity(Gravity.CENTER)
+ }
+ rootView.setOnClickListener { it.hideKeyboard() }
+ initView()
+ }
+
+ abstract fun getRootView(): View
+
+ abstract fun initView()
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/dialog/EnvSwitchDialog.kt b/app/src/main/java/com/sw/platecabinet/dialog/EnvSwitchDialog.kt
new file mode 100644
index 0000000..ed1ce91
--- /dev/null
+++ b/app/src/main/java/com/sw/platecabinet/dialog/EnvSwitchDialog.kt
@@ -0,0 +1,69 @@
+package com.sw.platecabinet.dialog
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.WindowManager
+import com.sw.plate.utils.ToastUtils
+import com.sw.platecabinet.GlobalData
+import com.sw.platecabinet.databinding.DialogEnvSwitchBinding
+import com.sw.platecabinet.ext.dp
+import com.sw.platecabinet.utils.SpTool
+
+/**
+ * 环境切换弹窗
+ *
+ * 提供 TEST / UAT / PROD 三套环境的切换功能,
+ * 初始化时自动根据 [GlobalData.appBaseUrl] 选中当前环境,
+ * 确认后更新 [GlobalData.appBaseUrl] 并通过 [onEnvChanged] 回调通知外部。
+ *
+ * @param context 上下文
+ * @param onEnvChanged 确认切换后的回调,参数为新的 baseUrl
+ */
+class EnvSwitchDialog(
+ context: Context,
+ private val onEnvChanged: (newBaseUrl: String) -> Unit = {}
+) : BaseDialog(
+ context,
+ defWidth = 600.dp,
+ defHeight = WindowManager.LayoutParams.WRAP_CONTENT
+) {
+
+ private lateinit var binding: DialogEnvSwitchBinding
+
+ override fun getRootView(): View {
+ binding = DialogEnvSwitchBinding.inflate(LayoutInflater.from(context))
+ return binding.root
+ }
+
+ override fun initView() {
+ // 根据当前 appBaseUrl 预选对应 RadioButton,不匹配则不选
+ when (GlobalData.appBaseUrl) {
+ GlobalData.TEST_BASE_URL -> binding.rbTest.isChecked = true
+ GlobalData.UAT_BASE_URL -> binding.rbUat.isChecked = true
+ GlobalData.PROD_BASE_URL -> binding.rbProd.isChecked = true
+ }
+
+ // 取消按钮
+ binding.btnCancel.setOnClickListener { dismiss() }
+
+ // 确认按钮
+ binding.btnConfirm.setOnClickListener {
+ // 未选中任何选项时提示用户
+ if (binding.rgEnv.checkedRadioButtonId == -1) {
+ ToastUtils.showToast("请选择环境")
+ return@setOnClickListener
+ }
+ val newUrl = when (binding.rgEnv.checkedRadioButtonId) {
+ binding.rbTest.id -> GlobalData.TEST_BASE_URL
+ binding.rbUat.id -> GlobalData.UAT_BASE_URL
+ binding.rbProd.id -> GlobalData.PROD_BASE_URL
+ else -> return@setOnClickListener
+ }
+ GlobalData.appBaseUrl = newUrl
+ SpTool.baseUrl = newUrl
+ onEnvChanged(newUrl)
+ dismiss()
+ }
+ }
+}
diff --git a/app/src/main/java/com/sw/platecabinet/ext/CommonExt.kt b/app/src/main/java/com/sw/platecabinet/ext/CommonExt.kt
index d449c3b..9715919 100644
--- a/app/src/main/java/com/sw/platecabinet/ext/CommonExt.kt
+++ b/app/src/main/java/com/sw/platecabinet/ext/CommonExt.kt
@@ -1,8 +1,10 @@
package com.sw.platecabinet.ext
+import android.content.Context
import android.content.res.Resources
import android.util.TypedValue
import android.view.View
+import android.view.inputmethod.InputMethodManager
import androidx.annotation.Dimension
/**
@@ -63,4 +65,12 @@ fun View.invisible() {
fun View.gone() {
visibility = View.GONE
+}
+
+/**
+ * 隐藏软键盘
+ */
+fun View.hideKeyboard() {
+ val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+ imm.hideSoftInputFromWindow(windowToken, 0)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt b/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
index 272eca5..69e022f 100644
--- a/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
+++ b/app/src/main/java/com/sw/platecabinet/utils/SpTool.kt
@@ -2,6 +2,7 @@ package com.sw.platecabinet.utils
import com.sw.inbound.utils.SPUtil
import com.sw.inbound.utils.SPUtil.Companion.getInstance
+import com.sw.platecabinet.GlobalKey
import com.sw.platecabinet.MyApp
object SpTool {
@@ -45,4 +46,10 @@ object SpTool {
spUtil?.boolean(IS_FIRST_GET_FACE, value)
}
+ var baseUrl: String
+ get() = spUtil?.get(GlobalKey.KEY_BASE_URL, "") ?: ""
+ set(value) {
+ spUtil?.put(GlobalKey.KEY_BASE_URL, value)
+ }
+
}
diff --git a/app/src/main/res/drawable/bg_cancel.xml b/app/src/main/res/drawable/bg_cancel.xml
new file mode 100644
index 0000000..3a47108
--- /dev/null
+++ b/app/src/main/res/drawable/bg_cancel.xml
@@ -0,0 +1,14 @@
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_confirm.xml b/app/src/main/res/drawable/bg_confirm.xml
new file mode 100644
index 0000000..f68dca1
--- /dev/null
+++ b/app/src/main/res/drawable/bg_confirm.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_white_radius12.xml b/app/src/main/res/drawable/bg_white_radius12.xml
new file mode 100644
index 0000000..a622ffb
--- /dev/null
+++ b/app/src/main/res/drawable/bg_white_radius12.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_env_switch.xml b/app/src/main/res/layout/dialog_env_switch.xml
new file mode 100644
index 0000000..ff242c0
--- /dev/null
+++ b/app/src/main/res/layout/dialog_env_switch.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+