diff --git a/.idea/markdown.xml b/.idea/markdown.xml
new file mode 100644
index 0000000..c61ea33
--- /dev/null
+++ b/.idea/markdown.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b2c751a..97a4754 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -6,4 +6,11 @@
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 73f18ca..c52001f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -78,4 +78,6 @@ dependencies {
implementation "androidx.camera:camera-camera2:1.0.2"
implementation "androidx.camera:camera-lifecycle:1.0.2"
implementation "androidx.camera:camera-view:1.0.0-alpha25"
+ //圆形视图库
+ implementation 'com.makeramen:roundedimageview:2.3.0'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 158d84d..1051641 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,10 @@
android:name=".mine.ModifyPsdActivity"
android:exported="false" />
+
+
> :
dialog.show()
}
- /** 显示带输入框的弹窗,输入为空时保留弹窗并提示。 */
+ /** 显示带输入框的弹窗,标题、标签、提示文案由调用方传入。 */
fun showEditDialog(
title: String,
- hint: String,
+ label: String = "",
+ hint: String = "",
+ tip: String = "",
content: String = "",
touchOutsideCancel: Boolean = true,
cancelText: String = "取消",
@@ -291,6 +294,8 @@ abstract class BaseActivity> :
) {
val view = layoutInflater.inflate(R.layout.dialog_input_text, null)
view.findViewById(R.id.dialogTitle).text = title
+ bindOptionalText(view.findViewById(R.id.dialogLabel), label)
+ bindOptionalText(view.findViewById(R.id.dialogTip), tip)
val input = view.findViewById(R.id.dialogInput).apply {
this.hint = hint
setText(content)
@@ -309,7 +314,7 @@ abstract class BaseActivity> :
setOnClickListener {
val value = input.text.toString().trim()
if (value.isEmpty()) {
- input.error = hint
+ input.error = hint.ifBlank { "请输入内容" }
return@setOnClickListener
}
dialog.dismiss()
@@ -321,6 +326,16 @@ abstract class BaseActivity> :
dialog.show()
}
+ /** 文案为空时隐藏对应控件,避免留下空白行。 */
+ private fun bindOptionalText(textView: TextView, text: String) {
+ if (text.isBlank()) {
+ textView.visibility = View.GONE
+ } else {
+ textView.visibility = View.VISIBLE
+ textView.text = text
+ }
+ }
+
/** 在屏幕顶部显示权限用途提示弹窗。 */
fun showPermissionDialog(title: String, content: String) {
permissionDialog?.dismiss()
diff --git a/app/src/main/java/com/juhabi/birds/base/BaseFragment.kt b/app/src/main/java/com/juhabi/birds/base/BaseFragment.kt
index 9f96bf1..41b34fa 100644
--- a/app/src/main/java/com/juhabi/birds/base/BaseFragment.kt
+++ b/app/src/main/java/com/juhabi/birds/base/BaseFragment.kt
@@ -280,10 +280,12 @@ abstract class BaseFragment> : Fragment(), I
dialog.show()
}
- /** 显示带输入框的弹窗,输入为空时保留弹窗并提示。 */
+ /** 显示带输入框的弹窗,标题、标签、提示文案由调用方传入。 */
fun showEditDialog(
title: String,
- hint: String,
+ label: String = "",
+ hint: String = "",
+ tip: String = "",
content: String = "",
touchOutsideCancel: Boolean = true,
cancelText: String = "取消",
@@ -292,6 +294,8 @@ abstract class BaseFragment> : Fragment(), I
) {
val view = layoutInflater.inflate(R.layout.dialog_input_text, null)
view.findViewById(R.id.dialogTitle).text = title
+ bindOptionalText(view.findViewById(R.id.dialogLabel), label)
+ bindOptionalText(view.findViewById(R.id.dialogTip), tip)
val input = view.findViewById(R.id.dialogInput).apply {
this.hint = hint
setText(content)
@@ -310,7 +314,7 @@ abstract class BaseFragment> : Fragment(), I
setOnClickListener {
val value = input.text.toString().trim()
if (value.isEmpty()) {
- input.error = hint
+ input.error = hint.ifBlank { "请输入内容" }
return@setOnClickListener
}
dialog.dismiss()
@@ -322,6 +326,16 @@ abstract class BaseFragment> : Fragment(), I
dialog.show()
}
+ /** 文案为空时隐藏对应控件,避免留下空白行。 */
+ private fun bindOptionalText(textView: TextView, text: String) {
+ if (text.isBlank()) {
+ textView.visibility = View.GONE
+ } else {
+ textView.visibility = View.VISIBLE
+ textView.text = text
+ }
+ }
+
/** 在屏幕顶部显示权限用途提示弹窗。 */
fun showPermissionDialog(title: String, content: String) {
permissionDialog?.dismiss()
diff --git a/app/src/main/java/com/juhabi/birds/device/BindDeviceActivity.kt b/app/src/main/java/com/juhabi/birds/device/BindDeviceActivity.kt
index bf5af59..bd36385 100644
--- a/app/src/main/java/com/juhabi/birds/device/BindDeviceActivity.kt
+++ b/app/src/main/java/com/juhabi/birds/device/BindDeviceActivity.kt
@@ -11,7 +11,6 @@ import com.juhabi.birds.device.entity.DeviceEntity
import com.juhabi.birds.device.mvp.DeviceContract
import com.juhabi.birds.device.mvp.DeviceImpl
import com.juhabi.birds.device.mvp.DevicePresenter
-import kotlin.random.Random
/**
* 绑定设备
@@ -51,16 +50,33 @@ class BindDeviceActivity: BaseActivity
finish()
}
- R.id.tv_bind ->{//绑定设备
-// val imei = "${System.currentTimeMillis()}${Random.nextInt(100).toString().padStart(2, '0')}"
-// val name = "device001"
- val imei = "860000000000005"
- val name = "BM202609160005"
- presenter?.bindDevice(imei, name)
+ R.id.tv_bind -> {
+ bindDevice()
}
}
}
+ /** 校验设备编码和名称非空后,发起绑定请求。 */
+ private fun bindDevice() {
+ val imei = binding.etDeviceCode.text
+ ?.toString()
+ ?.trim()
+ .orEmpty()
+ val name = binding.etDeviceName.text
+ ?.toString()
+ ?.trim()
+ .orEmpty()
+ if (imei.isBlank()) {
+ showMessage("请输入设备编码")
+ return
+ }
+ if (name.isBlank()) {
+ showMessage("请输入设备名称")
+ return
+ }
+ presenter?.bindDevice(imei, name)
+ }
+
override fun showError(message: String) {
showMessage(message)
}
diff --git a/app/src/main/java/com/juhabi/birds/device/DeviceAdapter.kt b/app/src/main/java/com/juhabi/birds/device/DeviceAdapter.kt
deleted file mode 100644
index eb74f91..0000000
--- a/app/src/main/java/com/juhabi/birds/device/DeviceAdapter.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.juhabi.birds.device
-
-import com.chad.library.adapter.base.BaseQuickAdapter
-import com.chad.library.adapter.base.viewholder.BaseViewHolder
-import com.juhabi.birds.R
-import com.juhabi.birds.device.entity.DeviceEntity
-
-/** 临时设备列表适配器,后续可根据设计稿替换 item 展示。 */
-class DeviceAdapter : BaseQuickAdapter(R.layout.device_item) {
- init {
- addChildClickViewIds(R.id.img_tips)
- }
-
- override fun convert(holder: BaseViewHolder, item: DeviceEntity) {
- holder.setText(R.id.tv_device_name, item.name.ifBlank { "未命名设备" })
- holder.setText(R.id.tv_device_status, item.signalText.ifBlank { "离线" })
- holder.setText(R.id.tv_device_no, "设备编号:${item.deviceNo}")
- holder.setText(R.id.tv_device_imei, "IMEI:${item.imei}")
- holder.setText(R.id.tv_device_detail, "型号:${item.model ?: "-"} 信号:${item.signalLevel} 头部电量:${item.hoodBattery ?: "-"} 戒指电量:${item.ringBattery ?: "-"}")
- holder.setText(R.id.tv_device_location, "连接:${item.hoodConnectedText} 地址:${item.address ?: "暂无地址"}")
- }
-}
diff --git a/app/src/main/java/com/juhabi/birds/device/DeviceFragment.kt b/app/src/main/java/com/juhabi/birds/device/DeviceFragment.kt
index 2886094..0c93de4 100644
--- a/app/src/main/java/com/juhabi/birds/device/DeviceFragment.kt
+++ b/app/src/main/java/com/juhabi/birds/device/DeviceFragment.kt
@@ -2,16 +2,17 @@ package com.juhabi.birds.device
import android.Manifest
import android.content.Intent
-import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.juhabi.birds.R
import com.juhabi.birds.base.BaseFragment
+import com.juhabi.birds.custom.AddDevicePopupWindow
import com.juhabi.birds.custom.DeviceActionPopupWindow
import com.juhabi.birds.custom.CustomRefreshHeader
import com.juhabi.birds.databinding.FragmentHomeBinding
+import com.juhabi.birds.device.adapter.DeviceAdapter
import com.juhabi.birds.device.entity.DeviceEntity
import com.juhabi.birds.device.mvp.DeviceContract
import com.juhabi.birds.device.mvp.DeviceImpl
@@ -19,6 +20,7 @@ import com.juhabi.birds.device.mvp.DevicePresenter
import com.juhabi.birds.util.ToastUtil
import com.maning.mlkitscanner.scan.MNScanManager
import com.maning.mlkitscanner.scan.callback.act.MNScanCallback
+import com.maning.mlkitscanner.scan.model.MNScanConfig
import com.scwang.smart.refresh.footer.ClassicsFooter
class DeviceFragment : BaseFragment(),
@@ -38,7 +40,6 @@ class DeviceFragment : BaseFragment(),
override fun initView(savedInstanceState: Bundle?) {
listOf(
- binding.tvIndex,
binding.imgScan,
).forEach { button ->
button.setOnClickListener(this)
@@ -50,23 +51,29 @@ class DeviceFragment : BaseFragment(),
putSerializable(DeviceDetailActivity.EXTRA_DEVICE, device)
})
}
- deviceAdapter.setOnItemChildClickListener { adapter, view, position ->
+ deviceAdapter.setOnItemChildClickListener { _, view, position ->
when (view.id) {
- R.id.img_tips -> {
+ R.id.img_more -> {
val device = deviceAdapter.data[position]
DeviceActionPopupWindow(requireContext()).show(
view,
- onRename = {//重命名
+ onRename = {
showEditDialog(
- "设备重命名", device.name, click = object : OnDialogClick {
+ title = "重命名设备",
+ label = "设备名称",
+ hint = device.name,
+ tip = "最多支持20个字符,支持中英文、数字和字符。",
+ confirmText = "确认修改",
+ click = object : OnDialogClick {
+ override fun onCancelClick() {
+ }
- override fun onCancelClick() {}
override fun onConfirmClick(content: String) {
presenter?.renameDevice(device.deviceNo, content)
}
}
)
- },
+ },
onUnbind = {//解绑设备
showDialogtext(
"提示",
@@ -87,6 +94,15 @@ class DeviceFragment : BaseFragment(),
}
)
}
+ R.id.tv_show_map -> {
+ val device = deviceAdapter.data[position]
+ // 没有经纬度时只展示空态,不要把空坐标传给地图
+ if (device.lat.isNullOrBlank() || device.lng.isNullOrBlank()) {
+ showMessage("暂无定位")
+ return@setOnItemChildClickListener
+ }
+ // 地图页后续接入,这里先预留点击入口
+ }
}
}
}
@@ -108,17 +124,23 @@ class DeviceFragment : BaseFragment(),
override fun onClick(view: View) {
when(view.id){
- R.id.tv_index ->{
- goTo(BindDeviceActivity::class.java,null)
- }
- //扫一扫:先申请相机和相册权限,授权通过后再拉起扫码页。
+ // 扫码页仅使用相机,隐藏旧库内部的相册入口。
R.id.img_scan -> {
- getMorePermissionRequst(
- scanPermissions(),
- "相机和相册权限",
- "扫一扫功能需要使用相机及访问相册权限",
- REQUEST_CAMERA_AND_ALBUM
+ AddDevicePopupWindow(requireContext()).show(view,
+ onManualAdd = {
+ // 手动添加:进入绑定设备页
+ goTo(BindDeviceActivity::class.java, null)
+ },
+ onScan = {
+ // 扫一扫:先申请相机权限,授权后再打开扫码页
+ getMorePermissionRequst(
+ scanPermissions(),
+ "相机权限",
+ "扫一扫功能需要使用相机权限",
+ REQUEST_CAMERA_AND_ALBUM
+ )
+ }
)
}
@@ -206,7 +228,7 @@ class DeviceFragment : BaseFragment(),
}
- /** 相机和相册均已授权后,自动打开扫一扫。 */
+ /** 相机授权后打开扫码页,库内相册按钮已关闭。 */
override fun onPermissionsGranted(permissions: Array) {
startDeviceScan()
}
@@ -215,36 +237,50 @@ class DeviceFragment : BaseFragment(),
super.onPermissionsDenied(permissions, permanentlyDenied)
}
- /** Android 13 及以上申请读图权限,更低版本申请存储读取权限。 */
+ /** 相册入口已隐藏,因此扫码流程只需要相机权限。 */
private fun scanPermissions(): Array {
- val albumPermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- Manifest.permission.READ_MEDIA_IMAGES
- } else {
- Manifest.permission.READ_EXTERNAL_STORAGE
- }
- return arrayOf(Manifest.permission.CAMERA, albumPermission)
+ return arrayOf(Manifest.permission.CAMERA)
}
/** 使用 MNMLKitScanner 默认扫码页识别二维码或条形码。 */
private fun startDeviceScan() {
- MNScanManager.startScan(mContext, object : MNScanCallback {
- override fun onActivityResult(resultCode: Int, data: Intent) {
- when (resultCode) {
- MNScanManager.RESULT_SUCCESS -> {
- val results = data.getStringArrayListExtra(MNScanManager.INTENT_KEY_RESULT_SUCCESS)
- val content = results?.filter { it.isNotBlank() }?.joinToString("\n").orEmpty()
+ val config = MNScanConfig.Builder()
+ .isShowPhotoAlbum(false)
+ .builder()
+
+ MNScanManager.startScan(mContext, config, object : MNScanCallback {
+ override fun onActivityResult(resultCode: Int, data: Intent?) {
+ if (!isAdded) {
+ return
+ }
+ // 库把 RESULT_SUCCESS 定义为 0,和系统返回键的 RESULT_CANCELED 相同。
+ // 点关闭会走 RESULT_CANCLE=2 并带回空 Intent;按返回键 data 为 null。
+ when {
+ resultCode == MNScanManager.RESULT_SUCCESS && data != null -> {
+ val results = data.getStringArrayListExtra(
+ MNScanManager.INTENT_KEY_RESULT_SUCCESS
+ )
+ val content = results
+ ?.filter { it.isNotBlank() }
+ ?.joinToString("\n")
+ .orEmpty()
if (content.isBlank()) {
ToastUtil.showShort(mContext, "未识别到内容")
} else {
ToastUtil.showShort(mContext, content)
}
}
- MNScanManager.RESULT_FAIL -> {
- val resultError = data.getStringExtra(MNScanManager.INTENT_KEY_RESULT_ERROR)
- ToastUtil.showShort(mContext, resultError.takeUnless { it.isNullOrBlank() } ?: "扫码失败")
+ resultCode == MNScanManager.RESULT_FAIL -> {
+ val resultError = data?.getStringExtra(
+ MNScanManager.INTENT_KEY_RESULT_ERROR
+ )
+ ToastUtil.showShort(
+ mContext,
+ resultError.takeUnless { it.isNullOrBlank() } ?: "扫码失败"
+ )
}
- MNScanManager.RESULT_CANCLE -> {
- ToastUtil.showShort(mContext, getString(R.string.cancel_scan))
+ else -> {
+ // 关闭按钮或系统返回,按取消处理
}
}
}
diff --git a/app/src/main/java/com/juhabi/birds/device/adapter/DeviceAdapter.kt b/app/src/main/java/com/juhabi/birds/device/adapter/DeviceAdapter.kt
new file mode 100644
index 0000000..b22917f
--- /dev/null
+++ b/app/src/main/java/com/juhabi/birds/device/adapter/DeviceAdapter.kt
@@ -0,0 +1,165 @@
+package com.juhabi.birds.device.adapter
+
+import android.widget.ProgressBar
+import androidx.core.content.ContextCompat
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.viewholder.BaseViewHolder
+import com.juhabi.birds.R
+import com.juhabi.birds.device.entity.DeviceEntity
+
+/** 临时设备列表适配器,后续可根据设计稿替换 item 展示。 */
+class DeviceAdapter : BaseQuickAdapter(R.layout.device_item) {
+ init {
+ addChildClickViewIds(R.id.img_more)
+ }
+
+ override fun convert(holder: BaseViewHolder, item: DeviceEntity) {
+ //设备名字
+ holder.setText(R.id.tv_dev_name, item.name.ifBlank { "未命名设备" })
+ //在线状态
+ if (item.status == "1") {
+ holder.setText(R.id.tv_dev_online_status, "在线")
+ } else {
+ holder.setText(R.id.tv_dev_online_status, "离线")
+ }
+ val statusRes = if (item.status == "1") {
+ R.drawable.shape_device_online_bg
+ } else {
+ R.drawable.shape_device_offline_bg
+ }
+ holder.setBackgroundResource(
+ R.id.tv_dev_online_status,
+ statusRes
+ )
+
+ holder.setText(R.id.tv_dev_number, "IMEI:${item.deviceNo}")
+
+ if (item.status == "1") {
+ // 信号:0 离线、1 弱、2 一般、3 强。资源 id 必须赋给变量才会生效。
+ val imgResource: Int
+ val signalText: String
+ val wifiTextColor: Int
+ if (item.signalLevel == 0) {
+ imgResource = R.mipmap.icon_dev_wifi_offline
+ signalText = "离线"
+ wifiTextColor = R.color.color_999999
+ } else if (item.signalLevel == 1) {
+ imgResource = R.mipmap.icon_dev_wifi_low
+ signalText = "弱"
+ wifiTextColor = R.color.color_e34d59
+ } else if (item.signalLevel == 2) {
+ imgResource = R.mipmap.icon_dev_wifi_mid
+ signalText = "一般"
+ wifiTextColor = R.color.color_ff942a
+ } else {
+ imgResource = R.mipmap.icon_dev_wifi_hight
+ signalText = "强"
+ wifiTextColor = R.color.color_zhu
+ }
+
+ holder.setImageResource(R.id.img_signal, imgResource)
+ holder.setText(R.id.tv_signal_text, signalText)
+ holder.setTextColor(R.id.tv_signal_text,wifiTextColor)
+ holder.setText(
+ R.id.tv_head_foot_connect_status,
+ if (item.hoodConnected == "0") "断开" else "已连接"
+ )
+ }else{
+ holder.setImageResource(R.id.img_signal, R.mipmap.icon_dev_wifi_offline)
+ holder.setText(R.id.tv_signal_text, "离线")
+ holder.setTextColor(R.id.tv_signal_text, R.color.color_999999)
+ holder.setText(
+ R.id.tv_head_foot_connect_status,
+ if (item.hoodConnected == "0") "断开" else "已连接"
+ )
+ }
+
+ holder.setText(R.id.tv_head_power_value, "${item.hoodBattery}%")
+ holder.setText(R.id.tv_foot_power_value, "${item.ringBattery}%")
+
+ // 电量三档:0-30 低,31-70 中,71-100 高
+ val headBattery = (item.hoodBattery ?: 0).coerceIn(0, 100)
+ val footBattery = (item.ringBattery ?: 0).coerceIn(0, 100)
+ val isOnline = item.status == "1"
+
+ if (isOnline) {
+ holder.setImageResource(
+ R.id.img_head_power_icon,
+ getBatteryIcon(
+ battery = headBattery,
+ highIcon = R.mipmap.icon_power_head_high,
+ midIcon = R.mipmap.icon_power_head_mid
+ )
+ )
+ holder.setImageResource(
+ R.id.img_foot_power_icon,
+ getBatteryIcon(
+ battery = footBattery,
+ highIcon = R.mipmap.icon_power_foot_high,
+ midIcon = R.mipmap.icon_power_foot_mid
+ )
+ )
+ } else {
+ // 离线时头套、脚环电量图标统一显示离线态
+ holder.setImageResource(
+ R.id.img_head_power_icon,
+ R.mipmap.icon_dev_power_offline
+ )
+ holder.setImageResource(
+ R.id.img_foot_power_icon,
+ R.mipmap.icon_dev_power_offline
+ )
+ }
+
+ val progressHead = holder.getView(R.id.progress_head)
+ val progressFoot = holder.getView(R.id.progress_foot)
+ val headProgressRes = if (isOnline) {
+ R.drawable.progress_head_bg
+ } else {
+ R.drawable.progress_offline_bg
+ }
+ val footProgressRes = if (isOnline) {
+ R.drawable.progress_foot_bg
+ } else {
+ R.drawable.progress_offline_bg
+ }
+ // mutate 避免两条进度条共用同一份离线 drawable 状态
+ progressHead.progressDrawable = ContextCompat.getDrawable(
+ context,
+ headProgressRes
+ )?.mutate()
+ progressFoot.progressDrawable = ContextCompat.getDrawable(
+ context,
+ footProgressRes
+ )?.mutate()
+ // 替换 drawable 后进度会被重置,需要重新写入
+ progressHead.max = 100
+ progressHead.progress = headBattery
+ progressFoot.max = 100
+ progressFoot.progress = footBattery
+
+ //tv_location_detail 显示地址
+ holder.setText(R.id.tv_location_detail, item.address)
+ }
+
+ /**
+ * 按电量返回对应档位图标。
+ * 低电量头套、脚环共用 icon_power_low。
+ */
+ private fun getBatteryIcon(
+ battery: Int,
+ highIcon: Int,
+ midIcon: Int
+ ): Int {
+ return when {
+ battery <= BATTERY_LOW_MAX -> R.mipmap.icon_power_low
+ battery <= BATTERY_MID_MAX -> midIcon
+ else -> highIcon
+ }
+ }
+
+ private companion object {
+ const val BATTERY_LOW_MAX = 30
+ const val BATTERY_MID_MAX = 70
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/juhabi/birds/device/entity/DeviceEntity.kt b/app/src/main/java/com/juhabi/birds/device/entity/DeviceEntity.kt
index 5802ead..8421ce6 100644
--- a/app/src/main/java/com/juhabi/birds/device/entity/DeviceEntity.kt
+++ b/app/src/main/java/com/juhabi/birds/device/entity/DeviceEntity.kt
@@ -3,19 +3,19 @@ package com.juhabi.birds.device.entity
import java.io.Serializable
data class DeviceEntity(
- val address: String,
- val deviceNo: String,
- val hoodBattery: Int?,
- val hoodConnected: String,
- val hoodConnectedText: String,
- val imei: String,
- val lat: Double?,
- val lng: Double?,
- val model: String?,
- val name: String,
- val ringBattery: Int?,
- val signalLevel: Int,
- val signalText: String,
- val status: String,
- val hoodCoverOn: String
+ val address: String = "",
+ val deviceNo: String = "",
+ val hoodBattery: Int? = null,
+ val hoodConnected: String = "",
+ val hoodConnectedText: String = "",
+ val imei: String = "",
+ val lat: String? = null,
+ val lng: String? = null,
+ val model: String? = null,
+ val name: String = "",
+ val ringBattery: Int? = null,
+ val signalLevel: Int = 0,
+ val signalText: String = "",
+ val status: String = "",
+ val hoodCoverOn: String = ""
) : Serializable
diff --git a/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt b/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt
index 8640e9d..0adf8ad 100644
--- a/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt
+++ b/app/src/main/java/com/juhabi/birds/login/RegisterActivity.kt
@@ -4,11 +4,19 @@ import android.os.Bundle
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
+import android.view.ViewGroup
+import androidx.appcompat.app.AlertDialog
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.juhabi.birds.AppConfig
import com.juhabi.birds.R
import com.juhabi.birds.base.BaseActivity
import com.juhabi.birds.databinding.RegisterLayoutBinding
+import com.juhabi.birds.databinding.DialogCountryCodeBinding
+import com.juhabi.birds.login.adapter.CountryCallingCode
+import com.juhabi.birds.login.adapter.CountryCodeAdapter
import com.juhabi.birds.login.model.UserEntity
import com.juhabi.birds.login.mvp.LoginContract
import com.juhabi.birds.login.mvp.LoginImpl
@@ -47,6 +55,7 @@ class RegisterActivity : BaseActivity(),
binding.getCodeButton,
binding.confirmButton,
binding.includedTitle.imgBack,
+ binding.linearCountry,
).forEach { button ->
button.setOnClickListener(this)
}
@@ -59,6 +68,8 @@ class RegisterActivity : BaseActivity(),
finish()
}
+ R.id.linear_country -> showCountryCodeDialog()
+
R.id.getCodeButton -> {//获取验证码
if (binding.phoneEditText.text.toString().isBlank()) {
ToastUtil.showShort(mContext, "手机号不能为空")
@@ -109,6 +120,44 @@ class RegisterActivity : BaseActivity(),
}
}
+ private fun showCountryCodeDialog() {
+ val dialogBinding = DialogCountryCodeBinding.inflate(layoutInflater)
+ val dialog = AlertDialog.Builder(this)
+ .setView(dialogBinding.root)
+ .create()
+
+ dialogBinding.countryRecyclerView.apply {
+ layoutManager = LinearLayoutManager(this@RegisterActivity)
+ adapter = CountryCodeAdapter(loadCountryCallingCodes()) { country ->
+ binding.areaCodeButton.text = country.dial_code
+ dialog.dismiss()
+ }
+ }
+
+ dialog.setOnShowListener {
+ dialog.window?.apply {
+ setBackgroundDrawableResource(android.R.color.transparent)
+ setLayout(
+ (resources.displayMetrics.widthPixels * 0.88f).toInt(),
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ }
+ }
+ dialog.show()
+ }
+
+ private fun loadCountryCallingCodes(): List {
+ val language = resources.configuration.locales[0].language
+ val fileName = when (language) {
+ "ar" -> "country_calling_codes_ar.json"
+ "en" -> "country_calling_codes_en.json"
+ else -> "country_calling_codes.json"
+ }
+ val json = assets.open(fileName).bufferedReader().use { it.readText() }
+ val type = object : TypeToken>() {}.type
+ return Gson().fromJson(json, type)
+ }
+
override fun showError(message: String) {
hideLoading()
ToastUtil.showShort(mContext, message)
diff --git a/app/src/main/java/com/juhabi/birds/login/adapter/CountryCodeAdapter.kt b/app/src/main/java/com/juhabi/birds/login/adapter/CountryCodeAdapter.kt
new file mode 100644
index 0000000..eda32f9
--- /dev/null
+++ b/app/src/main/java/com/juhabi/birds/login/adapter/CountryCodeAdapter.kt
@@ -0,0 +1,41 @@
+package com.juhabi.birds.login.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.juhabi.birds.databinding.ItemCountryCodeBinding
+
+data class CountryCallingCode(
+ val code: String,
+ val name: String,
+ val dial_code: String
+)
+
+class CountryCodeAdapter(
+ private val countries: List,
+ private val onItemClick: (CountryCallingCode) -> Unit
+) : RecyclerView.Adapter() {
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CountryViewHolder {
+ return CountryViewHolder(
+ ItemCountryCodeBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ )
+ }
+
+ override fun onBindViewHolder(holder: CountryViewHolder, position: Int) {
+ holder.bind(countries[position])
+ }
+
+ override fun getItemCount(): Int = countries.size
+
+ inner class CountryViewHolder(
+ private val binding: ItemCountryCodeBinding
+ ) : RecyclerView.ViewHolder(binding.root) {
+
+ fun bind(country: CountryCallingCode) {
+ binding.countryNameTextView.text = country.name
+ binding.countryDialCodeTextView.text = country.dial_code
+ binding.root.setOnClickListener { onItemClick(country) }
+ }
+ }
+}
diff --git a/app/src/main/java/com/juhabi/birds/main/MainActivity.kt b/app/src/main/java/com/juhabi/birds/main/MainActivity.kt
index d68f1b5..e3d0fde 100644
--- a/app/src/main/java/com/juhabi/birds/main/MainActivity.kt
+++ b/app/src/main/java/com/juhabi/birds/main/MainActivity.kt
@@ -2,7 +2,6 @@ package com.juhabi.birds.main
import android.os.Bundle
import android.view.LayoutInflater
-import androidx.annotation.ColorRes
import androidx.core.content.ContextCompat
import com.juhabi.birds.R
import com.juhabi.birds.base.BaseActivity
@@ -80,12 +79,9 @@ class MainActivity : BaseActivity(),
}
private fun updateTopBarColor(position: Int) {
- @ColorRes val colorRes = when (position) {
- PAGE_HOME -> R.color.color_zhu
- PAGE_MINE -> R.color.color_B85CE6
- else -> R.color.color_zhu
- }
- binding.statusBarView.setBackgroundColor(ContextCompat.getColor(this, colorRes))
+ binding.statusBarView.setBackgroundColor(
+ ContextCompat.getColor(this, R.color.color_zhu)
+ )
}
override fun initData(savedInstanceState: Bundle?) {
diff --git a/app/src/main/java/com/juhabi/birds/mine/MineCenterActivity.kt b/app/src/main/java/com/juhabi/birds/mine/MineCenterActivity.kt
index 7b976cc..511a3c1 100644
--- a/app/src/main/java/com/juhabi/birds/mine/MineCenterActivity.kt
+++ b/app/src/main/java/com/juhabi/birds/mine/MineCenterActivity.kt
@@ -123,8 +123,8 @@ class MineCenterActivity : BaseActivity {
showEditDialog(
- "请输入内容",
- "请输入测试内容",
+ title = "请输入内容",
+ hint = "请输入测试内容",
click = object : OnDialogClick {
override fun onCancelClick() {
showMessage("已取消输入")
@@ -190,13 +190,12 @@ class MineCenterActivity : BaseActivity(),
- MineContract.MineView {
+class MineFragment : BaseFragment(),
+ MineContract.MineView, View.OnClickListener {
- override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentMineBinding {
- return FragmentMineBinding.inflate(inflater, container, false)
+ override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): MineCenterLayoutBinding {
+ return MineCenterLayoutBinding.inflate(inflater, container, false)
}
override fun createPresenter(): MinePresenter {
@@ -32,11 +36,68 @@ class MineFragment : BaseFragment(),
}
override fun initView(savedInstanceState: Bundle?) {
+ listOf(
+ binding.linearXgmm,
+ binding.linearGhsj,
+ binding.linearQchc,
+ binding.linearBbxx,
+ binding.linearYsxy,
+ binding.linearYhxy,
+ binding.linearQhyy,
+ binding.linearZxzh,
+ binding.tvLogout,
+ ).forEach { button ->
+ button.setOnClickListener(this)
+ }
+ }
+
+ override fun onClick(view: View) {
+ when (view.id) {
+ //修改密码
+ R.id.linear_xgmm -> {
+ goTo(ModifyPsdActivity::class.java, null)
+ }
+
+ R.id.linear_ghsj -> {
+ goTo(UpdateUserAccount::class.java, null)
+ }
+
+
+ //退出登录
+ R.id.tv_logout -> {
+ showDialogtext(
+ "退出登录",
+ "确定要退出当前账号吗?",
+ "确定",
+ "取消",
+ object : OnDialogClick {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ // 退出登录接口后续接入
+ }
+ }
+ )
+ }
+
+
+ }
}
/** 将个人信息请求结果更新到个人中心页面。 */
override fun getUserInfoSuccess(userInfo: MineUserInfo) {
- showMessage("个人信息获取成功")
+ val displayName = userInfo.userName.ifBlank { "未设置用户名" }
+ val displayAccount = userInfo.phoneNumber
+ ?.ifBlank { null }
+ ?: "未绑定手机号"
+ binding.tvUserName.text = displayName
+ binding.tvUserAccount.text = displayAccount
+ if (userInfo.avatar.isNullOrBlank()) {
+ binding.imgAvatar.setImageResource(R.mipmap.icon_mine_user_head_defaul)
+ }
+ //存一下个人信息
+ UserInfoManager.setUserInfo(userInfo)
}
/** 版本检测回调,个人中心暂不处理版本信息。 */
diff --git a/app/src/main/java/com/juhabi/birds/mine/ModifyPsdActivity.kt b/app/src/main/java/com/juhabi/birds/mine/ModifyPsdActivity.kt
index 94f2870..a2eb081 100644
--- a/app/src/main/java/com/juhabi/birds/mine/ModifyPsdActivity.kt
+++ b/app/src/main/java/com/juhabi/birds/mine/ModifyPsdActivity.kt
@@ -39,6 +39,7 @@ class ModifyPsdActivity : BaseActivity(),
override fun initView(savedInstanceState: Bundle?) {
+ binding.includedTitle.tvTitle.text = "修改密码"
listOf(
binding.oldPsdVisibilityButton,
binding.passwordVisibilityButton,
diff --git a/app/src/main/java/com/juhabi/birds/mine/UpdateUserAccount.kt b/app/src/main/java/com/juhabi/birds/mine/UpdateUserAccount.kt
new file mode 100644
index 0000000..f251edf
--- /dev/null
+++ b/app/src/main/java/com/juhabi/birds/mine/UpdateUserAccount.kt
@@ -0,0 +1,87 @@
+package com.juhabi.birds.mine
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import com.gyf.immersionbar.ImmersionBar
+import com.juhabi.birds.R
+import com.juhabi.birds.base.BaseActivity
+import com.juhabi.birds.databinding.ModifyPsdLayoutBinding
+import com.juhabi.birds.databinding.UpdateUserPhoneLayoutBinding
+import com.juhabi.birds.main.model.AppVersionInfo
+import com.juhabi.birds.mine.model.MineUserInfo
+import com.juhabi.birds.mine.mvp.MineContract
+import com.juhabi.birds.mine.mvp.MineImpl
+import com.juhabi.birds.mine.mvp.MinePresenter
+import com.juhabi.birds.util.manager.UserInfoManager
+
+/**
+ * 修改手机号
+ */
+class UpdateUserAccount : BaseActivity(),
+ MineContract.MineView, View.OnClickListener {
+ override fun createBinding(inflater: LayoutInflater): UpdateUserPhoneLayoutBinding {
+ return UpdateUserPhoneLayoutBinding.inflate(inflater)
+ }
+
+ override fun createPresenter(): MinePresenter? {
+ return MinePresenter(MineImpl())
+ }
+ override fun initWindows() {
+ ImmersionBar.with(this)
+ .statusBarView(binding.statusBarView)
+ .statusBarDarkFont(true)
+ .navigationBarColor(R.color.color_zhu)
+ .navigationBarDarkIcon(true)
+ .init()
+ }
+
+
+ override fun initView(savedInstanceState: Bundle?) {
+ binding.includedTitle.tvTitle.text = "修改密码"
+ var userinfo: MineUserInfo? = UserInfoManager.getUserInfo(mContext);
+ binding.tvUserAccount.text = userinfo?.nickName
+ listOf(
+ binding.tvConfirmGetcode,
+ binding.tvConfirmAccount,
+ binding.tvNewPhoneGetcode,
+ binding.tvSubmitNewAccount,
+ binding.includedTitle.imgBack,
+ ).forEach { button ->
+ button.setOnClickListener(this)
+ }
+ }
+
+ override fun onClick(view: View) {
+ when(view.id){
+ R.id.img_back ->{
+ finish()
+ }
+
+ R.id.tv_confirm_getcode ->{
+
+ }
+
+ R.id.tv_confirmAccount ->{
+ }
+
+ R.id.tv_new_phone_getcode ->{
+ }
+
+ R.id.tv_submit_new_account ->{
+ }
+
+ }
+ }
+
+ override fun showError(message: String) {
+ }
+
+ override fun getUserInfoSuccess(userInfo: MineUserInfo) {
+ }
+
+ override fun onVersionChecked(versionInfo: AppVersionInfo) {
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/juhabi/birds/mine/model/MineUserInfo.kt b/app/src/main/java/com/juhabi/birds/mine/model/MineUserInfo.kt
index 20c6acf..e072ce1 100644
--- a/app/src/main/java/com/juhabi/birds/mine/model/MineUserInfo.kt
+++ b/app/src/main/java/com/juhabi/birds/mine/model/MineUserInfo.kt
@@ -1,24 +1,15 @@
package com.juhabi.birds.mine.model
+/**
+ * 3.1 获取当前用户资料接口返回项。
+ */
data class MineUserInfo(
- val user: User? = null,
- val permissions: List = emptyList(),
- val roles: List = emptyList(),
- val url: String? = null
-) {
- data class User(
- val userId: String = "",
- val tenantId: String = "",
- val userName: String? = null,
- val nickName: String = "",
- val userType: String = "",
- val email: String = "",
- val phonenumber: String = "",
- val sex: String = "",
- val avatar: String? = null,
- val status: String = "",
- val loginIp: String = "",
- val loginDate: String = "",
- val createTime: String = ""
- )
-}
+ val userName: String = "",
+ val nickName: String = "",
+ val phoneNumber: String? = null,
+ val email: String? = null,
+ val phoneBound: Boolean = false,
+ val userType: String = "",
+ val createTime: String = "",
+ val avatar: String? = null
+)
diff --git a/app/src/main/java/com/juhabi/birds/util/manager/UserInfoManager.kt b/app/src/main/java/com/juhabi/birds/util/manager/UserInfoManager.kt
index e441784..e6ef07c 100644
--- a/app/src/main/java/com/juhabi/birds/util/manager/UserInfoManager.kt
+++ b/app/src/main/java/com/juhabi/birds/util/manager/UserInfoManager.kt
@@ -2,14 +2,14 @@ package com.juhabi.birds.util.manager
import android.content.Context
import com.juhabi.birds.MyApplication
+import com.juhabi.birds.mine.model.MineUserInfo
import com.juhabi.birds.network.TokenManager
-import com.juhabi.birds.user.model.UserEntity
import com.juhabi.birds.util.SharedPreferencesUtil
/** 管理当前用户的内存缓存和轻量级本地持久化数据。 */
object UserInfoManager {
@Volatile
- private var cachedUser: UserEntity? = null
+ private var cachedUser: MineUserInfo? = null
@JvmStatic
fun getInstance(): UserInfoManager = this
@@ -21,42 +21,42 @@ object UserInfoManager {
cachedUser = SharedPreferencesUtil.getObject(
context,
KEY_USER_INFO,
- UserEntity::class.java
+ MineUserInfo::class.java
)
}
@JvmStatic
- fun getUserInfo(): UserEntity? = getUserInfo(MyApplication.appContext)
+ fun getUserInfo(): MineUserInfo? = getUserInfo(MyApplication.appContext)
@JvmStatic
- fun getUserInfo(context: Context): UserEntity? {
+ fun getUserInfo(context: Context): MineUserInfo? {
cachedUser?.let { return it }
return SharedPreferencesUtil.getObject(
context,
KEY_USER_INFO,
- UserEntity::class.java
+ MineUserInfo::class.java
)?.also { cachedUser = it }
}
@JvmStatic
- fun setUserInfo(userInfo: UserEntity) {
+ fun setUserInfo(userInfo: MineUserInfo) {
setUserInfo(MyApplication.appContext, userInfo)
}
@JvmStatic
- fun setUserInfo(context: Context, userInfo: UserEntity) {
+ fun setUserInfo(context: Context, userInfo: MineUserInfo) {
cachedUser = userInfo
SharedPreferencesUtil.putObject(context, KEY_USER_INFO, userInfo)
}
/** 登录成功后统一保存用户信息和 token。 */
@JvmStatic
- fun saveLogin(userInfo: UserEntity, token: String) {
+ fun saveLogin(userInfo: MineUserInfo, token: String) {
saveLogin(MyApplication.appContext, userInfo, token)
}
@JvmStatic
- fun saveLogin(context: Context, userInfo: UserEntity, token: String) {
+ fun saveLogin(context: Context, userInfo: MineUserInfo, token: String) {
setUserInfo(context, userInfo)
TokenManager.save(context, token)
SharedPreferencesUtil.putBoolean(context, KEY_USER_LOGIN, token.isNotBlank())
diff --git a/app/src/main/res/color/bottom_nav_item_color.xml b/app/src/main/res/color/bottom_nav_item_color.xml
index aeb73c4..ad279d7 100644
--- a/app/src/main/res/color/bottom_nav_item_color.xml
+++ b/app/src/main/res/color/bottom_nav_item_color.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/app/src/main/res/drawable/bind_dev_input_line_bg.xml b/app/src/main/res/drawable/bind_dev_input_line_bg.xml
new file mode 100644
index 0000000..797f9f1
--- /dev/null
+++ b/app/src/main/res/drawable/bind_dev_input_line_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/dialog_input_bg.xml b/app/src/main/res/drawable/dialog_input_bg.xml
index 4a27553..3c9c7be 100644
--- a/app/src/main/res/drawable/dialog_input_bg.xml
+++ b/app/src/main/res/drawable/dialog_input_bg.xml
@@ -1,5 +1,7 @@
-
-
-
+
+
+
diff --git a/app/src/main/res/drawable/ic_nav_home.xml b/app/src/main/res/drawable/ic_nav_home.xml
index 8483c28..ec793f8 100644
--- a/app/src/main/res/drawable/ic_nav_home.xml
+++ b/app/src/main/res/drawable/ic_nav_home.xml
@@ -1,3 +1,5 @@
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_nav_mine.xml b/app/src/main/res/drawable/ic_nav_mine.xml
index fbe00ab..e2e175b 100644
--- a/app/src/main/res/drawable/ic_nav_mine.xml
+++ b/app/src/main/res/drawable/ic_nav_mine.xml
@@ -1,3 +1,5 @@
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/progress_foot_bg.xml b/app/src/main/res/drawable/progress_foot_bg.xml
new file mode 100644
index 0000000..604da1d
--- /dev/null
+++ b/app/src/main/res/drawable/progress_foot_bg.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/progress_head_bg.xml b/app/src/main/res/drawable/progress_head_bg.xml
new file mode 100644
index 0000000..de4b34b
--- /dev/null
+++ b/app/src/main/res/drawable/progress_head_bg.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/progress_offline_bg.xml b/app/src/main/res/drawable/progress_offline_bg.xml
new file mode 100644
index 0000000..9878653
--- /dev/null
+++ b/app/src/main/res/drawable/progress_offline_bg.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_device_offline_bg.xml b/app/src/main/res/drawable/shape_device_offline_bg.xml
new file mode 100644
index 0000000..fc4b11a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_device_offline_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_device_online_bg.xml b/app/src/main/res/drawable/shape_device_online_bg.xml
new file mode 100644
index 0000000..e13c529
--- /dev/null
+++ b/app/src/main/res/drawable/shape_device_online_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_device_wifi_power_bg.xml b/app/src/main/res/drawable/shape_device_wifi_power_bg.xml
new file mode 100644
index 0000000..63ca5bc
--- /dev/null
+++ b/app/src/main/res/drawable/shape_device_wifi_power_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_login_field_8_corner_bg.xml b/app/src/main/res/drawable/shape_login_field_8_corner_bg.xml
new file mode 100644
index 0000000..7fafb54
--- /dev/null
+++ b/app/src/main/res/drawable/shape_login_field_8_corner_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/shape_logout_field_bg.xml b/app/src/main/res/drawable/shape_logout_field_bg.xml
new file mode 100644
index 0000000..dec3cd3
--- /dev/null
+++ b/app/src/main/res/drawable/shape_logout_field_bg.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/bind_device_layout.xml b/app/src/main/res/layout/bind_device_layout.xml
index 5c0d0b5..5d8c060 100644
--- a/app/src/main/res/layout/bind_device_layout.xml
+++ b/app/src/main/res/layout/bind_device_layout.xml
@@ -2,7 +2,8 @@
+ android:layout_height="match_parent"
+ android:background="@color/color_zhu">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_width="match_parent"
+ android:layout_height="40dp"
+ android:layout_marginHorizontal="15dp"
+ android:layout_marginTop="84dp"
+ android:gravity="center"
+ android:background="@drawable/shape_login_field_bg"
+ android:backgroundTint="@null"
+ android:stateListAnimator="@null"
+ android:text="确定"
+ android:textAllCaps="false"
+ android:textColor="@color/color_zhu"
+ android:textSize="17sp" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/device_item.xml b/app/src/main/res/layout/device_item.xml
index 925b1bf..bd0d6f1 100644
--- a/app/src/main/res/layout/device_item.xml
+++ b/app/src/main/res/layout/device_item.xml
@@ -3,72 +3,307 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:background="#FFFFFF"
- android:elevation="2dp"
- android:padding="14dp">
-
+ android:layout_marginTop="10dp">
-
+ android:orientation="vertical"
+ android:paddingVertical="13dp"
+ android:paddingHorizontal="20dp"
+ android:background="@drawable/shape_login_field_8_corner_bg">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_input_text.xml b/app/src/main/res/layout/dialog_input_text.xml
index 8670dca..ef6ccce 100644
--- a/app/src/main/res/layout/dialog_input_text.xml
+++ b/app/src/main/res/layout/dialog_input_text.xml
@@ -3,58 +3,96 @@
android:id="@+id/contentDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_margin="20dp"
- android:background="@drawable/dialog_round_efefef_bg"
- android:orientation="vertical"
- android:paddingTop="28dp"
- android:paddingBottom="24dp">
+ android:layout_marginHorizontal="36dp"
+ android:background="@drawable/bg_confirm_dialog"
+ android:orientation="vertical">
+
+
+
+
+ android:gravity="center_vertical"
+ android:hint=""
+ android:inputType="text"
+ android:maxLength="20"
+ android:paddingHorizontal="16dp"
+ android:singleLine="true"
+ android:textColor="@color/color_333333"
+ android:textColorHint="@color/color_999999"
+ android:textSize="15sp" />
+
+
+
+
+
+
+ android:textColor="@color/color_333333"
+ android:textSize="16sp" />
+
+
+
+ android:text="确认修改"
+ android:textColor="@color/color_zhu"
+ android:textSize="16sp"
+ android:textStyle="bold" />
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index efda55c..3350226 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -5,36 +5,50 @@
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/page_background"
- android:orientation="vertical">
-
+
-
-
+ android:layout_height="54dp"
+ android:orientation="horizontal"
+ android:background="@color/color_zhu"
+ android:gravity="center_vertical">
+
+
+
+
-
-
+ android:layout_weight="1"/>
+
+ android:layout_width="38dp"
+ android:layout_height="38dp"
+ android:src="@mipmap/icon_dev_add"
+ android:layout_marginEnd="20dp"/>
+
+
+
+
diff --git a/app/src/main/res/layout/mine_center_layout.xml b/app/src/main/res/layout/mine_center_layout.xml
new file mode 100644
index 0000000..35f055a
--- /dev/null
+++ b/app/src/main/res/layout/mine_center_layout.xml
@@ -0,0 +1,330 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/permission_confirm_dialog.xml b/app/src/main/res/layout/permission_confirm_dialog.xml
index 20a04bb..cd18eb3 100644
--- a/app/src/main/res/layout/permission_confirm_dialog.xml
+++ b/app/src/main/res/layout/permission_confirm_dialog.xml
@@ -3,54 +3,69 @@
android:id="@+id/contentDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_margin="20dp"
- android:background="@drawable/dialog_round_efefef_bg"
- android:orientation="vertical"
- android:paddingTop="24dp"
- android:paddingBottom="24dp">
+ android:layout_marginHorizontal="36dp"
+ android:background="@drawable/bg_confirm_dialog"
+ android:orientation="vertical">
+
+
+
+
+
+
+ android:text="取消"
+ android:textColor="@color/color_333333"
+ android:textSize="16sp" />
+
+
+
+ android:text="确定"
+ android:textColor="@color/color_zhu"
+ android:textSize="16sp"
+ android:textStyle="bold" />
diff --git a/app/src/main/res/layout/register_layout.xml b/app/src/main/res/layout/register_layout.xml
index 2cefbad..57f2f8a 100644
--- a/app/src/main/res/layout/register_layout.xml
+++ b/app/src/main/res/layout/register_layout.xml
@@ -48,6 +48,7 @@
android:src="@mipmap/icon_login_phone"
android:contentDescription="@null" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_navigation_menu.xml b/app/src/main/res/menu/bottom_navigation_menu.xml
index 16f21a1..47c827d 100644
--- a/app/src/main/res/menu/bottom_navigation_menu.xml
+++ b/app/src/main/res/menu/bottom_navigation_menu.xml
@@ -3,9 +3,9 @@
+ android:title="@string/device_list" />
+ android:title="@string/mine_title" />
diff --git a/app/src/main/res/mipmap-xhdpi/icon_bind_hint.png b/app/src/main/res/mipmap-xhdpi/icon_bind_hint.png
new file mode 100644
index 0000000..1708650
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_bind_hint.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_bind_scan.png b/app/src/main/res/mipmap-xhdpi/icon_bind_scan.png
new file mode 100644
index 0000000..83c29bb
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_bind_scan.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_add.png b/app/src/main/res/mipmap-xhdpi/icon_dev_add.png
new file mode 100644
index 0000000..a318769
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_add.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_close_eye.png b/app/src/main/res/mipmap-xhdpi/icon_dev_close_eye.png
new file mode 100644
index 0000000..6ddcedc
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_close_eye.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_location.png b/app/src/main/res/mipmap-xhdpi/icon_dev_location.png
new file mode 100644
index 0000000..a3e44cb
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_location.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_more.png b/app/src/main/res/mipmap-xhdpi/icon_dev_more.png
new file mode 100644
index 0000000..782726a
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_more.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_open_eye.png b/app/src/main/res/mipmap-xhdpi/icon_dev_open_eye.png
new file mode 100644
index 0000000..592936f
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_open_eye.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_point_down.png b/app/src/main/res/mipmap-xhdpi/icon_dev_point_down.png
new file mode 100644
index 0000000..cb94e02
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_point_down.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_power_offline.png b/app/src/main/res/mipmap-xhdpi/icon_dev_power_offline.png
new file mode 100644
index 0000000..9218bbb
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_power_offline.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_hight.png b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_hight.png
new file mode 100644
index 0000000..7eba089
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_hight.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_low.png b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_low.png
new file mode 100644
index 0000000..3c8af39
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_low.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_mid.png b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_mid.png
new file mode 100644
index 0000000..2306ee6
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_mid.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_offline.png b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_offline.png
new file mode 100644
index 0000000..2362278
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_dev_wifi_offline.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_input_index_false.png b/app/src/main/res/mipmap-xhdpi/icon_input_index_false.png
new file mode 100644
index 0000000..09ebc22
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_input_index_false.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_input_index_true.png b/app/src/main/res/mipmap-xhdpi/icon_input_index_true.png
new file mode 100644
index 0000000..e2227e0
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_input_index_true.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_main_mine_false.png b/app/src/main/res/mipmap-xhdpi/icon_main_mine_false.png
new file mode 100644
index 0000000..6b6b61e
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_main_mine_false.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_main_mine_true.png b/app/src/main/res/mipmap-xhdpi/icon_main_mine_true.png
new file mode 100644
index 0000000..26bd8f1
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_main_mine_true.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mian_index_false.png b/app/src/main/res/mipmap-xhdpi/icon_mian_index_false.png
new file mode 100644
index 0000000..4f622c1
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mian_index_false.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mian_index_true.png b/app/src/main/res/mipmap-xhdpi/icon_mian_index_true.png
new file mode 100644
index 0000000..7371871
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mian_index_true.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_bbxx.png b/app/src/main/res/mipmap-xhdpi/icon_mine_bbxx.png
new file mode 100644
index 0000000..8a29d73
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_bbxx.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_hbsj.png b/app/src/main/res/mipmap-xhdpi/icon_mine_hbsj.png
new file mode 100644
index 0000000..f40a702
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_hbsj.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_point.png b/app/src/main/res/mipmap-xhdpi/icon_mine_point.png
new file mode 100644
index 0000000..f98b4e2
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_point.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_qchc.png b/app/src/main/res/mipmap-xhdpi/icon_mine_qchc.png
new file mode 100644
index 0000000..0c8f35b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_qchc.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_qhyy.png b/app/src/main/res/mipmap-xhdpi/icon_mine_qhyy.png
new file mode 100644
index 0000000..b1c9b28
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_qhyy.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_user_head_defaul.png b/app/src/main/res/mipmap-xhdpi/icon_mine_user_head_defaul.png
new file mode 100644
index 0000000..abaa413
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_user_head_defaul.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_xgmm.png b/app/src/main/res/mipmap-xhdpi/icon_mine_xgmm.png
new file mode 100644
index 0000000..0be97dd
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_xgmm.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_yhxy.png b/app/src/main/res/mipmap-xhdpi/icon_mine_yhxy.png
new file mode 100644
index 0000000..a0a9520
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_yhxy.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_ysxy.png b/app/src/main/res/mipmap-xhdpi/icon_mine_ysxy.png
new file mode 100644
index 0000000..bef261c
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_ysxy.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_mine_zxzh.png b/app/src/main/res/mipmap-xhdpi/icon_mine_zxzh.png
new file mode 100644
index 0000000..d205260
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_mine_zxzh.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_power_foot_high.png b/app/src/main/res/mipmap-xhdpi/icon_power_foot_high.png
new file mode 100644
index 0000000..9ac8f3d
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_power_foot_high.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_power_foot_mid.png b/app/src/main/res/mipmap-xhdpi/icon_power_foot_mid.png
new file mode 100644
index 0000000..011c27a
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_power_foot_mid.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_power_head_high.png b/app/src/main/res/mipmap-xhdpi/icon_power_head_high.png
new file mode 100644
index 0000000..d63c76c
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_power_head_high.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_power_head_mid.png b/app/src/main/res/mipmap-xhdpi/icon_power_head_mid.png
new file mode 100644
index 0000000..e95bee9
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_power_head_mid.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_power_low.png b/app/src/main/res/mipmap-xhdpi/icon_power_low.png
new file mode 100644
index 0000000..8db82f8
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_power_low.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_scan_index_false.png b/app/src/main/res/mipmap-xhdpi/icon_scan_index_false.png
new file mode 100644
index 0000000..037bed3
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_scan_index_false.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_scan_index_true.png b/app/src/main/res/mipmap-xhdpi/icon_scan_index_true.png
new file mode 100644
index 0000000..2183f48
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_scan_index_true.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_switch_off.png b/app/src/main/res/mipmap-xhdpi/icon_switch_off.png
new file mode 100644
index 0000000..1525d1c
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_switch_off.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/icon_switch_on.png b/app/src/main/res/mipmap-xhdpi/icon_switch_on.png
new file mode 100644
index 0000000..9b5e27f
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/icon_switch_on.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_bind_hint.png b/app/src/main/res/mipmap-xxhdpi/icon_bind_hint.png
new file mode 100644
index 0000000..1708650
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_bind_hint.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_bind_scan.png b/app/src/main/res/mipmap-xxhdpi/icon_bind_scan.png
new file mode 100644
index 0000000..83c29bb
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_bind_scan.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_add.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_add.png
new file mode 100644
index 0000000..0282974
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_add.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_close_eye.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_close_eye.png
new file mode 100644
index 0000000..d3625a7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_close_eye.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_location.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_location.png
new file mode 100644
index 0000000..c688db3
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_location.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_more.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_more.png
new file mode 100644
index 0000000..383a43b
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_more.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_open_eye.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_open_eye.png
new file mode 100644
index 0000000..8a58817
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_open_eye.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_point_down.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_point_down.png
new file mode 100644
index 0000000..3b74b7d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_point_down.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_power_offline.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_power_offline.png
new file mode 100644
index 0000000..18ac60c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_power_offline.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_hight.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_hight.png
new file mode 100644
index 0000000..78e7bfc
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_hight.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_low.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_low.png
new file mode 100644
index 0000000..496b97c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_low.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_mid.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_mid.png
new file mode 100644
index 0000000..9e293db
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_mid.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_offline.png b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_offline.png
new file mode 100644
index 0000000..0187c4a
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_dev_wifi_offline.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_input_index_false.png b/app/src/main/res/mipmap-xxhdpi/icon_input_index_false.png
new file mode 100644
index 0000000..af3af36
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_input_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_input_index_true.png b/app/src/main/res/mipmap-xxhdpi/icon_input_index_true.png
new file mode 100644
index 0000000..c37f2a2
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_input_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_main_mine_false.png b/app/src/main/res/mipmap-xxhdpi/icon_main_mine_false.png
new file mode 100644
index 0000000..382f94e
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_main_mine_false.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_main_mine_true.png b/app/src/main/res/mipmap-xxhdpi/icon_main_mine_true.png
new file mode 100644
index 0000000..3cd1424
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_main_mine_true.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mian_index_false.png b/app/src/main/res/mipmap-xxhdpi/icon_mian_index_false.png
new file mode 100644
index 0000000..cfb6348
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mian_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mian_index_true.png b/app/src/main/res/mipmap-xxhdpi/icon_mian_index_true.png
new file mode 100644
index 0000000..cbdcac7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mian_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_bbxx.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_bbxx.png
new file mode 100644
index 0000000..2eb28f4
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_bbxx.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_hbsj.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_hbsj.png
new file mode 100644
index 0000000..8745381
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_hbsj.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_point.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_point.png
new file mode 100644
index 0000000..c945f92
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_point.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_qchc.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_qchc.png
new file mode 100644
index 0000000..7448cbe
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_qchc.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_qhyy.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_qhyy.png
new file mode 100644
index 0000000..ab89c38
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_qhyy.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_xgmm.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_xgmm.png
new file mode 100644
index 0000000..20e2966
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_xgmm.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_yhxy.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_yhxy.png
new file mode 100644
index 0000000..3d7fde9
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_yhxy.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_ysxy.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_ysxy.png
new file mode 100644
index 0000000..5872e26
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_ysxy.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_mine_zxzh.png b/app/src/main/res/mipmap-xxhdpi/icon_mine_zxzh.png
new file mode 100644
index 0000000..7b3c921
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_mine_zxzh.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_power_foot_high.png b/app/src/main/res/mipmap-xxhdpi/icon_power_foot_high.png
new file mode 100644
index 0000000..5fde6e7
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_power_foot_high.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_power_foot_mid.png b/app/src/main/res/mipmap-xxhdpi/icon_power_foot_mid.png
new file mode 100644
index 0000000..1e3219b
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_power_foot_mid.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_power_head_high.png b/app/src/main/res/mipmap-xxhdpi/icon_power_head_high.png
new file mode 100644
index 0000000..f8f625c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_power_head_high.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_power_head_mid.png b/app/src/main/res/mipmap-xxhdpi/icon_power_head_mid.png
new file mode 100644
index 0000000..9b29044
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_power_head_mid.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_power_low.png b/app/src/main/res/mipmap-xxhdpi/icon_power_low.png
new file mode 100644
index 0000000..3418243
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_power_low.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_scan_index_false.png b/app/src/main/res/mipmap-xxhdpi/icon_scan_index_false.png
new file mode 100644
index 0000000..39899f3
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_scan_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_scan_index_true.png b/app/src/main/res/mipmap-xxhdpi/icon_scan_index_true.png
new file mode 100644
index 0000000..57a0e32
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_scan_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_switch_off.png b/app/src/main/res/mipmap-xxhdpi/icon_switch_off.png
new file mode 100644
index 0000000..a70af79
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_switch_off.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/icon_switch_on.png b/app/src/main/res/mipmap-xxhdpi/icon_switch_on.png
new file mode 100644
index 0000000..5b2a96c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_switch_on.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_bind_hint.png b/app/src/main/res/mipmap-xxxhdpi/icon_bind_hint.png
new file mode 100644
index 0000000..375ac4f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_bind_hint.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_bind_scan.png b/app/src/main/res/mipmap-xxxhdpi/icon_bind_scan.png
new file mode 100644
index 0000000..3705cf1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_bind_scan.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_add.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_add.png
new file mode 100644
index 0000000..8b824ca
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_add.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_close_eye.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_close_eye.png
new file mode 100644
index 0000000..c898fe0
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_close_eye.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_location.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_location.png
new file mode 100644
index 0000000..92b50fa
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_location.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_more.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_more.png
new file mode 100644
index 0000000..4ea75dc
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_more.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_open_eye.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_open_eye.png
new file mode 100644
index 0000000..1001766
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_open_eye.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_point_down.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_point_down.png
new file mode 100644
index 0000000..8ab4e9d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_point_down.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_power_offline.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_power_offline.png
new file mode 100644
index 0000000..c443853
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_power_offline.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_hight.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_hight.png
new file mode 100644
index 0000000..f8ff3f6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_hight.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_low.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_low.png
new file mode 100644
index 0000000..292884f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_low.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_mid.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_mid.png
new file mode 100644
index 0000000..1c15ece
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_mid.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_offline.png b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_offline.png
new file mode 100644
index 0000000..d0a43cb
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_dev_wifi_offline.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_input_index_false.png b/app/src/main/res/mipmap-xxxhdpi/icon_input_index_false.png
new file mode 100644
index 0000000..74a5bb7
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_input_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_input_index_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_input_index_true.png
new file mode 100644
index 0000000..a508ef8
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_input_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_false.png b/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_false.png
new file mode 100644
index 0000000..0b8390b
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_false.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_true.png
new file mode 100644
index 0000000..147e915
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_main_mine_true.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_false.png b/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_false.png
new file mode 100644
index 0000000..1a1d03d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_true.png
new file mode 100644
index 0000000..0f25e0c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mian_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_bbxx.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_bbxx.png
new file mode 100644
index 0000000..abbe13a
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_bbxx.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_hbsj.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_hbsj.png
new file mode 100644
index 0000000..20c08b7
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_hbsj.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_point.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_point.png
new file mode 100644
index 0000000..73f1215
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_point.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_qchc.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_qchc.png
new file mode 100644
index 0000000..434127f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_qchc.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_qhyy.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_qhyy.png
new file mode 100644
index 0000000..e726e77
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_qhyy.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_xgmm.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_xgmm.png
new file mode 100644
index 0000000..ad3e39f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_xgmm.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_yhxy.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_yhxy.png
new file mode 100644
index 0000000..7242c91
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_yhxy.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_ysxy.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_ysxy.png
new file mode 100644
index 0000000..e42e1b1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_ysxy.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_mine_zxzh.png b/app/src/main/res/mipmap-xxxhdpi/icon_mine_zxzh.png
new file mode 100644
index 0000000..292b4fb
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_mine_zxzh.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_high.png b/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_high.png
new file mode 100644
index 0000000..361154f
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_high.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_mid.png b/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_mid.png
new file mode 100644
index 0000000..bbe45af
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_power_foot_mid.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_power_head_high.png b/app/src/main/res/mipmap-xxxhdpi/icon_power_head_high.png
new file mode 100644
index 0000000..335b3f9
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_power_head_high.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_power_head_mid.png b/app/src/main/res/mipmap-xxxhdpi/icon_power_head_mid.png
new file mode 100644
index 0000000..61e2cc6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_power_head_mid.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_power_low.png b/app/src/main/res/mipmap-xxxhdpi/icon_power_low.png
new file mode 100644
index 0000000..ebf8bf6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_power_low.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_false.png b/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_false.png
new file mode 100644
index 0000000..7eaa39b
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_false.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_true.png b/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_true.png
new file mode 100644
index 0000000..3fc32e6
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_scan_index_true.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_switch_off.png b/app/src/main/res/mipmap-xxxhdpi/icon_switch_off.png
new file mode 100644
index 0000000..74e295e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_switch_off.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/icon_switch_on.png b/app/src/main/res/mipmap-xxxhdpi/icon_switch_on.png
new file mode 100644
index 0000000..11f6f50
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/icon_switch_on.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 320e937..d2aeb33 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -36,6 +36,8 @@
#D9D9D9
#DCDFE6
#E34D59
+ #EDEDED
+ #FF942A
#707070
@@ -56,6 +58,8 @@
#EFEFEF
#666666
+ #C4C2C2
+ #FFB163
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 35eab0d..f61d6f2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -20,6 +20,7 @@
获取验证码
%1$d秒后重新获取
已经到底了
+ 我的设备
@@ -60,7 +61,7 @@
测试定位权限
测试普通弹窗
测试输入弹窗
- 首页
+ 设备列表
计划
历史
我的
@@ -72,6 +73,8 @@
历史
我的
打开功能组件中心
+ 修改密码
+ 选择国家或地区
日期时间选择组件
选择日期
选择时间