diff --git a/app/build.gradle b/app/build.gradle index dd90890..071b6ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'com.huawei.agconnect' +apply plugin: 'kotlin-parcelize' def rely = rootProject.ext.relyOn diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d04148e..dcb9e42 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -142,6 +142,10 @@ + + - + @@ -387,14 +391,14 @@ android:exported="true" android:label="@string/app_name" android:launchMode="singleTask" - android:taskAffinity="com.xty.healthuser" + android:taskAffinity="com.zj365.dc" android:theme="@style/Theme.AppCompat.NoActionBar.Transparent"> @@ -409,9 +413,15 @@ android:name="com.hihonor.push.app_id" android:value="${HONOR_APPID}" /> - + + + diff --git a/app/src/main/java/com/zj365/dc/activity/DeviceActiveAct.kt b/app/src/main/java/com/zj365/dc/activity/DeviceActiveAct.kt new file mode 100644 index 0000000..837ef52 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/activity/DeviceActiveAct.kt @@ -0,0 +1,515 @@ +package com.zj365.dc.activity + +import android.annotation.SuppressLint +import android.content.Intent +import android.graphics.Color +import android.os.Build +import android.os.Bundle +import android.provider.Settings +import android.text.SpannableString +import android.text.Spanned +import android.text.TextPaint +import android.text.style.ClickableSpan +import android.view.View +import android.widget.TextView +import androidx.core.content.ContextCompat +import com.alibaba.android.arouter.facade.annotation.Route +import com.google.gson.Gson +import com.tamsiree.rxkit.RxActivityTool +import com.tamsiree.rxkit.RxKeyboardTool +import com.xty.base.act.BaseVmAct +import com.xty.common.* +import com.xty.common.aMapUtils.AmapInit +import com.xty.common.arouter.ARouterUrl +import com.xty.common.arouter.RouteManager +import com.xty.common.bracelet.* +import com.xty.common.event.BindDevEvent +import com.xty.common.event.BlueToothConnectEvent +import com.xty.common.event.BluetoothEvent +import com.xty.common.event.MyInfoEvent +import com.xty.common.util.CommonToastUtils +import com.xty.common.util.CommonUtils +import com.xty.common.util.PermissionUtils +import com.xty.common.xqr_code.XQRCodeAct + + +import com.xuexiang.xqrcode.XQRCode +import com.yanzhenjie.permission.runtime.Permission +import com.zj365.dc.databinding.ActDeviceActiveBinding +import com.zj365.dc.model.ScanInfoBean +import com.zj365.dc.vm.BasicInfoVm +import com.zj365.health.weight.SignDialog +import com.zj365.mime.weight.FactorySettingDialog +import com.zj365.mime.weight.NoticeSettingDialog +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode + +/** + * + * 设备激活 + */ +@SuppressLint("ObsoleteSdkInt") +@Route(path = ARouterUrl.DEVICE_ACTIVE) +class DeviceActiveAct : BaseVmAct() { + + val binding by lazy { ActDeviceActiveBinding.inflate(layoutInflater) } + override fun setLayout() = binding.root + + // var user: SettingBean.User? = null + var signPath = ""//签名地址 + var isAgree = false + val SERVER_AGREEMENT = 1000 //服务协议 + var isLogin: Boolean = false + + //签名 + val dialog by lazy { + SignDialog(this) { + signPath = it + binding.mImageSign.setImage(this, it) + } + } + + private val factorySettingDialog by lazy { + FactorySettingDialog( + this, + "蓝牙手表需要访问位置、蓝牙权限。" + ) { + getBluePermission(baseContext) { + if (it) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && !isGpsOpen(baseContext) + ) { + requestGPSPermission() + } + } else { + finish() + } + } + } + } + + private var headerPath = "" + private var name = "" + private var sexType = "" + private var idCard = "" + private var height = "" + private var wieght = "" + private var address = "" + private var otherName = "" + private var otherPhone = "" + private var rela = "" + private var provincey = "" + private var city = "" + private var district = "" + private var lat = "" + private var lng = "" + private var medicName = "" + private var medicIds = "" + private var diseaseList = "" + private var birthDay = "" + private var birthdayType = -1 + private var type = 0//0:蓝牙设备 默认 1:4G设备 + private var watchName = "" + + override fun initData() { + super.initData() + isDarkBar = true + isLogin = intent.getBooleanExtra("isLogin", false) + intent.extras?.let { + headerPath = getIntentStringData(it, "headerPath") + name = getIntentStringData(it, "name") + sexType = getIntentStringData(it, "sexType") + idCard = getIntentStringData(it, "idCard") + height = getIntentStringData(it, "height") + wieght = getIntentStringData(it, "wieght") + address = getIntentStringData(it, "address") + otherName = getIntentStringData(it, "otherName") + otherPhone = getIntentStringData(it, "otherPhone") + rela = getIntentStringData(it, "rela") + provincey = getIntentStringData(it, "provincey") + city = getIntentStringData(it, "city") + district = getIntentStringData(it, "district") + + lat = getIntentStringData(it, "lat") + lng = getIntentStringData(it, "lng") + medicName = getIntentStringData(it, "medicName") + + medicIds = getIntentStringData(it, "medicIds") + diseaseList = getIntentStringData(it, "diseaseList") + birthDay = getIntentStringData(it, "birthDay") + + birthdayType = it.getInt("birthdayType", -1) + type = it.getInt("type", 0) + } + + } + + private fun getIntentStringData(it: Bundle, key: String): String { + return if (it.getString(key).isNullOrEmpty()) "" else it.getString(key).toString() + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text = getString(R.string.active_action) + binding.title.mIvBack.setOnClickListener { + if (isLogin) { //如果是走注册流程过来的,退出该界面,则进入主界面 + RouteManager.goAct(ARouterUrl.MAIN_ACT) + RxActivityTool.finishAllActivity() + } else { + /* EventBus.getDefault().post(BindDevEvent()) + CommonToastUtils.showToast("绑定成功")*/ + finish() + } + } + + binding.mSign.setOnClickListener {//签名信息填写 + dialog.show() + } + + binding.mSubmit.setOnClickListener { + submitData() + } + + if (type == 0) {//是蓝牙设备 + factorySettingDialog.isShow() + + binding.mBlueTooth.setOnClickListener {//蓝牙设备搜索绑定 + RxKeyboardTool.hideSoftInput(this) + bundle.clear() + bundle.putString("devMac", if (it.tag == null) "" else it.tag.toString()) + bundle.putString("devName", (it as TextView).text.toString()) + RouteManager.goAct(ARouterUrl.DEVICE_CONNECT, bundle) + } + binding.mDeviceLayout.visibility = View.VISIBLE + if (YCBBlueConnectHelper.getBlueStatus(false)) {//如果当前已经连接手表 + binding.mBlueTooth.text = Const.connectBlueDevice.deviceName + binding.mBlueTooth.tag = Const.connectBlueDevice.deviceMac + } + } else {//4G设备 + binding.mDeviceLayout.visibility = View.GONE + binding.title.mIvReight.apply { + visibility = View.VISIBLE + setImageResource(com.zj365.health.R.mipmap.ic_scan) + setOnClickListener { + startScan() + } + } + } + setPrive() + } + + private val reqGpsPermissionDialog by lazy { + NoticeSettingDialog(this, "请打开GPS权限", { + finish() + }) { + // 转到手机设置界面,用户设置GPS + var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) + startActivityForResult(intent, 1001); // 设置完成后返回到原来的界面 + } + } + + + private fun requestGPSPermission() { + reqGpsPermissionDialog.show() + } + +// /** +// * 检测拍摄权限 +// */ +// private fun checkCameraPermissions() { +// val permission = arrayOf(Manifest.permission.CAMERA) +// Acp.getInstance(this).request( +// AcpOptions.Builder() +// .setPermissions( +// *permission +// ).build(), +// object : AcpListener { +// override fun onGranted() { +// +// } +// +// override fun onDenied(permissions: List) { +// finish() +// } +// }) +// } + + /** + * 扫码 + */ + private fun startScan() { + PermissionUtils.requestPermission(this, + { + XQRCodeAct.start( + this@DeviceActiveAct, + XQRCodeAct.QRCODE_AGREEMENT, + com.zj365.health.R.style.XQRCodeTheme_Custom + ) + }, Permission.CAMERA) + + } + + /** + * 隐私协议 + */ + private fun setPrive() { + binding.mPrivate.setOnClickListener { + if (!isAgree) { + forwardPrivate() + return@setOnClickListener + } + it.isSelected = !it.isSelected + } + binding.mPrivate.movementMethod = MyLinkedMovementMethod().getInstance() + var span = SpannableString(getString(R.string.agree_private_active)) + span.setSpan(object : ClickableSpan() { + override fun onClick(widget: View) { + forwardPrivate() + } + + override fun updateDrawState(ds: TextPaint) { + super.updateDrawState(ds) + ds.color = + ContextCompat.getColor(this@DeviceActiveAct, R.color.col_02c) + ds.isUnderlineText = false + } + + }, 2, 8, Spanned.SPAN_INCLUSIVE_INCLUSIVE) + binding.mPrivate.text = span + binding.mPrivate.highlightColor = Color.TRANSPARENT + } + + /** + * 跳转至隐私协议页面 + */ + private fun forwardPrivate() { + bundle.clear() + bundle.putString("title", "服务协议") + bundle.putInt("type", Const.AGREEMENT_6) + RouteManager.goActRequest( + ARouterUrl.RICH_TEXT, + this@DeviceActiveAct, + SERVER_AGREEMENT, + bundle + ) + } + + + private fun submitData() { + RxKeyboardTool.hideSoftInput(this) + if (!isAgree) { + CommonToastUtils.showToast(R.string.please_agree_server) + return + } + + if (type == 0 && binding.mBlueTooth.text.isNullOrEmpty()) { + CommonToastUtils.showToast(R.string.please_input_device_code) + return + } + + if (signPath.isNullOrEmpty()) { + CommonToastUtils.showToast("请完善签名") + return + } + + if (binding.mDevNum.text.isNullOrEmpty()) { + CommonToastUtils.showToast(R.string.please_input_device_code) + return + } + + if (binding.mActiveCode.text.isNullOrEmpty()) { + CommonToastUtils.showToast(R.string.please_input_active_code) + return + } + + var devMc = if (type == 0) { + if (binding.mBlueTooth.tag == null) "" else binding.mBlueTooth.tag as String + } else {//4G直接传设备号 + binding.mDevNum.text.toString() + } + + var devName = if (type == 0) { + binding.mBlueTooth.text.toString() + } else { + if (watchName.isNullOrEmpty()) { + if (devMc.startsWith("818") && devMc.length > 6) { + "A3-${devMc.substring(devMc.length - 7)}" + } else { + "4G-$devMc" + } + } else { + watchName + } + } + + if (otherPhone.isNullOrEmpty() || height.isNullOrEmpty() || wieght.isNullOrEmpty() || otherName.isNullOrEmpty()) { + mViewModel.activeDevice( + signPath, + binding.mDevNum.text.toString(), + binding.mActiveCode.text.toString(), + devMc, + devName + ) + } else { + mViewModel.submit( + headerPath, + name, + sexType, + idCard, + height, + wieght, + address, + otherName, + otherPhone, + rela, + provincey, + city, + district, + lat, + lng, + medicName, + medicIds, + signPath, + binding.mDevNum.text.toString(), + binding.mActiveCode.text.toString(), + devMc, + devName, + diseaseList, + birthDay, + birthdayType + ) + } + } + + /** + * 设置扫码信息 + */ + private fun setScanInfo(scanInfo: ScanInfoBean) { + binding.mDevNum.setText(scanInfo.deviceCode) + binding.mActiveCode.setText(scanInfo.activationCode) + watchName = scanInfo.watchName + } + + + override fun onRestart() { + super.onRestart() + if (type == 0) {//是蓝牙设备 + factorySettingDialog.isShow() + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode === RESULT_OK) { + when (requestCode) { + SERVER_AGREEMENT -> { + isAgree = true + binding.mPrivate.isSelected = isAgree + } + + XQRCodeAct.QRCODE_AGREEMENT -> { + when (data!!.getIntExtra(XQRCode.RESULT_TYPE, 0)) { + XQRCode.RESULT_SUCCESS -> { + try { + val result = data.extras!!.getString(XQRCode.RESULT_DATA) + LogUtils.d("扫描结果:$result") + if (!result.isNullOrEmpty()) { + val gson = Gson() + setScanInfo(gson.fromJson(result, ScanInfoBean::class.java)) + } else { + CommonToastUtils.showToast("扫码失败,请重试...") + } + } catch (e: Exception) { + LogUtils.e("二维码扫描:$e") + CommonToastUtils.showToast("请确认二维码是否正确!") + } + } + + XQRCode.RESULT_FAILED -> { + LogUtils.d("扫描失败") + } + } + } + } + } + } + + + @Subscribe(threadMode = ThreadMode.MAIN) + fun bloothConnect(event: BluetoothEvent) { + binding.mBlueTooth.text = event.devName + binding.mBlueTooth.tag = event.devMac + } + + private var isActiveSuccess = false +// private val dialogWear by lazy { +// WearDialog(this) { +// RouteManager.goAct(ARouterUrl.MAIN_ACT) +// finish() +// } +// } + + override fun liveObserver() { + mViewModel.activeLive.observe(this) { + activeSuccess() + } + mViewModel.setBasic.observe(this) { + activeSuccess() + } +// mViewModel.prevLive.observe(this) { +// dialogWear.showContent(it.data.content) +// } + } + + private fun activeSuccess() { + isActiveSuccess = true + CommonToastUtils.showSucceedToast("设备激活成功") + LogUtils.d("设备激活成功") + MMkvHelper.put(Const.Watch_Device_Type, type) + if (type == 0) { + YCBManager.deleteHistory(YCBOrder.DELETE_LocalALL) + EventBus.getDefault().post(BlueToothConnectEvent()) + } + EventBus.getDefault().post(MyInfoEvent()) + EventBus.getDefault().post(BindDevEvent()) + // CommonToastUtils.showToast("绑定成功") + finish() + /* if (CommonUtils.getMyUserInfo() == null) { + bundle.clear() + bundle.putInt("isBind", 0) + RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle) + finish() + } + CommonUtils.getMyUserInfo()?.let { bean -> + if (bean.urgentPhone.isNullOrEmpty()) {//如果紧急联系人电话并且签名为空则认为没有完善信息 + bundle.clear() + bundle.putInt("isBind", 0) + RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle) + finish() + } else { + RouteManager.goAct(ARouterUrl.MAIN_ACT) + finish() + } + }*/ +// mViewModel.getPrev(7) + } + + override fun onDestroy() { + AmapInit.stopLocation() + if (!isActiveSuccess && type == 0) { + YCBBlueConnectHelper.disconnect() + } + super.onDestroy() + } + + override fun onBackPressed() { + if (isLogin) { //如果是走注册流程过来的,退出该界面,则进入主界面 + RouteManager.goAct(ARouterUrl.MAIN_ACT) + RxActivityTool.finishAllActivity() + } else { + super.onBackPressed() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/activity/DeviceChoiceAct.kt b/app/src/main/java/com/zj365/dc/activity/DeviceChoiceAct.kt index 2165794..44c357d 100644 --- a/app/src/main/java/com/zj365/dc/activity/DeviceChoiceAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/DeviceChoiceAct.kt @@ -68,10 +68,19 @@ class DeviceChoiceAct : BaseVmAct() { val device = adapter.data[position] as DeviceBean val type = device.watchType if (type != 0) { - bundle.clear() - bundle.putInt("type", type) - bundle.putBoolean("isLogin", isLogin) - RouteManager.goAct(ARouterUrl.DEVICE_ACTIVE, bundle) + if(device.bindType == 1){ + bundle.clear() + bundle.putInt("type", type) + bundle.putBoolean("isLogin", isLogin) + RouteManager.goAct(ARouterUrl.ONE_KEY_DEVICE_ACTIVE, bundle) + }else{ + bundle.clear() + bundle.putInt("type", type) + bundle.putBoolean("isLogin", isLogin) + RouteManager.goAct(ARouterUrl.DEVICE_ACTIVE, bundle) + + } + } else { if (!checkBlueConnectPermission(this)) { FactorySettingDialog(this, "蓝牙手表需要访问位置、蓝牙权限。") { diff --git a/app/src/main/java/com/zj365/dc/activity/MainActivity.kt b/app/src/main/java/com/zj365/dc/activity/MainActivity.kt index 54afd70..8680cb7 100644 --- a/app/src/main/java/com/zj365/dc/activity/MainActivity.kt +++ b/app/src/main/java/com/zj365/dc/activity/MainActivity.kt @@ -7,6 +7,7 @@ import android.content.Intent import android.content.IntentFilter import android.net.Uri import android.os.Build +import android.text.TextUtils import android.util.Log import android.view.LayoutInflater import android.view.View @@ -152,7 +153,20 @@ class MainActivity : BaseVmAct(), Consumer { "" } else { MMkvHelper.getLong(Const.USER_ID).toString() + + + } + + if(!TextUtils.isEmpty(userId)){ + // if (BuildConfig.isRelease) {//设置极光推送别名 + JPushInterface.setAlias( + this, + MMkvHelper.getLong(Const.USER_ID).toInt(), + "user_release_${MMkvHelper.getLong(Const.USER_ID)}" + ) + // } } + mViewModel.getUserEquipmentInformationizationRequest(userId) mViewModel.getBanners(userId,3) mViewModel.getIsDemonstate() diff --git a/app/src/main/java/com/zj365/dc/activity/OneKeyBinderDeviceAct.kt b/app/src/main/java/com/zj365/dc/activity/OneKeyBinderDeviceAct.kt index a8ff655..4597ea8 100644 --- a/app/src/main/java/com/zj365/dc/activity/OneKeyBinderDeviceAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/OneKeyBinderDeviceAct.kt @@ -20,7 +20,7 @@ import com.zj365.dc.vm.OneKeyBinderDeviceVm import com.zj365.health.R import org.greenrobot.eventbus.EventBus -@Route(path = ARouterUrl.DEVICE_ACTIVE) +@Route(path = ARouterUrl.ONE_KEY_DEVICE_ACTIVE) class OneKeyBinderDeviceAct : BaseVmAct() { val binding by lazy { ActBinderDeviceOneKeyBinding.inflate(layoutInflater) } diff --git a/app/src/main/java/com/zj365/dc/activity/WelcomeAct.kt b/app/src/main/java/com/zj365/dc/activity/WelcomeAct.kt index 708c535..6a00ebd 100644 --- a/app/src/main/java/com/zj365/dc/activity/WelcomeAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/WelcomeAct.kt @@ -231,7 +231,7 @@ class WelcomeAct : BaseVmAct() { Log.i("terry", "useId:$userId") JPushInterface.setAlias(this,userId.toInt(),"user_release_${userId}") } - JPushHelper(this).stopOrResumeJPush(MMkvHelper.getBoolean(Const.NOTICE_FLAG)) + // JPushHelper(this).stopOrResumeJPush(MMkvHelper.getBoolean(Const.NOTICE_FLAG)) } diff --git a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt index 9da8f75..ea78f59 100644 --- a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt @@ -57,6 +57,7 @@ import com.xty.common.work.MyWorkManger import com.xty.common.xqr_code.XQRCodeAct import com.zj365.mime.weight.NoticeSettingDialog import com.xty.network.MyRetrofit +import com.xty.network.model.DeviceFunctionBean import com.xty.network.model.FamilyBean import com.xty.network.model.HealthMonitoringListBean import com.xty.network.model.MainBean @@ -140,6 +141,7 @@ class DynamicManagementFrag : BaseVmFrag(){ private var tenJob: Job? = null private val tenLive by lazy { MutableLiveData() } private var isShrinkage = false//记录是否收缩 + private var functionList= ArrayList() /** * -1:步数 0:心率 1:血氧 2:呼吸率 3:体温 4:睡眠 5:血压 6:血糖 7:心电|血脂 @@ -182,17 +184,18 @@ class DynamicManagementFrag : BaseVmFrag(){ binding.mGriddingList.mGridView.adapter = mHealthAdapter binding.mGriddingList.mGridView.setOnItemClickListener { _, _, position, _ -> val index = mHealthAdapter.getItem(position).type + val functionType = mHealthAdapter.getItem(position).functionType onEventObject(requireContext(), UmengEventId.HealthMonitor, pageNames[index]) - when (pageIndexs[index]) { + when (functionType) { //( )0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。 //(U32)0.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸、8.心电,9血脂 //(A3 )0.心率、1.血氧、2.呼吸率、3.体温、 、4.睡眠、5.血压、6.血糖、7.尿酸,8.血脂 //(x1 )0.心率、1.血氧、2.呼吸率、 、3.睡眠、4.血压、5.血糖、6.尿酸,7.血脂 - 0, 1, 2, 3 -> { - goPage(index) + "hr", "so", "resp", "temp" -> { + goPage(index,functionType) } - 4 -> {//步数 + "step" -> {//步数 if (isDemonstrate) { return@setOnItemClickListener } @@ -201,7 +204,7 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putInt("status", data.adorn.health + 1) bundle.putInt("type", 1) if (showIdInfo.isEmpty()) { - bundle.putString("userId", CommonUtils.getMyUserId()) + bundle.putString("userId", MMkvHelper.getLong(Const.USER_ID).toString()) } else showIdInfo.let { bundle.putString("userId", it) } @@ -209,85 +212,30 @@ class DynamicManagementFrag : BaseVmFrag(){ } } - 5 -> { - val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) - /*if (deviceType == "U32" || deviceType == "A3") { - goPage(index - 1) - } else { + "sleep" -> { + goPage(index - 1,functionType) - }*/ - goPage(index - 1) - /*if (deviceType == "X1" || deviceType == "X2") { - goPage(index - 2) - } else { - goPage(index - 1) - }*/ } - 6 -> { - val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) - /*if (deviceType == "X1" || deviceType == "X2") { - goPage(4) - } else {*/ - goPage(index - 1) - // } + "dbp" -> { + goPage(index - 1,functionType) } - 9 -> { //心电隐藏的前提下,尿酸为8 否则为9 - val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) - /* if (deviceType == "X1" || deviceType == "X2") { - goPage(6) - } else {*/ - goPage(7) - // } + "uric" -> { //心电隐藏的前提下,尿酸为8 否则为9 + goPage(7,functionType) } - 7 -> { //血糖 - val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) - /*if (deviceType == "X1" || deviceType == "X2") { - goPage(5) - } else {*/ - goPage(index - 1) - // } - } + "sugar" -> { //血糖 + goPage(index - 1,functionType) - 10 -> { // //心电隐藏的前提下血脂为9 否则为10 + } + "bloodFat" -> { // //心电隐藏的前提下血脂为9 否则为10 CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~") - /*when (MMkvHelper.getString(Const.DEVICE_TYPE)) { - "X1", "X2" -> { - goPage(7) - } - "U32","" -> { - goPage(9) - } - "A3" -> { - goPage(8) - } - else -> { - goPage(7) - } - }*/ - } - - /*8 -> {//心电 暂时隐藏 尿酸就改成8 -// if (MMkvHelper.getInt(Const.Watch_Device_Type) == -1) { //演示模式 -// showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~") -// } else - if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表 - CommonToastUtils.showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~") - } else { - goPage(8) -// if (showIdInfo.isEmpty()) { -// goPage(8) -// } else { -// bundle.clear() -// bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.XD_HISTORY, bundle) -// } - } - }*/ + "ecg" ->{ //心电 暂时隐藏 + CommonToastUtils.showToast("尊敬的用户您好,心电功能暂未开放,敬请期待哦~") + } } } } @@ -346,7 +294,7 @@ class DynamicManagementFrag : BaseVmFrag(){ } //健康监测 R.id.mSub -> { - goPage(0) + goPage(0,"") } //健康对比 R.id.ll_compare -> { @@ -391,6 +339,8 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putInt("pageType", 0) bundle.putString("titleName", "日报") + bundle.putParcelableArrayList("functionList",functionList) + RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) } //周报 @@ -401,6 +351,7 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putSerializable("index", ReportVm.ReportInfoType.Week) bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putString("titleName", "周报") + bundle.putParcelableArrayList("functionList",functionList) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) } @@ -412,6 +363,8 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putSerializable("index", ReportVm.ReportInfoType.Month) bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putString("titleName", "月报") + bundle.putParcelableArrayList("functionList",functionList) + RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) } //年报 @@ -422,6 +375,8 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putSerializable("index", ReportVm.ReportInfoType.Year) bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putString("titleName", "年报") + bundle.putParcelableArrayList("functionList",functionList) + RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) } //24小时健康评估 @@ -432,6 +387,7 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putString("titleName", "24小时健康评估") bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putBoolean("isEstimate", true) + bundle.putParcelableArrayList("functionList",functionList) RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) } //近7天健康评估 @@ -443,6 +399,7 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putString("titleName", "近7天健康评估") bundle.putBoolean("isNearMouth", false) bundle.putBoolean("isEstimate", true) + bundle.putParcelableArrayList("functionList",functionList) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) } //近30天健康评估 @@ -454,17 +411,22 @@ class DynamicManagementFrag : BaseVmFrag(){ bundle.putString("titleName", "近30天健康评估") bundle.putBoolean("isNearMouth", true) bundle.putBoolean("isEstimate", true) + bundle.putParcelableArrayList("functionList",functionList) RouteManager.goAct(ARouterUrl.HEALTH_WEEK_MONTH_HOUR_REPORT, bundle) } } } //界面跳转 - private fun goPage(page: Int) { + private fun goPage(page: Int,functionType:String) { if (isBind()) { bundle.clear() bundle.putInt("page", page) bundle.putBoolean("isDemonstrate", isDemonstrate) + if(functionList.size > 0){ + bundle.putParcelableArrayList("functionList",functionList) + } + bundle.putString("functionType",functionType) if (!TextUtils.isEmpty(showIdInfo)) { bundle.putString("id", showIdInfo) bundle.putString("sex", sex) @@ -759,6 +721,16 @@ class DynamicManagementFrag : BaseVmFrag(){ } } + mViewModel.functionLiveData.observe(this){ + LogUtils.e("DynamicManagementFrag","functionList:${it.data.size}") + functionList.addAll(it.data) + if (showIdInfo ==MMkvHelper.getLong(Const.USER_ID).toString()) { + Const.functionListDate.value = functionList + } + + + } + //获取首页所有信息返回 mViewModel.allData.observe(this) { it.data.let { bean -> @@ -774,7 +746,7 @@ class DynamicManagementFrag : BaseVmFrag(){ } - if (showIdInfo == CommonUtils.getMyUserId()) { //自己 + if (showIdInfo ==MMkvHelper.getLong(Const.USER_ID).toString()) { //自己 Const.otherLiveData.value = bean } Const.battery = bean.power @@ -808,7 +780,7 @@ class DynamicManagementFrag : BaseVmFrag(){ } else if (Const.Companion.WatchDevice.LightA3.ordinal == bean.watchType) {//如果是4G设备,设置连接状态与电量信息 } else {*/ - if (showIdInfo ==CommonUtils.getMyUserId()) { //自己 + if (showIdInfo == MMkvHelper.getLong(Const.USER_ID).toString()) { //自己 val localBlueMac = MMkvHelper.getString(Const.Blue_Tooth) if (YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.DisConnect) {//如果本地有蓝牙信息且属于未连接状态,则直接连接 LogUtils.d("startConnect::${localBlueMac}") @@ -832,9 +804,13 @@ class DynamicManagementFrag : BaseVmFrag(){ healthMonitoringList.clear() healthMonitoringListExceed.clear() mHealthAdapter.mainBean.clear() + + LogUtils.e("DynamicManagementFrag","11111111") + val healthMonitoringListData = mViewModel.setHealthMonitoringListData( requireContext(), - bean + bean, + mViewModel.functionLiveData.value?.data ) val deviceType = bean.deviceType if (TextUtils.isEmpty(deviceType)) { @@ -903,7 +879,7 @@ class DynamicManagementFrag : BaseVmFrag(){ binding.mHeader.mBtnBind.visibility = View.GONE binding.mHeader.mLayoutResult.visibility = View.VISIBLE } else { //没有绑定手表 - if (/*mFamilyAdapter.position == 0 &&*/ it.data.user?.id.toString() == CommonUtils.getMyUserId()) { //是自己,显示绑定手表 + if (/*mFamilyAdapter.position == 0 &&*/ it.data.user?.id.toString() == MMkvHelper.getLong(Const.USER_ID).toString()) { //是自己,显示绑定手表 binding.mHeader.mBtnBind.visibility = View.VISIBLE binding.mHeader.mLayoutResult.visibility = View.GONE } else { //不是自己隐藏数据 @@ -1026,7 +1002,7 @@ class DynamicManagementFrag : BaseVmFrag(){ return@observe } - if ((!showIdInfo.isNullOrEmpty() && showIdInfo != CommonUtils.getMyUserId())) {//不是当前用户 + if ((!showIdInfo.isNullOrEmpty() && showIdInfo !=MMkvHelper.getLong(Const.USER_ID).toString())) {//不是当前用户 LogUtils.d("当前用户与showIdInfo不匹配!") return@observe } @@ -1538,6 +1514,16 @@ class DynamicManagementFrag : BaseVmFrag(){ MMkvHelper.getLong(Const.USER_ID).toString() } + if(!TextUtils.isEmpty(showIdInfo)){ + // if (BuildConfig.isRelease) {//设置极光推送别名 + JPushInterface.setAlias( + requireContext(), + MMkvHelper.getLong(Const.USER_ID).toInt(), + "user_release_${MMkvHelper.getLong(Const.USER_ID)}" + ) + // } + } + getXtInfo(showIdInfo) get24HourReportInfo(showIdInfo) request() diff --git a/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt b/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt index 141d6cc..82c4b25 100644 --- a/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt @@ -148,7 +148,7 @@ HealthHomeFrag : BaseVmFrag() { val req = WXLaunchMiniProgram.Req() req.userName = bannerBean.wxId// 填小程序原始id - // req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + req.path = bannerBean.linkAddress ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 if(bannerBean.wxType == 3){ req.miniprogramType = @@ -205,7 +205,7 @@ HealthHomeFrag : BaseVmFrag() { val req = WXLaunchMiniProgram.Req() req.userName = bannerBean.wxId // 填小程序原始id - //req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + req.path = bannerBean.linkAddress ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 if(bannerBean.wxType == 3){ req.miniprogramType = @@ -281,7 +281,7 @@ HealthHomeFrag : BaseVmFrag() { val req = WXLaunchMiniProgram.Req() req.userName = contentData.wxId // 填小程序原始id - // req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + req.path = contentData.jumpUrl ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 if(contentData.wxType == 3){ req.miniprogramType = @@ -374,7 +374,7 @@ HealthHomeFrag : BaseVmFrag() { val req = WXLaunchMiniProgram.Req() req.userName = contentData.wxId // 填小程序原始id - //req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + req.path = contentData.jumpUrl ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 if(contentData.wxType == 3){ req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 diff --git a/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt b/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt index ca8ea62..3f322ec 100644 --- a/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt @@ -216,6 +216,12 @@ class MineFrag : BaseVmFrag() { bundle.putInt("page", 0) bundle.putBoolean("isDemonstrate", (requireActivity() as MainActivity).isDemonstrate) + Const.functionListDate.value?.let { + if(it.size > 0){ + bundle.putParcelableArrayList("functionList",it) + } + } + val id = if (MMkvHelper.getLong(Const.USER_ID).toString() == "0") { "" } else { @@ -239,6 +245,11 @@ class MineFrag : BaseVmFrag() { bundle.putBoolean("isDemonstrate", isDemonstrate) bundle.putInt("pageType", 0) bundle.putString("titleName", "日报") + Const.functionListDate.value?.let { + if(it.size > 0){ + bundle.putParcelableArrayList("functionList",it) + } + } RouteManager.goAct(ARouterUrl.HEALTH_SKY_HOUR_REPORT, bundle) } } @@ -269,6 +280,12 @@ class MineFrag : BaseVmFrag() { }else { bundle.clear() bundle.putString("id", user?.id) + Const.functionListDate.value?.let { + if(it.size > 0){ + bundle.putParcelableArrayList("functionList",it) + } + } + RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle) } } diff --git a/app/src/main/java/com/zj365/dc/vm/BasicInfoVm.kt b/app/src/main/java/com/zj365/dc/vm/BasicInfoVm.kt new file mode 100644 index 0000000..f3462b0 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/vm/BasicInfoVm.kt @@ -0,0 +1,295 @@ +package com.zj365.dc.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.common.TimeUtils +import com.xty.common.util.CommonToastUtils +import com.xty.network.model.ImageUploadBean +import com.xty.network.model.NotAccepted +import com.xty.network.model.PrevBean +import com.xty.network.model.RespBody +import com.zj365.dc.R +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.withContext +import okhttp3.MultipartBody +import org.json.JSONArray +import org.json.JSONObject +import java.io.File + +class BasicInfoVm : BaseVm() { + + val setBasic by lazy {MutableLiveData()} + val prevLive by lazy{MutableLiveData>()} + val activeLive by lazy {MutableLiveData()} + + fun submit(path: String,name:String,sex:String, icCard:String,height:String,weight:String,area:String,urgent:String,urgentPhone:String,urgentRelation:String + ,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String,signPath:String,devNum:String,code:String,devMc:String,devName:String,diseaseList:String,birthDay:String,birthdayType:Int) { + +// if(icCard.length!=18){ +// ToastUtils.show("请输入正确的身份证号") +// return +// } + if(height.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入身高") + return + } + + if (height.toFloat() < 50 || height.toFloat() > 260){ + CommonToastUtils.showToast("请输入正确身高") + return + } + + if(weight.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入体重") + return + } + + if(weight.toFloat() < 3 || weight.toFloat() > 300){ + CommonToastUtils.showToast("请输入正确体重") + return + } + + if (TimeUtils.getAgeByBirth(birthDay) < 14){ + CommonToastUtils.showToast("需要年满14岁才可使用") + return + } + + if(area.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入家庭住址") + return + } + + if(medicIds.isNullOrEmpty()){ + CommonToastUtils.showToast("请选择病史") + return + } + + + if(urgent.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入紧急联系人姓名") + return + } + + + if(urgentPhone.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入紧急联系人联系方式") + return + } + + + if(urgentRelation.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入关系") + return + } + + if(devMc.isNullOrEmpty()){ + CommonToastUtils.showToast(R.string.please_connect_device) + return + } + if(devNum.isNullOrEmpty()){ + CommonToastUtils.showToast(R.string.please_input_device_code) + return + } + if(code.isNullOrEmpty()){ + CommonToastUtils.showToast(R.string.please_input_active_code) + return + } + if(signPath.isNullOrEmpty()){ + CommonToastUtils.showToast("请完善签名") + return + } + startHttp { + withContext(Dispatchers.IO) { + var fileId:String?=null + if(!path.isNullOrEmpty()){ + var image = async { uploadImage(path) } + val await = image.await() + + fileId = await.fileId + } + var upload = async {uploadInfo(name,sex, icCard,height,weight,area,urgent,urgentPhone,urgentRelation,fileId,province,city, + district,lat,lng,medicNames,medicIds,diseaseList,birthDay,birthdayType) } + + val infoUpload = upload.await() //个人信息上传 + if(infoUpload.code==0){ + var activeDev =async { active(signPath,devNum,code,devMc,devName) } + var signUpload=activeDev.await() + if(signUpload.code==0){ + setBasic.postValue(infoUpload.data) + }else{ + CommonToastUtils.showToast(signUpload.msg) + } + }else{ + CommonToastUtils.showToast(infoUpload.msg) + } + } + + } + } + fun submitNew(path: String,name:String,sex:String, icCard:String,height:String,weight:String,area:String,urgent:String,urgentPhone:String,urgentRelation:String + ,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String ,diseaseList:String,birthDay:String,birthdayType:Int) { + +// if(icCard.length!=18){ +// ToastUtils.show("请输入正确的身份证号") +// return +// } + if(height.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入身高") + return + } + + if (height.toFloat() < 50 || height.toFloat() > 260){ + CommonToastUtils.showToast("请输入正确身高") + return + } + + if(weight.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入体重") + return + } + + if(weight.toFloat() < 3 || weight.toFloat() > 300){ + CommonToastUtils.showToast("请输入正确体重") + return + } + + if (TimeUtils.getAgeByBirth(birthDay) < 14){ + CommonToastUtils.showToast("需要年满14岁才可使用") + return + } + + if(area.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入家庭住址") + return + } + + if(medicIds.isNullOrEmpty()){ + CommonToastUtils.showToast("请选择病史") + return + } + + + if(urgent.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入紧急联系人姓名") + return + } + + + if(urgentPhone.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入紧急联系人联系方式") + return + } + + + if(urgentRelation.isNullOrEmpty()){ + CommonToastUtils.showToast("请输入关系") + return + } + + startHttp { + withContext(Dispatchers.IO) { + var fileId:String?=null + if(!path.isNullOrEmpty()){ + var image = async { uploadImage(path) } + val await = image.await() + + fileId = await.fileId + } + var upload = async {uploadInfo(name,sex, icCard,height,weight,area,urgent,urgentPhone,urgentRelation,fileId,province,city, + district,lat,lng,medicNames,medicIds,diseaseList,birthDay,birthdayType) } + + val infoUpload = upload.await() //个人信息上传 + if(infoUpload.code==0){ + CommonToastUtils.showSucceedToast("提交成功") + setBasic.postValue(infoUpload.data) + }else{ + CommonToastUtils.showToast(infoUpload.msg) + } + } + + } + } + + fun activeDevice(path:String,devNum:String,code:String,devMc:String,devName:String){ + startHttp { + withContext(Dispatchers.IO){ + var file= File(path) + var fileBody=MultipartBody.Part.createFormData("file",file.name,retrofits.getMultiPartFileRb(file)) + var response= apiInterface().activite(fileBody,retrofits.getRequestBody(devNum.replace(" ", "")),retrofits.getRequestBody(code.replace(" ", "")),retrofits.getRequestBody(devMc),retrofits.getRequestBody(devName)) + if (response.code == 0){ + activeLive.postValue(response.data) + }else{ + CommonToastUtils.showToast(response.msg) + } + } + } + } + + /** + * 激活设备 签名文件上传 + */ + private suspend fun active(path:String,devNum:String,code:String,devMc:String,devName:String):RespBody{ + var file= File(path) + var fileBody=MultipartBody.Part.createFormData("file",file.name,retrofits.getMultiPartFileRb(file)) + var response= apiInterface().activite(fileBody,retrofits.getRequestBody(devNum.replace(" ", "")),retrofits.getRequestBody(code.replace(" ", "")),retrofits.getRequestBody(devMc),retrofits.getRequestBody(devName)) + return response + } + + + private suspend fun uploadInfo(name:String,sex:String, icCard:String,height:String,weight:String,area:String, + urgent:String,urgentPhone:String,urgentRelation:String, + fileId:String?,province:String,city:String,district:String,lat:String,lng:String,medicNames:String,medicIds:String,diseaseList:String,birthDay:String,birthdayType:Int): RespBody { + var json=JSONObject() + json.put("name",name) + json.put("sex",sex) + json.put("idCard",icCard) + json.put("height",height) + json.put("weight",weight) + json.put("area",area) + + json.put("medicalHistory",medicNames) + json.put("historyId",medicIds) + json.put("latitude",lat) + json.put("longitude",lng) + json.put("province",province) + json.put("city",city) + json.put("district",district) + json.put("birthday",birthDay) + json.put("birthdayType",birthdayType) + if(diseaseList.isEmpty()){ + json.put("diseaseList","") + }else{ + var array=JSONArray(diseaseList) //去掉转移的斜杠 + json.put("diseaseList",array) + } + + json.put("urgent",urgent) + json.put("urgentPhone",urgentPhone) + json.put("urgentRelation",urgentRelation) + + if(!fileId.isNullOrEmpty()){ + json.put("avatarUrl",fileId) + } + var rb=retrofits.getRequestBody(json.toString()) + var body=apiInterface().setUpdateUser(rb) + return body + } + + private suspend fun uploadImage(path: String): ImageUploadBean { + var f = File(path) + var fileRb = + MultipartBody.Part.createFormData("file", f.name, retrofits.getMultiPartFileRb(f)) + var body = apiInterface().uploadImage(fileRb) + return body.data + } + + + //1:用户协议 2:管家协议 3:隐私协议 7:佩戴须知 +// fun getPrev(type:Int){ +// startHttp { +// var response=apiInterface().getPrev(type) +// response.getCodeStatus(prevLive,nowData) +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/vm/DynamicManagementVm.kt b/app/src/main/java/com/zj365/dc/vm/DynamicManagementVm.kt index 9cd5caa..f5c37ce 100644 --- a/app/src/main/java/com/zj365/dc/vm/DynamicManagementVm.kt +++ b/app/src/main/java/com/zj365/dc/vm/DynamicManagementVm.kt @@ -14,6 +14,8 @@ import com.xty.common.Dateutils import com.xty.common.MMkvHelper import com.xty.common.TimeUtils import com.xty.common.util.CommonUtils +import com.xty.common.util.DeviceFunctionUtils +import com.xty.network.model.DeviceFunctionBean import com.xty.network.model.FamilyBean import com.xty.network.model.HealthMonitoringListBean import com.xty.network.model.MainBean @@ -28,6 +30,9 @@ import com.xty.network.model.TipsBean import com.xty.network.model.WeatherBean import com.xty.network.model.XTangInfoBean import com.zj365.dc.R +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.withContext import org.json.JSONArray import org.json.JSONObject import java.text.SimpleDateFormat @@ -53,15 +58,26 @@ class DynamicManagementVm : BaseVm() { val weatherLiveDate by lazy { MutableLiveData>() } + val functionLiveData by lazy { MutableLiveData>>() } + /** * 获取所有信息 */ fun getAllInfo(id: String, isShowDialog: Boolean) { startHttp(isShowDialog) { - val json = JSONObject() - json.put("id", id) - val body = apiInterface().getMainInfo(retrofits.getRequestBody(json.toString())) - body.getCodeStatus(allData, nowData) + withContext(Dispatchers.IO){ + val list = async { getDeviceFunctionLists(id) }.await() + + if (list){ + val allInfo = async { + val json = JSONObject() + json.put("id", id) + val body = apiInterface().getMainInfo(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(allData, nowData) + } + } + } + } } @@ -257,14 +273,15 @@ class DynamicManagementVm : BaseVm() { @SuppressLint("SimpleDateFormat") fun setHealthMonitoringListData( context: Context, - bean: MainBean + bean: MainBean, + functionList:MutableList? ): MutableList { val healthMonitoringList: MutableList = mutableListOf() + bean.apply { - /*when (deviceType) { - "U32", "" -> { //其他界面要用到是否为x1,x2的设备判断,这里坐下缓存*/ - MMkvHelper.put(Const.X1_X2_Device, false) - //心率 + MMkvHelper.put(Const.X1_X2_Device, false) + functionList?.forEach { + if (DeviceFunctionUtils.hasFunction(it,"hr")){ //心率 val statusXL = if (hrData.hr == 0) { 0 } else if (hrData.hrMessage.contains("正常")) { @@ -283,11 +300,12 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_xl, R.mipmap.ic_xl, 0, + it.type, calorie = hrData.count ) ) - //血氧 + }else if (DeviceFunctionUtils.hasFunction(it,"so")){ //血氧 val statusXY = if (soData.so == 0) { 0 } else if (soData.soMessage.contains("正常")) { @@ -306,11 +324,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_oo, R.mipmap.ic_oo, 1, + it.type, calorie = soData.count ) ) - - //呼吸率 + }else if(DeviceFunctionUtils.hasFunction(it,"resp")){ //呼吸率 val statusHXL = if (respiratoryData.respiratory == 0) { 0 } else if (respiratoryData.respiratoryMessage.contains("正常")) { @@ -330,11 +348,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_breath, R.mipmap.ic_h_breath, 2, + it.type, calorie = respiratoryData.count ) ) - - //体温 + }else if(DeviceFunctionUtils.hasFunction(it,"temp")){ //体温 val statusTW = if (tempData.tempInt == 0) { 0 } else if (tempData.tempMessage.contains("正常")) { @@ -354,11 +372,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_temp, R.mipmap.ic_temp, 3, + it.type, calorie = tempData.count ) ) - - //步数 + }else if(DeviceFunctionUtils.hasFunction(it,"step")){ //步数 val contentBS = if (stepData.step == 0) "--" else stepData.step.toString() val mTimeBS = if (stepData.stepTime.isNullOrEmpty()) { @@ -380,18 +398,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_step, R.mipmap.ic_steps, 4, + it.type, calorie = calorieBS ) ) - - //睡眠 -// val statusSM = if (sleepData.sleep == 0) { -// 0 -// } else if (sleepData.sleepMessage.contains("正常")) { -// R.mipmap.ic_health_normal -// } else { -// R.mipmap.ic_health_error -// } + }else if(DeviceFunctionUtils.hasFunction(it,"sleep")){ //睡眠 val statusSM = 0 val contentSM = if (sleepData.sleep.toLong() <= 0) { "-小时-分" @@ -422,11 +433,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_h_sleep, R.mipmap.ic_h_sleep, 5, + it.type, calorie = sleepData.count ) ) - - //血压 + }else if(DeviceFunctionUtils.hasFunction(it,"dbp")){ //血压 val statusXYa = if (dbpData.GDbp == 0 && dbpData.DDbp == 0) { 0 } else if (dbpData.DbpMessage.contains("正常")) { @@ -449,11 +460,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_xya, R.mipmap.ic_xya, 6, + it.type, calorie = dbpData.count ) ) - - //血糖 + }else if(DeviceFunctionUtils.hasFunction(it,"sugar")){ //血糖 var statusXT = 0 var contentXT = "" var mTimeXT = "" @@ -529,11 +540,11 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_bloodsugar, R.mipmap.ic_bloodsugar, 7, + it.type, calorie = bloodSugarData.count ) ) - - /*//心电 + }else if(DeviceFunctionUtils.hasFunction(it,"ecg")){ //心电 val statusXD = 0 val contentXD = if (TextUtils.isEmpty(heartData.hrData) || heartData.hrData == "0") { @@ -550,26 +561,11 @@ class DynamicManagementVm : BaseVm() { contentXD, R.mipmap.bg_ecg, R.mipmap.ic_ecg, - 8 + 8, + it.type, ) - )*/ - - //尿酸 -// val statusNS = if (uricAcidData.value == "0") { -// 0 -// } else if (uricAcidData.message.contains("正常")) { -// R.mipmap.ic_health_normal -// } else { -// R.mipmap.ic_health_error -// } -// val contentNS = -// if (!TextUtils.isEmpty(uricAcidData.value)) uricAcidData.value else "--" -// val mTimeNS = uricAcidData.time.toLong().let { -// RxTimeTool.milliseconds2String( -// it, -// SimpleDateFormat("yyyy-MM-dd HH:mm") -// ) -// }.toString() + ) + }else if(DeviceFunctionUtils.hasFunction(it,"uric")){ //尿酸 var statusNS = 0 var contentNS = "" var mTimeNS = "" @@ -597,13 +593,6 @@ class DynamicManagementVm : BaseVm() { } else { "${ milliseconds2String(uricAcidData.time) - /* RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - uricAcidData.time - ) - )*/ }:00" } } @@ -631,12 +620,12 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_niaosuan, R.mipmap.ic_niaosuan, 9, + it.type, sex = user.sex.toString(), calorie = uricAcidData.count ) ) - - //血脂 + }else if(DeviceFunctionUtils.hasFunction(it,"bloodFat")){ //血脂 healthMonitoringList.add( HealthMonitoringListBean( "血脂", @@ -646,865 +635,39 @@ class DynamicManagementVm : BaseVm() { R.mipmap.bg_fat, R.mipmap.ic_fat, 10, + it.type, calorie = bean.healthCount.toString() ) ) - /*var statusXZ = 0 - var contentXZ = "" - var mTimeXZ = "" - when (bloodFatData.status) { - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(bloodFatData.expireTime)) { - contentXZ = "未开通" - mTimeXZ = "免费体验100天" - statusXZ = 3 - } else { - contentXZ = "续费" - mTimeXZ = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusXZ = 0 - } - } - - 1 -> { - statusXZ = 1 - contentXZ = "建模中" - mTimeXZ = if (bloodFatData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (bloodFatData.time.contains("-")) { - bloodFatData.time - } else { -// "${ -// RxTimeTool.simpleDateFormat( -// "yyyy-MM-dd HH", -// RxTimeTool.string2Date( -// "yyyy-MM-dd HH:mm:ss", -// bloodFatData.time -// ) -// ) -// }:00" - milliseconds2String(bloodFatData.time) - } - } - - 2 -> { - statusXZ = - if (bloodFatData.value == "0" || TextUtils.isEmpty(bloodFatData.value)) { - 0 - } else if (bloodFatData.message.contains("正常")) { - 1 - } else { - 2 - } - contentXZ = - if (!TextUtils.isEmpty(bloodFatData.value)) bloodFatData.value else "--" - mTimeXZ = milliseconds2String(bloodFatData.time) - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "血脂", - statusXZ, - mTimeXZ, - contentXZ, - R.mipmap.bg_fat, - R.mipmap.ic_fat, - 10 - ) - )*/ -// } - - /*"A3" -> { - //其他界面要用到是否为x1,x2的设备判断,这里坐下缓存 - MMkvHelper.put(Const.X1_X2_Device, false) - //心率 - val statusXL = if (hrData.hr == 0) { - 0 - } else if (hrData.hrMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXL = if (hrData.hr == 0) "--" else hrData.hr.toString() - val mTimeXL = milliseconds2String(hrData.hrTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "心率", - statusXL, - mTimeXL, - contentXL, - R.mipmap.bg_xl, - R.mipmap.ic_xl, - 0 - ) - ) - - //血氧 - val statusXY = if (soData.so == 0) { - 0 - } else if (soData.soMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXY = if (soData.so == 0) "--" else soData.so.toString() - val mTimeXY = milliseconds2String(soData.soTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "血氧", - statusXY, - mTimeXY, - contentXY, - R.mipmap.bg_oo, - R.mipmap.ic_oo, - 1 - ) - ) - - //呼吸率 - val statusHXL = if (respiratoryData.respiratory == 0) { - 0 - } else if (respiratoryData.respiratoryMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentHXL = - if (respiratoryData.respiratory == 0) "--" else respiratoryData.respiratory.toString() - val mTimeHXL = milliseconds2String(respiratoryData.respiratoryTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "呼吸率", - statusHXL, - mTimeHXL, - contentHXL, - R.mipmap.bg_breath, - R.mipmap.ic_h_breath, - 2 - ) - ) - - //体温 - val statusTW = if (tempData.tempInt == 0) { - 0 - } else if (tempData.tempMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentTW = - if (tempData.tempInt == 0) "--" else "${tempData.tempInt}.${tempData.tempFloat}" - val mTimeTW = milliseconds2String(tempData.tempTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "体温", - statusTW, - mTimeTW, - contentTW, - R.mipmap.bg_temp, - R.mipmap.ic_temp, - 3 - ) - ) - - //步数 - val contentBS = - if (stepData.step == 0) "--" else stepData.step.toString() - val mTimeBS = if (stepData.stepTime.isNullOrEmpty()) { - RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - } else (if (stepData.stepTime.contains("-")) { - stepData.stepTime.let { - it.substring(0, it.length - 3) - } - } else { - milliseconds2String(stepData.stepTime) - }) - val calorieBS = caloriesData - healthMonitoringList.add( - HealthMonitoringListBean( - "步数", - 0, - mTimeBS, - contentBS, - R.mipmap.bg_step, - R.mipmap.ic_steps, - 4, - calorie = calorieBS - ) - ) - - //睡眠 - val statusSM = 0 - val contentSM = if (sleepData.sleep.toLong() <= 0) { - "-小时-分" - } else { - sleepData.sleep.toLong().let { - TimeUtils.secToSpan( - it, - 18, - ContextCompat.getColor( - context, - R.color.col_464 - ), - Typeface.BOLD, - ).toString() - } - } - val mTimeSM = if (sleepData.sleepTime == 0) { - RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - } else { - milliseconds2String(sleepData.sleepTime.toString()) - } - healthMonitoringList.add( - HealthMonitoringListBean( - "睡眠", - statusSM, - mTimeSM, - contentSM, - R.mipmap.bg_h_sleep, - R.mipmap.ic_h_sleep, - 5 - ) - ) + } + } + } + return healthMonitoringList + } - //血压 - val statusXYa = if (dbpData.GDbp == 0 && dbpData.DDbp == 0) { - 0 - } else if (dbpData.DbpMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXYa = if (dbpData.GDbp == 0 && dbpData.DDbp == 0) { - "--" - } else { - "${dbpData.GDbp}/${dbpData.DDbp}" - } - val mTimeXYa = milliseconds2String(dbpData.DbpTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "血压", - statusXYa, - mTimeXYa, - contentXYa, - R.mipmap.bg_xya, - R.mipmap.ic_xya, - 6 - ) - ) + @SuppressLint("SimpleDateFormat") + private fun milliseconds2String(strTime: String): String { + return RxTimeTool.milliseconds2String( + strTime.toLong() * 1000, + SimpleDateFormat("yyyy-MM-dd HH:mm") + ) + } - //血糖 - var statusXT = 0 - var contentXT = "" - var mTimeXT = "" - when (bloodSugarData.model) {//如果有errorMsg则为建模中 - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(bloodSugarData.expireTime)) { - contentXT = "未开通" - mTimeXT = "免费体验100天" - statusXT = 3 - } else { - contentXT = "续费" - mTimeXT = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusXT = 0 - } - } + fun getWeather(){ + startHttp { + val json = JSONObject() + json.put("longitude", MMkvHelper.getDouble(Const.LONGITUDE)) + json.put("latitude", MMkvHelper.getDouble(Const.LATITUDE)) + val body = apiInterface().getWeather(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(weatherLiveDate, nowData) + } + } - 1 -> { - statusXT = 1 - contentXT = "建模中" - mTimeXT = if (bloodSugarData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (bloodSugarData.time.contains("-")) { - bloodSugarData.time - } else { - "${ - RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - bloodSugarData.time - ) - ) - }:00" - } - } - - 2 -> { - statusXT = - if (bloodSugarData.bloodsugar.toFloat() == 0f) { - 0 - } else if (OrganStatusCalcUtil.bloodSugarStatu(bloodSugarData.bloodsugar.toFloat()) == 0) { - 1 - } else { - 2 - } - contentXT = if (bloodSugarData.bloodsugar.toFloat() == 0f) { - "--" - } else { - bloodSugarData.bloodsugar.toString() - } - mTimeXT = if (bloodSugarData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else { - "${ - RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - bloodSugarData.time - ) - ) - }:00" - } - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "血糖", - statusXT, - mTimeXT, - contentXT, - R.mipmap.bg_bloodsugar, - R.mipmap.ic_bloodsugar, - 7 - ) - ) - - //尿酸 -// val statusNS = if (uricAcidData.value == "0") { -// 0 -// } else if (uricAcidData.message.contains("正常")) { -// R.mipmap.ic_health_normal -// } else { -// R.mipmap.ic_health_error -// } -// val contentNS = -// if (!TextUtils.isEmpty(uricAcidData.value)) uricAcidData.value else "--" -// val mTimeNS = uricAcidData.time.toLong().let { -// RxTimeTool.milliseconds2String( -// it, -// SimpleDateFormat("yyyy-MM-dd HH:mm") -// ) -// }.toString() - var statusNS = 0 - var contentNS = "" - var mTimeNS = "" - when (uricAcidData.status) { - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(uricAcidData.expireTime)) { - contentNS = "未开通" - mTimeNS = "免费体验100天" - statusNS = 3 - } else { - contentNS = "续费" - mTimeNS = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusNS = 0 - } - } - - 1 -> { - statusNS = 1 - contentNS = "建模中" - mTimeNS = if (uricAcidData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (uricAcidData.time.contains("-")) { - uricAcidData.time - } else { - "${ - RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - uricAcidData.time - ) - ) - }:00" - } - } - - 2 -> { - statusNS = - if (uricAcidData.value == "0" || TextUtils.isEmpty(uricAcidData.value)) { - 0 - } else if (uricAcidData.message.contains("正常")) { - 1 - } else { - 2 - } - contentNS = - if (!TextUtils.isEmpty(uricAcidData.value)) uricAcidData.value else "--" - mTimeNS = milliseconds2String(uricAcidData.time) - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "尿酸", - statusNS, - mTimeNS, - contentNS, - R.mipmap.bg_niaosuan, - R.mipmap.ic_niaosuan, - 9, - sex = user.sex.toString() - ) - ) - - //血脂 - var statusXZ = 0 - var contentXZ = "" - var mTimeXZ = "" - when (bloodFatData.status) { - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(bloodFatData.expireTime)) { - contentXZ = "未开通" - mTimeXZ = "免费体验100天" - statusXZ = 3 - } else { - contentXZ = "续费" - mTimeXZ = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusXZ = 0 - } - } - - 1 -> { - statusXZ = 1 - contentXZ = "建模中" - mTimeXZ = if (bloodFatData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (bloodFatData.time.contains("-")) { - bloodFatData.time - } else { -// "${ -// RxTimeTool.simpleDateFormat( -// "yyyy-MM-dd HH", -// RxTimeTool.string2Date( -// "yyyy-MM-dd HH:mm:ss", -// bloodFatData.time -// ) -// ) -// }:00" - milliseconds2String(bloodFatData.time) - } - } - - 2 -> { - statusXZ = - if (bloodFatData.value == "0" || TextUtils.isEmpty(bloodFatData.value)) { - 0 - } else if (bloodFatData.message.contains("正常")) { - 1 - } else { - 2 - } - contentXZ = - if (!TextUtils.isEmpty(bloodFatData.value)) bloodFatData.value else "--" - mTimeXZ = milliseconds2String(bloodFatData.time) - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "血脂", - statusXZ, - mTimeXZ, - contentXZ, - R.mipmap.bg_fat, - R.mipmap.ic_fat, - 10 - ) - ) - }*/ -/* - "X2", "X1" -> { - //其他界面要用到是否为x1,x2的设备判断,这里坐下缓存 - MMkvHelper.put(Const.X1_X2_Device, true) - //心率 - val statusXL = if (hrData.hr == 0) { - 0 - } else if (hrData.hrMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXL = if (hrData.hr == 0) "--" else hrData.hr.toString() - val mTimeXL = milliseconds2String(hrData.hrTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "心率", - statusXL, - mTimeXL, - contentXL, - R.mipmap.bg_xl, - R.mipmap.ic_xl, - 0 - ) - ) - - //血氧 - val statusXY = if (soData.so == 0) { - 0 - } else if (soData.soMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXY = if (soData.so == 0) "--" else soData.so.toString() - val mTimeXY = milliseconds2String(soData.soTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "血氧", - statusXY, - mTimeXY, - contentXY, - R.mipmap.bg_oo, - R.mipmap.ic_oo, - 1 - ) - ) - - //呼吸率 - val statusHXL = if (respiratoryData.respiratory == 0) { - 0 - } else if (respiratoryData.respiratoryMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentHXL = - if (respiratoryData.respiratory == 0) "--" else respiratoryData.respiratory.toString() - val mTimeHXL = milliseconds2String(respiratoryData.respiratoryTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "呼吸率", - statusHXL, - mTimeHXL, - contentHXL, - R.mipmap.bg_breath, - R.mipmap.ic_h_breath, - 2 - ) - ) - - //步数 - val contentBS = - if (stepData.step == 0) "--" else stepData.step.toString() - val mTimeBS = if (stepData.stepTime.isNullOrEmpty()) { - RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - } else (if (stepData.stepTime.contains("-")) { - stepData.stepTime.let { - it.substring(0, it.length - 3) - } - } else { - milliseconds2String(stepData.stepTime) - }) - val calorieBS = caloriesData - healthMonitoringList.add( - HealthMonitoringListBean( - "步数", - 0, - mTimeBS, - contentBS, - R.mipmap.bg_step, - R.mipmap.ic_steps, - 4, - calorie = calorieBS - ) - ) - - //睡眠 - val statusSM = 0 - val contentSM = if (sleepData.sleep.toLong() <= 0) { - "-小时-分" - } else { - sleepData.sleep.toLong().let { - TimeUtils.secToSpan( - it, - 18, - ContextCompat.getColor( - context, - R.color.col_464 - ), - Typeface.BOLD, - ).toString() - } - } - val mTimeSM = if (sleepData.sleepTime == 0) { - RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - } else { - milliseconds2String(sleepData.sleepTime.toString()) - } - healthMonitoringList.add( - HealthMonitoringListBean( - "睡眠", - statusSM, - mTimeSM, - contentSM, - R.mipmap.bg_h_sleep, - R.mipmap.ic_h_sleep, - 5 - ) - ) - - //血压 - val statusXYa = if (dbpData.GDbp == 0 && dbpData.DDbp == 0) { - 0 - } else if (dbpData.DbpMessage.contains("正常")) { - 1 - } else { - 2 - } - val contentXYa = if (dbpData.GDbp == 0 && dbpData.DDbp == 0) { - "--" - } else { - "${dbpData.GDbp}/${dbpData.DDbp}" - } - val mTimeXYa = milliseconds2String(dbpData.DbpTime) - healthMonitoringList.add( - HealthMonitoringListBean( - "血压", - statusXYa, - mTimeXYa, - contentXYa, - R.mipmap.bg_xya, - R.mipmap.ic_xya, - 6 - ) - ) - - //血糖 - var statusXT = 0 - var contentXT = "" - var mTimeXT = "" - when (bloodSugarData.model) {//如果有errorMsg则为建模中 - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(bloodSugarData.expireTime)) { - contentXT = "未开通" - mTimeXT = "免费体验100天" - statusXT = 3 - } else { - contentXT = "续费" - mTimeXT = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusXT = 0 - } - } - - 1 -> { - statusXT = 1 - contentXT = "建模中" - mTimeXT = if (bloodSugarData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (bloodSugarData.time.contains("-")) { - bloodSugarData.time - } else { - "${ - RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - bloodSugarData.time - ) - ) - }" - } - } - - 2 -> { - statusXT = - if (bloodSugarData.bloodsugar.toFloat() == 0f) { - 0 - } else if (OrganStatusCalcUtil.bloodSugarStatu(bloodSugarData.bloodsugar.toFloat()) == 0) { - 1 - } else { - 2 - } - contentXT = if (bloodSugarData.bloodsugar.toFloat() == 0f) { - "--" - } else { - bloodSugarData.bloodsugar.toString() - } - mTimeXT = if (bloodSugarData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else { - "${ - // milliseconds2String(bloodFatData.time) - RxTimeTool.simpleDateFormat( - "yyyy-MM-dd HH", - RxTimeTool.string2Date( - "yyyy-MM-dd HH:mm:ss", - bloodSugarData.time - ) - ) - }:00" - } - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "血糖", - statusXT, - mTimeXT, - contentXT, - R.mipmap.bg_bloodsugar, - R.mipmap.ic_bloodsugar, - 7 - ) - ) - - //尿酸 -// val statusNS = if (uricAcidData.value == "0") { -// 0 -// } else if (uricAcidData.message.contains("正常")) { -// R.mipmap.ic_health_normal -// } else { -// R.mipmap.ic_health_error -// } -// val contentNS = -// if (!TextUtils.isEmpty(uricAcidData.value)) uricAcidData.value else "--" -// val mTimeNS = uricAcidData.time.toLong().let { -// RxTimeTool.milliseconds2String( -// it, -// SimpleDateFormat("yyyy-MM-dd HH:mm") -// ) -// }.toString() - var statusNS = 0 - var contentNS = "" - var mTimeNS = "" - when (uricAcidData.status) { - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(uricAcidData.expireTime)) { - contentNS = "未开通" - mTimeNS = "免费体验100天" - statusNS = 3 - } else { - contentNS = "续费" - mTimeNS = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusNS = 0 - } - } - - 1 -> { - statusNS = 1 - contentNS = "建模中" - mTimeNS = if (uricAcidData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (uricAcidData.time.contains("-")) { - uricAcidData.time - } else { - "${ - milliseconds2String(uricAcidData.time) - }" - } - } - - 2 -> { - statusNS = - if (uricAcidData.value == "0" || TextUtils.isEmpty(uricAcidData.value)) { - 0 - } else if (uricAcidData.message.contains("正常")) { - 1 - } else { - 2 - } - contentNS = - if (!TextUtils.isEmpty(uricAcidData.value)) uricAcidData.value else "--" - mTimeNS = milliseconds2String(uricAcidData.time) - } - } - - healthMonitoringList.add( - HealthMonitoringListBean( - "尿酸", - statusNS, - mTimeNS, - contentNS, - R.mipmap.bg_niaosuan, - R.mipmap.ic_niaosuan, - 9, - sex = user.sex.toString() - ) - ) - - //血脂 - var statusXZ = 0 - var contentXZ = "" - var mTimeXZ = "" - when (bloodFatData.status) { - //0 未开通 1:建模中 2:建模完成 - 0 -> { - if (TextUtils.isEmpty(bloodFatData.expireTime)) { - contentXZ = "未开通" - mTimeXZ = "免费体验100天" - statusXZ = 3 - } else { - contentXZ = "续费" - mTimeXZ = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH:mm") - statusXZ = 0 - } - } - - 1 -> { - statusXZ = 1 - contentXZ = "建模中" - mTimeXZ = if (bloodFatData.time.isNullOrEmpty()) { - "${RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH")}:00" - } else if (bloodFatData.time.contains("-")) { - bloodFatData.time - } else { - milliseconds2String(bloodFatData.time) - } - } - - 2 -> { - statusXZ = - if (bloodFatData.value == "0" || TextUtils.isEmpty(bloodFatData.value)) { - 0 - } else if (bloodFatData.message.contains("正常")) { - 1 - } else { - 2 - } - contentXZ = - if (!TextUtils.isEmpty(bloodFatData.value)) bloodFatData.value else "--" - mTimeXZ = milliseconds2String(bloodFatData.time) - } - } - healthMonitoringList.add( - HealthMonitoringListBean( - "血脂", - statusXZ, - mTimeXZ, - contentXZ, - R.mipmap.bg_fat, - R.mipmap.ic_fat, - 10 - ) - ) - }*/ -// } - } - return healthMonitoringList - } - - @SuppressLint("SimpleDateFormat") - private fun milliseconds2String(strTime: String): String { - return RxTimeTool.milliseconds2String( - strTime.toLong() * 1000, - SimpleDateFormat("yyyy-MM-dd HH:mm") - ) - } - - fun getWeather(){ - startHttp { - val json = JSONObject() - json.put("longitude", MMkvHelper.getDouble(Const.LONGITUDE)) - json.put("latitude", MMkvHelper.getDouble(Const.LATITUDE)) - val body = apiInterface().getWeather(retrofits.getRequestBody(json.toString())) - body.getCodeStatus(weatherLiveDate, nowData) - } + suspend fun getDeviceFunctionLists(id:String):Boolean{ + val json = JSONObject() + json.put("id", id) + val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(functionLiveData, nowData) + return true } } \ No newline at end of file diff --git a/app/src/main/res/layout/act_device_active.xml b/app/src/main/res/layout/act_device_active.xml new file mode 100644 index 0000000..1b79c1e --- /dev/null +++ b/app/src/main/res/layout/act_device_active.xml @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/base/build.gradle b/base/build.gradle index fc52788..ccd81a2 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.library' id 'kotlin-android' id 'kotlin-kapt' + id 'kotlin-parcelize' } def androidId = rootProject.ext.defaultSetting @@ -53,7 +54,6 @@ android { viewBinding{ enabled=true } - } repositories { diff --git a/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt b/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt index b52d040..12e1069 100644 --- a/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt +++ b/base/src/main/java/com/xty/base/h5/CloudJSBridge.kt @@ -1,15 +1,19 @@ package com.xty.base.h5 import android.content.Context +import android.os.Bundle import android.webkit.JavascriptInterface import com.blankj.utilcode.util.GsonUtils import com.google.gson.Gson import com.xty.base.act.BaseVmAct +import com.xty.base.model.ScienceDetailBean import com.xty.base.model.WatchReChangeBean import com.xty.base.utils.PayUtils import com.xty.common.Const import com.xty.common.LogUtils import com.xty.common.MMkvHelper +import com.xty.common.arouter.ARouterUrl +import com.xty.common.arouter.RouteManager import com.xty.common.util.ToastUtils import org.json.JSONObject @@ -63,9 +67,11 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) { fun gotoScienceDetail(str: String?){ LogUtils.e("CloudJSBridge","gotoScienceDetail str") str?.let { - + var detailBean = GsonUtils.fromJson(it, ScienceDetailBean::class.java) + var bundle = Bundle() + bundle.putString("id",detailBean.id) + RouteManager.goAct(ARouterUrl.SCIENCE_DETAIL, bundle) } - ToastUtils(context).showToast("敬请期待") } @JavascriptInterface @@ -76,4 +82,6 @@ open class CloudJSBridge(val context: Context, val listener: IJsBridge) { } } + + } \ No newline at end of file diff --git a/base/src/main/java/com/xty/base/model/ScienceDetailBean.kt b/base/src/main/java/com/xty/base/model/ScienceDetailBean.kt new file mode 100644 index 0000000..ae7aee7 --- /dev/null +++ b/base/src/main/java/com/xty/base/model/ScienceDetailBean.kt @@ -0,0 +1,3 @@ +package com.xty.base.model +data class ScienceDetailBean (var id:String){ +} \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle index 0ef692e..46e5d21 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.library' id 'kotlin-android' id 'kotlin-kapt' + id 'kotlin-parcelize' } diff --git a/common/src/main/java/com/xty/common/Const.kt b/common/src/main/java/com/xty/common/Const.kt index a4ab845..083921d 100644 --- a/common/src/main/java/com/xty/common/Const.kt +++ b/common/src/main/java/com/xty/common/Const.kt @@ -1,6 +1,7 @@ package com.xty.common import androidx.lifecycle.MutableLiveData +import com.xty.network.model.DeviceFunctionBean import com.xty.network.model.MainBean import com.xty.network.model.MusicBean import com.xty.network.model.SettingBean @@ -70,6 +71,7 @@ class Const { val mainLiveData by lazy { MutableLiveData() } //个人信息数据 val otherLiveData by lazy { MutableLiveData() } val connectBlueDevice by lazy { ScanDeviceBean() } + val functionListDate by lazy { MutableLiveData>() } var battery = ""//电量信息 diff --git a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt index 33d3b54..aeef5be 100644 --- a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt +++ b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt @@ -6,7 +6,8 @@ class ARouterUrl { const val MAIN_ACT = "/com/zj365/dc/activity/MainActivity" const val LOGIN_ACT = "/com/zj365/dc/activity/LoginAct" const val REGIST_ACT = "/com/zj365/dc/activity/RegisterAct" - const val DEVICE_ACTIVE = "/com/zj365/dc/activity/OneKeyBinderDeviceAct" + const val ONE_KEY_DEVICE_ACTIVE = "/com/zj365/dc/activity/OneKeyBinderDeviceAct" + const val DEVICE_ACTIVE = "/com/xty/health/act/DeviceActiveAct" const val BASIC_INFO = "/com/zj365/dc/act/BasicInfoAct" const val BIND_WX_PHONE = "/com/zj365/dc/act/BindWxPhone" const val DEVICE_CONNECT = "/com/zj365/dc/activity/DeviceConnectAct" diff --git a/common/src/main/java/com/xty/common/util/DeviceFunctionUtils.kt b/common/src/main/java/com/xty/common/util/DeviceFunctionUtils.kt new file mode 100644 index 0000000..6d86133 --- /dev/null +++ b/common/src/main/java/com/xty/common/util/DeviceFunctionUtils.kt @@ -0,0 +1,22 @@ +package com.xty.common.util + +import com.xty.network.model.DeviceFunctionBean + +object DeviceFunctionUtils { + + fun hasFunction(functionList:ArrayList,functionType:String) : Boolean{ + functionList.forEach { + if(it.type == functionType && it.status == 1){ + return true + } + } + return false + } + + fun hasFunction(bean:DeviceFunctionBean,functionType:String):Boolean{ + if(bean.type == functionType && bean.status == 1){ + return true + } + return false + } +} \ No newline at end of file diff --git a/common/src/main/res/drawable/progress_bg_info.xml b/common/src/main/res/drawable/progress_bg_info.xml new file mode 100644 index 0000000..04f6d7b --- /dev/null +++ b/common/src/main/res/drawable/progress_bg_info.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/bg_home_item.png b/common/src/main/res/mipmap-xxhdpi/bg_home_item.png similarity index 100% rename from app/src/main/res/mipmap-xxhdpi/bg_home_item.png rename to common/src/main/res/mipmap-xxhdpi/bg_home_item.png diff --git a/config.gradle b/config.gradle index dd6d4ec..e9e364c 100644 --- a/config.gradle +++ b/config.gradle @@ -169,7 +169,8 @@ ext { stream : 'com.annimon:stream:1.2.1', rxjave : 'io.reactivex.rxjava2:rxjava:2.2.8', rxandroid : 'io.reactivex.rxjava2:rxandroid:2.1.1', - permission : 'com.yanzhenjie:permission:2.0.3', + permission : 'com.yanzhenjie:permission:2.0.3', + autoSize :'me.jessyan:autosize:1.2.1', //seekbar seekbar : 'com.github.Jay-Goo:RangeSeekBar:v3.0.0' diff --git a/health/build.gradle b/health/build.gradle index 0aa80a2..186386e 100644 --- a/health/build.gradle +++ b/health/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' + id 'kotlin-parcelize' } diff --git a/health/src/main/java/com/zj365/health/act/ComparePageDataAct.kt b/health/src/main/java/com/zj365/health/act/ComparePageDataAct.kt index 4392cc7..1f5d1c3 100644 --- a/health/src/main/java/com/zj365/health/act/ComparePageDataAct.kt +++ b/health/src/main/java/com/zj365/health/act/ComparePageDataAct.kt @@ -10,6 +10,8 @@ import com.xty.base.act.BaseVmAct import com.xty.base.vm.BaseVm import com.xty.base.vp2.VpAdapter import com.xty.common.arouter.ARouterUrl +import com.xty.common.util.DeviceFunctionUtils +import com.xty.network.model.DeviceFunctionBean import com.zj365.health.R import com.zj365.health.databinding.ActComparePageBinding import com.zj365.health.fragment.BreathCompareDataFrag @@ -21,12 +23,13 @@ import com.zj365.health.fragment.XlCompareDataFrag import com.zj365.health.fragment.XueTangCompareDataFrag import com.zj365.health.fragment.XueYaCompareDataFrag import com.zj365.health.fragment.bloodlipid.BloodFatCompareDataFrag +import com.zj365.health.vm.ComparePageDataVm /** * 数据对比 */ @Route(path = ARouterUrl.COMPARE_PAGE_DATA_ACT) -class ComparePageDataAct : BaseVmAct() { +class ComparePageDataAct : BaseVmAct() { /** * userid */ @@ -34,7 +37,7 @@ class ComparePageDataAct : BaseVmAct() { val title by lazy { arrayOf( "心率数据对比", "血氧数据对比", "呼吸率数据对比","体温数据对比","睡眠数据对比", "血压数据对比" ,"血糖数据对比","尿酸数据对比","血脂数据对比" ) } val compareArray: Array by lazy { resources.getStringArray(R.array.compare_array) } var listFragment = mutableListOf() - + var functionList = ArrayList() /** */ val binding by lazy{ ActComparePageBinding.inflate(layoutInflater)} @@ -45,18 +48,38 @@ class ComparePageDataAct : BaseVmAct() { if (intent.extras!!.containsKey("id")) { id = intent.extras!!.getString("id").toString() } + + if(intent.extras!!.containsKey("functionList")){ + functionList = intent.extras!!.getParcelableArrayList("functionList")!! + } } - private fun initVp2() { + private fun initVp2(functionList :MutableList) { listFragment.clear() - listFragment.add(setArgumentFrag(XlCompareDataFrag(), id)) - listFragment.add(setArgumentFrag(XYangCompareDataFrag(), id)) - listFragment.add(setArgumentFrag(BreathCompareDataFrag (),id)) - listFragment.add(setArgumentFrag(TempCompareDataFrag(),id)) - listFragment.add(setArgumentFrag(SleepCompareDataFrag (),id)) - listFragment.add(setArgumentFrag(XueYaCompareDataFrag (),id)) - listFragment.add(setArgumentFrag(XueTangCompareDataFrag(),id)) - listFragment.add(setArgumentFrag(UricAcidCompareDataFrag(),id)) - listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id)) + functionList.forEach { + if (DeviceFunctionUtils.hasFunction(it,"hr")){ + listFragment.add(setArgumentFrag(XlCompareDataFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"so")){ + listFragment.add(setArgumentFrag(XYangCompareDataFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"resp")){ + listFragment.add(setArgumentFrag(BreathCompareDataFrag (),id)) + }else if(DeviceFunctionUtils.hasFunction(it,"temp")){ + listFragment.add(setArgumentFrag(TempCompareDataFrag(),id)) + }else if(DeviceFunctionUtils.hasFunction(it,"sleep")){ + listFragment.add(setArgumentFrag(SleepCompareDataFrag (),id)) + + }else if(DeviceFunctionUtils.hasFunction(it,"dbp")){ + listFragment.add(setArgumentFrag(XueYaCompareDataFrag (),id)) + + }else if(DeviceFunctionUtils.hasFunction(it,"sugar")){ + listFragment.add(setArgumentFrag(XueTangCompareDataFrag(),id)) + + }else if(DeviceFunctionUtils.hasFunction(it,"uric")){ + listFragment.add(setArgumentFrag(UricAcidCompareDataFrag(),id)) + + }/*else if(it.type == "bloodFat" && it.status == 1){ + listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id)) + }*/ + } binding.mVp2.adapter = VpAdapter(listFragment, this) binding.mVp2.isUserInputEnabled = false @@ -81,16 +104,25 @@ class ComparePageDataAct : BaseVmAct() { finish() } } - initTab() - initVp2() - + if(functionList.size == 0){ + mViewModel.getDeviceFunctionList(id) + }else{ + initTab(functionList) + initVp2(functionList) + } } - private fun initTab() { - compareArray.forEach { - val tab = binding.xTablayout.newTab() - tab.text = it - binding.xTablayout.addTab(tab) + private fun initTab(functionList :MutableList) { + functionList.forEach { + if(it.type == "ecg" || it.type == "step" || it.type == "bloodFat"){ + return@forEach + } + if (it.status == 1){ + val tab = binding.xTablayout.newTab() + tab.text = it.name + binding.xTablayout.addTab(tab) + } + } binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener{ override fun onTabSelected(tab: XTabLayout.Tab?) { @@ -107,7 +139,14 @@ class ComparePageDataAct : BaseVmAct() { } override fun liveObserver() { + mViewModel.functionLiveData.observe(this){ + it.data.let { + functionList.addAll(it) + initTab(functionList) + initVp2(functionList) + } } + } fun changeTitle(position: Int) { binding.title.mTvTitle.text = title[position] diff --git a/health/src/main/java/com/zj365/health/act/HealthMainAct.kt b/health/src/main/java/com/zj365/health/act/HealthMainAct.kt index 927aaf9..fe9b91a 100644 --- a/health/src/main/java/com/zj365/health/act/HealthMainAct.kt +++ b/health/src/main/java/com/zj365/health/act/HealthMainAct.kt @@ -10,31 +10,45 @@ import androidx.viewpager2.widget.ViewPager2 import com.alibaba.android.arouter.facade.annotation.Route import com.androidkun.xtablayout.XTabLayout import com.gyf.immersionbar.ImmersionBar +import com.xty.base.act.BaseVmAct import com.xty.base.act.IBaseAct +import com.xty.base.vm.BaseVm import com.xty.base.vp2.VpAdapter import com.xty.common.* import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager +import com.xty.common.util.DeviceFunctionUtils import com.xty.common.weight.tablayout.listener.CustomTabEntity +import com.xty.network.model.DeviceFunctionBean import com.zj365.health.R import com.zj365.health.databinding.ActHealthMainBinding +import com.zj365.health.fragment.BreathCompareDataFrag import com.zj365.health.fragment.bloodlipid.BloodFatFrag import com.zj365.health.fragment.BreathFrag +import com.zj365.health.fragment.SleepCompareDataFrag import com.zj365.health.weight.DialogTip import com.zj365.health.fragment.SleepFrag import com.zj365.health.fragment.TemFrag +import com.zj365.health.fragment.TempCompareDataFrag +import com.zj365.health.fragment.UricAcidCompareDataFrag import com.zj365.health.fragment.UricAcidFrag +import com.zj365.health.fragment.XYangCompareDataFrag import com.zj365.health.fragment.XdFrag import com.zj365.health.fragment.XinlvFrag +import com.zj365.health.fragment.XlCompareDataFrag +import com.zj365.health.fragment.XueTangCompareDataFrag import com.zj365.health.fragment.XueTangFrag +import com.zj365.health.fragment.XueYaCompareDataFrag import com.zj365.health.fragment.XueyaFrag import com.zj365.health.fragment.XueyangFrag +import com.zj365.health.fragment.bloodlipid.BloodFatCompareDataFrag +import com.zj365.health.vm.HealthMainVm /** * 健康监测 详情 */ @Route(path = ARouterUrl.HEALTHMAIN) -class HealthMainAct : IBaseAct() { +class HealthMainAct : BaseVmAct() { var isDemonstrate: Boolean = false var page = 0 val binding by lazy { ActHealthMainBinding.inflate(layoutInflater) } @@ -42,6 +56,8 @@ class HealthMainAct : IBaseAct() { var tabName = arrayOf() var id = "" var sex = "1" + var functionType:String = "" + var functionList = ArrayList() val dialogBind by lazy { DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") { RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) @@ -51,8 +67,12 @@ class HealthMainAct : IBaseAct() { override fun setLayout(): View = binding.root override fun initData() { super.initData() - page = intent.extras!!.getInt("page") + // page = intent.extras!!.getInt("page") + functionType = intent.extras!!.getString("functionType").toString() isDemonstrate = intent.extras!!.getBoolean("isDemonstrate", false) + if(intent.extras!!.containsKey("functionList")){ + functionList = intent.extras!!.getParcelableArrayList("functionList")!! + } if (intent.extras!!.containsKey("id")) { id = intent.extras!!.getString("id").toString() } @@ -65,42 +85,21 @@ class HealthMainAct : IBaseAct() { super.initView() val deviceType = MMkvHelper.getString(Const.DEVICE_TYPE) + if(functionList.size == 0){ + mViewModel.getDeviceFunctionList(id) + }else{ + initTab(functionList) + initVp2(functionList) + } tabName = arrayOf( R.string.info_1, R.string.info_3, R.string.info_7, R.string.info_4, R.string.info_6, R.string.info_2, R.string.info_8, R.string.info_11/*, R.string.info_5, R.string.info_10*/ - ) /*when (deviceType) { - "", "U32" -> { - arrayOf( - R.string.info_1, R.string.info_3, R.string.info_7, - R.string.info_4, R.string.info_6, R.string.info_2, - R.string.info_8, R.string.info_11/*, R.string.info_5, - R.string.info_10*/ - ) - } - - "A3" -> { - arrayOf( - R.string.info_1, R.string.info_3, R.string.info_7, - R.string.info_4, R.string.info_6, R.string.info_2, - R.string.info_8, R.string.info_11*//*, R.string.info_10*//* - ) - } - - else -> { - arrayOf( - R.string.info_1, R.string.info_3, R.string.info_7, - R.string.info_6, R.string.info_2, R.string.info_8, - R.string.info_11*//*, R.string.info_10*//* - ) - } - }*/ + ) statusBar(binding.title.mView) initTitle() - initTab() - initVp2() if (isDemonstrate) { binding.mSubmit.visibility = View.VISIBLE binding.title.mTvTitle.text = resources.getString(R.string.health_sub_demonstrate) @@ -108,6 +107,16 @@ class HealthMainAct : IBaseAct() { } } + override fun liveObserver() { + mViewModel.functionLiveData.observe(this){ + it.data.let { + functionList.addAll(it) + initTab(functionList) + initVp2(functionList) + } + } + } + private fun setArgumentFrag(frag: Fragment, id: String = "", sex: String = "1"): Fragment { val bundle = Bundle() bundle.putString("id", id) @@ -118,9 +127,6 @@ class HealthMainAct : IBaseAct() { private fun initTitle() { binding.title.mTvTitle.text = resources.getString(R.string.health_sub) - var parentView = binding.title.mTvTitle.parent as View -// var bg = ContextCompat.getDrawable(this, R.drawable.shape_bg_health_round) -// parentView.background = bg binding.title.mIvBack.apply { this.setOnClickListener { finish() @@ -131,11 +137,21 @@ class HealthMainAct : IBaseAct() { //设置tab private val mTabEntities: java.util.ArrayList = java.util.ArrayList() - private fun initTab() { - tabName.forEach { - var tab = binding.xTablayout.newTab() - tab.text = resources.getString(it) - binding.xTablayout.addTab(tab) + private fun initTab(functionList :MutableList) { + functionList.forEach { + if (it.type == "step" || it.type == "bloodFat"){ + return@forEach + } + if (it.status == 1){ + var tab = binding.xTablayout.newTab() + tab.text = it.name + binding.xTablayout.addTab(tab) + + if(it.type == functionType){ + page = tab.position + } + } + } binding.xTablayout.setOnTabSelectedListener(object : XTabLayout.OnTabSelectedListener { override fun onTabSelected(tab: XTabLayout.Tab?) { @@ -163,46 +179,37 @@ class HealthMainAct : IBaseAct() { } //设置vp2 - private fun initVp2() { + private fun initVp2(functionList :MutableList) { listFragment.clear() - /*when (MMkvHelper.getString(Const.DEVICE_TYPE)) { - "", "U32" -> {*/ + functionList.forEach { + if (DeviceFunctionUtils.hasFunction(it,"hr")){ listFragment.add(setArgumentFrag(XinlvFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"so")){ listFragment.add(setArgumentFrag(XueyangFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"resp")){ listFragment.add(setArgumentFrag(BreathFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"temp")){ listFragment.add(setArgumentFrag(TemFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"sleep")){ listFragment.add(setArgumentFrag(SleepFrag(), id)) - listFragment.add(setArgumentFrag(XueyaFrag(), id)) - listFragment.add(setArgumentFrag(XueTangFrag(), id)) - listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex)) - // listFragment.add(setArgumentFrag(XdFrag(), id)) - // listFragment.add(setArgumentFrag(BloodFatFrag(), id)) - /* } - "A3" -> { - listFragment.add(setArgumentFrag(XinlvFrag(), id)) - listFragment.add(setArgumentFrag(XueyangFrag(), id)) - listFragment.add(setArgumentFrag(BreathFrag(), id)) - listFragment.add(setArgumentFrag(TemFrag(), id)) - listFragment.add(setArgumentFrag(SleepFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"dbp")){ listFragment.add(setArgumentFrag(XueyaFrag(), id)) - listFragment.add(setArgumentFrag(XueTangFrag(), id)) - listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex)) - // listFragment.add(setArgumentFrag(BloodFatFrag(), id)) - } - else -> { - listFragment.add(setArgumentFrag(XinlvFrag(), id)) - listFragment.add(setArgumentFrag(XueyangFrag(), id)) - listFragment.add(setArgumentFrag(BreathFrag(), id)) - listFragment.add(setArgumentFrag(SleepFrag(), id)) - listFragment.add(setArgumentFrag(XueyaFrag(), id)) + }else if(DeviceFunctionUtils.hasFunction(it,"sugar")){ listFragment.add(setArgumentFrag(XueTangFrag(), id)) + + }else if(DeviceFunctionUtils.hasFunction(it,"uric")){ listFragment.add(setArgumentFrag(UricAcidFrag(), id, sex)) - // listFragment.add(setArgumentFrag(BloodFatFrag(), id)) - } - }*/ + + }/*else if(it.type == "bloodFat" && it.status == 1){ + listFragment.add(setArgumentFrag(BloodFatCompareDataFrag(),id)) + }*/ + } + + + binding.mVp2.adapter = VpAdapter(listFragment, this) binding.mVp2.isUserInputEnabled = false @@ -233,25 +240,11 @@ class HealthMainAct : IBaseAct() { txtColInt = ContextCompat.getColor(this, R.color.col_515) ImmersionBar.with(this).statusBarDarkFont(true).init() binding.title.mIvReight.visibility = View.GONE -// if (position == 5 && tabName.size == 8) { -// bg = ContextCompat.getDrawable(this, R.drawable.shape_white)!! -// backId = R.mipmap.icon_back_black -// txtColInt = ContextCompat.getColor(this, R.color.col_515) -// ImmersionBar.with(this).statusBarDarkFont(true).init() -// binding.title.mIvReight.visibility = View.GONE -// } else { -// bg = ContextCompat.getDrawable(this, R.drawable.shape_bg_health_round)!! -// backId = R.mipmap.icon_back_white -// txtColInt = ContextCompat.getColor(this, R.color.white) -// ImmersionBar.with(this).statusBarDarkFont(false).init() -// //binding.title.mIvReight.visibility=View.VISIBLE -// } var parentView = binding.title.mTvTitle.parent as View parentView.background = bg binding.title.mTvTitle.setTextColor(txtColInt) binding.title.mIvBack.apply { -// this.setImageResource(backId) this.setOnClickListener { finish() } diff --git a/health/src/main/java/com/zj365/health/act/HealthSkyHourReportAct.kt b/health/src/main/java/com/zj365/health/act/HealthSkyHourReportAct.kt index 883486f..becb9f8 100644 --- a/health/src/main/java/com/zj365/health/act/HealthSkyHourReportAct.kt +++ b/health/src/main/java/com/zj365/health/act/HealthSkyHourReportAct.kt @@ -37,7 +37,9 @@ import com.xty.common.event.IntegralEvent import com.xty.common.setImageUser import com.xty.common.util.CommonToastUtils import com.xty.common.util.CommonUtils +import com.xty.common.util.DeviceFunctionUtils import com.xty.common.weight.CenterImageSpan +import com.xty.network.model.DeviceFunctionBean import com.zj365.health.R import com.zj365.health.act.exception.BaseExceptionDataAct import com.zj365.health.adapter.DayReportInfoAdapter @@ -105,6 +107,9 @@ class HealthSkyHourReportAct : BaseVmAct() { private val infoAdapter by lazy { DayReportInfoAdapter() } private val mAdapterCount by lazy { ReportAnalysisAdapter() } + var functionList = ArrayList() + + private val dialogBind by lazy { DialogTip(this, "需绑定中健三六五健康手表,才能查看", "去绑定") { RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) @@ -178,6 +183,10 @@ class HealthSkyHourReportAct : BaseVmAct() { super.initData() isX1X2 = MMkvHelper.getBoolean(Const.X1_X2_Device, false) isEstimate = intent.getBooleanExtra("isEstimate", false) + + if(intent.extras!!.containsKey("functionList")){ + functionList = intent.extras!!.getParcelableArrayList("functionList")!! + } if (isEstimate) { binding.mTvTime.setCompoundDrawablesWithIntrinsicBounds( null, // left @@ -241,6 +250,10 @@ class HealthSkyHourReportAct : BaseVmAct() { } } + if(functionList.size == 0){ + mViewModel.getDeviceFunctionList(userId) + } + //设置tab //"用户信息", "器官功能分析", "睡眠监测", "中医分析", "中医养生指导", "西医分析", "西医指导", // "饮食指导", "运动指导", "睡眠方案建议", "营养处方建议", "统计分析", "综合分析" @@ -833,7 +846,7 @@ class HealthSkyHourReportAct : BaseVmAct() { ) // x1和x2没有体温 - if (!isX1X2 || isDemonstrate) { + if (DeviceFunctionUtils.hasFunction(functionList,"temp")|| isDemonstrate) { listInfo.add( ReportBean.HrInfo( "体温", @@ -1027,7 +1040,7 @@ class HealthSkyHourReportAct : BaseVmAct() { } list.add(respiratoryMean) - if (!isX1X2 || isDemonstrate) { + if (DeviceFunctionUtils.hasFunction(functionList,"temp")|| isDemonstrate) { val tempMean = com.xty.common.model.ReportBean().apply { title = "体温" count = it.data.tempMean.count @@ -1285,6 +1298,10 @@ class HealthSkyHourReportAct : BaseVmAct() { CommonToastUtils.showLoserToast("分享记录失败") } } + + mViewModel.functionLiveData.observe(this){ + functionList.addAll(it.data) + } } private fun goExceptionActivity(exceptionType: Int) { @@ -1679,7 +1696,7 @@ class HealthSkyHourReportAct : BaseVmAct() { binding.analysisTv1.text = "平均心率:" + it.data.signData.hr.avg + "次/分" binding.analysisTv2.text = "平均血氧:" + it.data.signData.so.avg + "%" binding.analysisTv3.text = "平均呼吸率:" + it.data.signData.respiratory.avg + "次/分" - if (isX1X2) { + if (!DeviceFunctionUtils.hasFunction(functionList,"temp")) { binding.analysisTv8.visibility = View.GONE } else { binding.analysisTv8.text = diff --git a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt index 6ff4538..e6c6e7f 100644 --- a/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt +++ b/health/src/main/java/com/zj365/health/act/familyhealth/FamilyHealthAct.kt @@ -94,7 +94,7 @@ class FamilyHealthAct : BaseListAct() { RouteManager.goAct(ARouterUrl.FAMILY_GUARDIAN_LIST_ACT) } R.id.tv_current_time ->{ - RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT) + // RouteManager.goAct(ARouterUrl.FAMILY_HEALTH_REAL_TIME_ACT) } R.id.tv_watch ->{ diff --git a/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt new file mode 100644 index 0000000..b094c4d --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthcode/HealthBodyInquiryAct.kt @@ -0,0 +1,16 @@ +package com.zj365.health.act.healthcode + +import android.view.View +import com.xty.base.act.BaseVmAct +import com.xty.base.vm.BaseVm +import com.zj365.health.databinding.ActHealthBodyInquiryBinding + +class HealthBodyInquiryAct : BaseVmAct() { + + val binding by lazy { ActHealthBodyInquiryBinding.inflate(layoutInflater) } + + override fun liveObserver() { + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt b/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt new file mode 100644 index 0000000..9e305a7 --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthcode/HealthCodeMainAct.kt @@ -0,0 +1,14 @@ +package com.zj365.health.act.healthcode + +import android.view.View +import com.xty.base.act.BaseVmAct +import com.xty.base.vm.BaseVm +import com.zj365.health.databinding.ActHealthCodeMainBinding + +class HealthCodeMainAct : BaseVmAct() { + val binding by lazy { ActHealthCodeMainBinding.inflate(layoutInflater) } + override fun liveObserver() { + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordMainAct.kt b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordMainAct.kt new file mode 100644 index 0000000..13b92df --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordMainAct.kt @@ -0,0 +1,37 @@ +package com.zj365.health.act.healthrecord + +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import com.xty.base.act.BaseVmAct +import com.xty.base.vm.BaseVm +import com.zj365.health.adapter.familyhealth.HealthFamilyTargetAdapter +import com.zj365.health.databinding.ActHealthRecordMainBinding + +class HealthRecordMainAct : BaseVmAct() { + + val binding by lazy { ActHealthRecordMainBinding.inflate(layoutInflater) } + + val mAdapter by lazy { HealthFamilyTargetAdapter() } + + override fun liveObserver() { + + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text ="健康档案" + binding.title.mIvBack.setOnClickListener { + finish() + } + + initAdapter() + } + + fun initAdapter (){ + binding.recycler.adapter = mAdapter + binding.recycler.layoutManager = LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt new file mode 100644 index 0000000..bfb6bff --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthrecord/HealthRecordsListAct.kt @@ -0,0 +1,31 @@ +package com.zj365.health.act.healthrecord + +import android.view.View +import com.xty.base.act.BaseListAct +import com.xty.base.vm.BaseVm +import com.zj365.health.databinding.ActHealthRecordBinding +import com.zj365.health.databinding.ActHealthRecordsListBinding + +class HealthRecordsListAct : BaseListAct() { + + val binding by lazy { ActHealthRecordsListBinding.inflate(layoutInflater) } + override fun initAdapter() { + } + + override fun loadData() { + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text = "报告记录" + binding.title.mIvBack.setOnClickListener { + finish() + } + } + + override fun liveObserver() { + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt b/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt new file mode 100644 index 0000000..5330889 --- /dev/null +++ b/health/src/main/java/com/zj365/health/act/healthrecord/UploadHealthRecordAct.kt @@ -0,0 +1,26 @@ +package com.zj365.health.act.healthrecord + +import android.view.View +import com.xty.base.act.BaseListAct +import com.xty.base.act.BaseVmAct +import com.xty.base.vm.BaseVm +import com.zj365.health.databinding.ActUploadHealthRecordBinding + +class UploadHealthRecordAct : BaseVmAct() { + + val binding by lazy { ActUploadHealthRecordBinding.inflate(layoutInflater) } + + override fun liveObserver() { + } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text = "上传报告" + binding.title.mIvBack.setOnClickListener { + finish() + } + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/ComparePageDataVm.kt b/health/src/main/java/com/zj365/health/vm/ComparePageDataVm.kt new file mode 100644 index 0000000..56187e4 --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/ComparePageDataVm.kt @@ -0,0 +1,20 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.DeviceFunctionBean +import com.xty.network.model.RespBody +import org.json.JSONObject + +class ComparePageDataVm :BaseVm() { + + val functionLiveData by lazy { MutableLiveData>>() } + fun getDeviceFunctionList(id:String){ + startHttp { + val json = JSONObject() + json.put("id", id) + val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(functionLiveData, nowData) + } + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/HealthMainVm.kt b/health/src/main/java/com/zj365/health/vm/HealthMainVm.kt new file mode 100644 index 0000000..c6c5507 --- /dev/null +++ b/health/src/main/java/com/zj365/health/vm/HealthMainVm.kt @@ -0,0 +1,20 @@ +package com.zj365.health.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.DeviceFunctionBean +import com.xty.network.model.RespBody +import org.json.JSONObject + +class HealthMainVm : BaseVm() { + + val functionLiveData by lazy { MutableLiveData>>() } + fun getDeviceFunctionList(id:String){ + startHttp { + val json = JSONObject() + json.put("id", id) + val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(functionLiveData, nowData) + } + } +} \ No newline at end of file diff --git a/health/src/main/java/com/zj365/health/vm/ReportVm.kt b/health/src/main/java/com/zj365/health/vm/ReportVm.kt index 5d7aa53..89f943d 100644 --- a/health/src/main/java/com/zj365/health/vm/ReportVm.kt +++ b/health/src/main/java/com/zj365/health/vm/ReportVm.kt @@ -233,4 +233,14 @@ class ReportVm : BaseVm() { null } } + + val functionLiveData by lazy { MutableLiveData>>() } + fun getDeviceFunctionList(id:String){ + startHttp { + val json = JSONObject() + json.put("id", id) + val body = apiInterface().getDeviceFunctionList(retrofits.getRequestBody(json.toString())) + body.getCodeStatus(functionLiveData, nowData) + } + } } \ No newline at end of file diff --git a/health/src/main/res/layout/act_health_body_inquiry.xml b/health/src/main/res/layout/act_health_body_inquiry.xml new file mode 100644 index 0000000..654cdf8 --- /dev/null +++ b/health/src/main/res/layout/act_health_body_inquiry.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_health_code_main.xml b/health/src/main/res/layout/act_health_code_main.xml new file mode 100644 index 0000000..d2ce8ee --- /dev/null +++ b/health/src/main/res/layout/act_health_code_main.xml @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_health_record_main.xml b/health/src/main/res/layout/act_health_record_main.xml new file mode 100644 index 0000000..4b616da --- /dev/null +++ b/health/src/main/res/layout/act_health_record_main.xml @@ -0,0 +1,578 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_health_records_list.xml b/health/src/main/res/layout/act_health_records_list.xml new file mode 100644 index 0000000..9ced7ec --- /dev/null +++ b/health/src/main/res/layout/act_health_records_list.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_upload_health_record.xml b/health/src/main/res/layout/act_upload_health_record.xml new file mode 100644 index 0000000..af798f5 --- /dev/null +++ b/health/src/main/res/layout/act_upload_health_record.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/layout/layout_health_record_test.xml b/health/src/main/res/layout/layout_health_record_test.xml new file mode 100644 index 0000000..dc2043e --- /dev/null +++ b/health/src/main/res/layout/layout_health_record_test.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/health/src/main/res/mipmap-xxhdpi/bg_health_record_test.png b/health/src/main/res/mipmap-xxhdpi/bg_health_record_test.png new file mode 100644 index 0000000..ae96604 Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/bg_health_record_test.png differ diff --git a/health/src/main/res/mipmap-xxhdpi/bg_person_body.png b/health/src/main/res/mipmap-xxhdpi/bg_person_body.png new file mode 100644 index 0000000..ae4d4c5 Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/bg_person_body.png differ diff --git a/health/src/main/res/mipmap-xxhdpi/icon_health_week_record.png b/health/src/main/res/mipmap-xxhdpi/icon_health_week_record.png new file mode 100644 index 0000000..e08462c Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/icon_health_week_record.png differ diff --git a/health/src/main/res/mipmap-xxhdpi/icon_inquiry_record.png b/health/src/main/res/mipmap-xxhdpi/icon_inquiry_record.png new file mode 100644 index 0000000..e13e04b Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/icon_inquiry_record.png differ diff --git a/health/src/main/res/mipmap-xxhdpi/icon_report_record.png b/health/src/main/res/mipmap-xxhdpi/icon_report_record.png new file mode 100644 index 0000000..dfab20a Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/icon_report_record.png differ diff --git a/health/src/main/res/mipmap-xxhdpi/icon_video_inquriy.png b/health/src/main/res/mipmap-xxhdpi/icon_video_inquriy.png new file mode 100644 index 0000000..d7ba063 Binary files /dev/null and b/health/src/main/res/mipmap-xxhdpi/icon_video_inquriy.png differ diff --git a/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt b/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt index 991f1ee..5c74318 100644 --- a/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt +++ b/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt @@ -23,6 +23,7 @@ import com.xty.common.bracelet.YCBBlueConnectHelper import com.xty.common.event.BlueToothConnectEvent import com.xty.common.event.MyInfoEvent import com.xty.common.event.ReChangeEvent +import com.xty.common.setImage import com.xty.common.util.PermissionUtils import com.xty.network.MyRetrofit import com.xty.network.model.SettingBean @@ -161,38 +162,26 @@ class DevInfoAct : BaseVmAct() { } mViewModel.deviceInfo.observe(this) { - - binding.mNickName.text = "设备名称:${it.data.watchName?:""}" - binding.mNum.text = "设备编码:${it.data.bluetooth?:""}" - binding.mCode.text = "物联网卡:${it.data.iccid?:""}" - binding.mActiveCode.text = "流量到期:${it.data.flowExpireTime?:""}" - binding.mActiveCode.visibility = View.VISIBLE - - setDevicePic(it.data.deviceType, binding.ivDevice) - } - } - - - private fun setDevicePic(type: String?, imageView: ImageView) { - if (type == null) { - return - } - when (type) { - "U32" -> { - imageView.setImageResource(R.mipmap.ic_watch_u32_big) + if(it.data.bindType == 1){ + binding.mNickName.text = "设备名称:${it.data.watchName?:""}" + binding.mNum.text = "设备编码:${it.data.bluetooth?:""}" + binding.mCode.text = "物联网卡:${it.data.iccid?:""}" + binding.mActiveCode.text = "流量到期:${it.data.flowExpireTime?:""}" + binding.mActiveCode.visibility = View.VISIBLE + binding.ivDevice.setImage(this,it.data.deviceImageUrl) + + }else{ + binding.mNickName.text = "设备名称:${it.data.watchName?:""}" + binding.mNum.text = "设备编码:${it.data.bluetooth?:""}" + binding.mCode.text = "设备激活码:${it.data.activationCode?:""}" + binding.mActiveCode.text = "设备激活码:${it.data.activationCode?:""}" + binding.mActiveCode.visibility = View.GONE + binding.tvRecharge.visibility = View.GONE + binding.tvDeviceSetting.visibility = View.GONE + binding.ivDevice.setImage(this,it.data.deviceImageUrl) } - "A3" -> { - imageView.setImageResource(R.mipmap.ic_watch_a3_big) - } - "X1" -> { - imageView.setImageResource(R.mipmap.ic_watch_x1_big) - } - - "X2" -> { - imageView.setImageResource(R.mipmap.ic_watch_x2_big) - } } } diff --git a/mine/src/main/java/com/zj365/mime/weight/FactorySettingDialog.kt b/mine/src/main/java/com/zj365/mime/weight/FactorySettingDialog.kt index 035926a..c60a5aa 100644 --- a/mine/src/main/java/com/zj365/mime/weight/FactorySettingDialog.kt +++ b/mine/src/main/java/com/zj365/mime/weight/FactorySettingDialog.kt @@ -25,4 +25,10 @@ class FactorySettingDialog(context: Context,var title:String,var confirm:()->Uni fun changeTextSetting() { binding.mTitle.gravity=Gravity.LEFT } + + fun isShow(){ + if (!isShowing) { + show() + } + } } \ No newline at end of file diff --git a/network/build.gradle b/network/build.gradle index cd010f9..f6bfc5d 100644 --- a/network/build.gradle +++ b/network/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' def androidId = rootProject.ext.defaultSetting def rely = rootProject.ext.relyOn @@ -39,6 +40,7 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + } dependencies { diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt index bb3da98..3d812fb 100644 --- a/network/src/main/java/com/xty/network/ApiInterface.kt +++ b/network/src/main/java/com/xty/network/ApiInterface.kt @@ -471,6 +471,9 @@ interface ApiInterface { @POST("customer/index") suspend fun getMainInfo(@Body rb: RequestBody): RespBody + @POST("customer/user/getDeviceFuncList") + suspend fun getDeviceFunctionList(@Body rb: RequestBody) :RespBody> + /** * 首页小贴士 */ @@ -903,6 +906,11 @@ interface ApiInterface { */ @GET("customer/analyse/coupeNew") suspend fun getScinceList(): RespBody> + /** + * 健康科普详情 + */ + @GET("customer/analyse/coupeDetail") + suspend fun getScinceDetail(@Query("id") id: String):RespBody /** * 获取首页布局 diff --git a/network/src/main/java/com/xty/network/model/DeviceBean.kt b/network/src/main/java/com/xty/network/model/DeviceBean.kt index 1d129ab..c1d2dad 100644 --- a/network/src/main/java/com/xty/network/model/DeviceBean.kt +++ b/network/src/main/java/com/xty/network/model/DeviceBean.kt @@ -1,3 +1,3 @@ package com.xty.network.model -data class DeviceBean(val imageUrl:String,val watchTypeName:String,val watchType:Int,val deviceType:String) +data class DeviceBean(val imageUrl:String,val watchTypeName:String,val watchType:Int,val deviceType:String,val bindType:Int) diff --git a/network/src/main/java/com/xty/network/model/DeviceFunctionBean.kt b/network/src/main/java/com/xty/network/model/DeviceFunctionBean.kt new file mode 100644 index 0000000..87546a0 --- /dev/null +++ b/network/src/main/java/com/xty/network/model/DeviceFunctionBean.kt @@ -0,0 +1,13 @@ +package com.xty.network.model + +import android.os.Parcelable +import kotlinx.android.parcel.Parcelize + + +@Parcelize +data class DeviceFunctionBean( + val name:String, //功能名 + val type:String, //功能类型 + val status:Int //0,无,1,有 + +): Parcelable diff --git a/network/src/main/java/com/xty/network/model/HealthMonitoringListBean.kt b/network/src/main/java/com/xty/network/model/HealthMonitoringListBean.kt index cc4d37d..13347f2 100644 --- a/network/src/main/java/com/xty/network/model/HealthMonitoringListBean.kt +++ b/network/src/main/java/com/xty/network/model/HealthMonitoringListBean.kt @@ -11,6 +11,7 @@ data class HealthMonitoringListBean( var buttonBg: Int, var buttonIcon: Int, var type: Int,//0.心率、1.血氧、2.呼吸率、3.体温、4.步数、5.睡眠、6.血压、7.血糖、8.心电、9.尿酸、10.血脂。 + var functionType:String, //功能code var sex: String = "",//性别1:男,2:女 var calorie: String? = "" ) \ No newline at end of file diff --git a/network/src/main/java/com/xty/network/model/UserEquipmentInformationizationBean.kt b/network/src/main/java/com/xty/network/model/UserEquipmentInformationizationBean.kt index b7ab7cf..7111a4f 100644 --- a/network/src/main/java/com/xty/network/model/UserEquipmentInformationizationBean.kt +++ b/network/src/main/java/com/xty/network/model/UserEquipmentInformationizationBean.kt @@ -15,6 +15,8 @@ data class UserEquipmentInformationizationBean( val power: String,//电量 val linkStatus: String,//连接状态 val iccid:String,//物联网卡 + val bindType:Int, //1,中健4G,2,鹏升4G + val deviceImageUrl:String,//手表图片 val flowExpireTime:String,//流量到期时间 val deviceTotal: DeviceTotal,//物联网设备统计 val adorn: Adorn,//佩戴时长对象 diff --git a/server/src/main/java/com/xty/server/act/ScienceDetailAct.kt b/server/src/main/java/com/xty/server/act/ScienceDetailAct.kt index af978cc..4054630 100644 --- a/server/src/main/java/com/xty/server/act/ScienceDetailAct.kt +++ b/server/src/main/java/com/xty/server/act/ScienceDetailAct.kt @@ -19,12 +19,19 @@ class ScienceDetailAct:BaseVmAct() { val binding by lazy{ActScienceDetailBinding.inflate(layoutInflater)} var bean: ScienceBean?=null var job: Job?=null + + var id:String? = null override fun setLayout()=binding.root override fun initData() { super.initData() isDarkBar=true intent.extras?.let { - bean=intent.extras!!.getSerializable("bean") as ScienceBean + if(it.containsKey("bean")){ + bean=intent.extras!!.getSerializable("bean") as ScienceBean + + }else if(it.containsKey("id")){ + id = it.getString("id") + } } } @@ -42,6 +49,10 @@ class ScienceDetailAct:BaseVmAct() { binding.mRich.loadDataWithBaseURL(null,bean!!.content,"text/html", "utf-8", null); } + + id?.let { + mViewModel.getDetailForId(it) + } } private fun startDelay() { @@ -59,5 +70,15 @@ class ScienceDetailAct:BaseVmAct() { } override fun liveObserver() { + + mViewModel.detailLiveData.observe(this){ + it.data.let { + binding.mTvSubTitle.text = it.name + binding.mTvOrgName.text = it.orgName + binding.mTvReleaseTime.text = it.time + WebViewOrigin().initWebSettings(this,binding.mRich) + binding.mRich.loadDataWithBaseURL(null,it.content,"text/html", "utf-8", null); + } + } } } \ No newline at end of file diff --git a/server/src/main/java/com/xty/server/vm/ScienceDetailVm.kt b/server/src/main/java/com/xty/server/vm/ScienceDetailVm.kt index 34cfbde..6269c5d 100644 --- a/server/src/main/java/com/xty/server/vm/ScienceDetailVm.kt +++ b/server/src/main/java/com/xty/server/vm/ScienceDetailVm.kt @@ -3,13 +3,26 @@ package com.xty.server.vm import androidx.lifecycle.MutableLiveData import com.xty.base.vm.BaseVm import com.xty.network.model.RespBody +import com.xty.network.model.ScienceBean +import org.json.JSONObject class ScienceDetailVm:BaseVm() { val anyLive by lazy{MutableLiveData>()} + + val detailLiveData by lazy { MutableLiveData>() } fun startSetScore(){ startHttp { var body=apiInterface().saveScore() body.getCodeStatus(anyLive,nowData) } } + + fun getDetailForId(id:String){ + + startHttp { + var body=apiInterface().getScinceDetail(id) + body.getCodeStatus(detailLiveData,nowData) + + } + } } \ No newline at end of file