diff --git a/app/build.gradle b/app/build.gradle index 4c6cdec..56cd926 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,9 +88,6 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } -/* kotlinOptions { - jvmTarget = '1.8' - }*/ viewBinding { enabled = true diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37a09cd..873166d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -129,6 +129,9 @@ android:name=".activity.InfoSimpleAct" android:launchMode="singleTop" android:screenOrientation="portrait" /> + (){ + + val binding by lazy { ActDataListBinding.inflate(layoutInflater) } + + val adapterSince by lazy { ScienceAdapter() } + + override fun initView() { + super.initView() + statusBar(binding.title.mView) + binding.title.mTvTitle.text ="健康科普" + binding.title.mIvBack.setOnClickListener { + finish() + } + } + + override fun initAdapter() { + binding.mRecycle.layoutManager = LinearLayoutManager(this) + binding.mRecycle.adapter = adapterSince + adapterSince.setOnItemClickListener { adapter, view, position -> + bundle.clear() + var bean = adapter.getItem(position) as ScienceBean + bundle.putSerializable("bean", bean) + onEventObject(this, UmengEventId.HealthScience, "${bean.name}") + RouteManager.goAct(ARouterUrl.SCIENCE_DETAIL, bundle) + + } + } + + override fun loadData() { + + mViewModel.getScinceList() + } + + override fun liveObserver() { + mViewModel.scinceLive.observe(this) { + adapterSince.setNewInstance(it.data) + } + } + + override fun setLayout() = binding.root +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/activity/InfoSimpleAct.kt b/app/src/main/java/com/zj365/dc/activity/InfoSimpleAct.kt index 57a937c..a324411 100644 --- a/app/src/main/java/com/zj365/dc/activity/InfoSimpleAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/InfoSimpleAct.kt @@ -85,51 +85,24 @@ class InfoSimpleAct : BaseVmAct() { binding.title.mTvTitle.text = getString(R.string.base_info) binding.title.mIvBack.setOnClickListener { finish() } binding.mImage.setOnClickListener { PictureUtils.openCamera(this) } -// val calendaryear = Calendar.getInstance() -// calendaryear.add(Calendar.YEAR, -14) timeSelect.startDate.set(1922, 0, 1) -// timeSelect.endDate = calendaryear binding.llBirthday.setOnClickListener { RxKeyboardTool.hideSoftInput(this) timeSelect.selectTime(binding.mBirthday) } sexType = if (binding.checkSex.isChecked) 2 else 1 birthdayType = if (binding.checkBirthday.isChecked) 2 else 1 -// binding.mRadio.setOnCheckedChangeListener { group, checkedId -> -// when(checkedId){ -// R.id.mRadio1->birthdayType=1 -// R.id.mRadio2->birthdayType=2 -// -// } -// } binding.bindingTv.setOnClickListener { isBinding = true -// dialogChooseDevice.show() turnToSaveBaseData() } -// binding.mGroup.setOnCheckedChangeListener { group, checkedId -> -// when(checkedId){ -// R.id.mMale->sexType=1 -// R.id.mGirl->sexType=2 -// } -// } binding.mName.addTextChangedListener(textListener) binding.mSubmit.setOnClickListener { isBinding = false turnToSaveBaseData() - //跳转注册 -// var bean =SimpleInfoBean() -// if( binding.mImage.tag!=null){ -// bean.avatar= binding.mImage.tag.toString() -// } -// bean.name=name -// bean.sex=sexType -// bundle.clear() -// bundle.putSerializable("bean",bean) -// RouteManager.goActRequest(ARouterUrl.REGIST_ACT,this,1000,bundle) } } @@ -140,11 +113,6 @@ class InfoSimpleAct : BaseVmAct() { val birthDay = binding.mBirthday.text.toString().trim() val name = binding.mName.text.toString().trim() -// if (name.isEmpty()) { -// isBinding = false -// ToastUtils.show(R.string.please_input_name) -// return -// } if (TimeUtils.getAgeByBirth(birthDay) < 14) { CommonToastUtils.showToast("需要年满14岁才可使用") isBinding = false diff --git a/app/src/main/java/com/zj365/dc/activity/LoginAct.kt b/app/src/main/java/com/zj365/dc/activity/LoginAct.kt index fff069f..af5126c 100644 --- a/app/src/main/java/com/zj365/dc/activity/LoginAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/LoginAct.kt @@ -21,11 +21,13 @@ import com.xty.base.dialog.AppUpdateDialog import com.xty.common.* import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager +import com.xty.common.event.LoginOrRegisterEvent import com.xty.common.event.WxLoginEvent import com.xty.common.util.CommonToastUtils import com.xty.network.model.WxInfoBean import com.zj365.dc.databinding.ActLoginBinding import com.zj365.dc.vm.LoginVm +import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.util.* @@ -230,20 +232,6 @@ class LoginAct : BaseVmAct() { } }) - - /*binding.mTvPswLogin.isSelected = true - binding.mTvPswLogin.setOnClickListener { - binding.mTvCodeLogin.isSelected = false - it.isSelected = true - - } - binding.mTvCodeLogin.setOnClickListener { - binding.mTvPswLogin.isSelected = false - it.isSelected = true - binding.mRelPwd.visibility = View.GONE - binding.mRelCode.visibility = View.VISIBLE - getNowLoginStatus() - }*/ } //添加监听 @@ -277,19 +265,22 @@ class LoginAct : BaseVmAct() { override fun liveObserver() { mViewModel.mLogin.observe(this) { loadingView.dismiss() - initTab() - mViewModel.getImUserSig("user_${it.data.id}") + // initTab() +// mViewModel.getImUserSig("user_${it.data.id}") + // RouteManager.goAct(ARouterUrl.MAIN_ACT) + EventBus.getDefault().post(LoginOrRegisterEvent()) + finish() } // mViewModel.loginWx.observe(this) { // loadingView.dismiss() // initTab() // mViewModel.getImUserSig("user_${it.data}") // } - mViewModel.setLoginWxId.observe(this) { + /* mViewModel.setLoginWxId.observe(this) { loadingView.dismiss() initTab() mViewModel.getImUserSig("user_${it}") - } + }*/ mViewModel.getImUserSig.observe(this) { Log.e("simon", "login"+it.data) TUILogin.login( diff --git a/app/src/main/java/com/zj365/dc/activity/RegisterAct.kt b/app/src/main/java/com/zj365/dc/activity/RegisterAct.kt index 10b9891..8aa1c31 100644 --- a/app/src/main/java/com/zj365/dc/activity/RegisterAct.kt +++ b/app/src/main/java/com/zj365/dc/activity/RegisterAct.kt @@ -12,6 +12,7 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.MutableLiveData 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.tencent.qcloud.tuikit.tuichat.util.PermissionHelper import com.xty.base.act.BaseVmAct @@ -21,6 +22,7 @@ import com.xty.common.MyLinkedMovementMethod import com.xty.common.TimeSelect import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager +import com.xty.common.event.LoginOrRegisterEvent import com.xty.common.util.CommonToastUtils import com.xty.common.xqr_code.XQRCodeAct @@ -29,6 +31,7 @@ import com.zj365.dc.R import com.zj365.dc.databinding.ActRegisterBinding import com.zj365.dc.model.SimpleInfoBean import com.zj365.dc.vm.RegisterVm +import org.greenrobot.eventbus.EventBus import java.util.* /** @@ -99,8 +102,6 @@ class RegisterAct : BaseVmAct() { CommonToastUtils.showToast(R.string.please_agree_all) return@setOnClickListener } - var organCode = "" - var invitePhone = "" val phone = binding.mAccount.text.toString().trim() val code = binding.mCode.text.toString().trim() @@ -108,22 +109,10 @@ class RegisterAct : BaseVmAct() { mViewModel.register( phone, code, - pwd, - null, - null, - bean, - invitePhone + pwd ) } binding.mPrivate.setOnClickListener { - if (!isAgreement) { - CommonToastUtils.showToast(R.string.please_agree_user) - return@setOnClickListener - } - if (!isPrivacy) { - CommonToastUtils.showToast(R.string.please_agree_prv) - return@setOnClickListener - } it.isSelected = !it.isSelected } setPrv() @@ -195,15 +184,13 @@ class RegisterAct : BaseVmAct() { override fun liveObserver() { mViewModel.registerVm.observe(this) { CommonToastUtils.showSucceedToast("注册成功") + if (timer != null) { + timer!!.cancel() + timer = null + } + mViewModel.login(binding.mAccount.text.toString().trim(),binding.mPsw.text.toString().trim()) + RxActivityTool.finishActivity(LoginAct::class.java) - setResult(RESULT_OK) - finish() - val phone = binding.mAccount.text.toString().trim() - val password = binding.mPsw.text.toString().trim() - bundle.clear() - bundle.putString("phone", phone) - bundle.putString("password", password) - RouteManager.goAct(ARouterUrl.INFO_SIMPLE, bundle) } mViewModel.codeLive.observe(this) { timeStart() @@ -212,6 +199,15 @@ class RegisterAct : BaseVmAct() { isSelected = false } } + + mViewModel.mLogin.observe(this){ +4 + RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE) + EventBus.getDefault().post(LoginOrRegisterEvent()) + this@RegisterAct.finish() + + } + timeLive.observe(this) { --timeNow if (timeNow > 0) { @@ -260,30 +256,7 @@ class RegisterAct : BaseVmAct() { } } - 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() - //设置扫描结果 - binding.jigouId.setText(result) - } else { - CommonToastUtils.showToast("扫码失败,请重试...") - } - } catch (e: Exception) { - LogUtils.e("二维码扫描:$e") - CommonToastUtils.showToast("请确认二维码是否正确!") - } - } - - XQRCode.RESULT_FAILED -> { - LogUtils.d("扫描失败") - - } - }*/ + XQRCodeAct.QRCODE_AGREEMENT -> { } } } @@ -321,10 +294,21 @@ class RegisterAct : BaseVmAct() { } } + override fun onStop() { + super.onStop() + LogUtils.e("RegisterAct","onStop ${timer}") + if (timer != null) { + timer!!.cancel() + } + } + override fun onDestroy() { super.onDestroy() + LogUtils.e("RegisterAct","onDestroy ${timer}") + if (timer != null) { timer!!.cancel() + timer = null } } } \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/HomeContentLayoutAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/HomeContentLayoutAdapter.kt new file mode 100644 index 0000000..3527a88 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/HomeContentLayoutAdapter.kt @@ -0,0 +1,17 @@ +package com.zj365.dc.adapter + +import android.content.Context +import android.widget.ImageView +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.base.adapter.BaseAdapter +import com.xty.common.setImage +import com.xty.network.model.HomeLayoutBean +import com.zj365.dc.R + +class HomeContentLayoutAdapter (context: Context) + : BaseAdapter(R.layout.item_home_content_layout){ + override fun convert(holder: BaseViewHolder, item: HomeLayoutBean.HomeChildBean) { + holder.getView(R.id.img_content).setImage(context,item.imageUrl) + holder.setText(R.id.tv_content,item.name) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/adapter/HomeTopLayoutAdapter.kt b/app/src/main/java/com/zj365/dc/adapter/HomeTopLayoutAdapter.kt new file mode 100644 index 0000000..9c38f78 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/adapter/HomeTopLayoutAdapter.kt @@ -0,0 +1,29 @@ +package com.zj365.dc.adapter + +import android.content.Context +import android.util.DisplayMetrics +import android.view.LayoutInflater +import android.view.WindowManager +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.LinearLayoutManager +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.xty.base.adapter.BaseAdapter +import com.xty.common.LogUtils +import com.xty.common.setImage +import com.xty.network.model.HomeLayoutBean +import com.zj365.dc.R + +class HomeTopLayoutAdapter(var mContext: Context): BaseAdapter(R.layout.item_home_top_layout){ + override fun convert(holder: BaseViewHolder, item: HomeLayoutBean.HomeChildBean) { + + var screenWidth = context.resources.displayMetrics.widthPixels + val layoutParam = holder.getView(R.id.root).layoutParams + layoutParam.width = screenWidth /4 + holder.getView(R.id.root).layoutParams = layoutParam + + holder.getView(R.id.img_top).setImage(context,item.imageUrl) + holder.setText(R.id.tv_top_name,item.name) + } + +} \ No newline at end of file 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 f357bc9..c84cbf7 100644 --- a/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/DynamicManagementFrag.kt @@ -38,6 +38,8 @@ import com.xty.common.event.BlueToothConnectEvent import com.xty.common.event.ChangeFamilyEvent import com.xty.common.event.FamilyEvent import com.xty.common.event.Health24HourStatusEvent +import com.xty.common.event.LoginOrRegisterEvent +import com.xty.common.event.LoginOutEvent import com.xty.common.event.MyInfoEvent import com.xty.common.event.WorkManagerEvent import com.xty.common.marqueen.SimpleMF @@ -1829,4 +1831,14 @@ class DynamicManagementFrag : BaseVmFrag() { super.onDestroy() tenJob?.cancel() } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun LoginOrRegisterChange(event: LoginOrRegisterEvent){ + request() + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun loginOutChange(event: LoginOutEvent){ + + } } \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/fragment/HealthCustomFrag.kt b/app/src/main/java/com/zj365/dc/fragment/HealthCustomFrag.kt deleted file mode 100644 index 8b0c265..0000000 --- a/app/src/main/java/com/zj365/dc/fragment/HealthCustomFrag.kt +++ /dev/null @@ -1,2077 +0,0 @@ -/* -package com.zj365.dc.fragment - -import android.app.Activity.RESULT_OK -import android.content.Intent -import android.graphics.Typeface -import android.graphics.drawable.Drawable -import android.graphics.drawable.GradientDrawable -import android.os.Build -import android.provider.Settings -import android.text.Spannable -import android.text.SpannableString -import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.core.view.ViewCompat -import androidx.lifecycle.MutableLiveData -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import cn.jpush.android.api.JPushInterface -import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack -import com.tamsiree.rxkit.RxTimeTool -import com.xty.base.fragment.BaseVmFrag -import com.xty.base.utils.UserInfoDefin -import com.xty.common.* -import com.xty.common.app.MyApp -import com.xty.common.arouter.ARouterUrl -import com.xty.common.arouter.RouteManager -import com.xty.common.bracelet.* -import com.xty.common.event.* -import com.xty.common.marqueen.SimpleMF -import com.xty.common.services.MqTTService -import com.xty.common.util.CommonToastUtils -import com.xty.common.util.CommonUtils -import com.xty.common.weight.CenterImageSpan -import com.xty.common.work.MyWorkManger -import com.zj365.mime.weight.NoticeSettingDialog -import com.xty.network.MyRetrofit -import com.xty.network.model.* -import com.youth.banner.indicator.RoundLinesIndicator -import com.youth.banner.listener.OnPageChangeListener -import com.zj365.dc.databinding.FragHealthBinding -import com.zj365.dc.vm.HealthVm -import com.zj365.dc.weight.AgainSignDialog -import com.zj365.health.adapter.FamilyAdapter -import com.zj365.health.weight.DialogTip -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode -import org.json.JSONArray -import org.json.JSONObject -import java.text.SimpleDateFormat -import kotlin.math.max -import kotlin.math.min - -*/ -/** - * 健康 - -*//* - - -class HealthCustomFrag : BaseVmFrag() { - val binding by lazy { FragHealthBinding.inflate(layoutInflater) } - - //重签名 - private val signDialog by lazy { - AgainSignDialog(requireContext(), { - RouteManager.goAct(ARouterUrl.LOGIN_ACT) - requireActivity().finish() - - }) { - RouteManager.goAct(ARouterUrl.AGAIN_SIGN) - } - } - var canGoto24Healthresult: Boolean = true - - //家人列表适配器 - private val mFamilyAdapter by lazy { FamilyAdapter() } - - private val mHealthAdapter by lazy { HealthAdapter(requireContext()) } - - private val mBannerAdapter by lazy { BannerCustomAdapter(requireContext()) } - - private var showIdInfo = "" //需要显示的信息的id - override fun setViewModel() = HealthVm() - -*/ -/**----------------*//* - - - val tenLive by lazy { MutableLiveData() } - var tenJob: Job? = null - - val getDeviceInfoLive by lazy { MutableLiveData() } - var getDeviceInfoJob: Job? = null - var isRefresh = true - - var reportBean: ReportBean? = null//24小时日报数据 - - private val dialogBind by lazy { - DialogTip(requireContext(), "需绑定安瑜健康手表,才能查看","去绑定") { - RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) - } - } - - override fun setLayout(): View = binding.root - override fun initView() { - super.initView() - - statusBar(binding.statusBar) - val wic = - ViewCompat.getWindowInsetsController(requireActivity().window.decorView) - - if (wic != null) { - // true表示Light Mode,状态栏字体呈黑色,反之呈白色 - wic.setAppearanceLightStatusBars(false); - } - initFamilyAdapter() - request() - refresh() - - binding.mBanner.addBannerLifecycleObserver(this) - .setAdapter(mBannerAdapter) - .setIndicator(RoundLinesIndicator(context)) - .setIndicatorSelectedWidth(dp2px(15)) - .addOnPageChangeListener(onPageChangeListener) - - mBannerAdapter.setOnBannerListener { data, position -> - var bannerBean = data as BannerBean - onEventObject( - requireContext(), - UmengEventId.Banner, - "type:${bannerBean.bannerType}; 标题:${bannerBean.title}" - ) - when (bannerBean.bannerType) { - 1 -> {//图片 - - } - - 5 -> { //内部跳转 - bundle.clear() - bundle.putString("title", bannerBean.title) - bundle.putString("url", bannerBean.linkAddress) - RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) - } - - 10 -> {//web 跳转 - bundle.clear() - bundle.putString("title", bannerBean.title) - bundle.putString("url", bannerBean.linkAddress) - RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) - } -// 15 -> {//视频(如果是视频的话收不到该事件) -// if (binding.mBanner.adapter.viewHolder imCards VideoHolder) { -// val holder = binding.mBanner.adapter.viewHolder as VideoHolder -// var player = holder.player -// player.onPrepared() -// } -// } - } - } - - binding.mOrganView.mGridView.adapter = mHealthAdapter - binding.mOrganView.mGridView.setOnItemClickListener { parent, view, position, id -> - onEventObject(requireContext(), UmengEventId.HealthMonitor, pageNames[position]) - when (val index = pageIndexs[position]) { - 6 -> { //血糖 - mHealthAdapter.xtangInfo?.apply { -// if (model == 0) { -// bundle.clear() -// bundle.putBoolean("isOpen", false) -// if (showIdInfo.isNullOrEmpty()) {//给自己开通 -// bundle.putString("id", CommonUtils.getMyUserId()) -// } else {//给他人开通 -// bundle.putString("id", showIdInfo) -// } -// -// RouteManager.goAct(ARouterUrl.XT_OPEN, bundle) -// } else { -// goPage(index) -// } - goPage(index) - } - } - 7 -> {//心电 - if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表 - CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~") - } else { - if (showIdInfo.isEmpty()) { - goPage(index) - } else { - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.XD_HISTORY, bundle) - } - } - } - -1 -> {//步数 - - mViewModel.allData.value?.apply { -// if (data.adorn.wearCount <= 3) { -// ToastUtils.show("尊敬的用户您好,您正处于3天建模期,请坚持佩戴") -// return@setOnItemClickListener -// } - bundle.clear() - bundle.putInt("status", data.adorn.health + 1) - bundle.putInt("type", 1) - if (showIdInfo.isNullOrEmpty()) { - bundle.putString("userId", CommonUtils.getMyUserId()) - } else showIdInfo?.let { - bundle.putString("userId", it) - } - RouteManager.goAct(ARouterUrl.RANK_LIST, bundle) - } - } - else -> { - goPage(index) - } - } - } - - setOnClickListener() - updateWarningStatus() - - } - - private fun updateWarningStatus() { - val position = mFamilyAdapter.position - if (position == 0 || position == -1) { - if (notifyStatus == 0) { - //未读 - binding.mCom.llWarning.visibility = View.VISIBLE - } else { - //已读 - binding.mCom.llWarning.visibility = View.GONE - } - } else { - binding.mCom.llWarning.visibility = View.GONE - } - } - -*/ -/** - * - * -1:步数 0:心率 1:血氧 2:呼吸率 3:体温 4:睡眠 5:血压 6:血糖 7:心电|血脂*//* - - - - private val pageIndexs = arrayOf( - 0, 1, 2, 3, -1, 4, 5, 6, 7 - ) - - private val pageNames = arrayOf( - "心率", "血氧", "呼吸率", "体温", "步数", "睡眠", "血压", "血糖", "心电|血脂" - ) - - private var onPageChangeListener = object : OnPageChangeListener { - override fun onPageScrolled( - position: Int, - positionOffset: Float, - positionOffsetPixels: Int - ) { - } - - override fun onPageSelected(position: Int) { - var viewHolder = binding.mBanner.adapter.viewHolder - if (viewHolder is VideoHolder) { - var player = viewHolder.player - player.setVideoAllCallBack(object : VideoAllCallBack { - override fun onStartPrepared(url: String?, vararg objects: Any?) { - } - - override fun onPrepared(url: String?, vararg objects: Any?) { - } - - override fun onClickStartIcon(url: String?, vararg objects: Any?) { - binding.mBanner.stop() - binding.mBanner.isAutoLoop(false) - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - } - - override fun onClickStop(url: String?, vararg objects: Any?) { - } - - override fun onClickStopFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onClickResume(url: String?, vararg objects: Any?) { - } - - override fun onClickResumeFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - override fun onClickSeekbar(url: String?, vararg objects: Any?) { - } - - override fun onClickSeekbarFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - override fun onAutoComplete(url: String?, vararg objects: Any?) { - println("Test----------onAutoComplete url:$url;objects$objects") - binding.mBanner.isAutoLoop(true) - binding.mBanner.start() - } - - override fun onEnterFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onQuitFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onQuitSmallWidget(url: String?, vararg objects: Any?) { - } - - override fun onEnterSmallWidget(url: String?, vararg objects: Any?) { - } - - override fun onTouchScreenSeekVolume( - url: String?, - vararg objects: Any? - ) { - } - - override fun onTouchScreenSeekPosition( - url: String?, - vararg objects: Any? - ) { - } - - override fun onTouchScreenSeekLight( - url: String?, - vararg objects: Any? - ) { - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - } - - override fun onClickStartThumb(url: String?, vararg objects: Any?) { - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - } - - override fun onClickBlankFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - }) - } - } - - override fun onPageScrollStateChanged(state: Int) { - } - } - - private fun setOnClickListener() { - binding.mOrganView.mSub.setOnClickListener(onClickListener) - binding.mChildView.mGuide1.setOnClickListener(onClickListener) - binding.mChildView.mGuide2.setOnClickListener(onClickListener) - binding.mChildView.mReport.setOnClickListener(onClickListener) -// binding.mChildView.mWarn1.setOnClickListener(onClickListener) -// binding.mChildView.mWarn2.setOnClickListener(onClickListener) -// binding.mCom.mCard.setOnClickListener(onClickListener) - binding.mChildView.mRelInterDk.setOnClickListener(onClickListener) - binding.mChildView.mRelInterBD.setOnClickListener(onClickListener) - binding.mChildView.mRelInterFamily.setOnClickListener(onClickListener) - binding.mCom.mWearManager.setOnClickListener(onClickListener) - binding.mCom.mBtnBind.setOnClickListener(onClickListener) - binding.mCom.mMsg.setOnClickListener(onClickListener) - binding.mCom.mMsgLayout.setOnClickListener(onClickListener) - } - - - private var onClickListener = View.OnClickListener { - when (it.id) { - R.id.mSub -> {//健康监测 - goPage(0) - } - //设备连接 - R.id.mWearManager -> { - if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表 - RouteManager.goAct(ARouterUrl.WEAR_MANAGER) - } else if (YCBBlueConnectHelper.getBlueStatus(false)) {//蓝牙手表并已经连接 - RouteManager.goAct(ARouterUrl.DEVICE_SETTING) - } else { - if (blueTooth()) { - bundle.clear() - bundle.putBoolean("isBind", true) - bundle.putString("devMac", CommonUtils.getBlueToothMac()) - RouteManager.goAct(ARouterUrl.DEVICE_CONNECT, bundle) - } else { - dialogBind.show() - } - } - } - //消息 - R.id.mMsg, R.id.mMsgLayout -> { - RouteManager.goAct(ARouterUrl.WARNING_MSG) - } - //我的家人 - R.id.mRelInterFamily -> { - onEventObject(requireContext(), UmengEventId.MyFamily, "首页") - if (isBind()) { - RouteManager.goAct(ARouterUrl.FAMILY) - } else { - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } - //榜单 - R.id.mRelInterBD -> { - mViewModel.allData.value?.apply { - - if (data.adorn.activeWear <= 3) { - CommonToastUtils.showToast("尊敬的用户您好,您正处于3天建模期,请坚持佩戴") - return@OnClickListener - } - onEventObject(requireContext(), UmengEventId.HealthRank) - bundle.clear() - bundle.putInt("status", data.adorn.health + 1) - bundle.putInt("type", 0) - RouteManager.goAct(ARouterUrl.RANK_LIST, bundle) - } - - } - //打卡 - R.id.mRelInterDk -> { - CommonUtils.getMyUserInfo()?.apply { - onEventObject(requireContext(), UmengEventId.HealthDk) - bundle.clear() - bundle.putSerializable("user", this) - RouteManager.goAct(ARouterUrl.DK_ACT, bundle) - } - } - //评估 - R.id.mCard -> { - if (!canGoto24Healthresult) { - CommonToastUtils.showToast("数据不足或数据建模中,无法查看健康评估") - return@OnClickListener - } - CommonUtils.getMyUserInfo()?.apply { - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putString( - "openId", - if (openId.isNullOrEmpty()) "" else openId - ) - bundle.putSerializable("reportBean", reportBean) - RouteManager.goAct(ARouterUrl.HEALTH_24HOUR_REPORT, bundle)//新24小时 -// RouteManager.goAct(ARouterUrl.HEALTH_STATUS, bundle)//旧版健康分析改24小时分析接口调用 - } - - } - //问卷 -// R.id.mWarn2 -> { -// onEventObject(requireContext(), UmengEventId.HealthRisk) -// bundle.clear() -// bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.SUBMIT_REPORT, bundle) -// } -// //预警 -// R.id.mWarn1 -> { -// mViewModel.allData.value?.apply { -// data.apply { -// if (adorn.wearCount > 29 && adorn.activeWear > 14) { -// onEventObject(requireContext(), UmengEventId.Health30Day) -// bundle.clear() -// bundle.putString("id", showIdInfo) -// bundle.putInt("page", 1) -// RouteManager.goAct(ARouterUrl.WARRING, bundle) -// } else { -// if (showIdInfo.isEmpty()) { -// onEventObject( -// requireContext(), -// UmengEventId.Health30Day, -// "佩戴未满30天或活跃天数未满15天。" -// ) -// ToastUtils.show("尊敬的用户您好,该功能需要佩戴30天且活跃佩戴15天查看,请坚持佩戴且每日同步数据!") -// } else { -// onEventObject( -// requireContext(), -// UmengEventId.Health30Day, -// "关联用户处于7天建模中!" -// ) -// ToastUtils.show("您关联的用户正处于7天建模中……") -// } -// } -// } -// } -// } - //健康日报 - R.id.mReport -> { - onEventObject(requireContext(), UmengEventId.HealthReport, "首页") - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.HEALTH_REPORT, bundle) - } - //健康管家 - R.id.mGuide2 -> { - if (showIdInfo.isNullOrEmpty()) { - if (isBind()) { - onEventObject(requireContext(), UmengEventId.HealthAdmin) - CommonUtils.getMyUserInfo()?.apply { - bundle.clear() - bundle.putString("fromUserId", id.toString()) - RouteManager.goAct(ARouterUrl.HOUSE_KEEPER, bundle) - } - - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "未绑定点击") - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "关注家人点击") - CommonToastUtils.showToast("不支持上传家人健康信息") - } - } - //健康方案 - R.id.mGuide_1 -> { -// Const.mainLiveData.value?.apply { -// bundle.clear() -// bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.HEALTH_PROP, bundle) -// } - onEventObject(requireContext(), UmengEventId.HealthProgrammes, "首页") - RouteManager.goAct(ARouterUrl.MY_PROG) - } - //绑定 - R.id.mBtnBind -> { - dialogBind.show() - } - } - } - - -*/ -/** - * 设置设备信息*//* - - - - private fun setDeviceInfo(deviceInfo: DeviceInfoBean?) { - if (null != deviceInfo) { - if (blueTooth()) { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } else { - binding.mCom.mWatchType.text = getString(R.string.lite_4g) - val drawable = getDrawable(R.mipmap.ic_watch_4g) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mBindState.visibility = View.VISIBLE - if (deviceInfo.bindState) {//已绑定 - binding.mCom.mBindState.apply { - text = "已绑定" - background = null - val drawable = getDrawable(R.mipmap.ic_bind) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - - when (deviceInfo.connectState) { - YCBBlueConnectHelper.BLEConnectState.Connected -> {//已连接 - binding.mCom.mConnectStatu.apply { - text = deviceInfo.battery - var drawable: Drawable = getDrawable(R.mipmap.ic_battery) -// if (!deviceInfo.battery.isNullOrEmpty()) { -// val str = deviceInfo.battery.substring(2, deviceInfo.battery.length - 1) -// val pattern: Pattern = Pattern.compile("[0-9]*") -// val isNum: Matcher = pattern.matcher(str) -// if (isNum.matches()) { -// val battery = str.toInt() -// drawable = if (battery > 90) { -// getDrawable(R.mipmap.ic_battery) -// } else if (battery > 70) { -// getDrawable(R.mipmap.ic_battery_90) -// } else if (battery > 50) { -// getDrawable(R.mipmap.ic_battery_70) -// } else if (battery > 30) { -// getDrawable(R.mipmap.ic_battery_50) -// } else if (battery > 10) { -// getDrawable(R.mipmap.ic_battery_30) -// } else { -// getDrawable(R.mipmap.ic_battery_10) -// } -// } -// } - drawable!!.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - YCBBlueConnectHelper.BLEConnectState.Connecting -> {//连接中 - binding.mCom.mConnectStatu.apply { - text = "连接中..." - setCompoundDrawables(null, null, null, null) - } - } - YCBBlueConnectHelper.BLEConnectState.DisConnect -> {//未连接 - binding.mCom.mConnectStatu.apply { - text = "未连接" - val drawable = getDrawable(R.mipmap.ic_not_connect) - drawable!!.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - } - - binding.mCom.mConnectStatu.visibility = View.VISIBLE - } else { - binding.mCom.mBindState.apply { - text = "未绑定" - val drawable = getDrawable(R.mipmap.ic_unbind) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mConnectStatu.visibility = View.GONE - } - } else { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - binding.mCom.mBindState.visibility = View.GONE - binding.mCom.mConnectStatu.visibility = View.GONE - } - } - - -*/ -/** - * 设置天气信息*//* - - - - private fun setWeatherInfo(weather: MainBean.Weather?) { -// if (null == weather) { -// binding.mCom.tvLocationWeather.visibility = View.GONE -// } else { -// weather.apply { -// if (city.isNullOrEmpty() || weatherNo.isNullOrEmpty()) { -// binding.mCom.tvLocationWeather.visibility = View.GONE -// return -// } -// binding.mCom.tvLocationWeather.text = "${city} ${weatherInfo}" -// var icon = when (weatherNo) { -// "32" -> {//晴天 -// R.mipmap.weather_sunny -// } -// "44" -> {//多云 -// R.mipmap.weather_cloudy -// } -// "20" -> {//阴天 -// R.mipmap.weather_yin -// } -// "12" -> {//雨天 -// R.mipmap.weather_rain -// } -// "45" -> {//雷阵雨 -// R.mipmap.weather_thunder_shower -// } -// "16" -> {//雪 -// R.mipmap.weather_snow -// } -// else -> { -// R.mipmap.weather_sunny -// } -// } -// val drawable = getDrawable(icon) -// drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) -// binding.mCom.tvLocationWeather.setCompoundDrawables(null, null, drawable, null) -// binding.mCom.tvLocationWeather.visibility = View.VISIBLE -// } -// } - } - -*/ -/** - * 设置设备信息*//* - - - - private fun setBindDeviceInfo(deviceInfo: MainBean.DeviceTotal?) { - deviceInfo?.let { - binding.mChildView.tvXueyaNum.text = "已绑定" + it.sphygmomanometer + "台" - binding.mChildView.tvXuetangNum.text = "已绑定" + it.bloodGlucose + "台" - } - binding.mChildView.llXueya.setOnClickListener { - //已绑定血压列表 - RouteManager.goAct(ARouterUrl.XUEYAJI_BIND_LIST, null) - } - binding.mChildView.llXuetang.setOnClickListener { - //已绑定血糖列表 - RouteManager.goAct(ARouterUrl.XUETANGYI_BIND_LIST, null) - } - } - - // 刷新注册 - private fun refresh() { - refresh.setRefresh(binding.mRefresh) { - getXtInfo(showIdInfo) - get24HourReportInfo(showIdInfo) - request() - uploadWhatchData() - } - } - - private fun request() { - mViewModel.getBanners(CommonUtils.getMyUserId())//当期登录用户id - - mViewModel.getAllInfo(showIdInfo,false) - mViewModel.getDkInfo(false, showIdInfo) - - mViewModel.getMySetting() - mViewModel.getMyFamilyList() - mViewModel.getTips() - mViewModel.getRank(2) - } - - - //蓝牙连接状态之后 数据上传 - private fun getConnectStatus() { - LogUtils.d("getConnectStatus!") - if (YCBBlueConnectHelper.getBlueStatus(false)) { - LogUtils.d("start get DeviceInfo!") - - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 -// binding.mCom.visibility = View.GONE -// binding.mEle.visibility = View.VISIBLE -// binding.mEle.text = value - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - value - ) - ) - - uploadWhatchData() - - mViewModel.settingLive.value?.let { - MyWorkManger.setMyWork( - MyApp.instance!!, - it.data.user.bluetooth - ) //开启后台定时上传任务 - } - - } else {//如果获取手表信息失败,断开连接以后让用户手动连接 - YCBBlueConnectHelper.disconnect() - initBlueToothStatu() - } - } - } - } else { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 - initBlueToothStatu() - } - } - - private fun blueTooth(): Boolean { - -// CommonUtils.getBlueToothMac()?.let { -// if (!it.isNullOrEmpty()) { -// return true -// } -// } - return CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type)) && !CommonUtils.getBlueToothMac() - .isNullOrEmpty() - } - - -*/ -/** - * 是否绑定了设备*//* - - - - private fun isBind(): Boolean { - return true - Const.mainLiveData?.value?.let { - if(!it.user.bluetooth.isNullOrEmpty()){ - return true - } - } - return false - - } - - - //界面跳转 - fun goPage(page: Int) { - if (isBind()) { - bundle.clear() - bundle.putInt("page", page) - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.HEALTHMAIN, bundle) - } else { - CommonToastUtils.showToast(R.string.please_bind_device) - } - } - - private fun setTips(datas: List) { -// val datas: List = listOf( -// "《赋得古原草送别》", -// "离离原上草,一岁一枯荣。", -// "野火烧不尽,春风吹又生。", -// "远芳侵古道,晴翠接荒城。", -// "又送王孙去,萋萋满别情。" -// ) - val marqueeFactory: SimpleMF = SimpleMF(context) - marqueeFactory.data = datas - binding.mCom.simpleMarqueeView.setMarqueeFactory(marqueeFactory) - binding.mCom.simpleMarqueeView.setDrawable( - getDrawable(R.mipmap.icon_tips), - null, - null, - null - ) - if (binding.mCom.simpleMarqueeView.isFlipping) { - binding.mCom.simpleMarqueeView.stopFlipping() - } -// binding.mCom.simpleMarqueeView.flipInterval = 3 * 1000//轮播间隔时间 - binding.mCom.simpleMarqueeView.startFlipping() - } - - private fun updateBadgeNum(num: Int) { - if (num > 0) { - var badgeText = if (num > 99) "99+" else "$num" - binding.mCom.mBadge.text = badgeText - binding.mCom.mBadge.post { - val layoutParams = binding.mCom.mBadge.layoutParams as ViewGroup.LayoutParams - val text = binding.mCom.mBadge.text.toString() - binding.mCom.mBadgeCard.radius = binding.mCom.mBadge.height / 2f - var textWidth = binding.mCom.mBadge.paint.measureText(text) - if (binding.mCom.mBadge.height >= textWidth) { //等宽高的圆形 - layoutParams.width = binding.mCom.mBadge.height - - } else { //宽高不等 将宽度两边加10 - layoutParams.width = textWidth.toInt() + 20 - } - binding.mCom.mBadge.layoutParams = layoutParams - } - binding.mCom.mBadgeCard.visibility = View.VISIBLE - } else { - binding.mCom.mBadgeCard.visibility = View.GONE - } - } - - override fun onResume() { - super.onResume() - mViewModel.getWarningMsg() - } - - override fun observer() { - - //预警消息 - mViewModel.warningMsgLive.observe(this) { - updateBadgeNum(it.data.noReadNum) - val systemMessage = it.data.systemMessage - if (systemMessage != null && systemMessage.isNotEmpty()) { - val sysMsg = systemMessage[0] - updateWarningInfo(sysMsg) - } else { - updateWarningInfo(null) - } - } - - //首页轮播图 - mViewModel.bannerLive.observe(this) { - if (null == it) { - return@observe - } - - mBannerAdapter.setDatas(it.data) - mBannerAdapter.notifyDataSetChanged() - } - - //手表信息组装上传 - mViewModel.allDataInfo.observe(this) { - - if (null == it || it["data"] == null || it["data"] !is ArrayList<*>) { - LogUtils.d("手表数据:暂时无数据...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 - get24HourReportInfo(showIdInfo)//如果手表没数据也需要获取24小时日报 - return@observe - } - - LogUtils.d("手表数据:全部信息开始上传...") - //是否为错误数据 - var existError = false - - val lists = it["data"] as ArrayList - var array = JSONArray() - lists.forEach { bean -> - - var json = JSONObject() - var nowData = bean as java.util.HashMap - val iterator = nowData.iterator() - while (iterator.hasNext()) { - val next = iterator.next() - var values = if (next.value is Long) (next.value as Long) / 1000 else next.value - when (next.key) { - "OOValue" -> json.put("ooValue", values) - - "DBPValue" -> { - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - //医学上是大值 收缩压 - //小值 - json.put("sbpValue", min(sbp, dbp)) - } - "SBPValue" -> { - //医学上是小值 舒张压 - //大值 - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - json.put("dbpValue", max(sbp, dbp)) - } - - else -> json.put(next.key, values) - } - } - if (json.has("startTime")) { - var times = json.get("startTime").toString().toLong() - - if (times < 0 || times > System.currentTimeMillis() / 1000) { //错误数据 不使用 - existError = true - } else { - array.put(json) - } - } - } - //错误数据保存到本地日志 - if (existError) { - // saveFile(it.toString()) //存到本地日志 - } - - LogUtils.d("手表数据:array Length:${array.length()}") - if (array.length() > 0) { -// var lastJson = array[array.length() - 1] as JSONObject -// lastJson.put("original", it.toString()) - mViewModel.uploadAllInfo(array) - - } - - } - - //手表数据上传 - mViewModel.uploadMultiple.observe(this) { - CommonToastUtils.showSucceedToast(R.string.upload_data_success) - LogUtils.d("all data upload success ") - get24HourReportInfo(showIdInfo)//数据上传成功后获取24小时日报 - getXtInfo(showIdInfo)//数据上传成功后获取血糖信息 - YCBManager.deleteHistory(YCBOrder.DELETE_ALL) //删除 数据 - mainScope.launch { - delay(500) - mViewModel.getAllInfo(showIdInfo,false) - } - } - //睡眠上传 - mViewModel.uploadSleep.observe(this) { - //睡眠上传成功 清除睡眠数据 - LogUtils.d("sleep upload success ") - YCBManager.deleteHistory(YCBOrder.SLEEP_HISTORY) - //clearSleep() - } - - //步数上传 - mViewModel.uploadStep.observe(this) { - //步数上传成功 - //YCBManager.deleteHistory(YCBOrder.STEP_HISTORY) - LogUtils.d("step upload success ") - mViewModel.getDkInfo(false, showIdInfo) - } - - //小贴士 - mViewModel.tipsLive.observe(this) { - LogUtils.d("TipsData:${it.data.size}") - var list = mutableListOf() - it.data.forEach { tipsBean -> - list.add("${tipsBean.title}${tipsBean.content}") - } - setTips(list) - } - - //步数信息 - mViewModel.dkInfo.observe(this) { - mHealthAdapter.dkBean = it.data - mHealthAdapter.notifyDataSetChanged() - } - - //排名信息 - mViewModel.rankLive.observe(this) { - val content = getString( - R.string.rank_num, - if (it.data.userRank == 0) "-" else "${it.data.userRank}" - ) - binding.mChildView.tvBdContent.text = setStrSpan( - content, - 15, - getColor(R.color.col_0098), - Typeface.BOLD, - content.length - 1 - (it.data.userRank).toString().length, - content.length - 1 - ) - - } - - //个人设置信息获取 - mViewModel.settingLive.observe(this) { - if (null == it.data) return@observe - it.data.let { settingBean -> - - if (BuildConfig.isRelease) {//设置极光推送别名 - JPushInterface.setAlias( - requireContext(), - settingBean.user.id.toInt(), - "user_release_${settingBean.user.id}" - ) - } - - Const.mainLiveData.value = settingBean - mViewModel.getWelcomeInfo(settingBean.user.id) - mViewModel.getWarningMsg()//获取预警消息 - - requestByDeviceModel() - // 激活过才能开启定是我任务 - //Log.e("worker", "定时任务开启") - - if (!mFamilyAdapter.data.isNullOrEmpty() && mFamilyAdapter.data.size > 0) { - mFamilyAdapter.data[0].avatarUrl = - if (settingBean.user.avatarUrl.isNullOrEmpty()) "" else settingBean.user.avatarUrl - } - - //设置用户头像 - setUserImage(settingBean.user.id, settingBean.user.avatarUrl) - - if (settingBean.user.bluetooth.isNullOrEmpty()) { //没有mac地址表示未绑定 -// binding.mContent.visibility = View.VISIBLE - binding.mCom.mLayoutResult.visibility = View.GONE - binding.mCom.mBtnBind.visibility = View.VISIBLE - setDeviceInfo(DeviceInfoBean(false)) - if (!(activity as MainActivity).isDialogShow) { - dialogBind.show() - } - } else { - binding.mCom.mLayoutResult.visibility = View.VISIBLE - binding.mCom.mBtnBind.visibility = View.GONE - //重新签名提示 - var signTime = settingBean.user.esignatureDate - if (!signTime.isNullOrEmpty()) { - var againTime = RxTimeTool.string2Milliseconds("2022-07-01 21:00:00") - var signTime = RxTimeTool.string2Milliseconds(signTime) - if (signTime < againTime) { - signDialog.show() - } - } - MyRetrofit.get().BLUETOOTH_MAC = settingBean.user.bluetooth - if (CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//如果是蓝牙设备 - startGetDeviceInfoLive() - if (settingBean.user.bluetooth != MMkvHelper.getString(Const.Blue_Tooth)) {//如果不是同一设备 - YCBBlueConnectHelper.disconnect()//断开蓝牙,断开后收到BlueToothConnectEvent会自动连接 - YCBBlueConnectHelper.cancelTimer() - } else { - LogUtils.d("startConnect::${settingBean.user.bluetooth}") - mainUIUpdate(YCBBlueConnectHelper.BLEConnectState.Connecting)//刷新蓝牙连接状态 - connect(settingBean.user.bluetooth) - } - } - } - - if (Const.Companion.WatchDevice.LightA3.ordinal == Const.watchType) {//如果是4G设备,设置连接状态与电量信息 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - if (Const.battery.isNullOrEmpty()) "" else "电量${Const.battery}%" - ) - ) - } - - MMkvHelper.put(Const.Blue_Tooth, settingBean.user.bluetooth) - } - //个人信息拿到之后再去获取mqtt信息 - mViewModel.getMqttInfo() - } - - //血糖信息获取 - mViewModel.xtInfo.observe(this) { - updateBloodSugarInfo(it.data) - } - - //获取首页所有信息返回 - mViewModel.allData.observe(this) { - it.data.let { bean -> - - if (null == bean) { - LogUtils.e("没得数据,不做任何处理!") - return@observe - } - - if (mFamilyAdapter.position != -1) { - if (mFamilyAdapter.getItem(mFamilyAdapter.position).userJointId != bean.user.id.toInt()) { - if (mFamilyAdapter.position == 0 && bean.user?.id.toString() == CommonUtils.getMyUserId()) {//如果是自己加载用户头像并保存用户信息 - } else { - LogUtils.e("当前用户与请求用户信息不一致,不作处理!") - return@observe - } - } - } - - if (showIdInfo.isEmpty()) { //自己 -// binding.mChildView.mGuide2.visibility = View.VISIBLE - binding.mChildView.mInter.visibility = View.VISIBLE - binding.mChildView.mRecyclemInter.visibility = View.VISIBLE - } else { -// binding.mChildView.mGuide2.visibility = View.GONE//隐藏健康管家 - binding.mChildView.mInter.visibility = View.GONE//隐藏健康互动标题 - binding.mChildView.mRecyclemInter.visibility = View.GONE//隐藏健康打卡,榜单,我的家人功能 - Const.otherLiveData.value = bean - } - - setWeatherInfo(bean.weather) - Const.battery = bean.power - Const.watchType = bean.watchType - MMkvHelper.put(Const.Watch_Device_Type, bean.watchType) - if (Const.Companion.WatchDevice.LightA3.ordinal == bean.watchType) {//如果是4G设备,设置连接状态与电量信息 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - if (Const.battery.isNullOrEmpty()) "" else "电量${Const.battery}%" - ) - ) - } else { - if (showIdInfo.isEmpty()) { //自己 - val localBlueMac = MMkvHelper.getString(Const.Blue_Tooth) - if (!localBlueMac.isNullOrEmpty() && YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.DisConnect) {//如果本地有蓝牙信息且属于未连接状态,则直接连接 - LogUtils.d("startConnect::${localBlueMac}") - mainUIUpdate(YCBBlueConnectHelper.BLEConnectState.Connecting)//刷新蓝牙连接状态 - connect(localBlueMac) - } else if (YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.Connected) { - getConnectStatus() - } - } else { - setDeviceInfo(null) - } - - } - mHealthAdapter.mainBean = bean - mHealthAdapter.notifyDataSetChanged() - //总佩戴 活跃 休眠 - binding.mCom.mWearInfo.text = getString( - R.string.wear_info, - bean.adorn?.wearCount?.toString(), - bean.adorn?.activeWear?.toString(), - bean.adorn.dormancy?.toString() - ) - setBindDeviceInfo(bean.deviceTotal) - } - - } - //环信服务器连接 - mViewModel.mqtt.observe(this) { - it.data.appUserId = mViewModel.settingLive.value!!.data.user.id.toString() - var intent = requireActivity().intent - intent.putExtra("bean", it.data) - intent.setClass(requireContext(), MqTTService::class.java) - requireActivity().startService(intent) - } - - //我家人信息 - mViewModel.familyLive.observe(this) { - it.data.add(0, FamilyBean().apply { - this.fCall = "我" - }) - var selectPosition = 0 - if (showIdInfo.isNotEmpty()) { - it.data.forEachIndexed { index, familyBean -> - if (showIdInfo == familyBean.userJointId.toString()) { - selectPosition = index - return@forEachIndexed - } - } - //如果家人解绑了 则直接查自己的 - if (selectPosition == 0) { - showIdInfo = "" - } - } - - val content = - getString(R.string.family_num, "" + "${it.data.size - 1}") - binding.mChildView.tvFamilyContent.text = setStrSpan( - content, - 15, - getColor(R.color.col_0098), - Typeface.BOLD, - content.length - 3 - (it.data.size - 1).toString().length, - content.length - 3 - ) - it.data.add(FamilyBean().apply { - this.fCall = "家人" - }) - mFamilyAdapter.position = selectPosition - mFamilyAdapter.setNewInstance(it.data) - } - - //定时上报任务 - tenLive.observe(this) { - LogUtils.d("整十分钟定时任务开启:${RxTimeTool.curTimeString}") - //开启下一个整10分的休眠 - getNowTime() - //上传数据 - uploadWhatchData() - } - - //15秒钟更新一次蓝牙设备信息 - getDeviceInfoLive.observe(this) { - LogUtils.d("定时更新一次蓝牙设备信息:${RxTimeTool.curTimeString}") - startGetDeviceInfoLive() - - if (!MMkvHelper.contains(Const.Watch_Device_Type)) {//没有手表型号 - LogUtils.d("没有获取到手表型号") - return@observe - } - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//不是蓝牙设备 - LogUtils.d("不是蓝牙设备!") - return@observe - } - - if (!YCBBlueConnectHelper.getBlueStatus(false)) {//蓝牙未连接 - LogUtils.d("蓝牙设备未连接!") - return@observe - } - - if ((!showIdInfo.isNullOrEmpty() && showIdInfo != CommonUtils.getMyUserId())) {//不是当前用户 - LogUtils.d("当前用户与showIdInfo不匹配!") - return@observe - } - - LogUtils.d("定时获取一次 DeviceInfo!") - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - value - ) - ) - } - } - } - } - - //24小时健康报告返回信息 - mViewModel.infoLive.observe(this) { - - if (null == it.data) { - LogUtils.e("返回数据为空!") - return@observe - } - - if (null == it.data.healthy) { - LogUtils.e("健康信息数据为空!") - return@observe - } - - if (mFamilyAdapter.position != -1) { - if (mFamilyAdapter.getItem(mFamilyAdapter.position).userJointId != it.data.user?.id) { - if (mFamilyAdapter.position == 0 && it.data.user?.id.toString() == CommonUtils.getMyUserId()) {//如果是自己,啥也不做 - - } else { - LogUtils.e("当前用户与请求用户信息不一致,不作处理!") - return@observe - } - } - } - - reportBean = it.data - - var healthResult = it.data.healthy.result - updateHealthDesc(healthResult) - //健康状态 - binding.mCom.mHealthStatus.setImageResource(UserInfoDefin.healthIcon[healthResult + 1]) - updateStarInfo( - healthResult, - if (it.data.star.isNullOrEmpty()) 0 else it.data.star.toInt() - ) -// if (healthResult == 3) { -// binding.mCom.mHealthStatus.setCompoundDrawables(null, null, null, null) -// } else { -// var drawable = ContextCompat.getDrawable( -// requireContext(), -// UserInfoDefin.healthIcon[healthResult + 1] -// ) -// drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) -// binding.mCom.mHealthStatus.setCompoundDrawables(drawable, null, null, null) -// } - } - } - - var notifyStatus: Int? = -1 - private fun updateWarningInfo(sysMsg: MessageBean.SysMsg?) { - if (sysMsg == null) { - binding.mCom.llWarning.visibility = View.GONE - return - } else if (sysMsg != null && (mFamilyAdapter.position == 0 || mFamilyAdapter.position == -1)) { - binding.mCom.llWarning.visibility = View.VISIBLE - } - notifyStatus = sysMsg?.notifyStatus - if (notifyStatus == 0) { - //未读 显示预警消息 - binding.mCom.llWarning.visibility = View.VISIBLE - } else { - //已读 显示预警消息 - binding.mCom.llWarning.visibility = View.GONE - } - binding.mCom.tvWarning.isSelected = true - binding.mCom.tvWarning.text = sysMsg.notifyContent - } - -*/ -/** - * 通过设备型号来处理不同业务逻辑*//* - - - - private fun requestByDeviceModel() { - when (MMkvHelper.getInt(Const.Watch_Device_Type)) {//如果是4GA3设备,则隐藏心电板块 - Const.Companion.WatchDevice.LightA3.ordinal -> { - getXtInfo(showIdInfo, false)//获取血糖信息 - get24HourReportInfo(showIdInfo)//获取24小时日报 - } - else -> { - if (!YCBBlueConnectHelper.isBlueExits()) {//检查蓝牙设备,如未发现蓝牙设备则获取用户上次的血糖信息和24小时信息 - LogUtils.d("未发现蓝牙设备...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 - get24HourReportInfo(showIdInfo)//如果手表没数据也需要获取24小时日报 - } - if (tenJob == null) { - getNowTime() // 整十分钟数据上报休眠开始 - } else { - tenJob!!.cancel() - getNowTime() // 整十分钟数据上报休眠开始 - } - } - } - } - - private fun updateStarInfo(status: Int, star: Int) { - mViewModel.allData.value?.apply { - if (data.adorn.wearCount <= 3) { - binding.mCom.mDescInfo.text = - getString(R.string.model_day, "" + (4 - data.adorn.wearCount)) - return - } - } - - binding.mCom.mDescInfo.apply { - text = "" - - append(getString(R.string.health_star_mark)) - - var selectStarImage = UserInfoDefin.getStarImage(context, status) - selectStarImage?.setBounds( - 0, - 0, - (selectStarImage.minimumWidth / 1.4).toInt(), - (selectStarImage.minimumHeight / 1.4).toInt() - ) - - var unSelectStarImage = context.getDrawable(com.xty.health.R.mipmap.icon_insufficient) - unSelectStarImage?.setBounds( - 0, - 0, - (unSelectStarImage.minimumWidth / 1.4).toInt(), - (unSelectStarImage.minimumHeight / 1.4).toInt() - ) - - for (i in 1..5) { - val spanStr = SpannableString("custom$i") - var span = - (if (star >= i) selectStarImage else unSelectStarImage)?.let { starDrawable -> - CenterImageSpan(starDrawable) - } - spanStr.setSpan(span, 0, spanStr.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) - append(spanStr) - append(" ") - } - } - } - -*/ -/** - * 更新血糖模块信息*//* - - - - private fun updateBloodSugarInfo(info: XTangInfoBean) { - - if (null == info) { - LogUtils.e("血糖模块信息没有,出错了~") - return - } - - if (!info.errorMsg.isNullOrEmpty()) { - CommonToastUtils.showToast(info.errorMsg) - } - - mHealthAdapter.xtangInfo = info - mHealthAdapter.notifyDataSetChanged() - -// when (info.model) { -// //0 未开通 1:建模中 2:建模完成 -// 0 -> { -// binding.mOrganView.mBsStatus.text = "未开通" -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.VISIBLE -// binding.mOrganView.mBsCurrentStatu.visibility = View.GONE -// } -// 1 -> { -// binding.mOrganView.mBsStatus.text = "建模中" -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.GONE -// binding.mOrganView.mBsCurrentStatu.text = "建模中" -// binding.mOrganView.mBsCurrentStatu.visibility = View.VISIBLE -// } -// 2 -> { -// binding.mOrganView.mBsStatus.text = -// OrganStatusCalcUtil.bloodSugarStatuText(info.bloodsugar) -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.GONE -// binding.mOrganView.mBsCurrentStatu.text = setSugarSpan(info.bloodsugar) -// binding.mOrganView.mBsCurrentStatu.visibility = View.VISIBLE -// } -// } - } - -*/ -/** - * 更新健康状态*//* - - - - private fun updateHealthDesc(healthStatus: Int) { - canGoto24Healthresult = healthStatus != 0 && healthStatus != -1 - binding.mCom.mDesc.apply { - text = UserInfoDefin.getHealthArray(requireContext())[healthStatus + 1] - //todo 数据不足 不允许进入健康管理 - setTextColor( - ContextCompat.getColor( - requireContext(), - UserInfoDefin.healthCol[healthStatus + 1] - ) - ) - } -// text = -// setStrSpan(content, 13, getColor(com.xty.health.R.color.col_ff7), Typeface.BOLD, content.length - 3 - percent.length, content.length - 3) - } - -*/ -/** - * 家人信息绑定*//* - - - - private fun initFamilyAdapter() { - binding.mCom.mRecycle.layoutManager = - LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) - binding.mCom.mRecycle.adapter = mFamilyAdapter - mFamilyAdapter.setOnItemClickListener { adapter, view, position -> - if (position == mFamilyAdapter.data.size - 1) { - onEventObject(requireContext(), UmengEventId.Family) - RouteManager.goAct(ARouterUrl.BIND_FAMILY) - } else { - var bean = adapter.getItem(position) as FamilyBean - showIdInfo = if (bean.id == 0) { - "" - } else { - bean.userJointId.toString() - } - binding.mCom.mWearManager.visibility = - if (showIdInfo.isNullOrEmpty()) View.VISIBLE else View.GONE - setUserImage( - if (showIdInfo.isNullOrEmpty()) "0" else showIdInfo, - bean.avatarUrl - ) - binding.mCom.mUserName.text = bean.fCall - mFamilyAdapter.position = position - mFamilyAdapter.notifyDataSetChanged() - mViewModel.getAllInfo(showIdInfo,true) - getXtInfo(showIdInfo) - get24HourReportInfo(showIdInfo) - mViewModel.getDkInfo(false, showIdInfo) - updateWarningStatus() - } - } - } - -*/ -/** - * 设置用户头像*//* - - - - private fun setUserImage(userId: String, headerImage: String?) { - binding.mCom.mHeaderImage.apply { - tag = userId - setImageUser(requireContext(), headerImage) - setOnClickListener { - if (tag.toString() - .isNullOrEmpty() || tag.toString() == "0" || Const.mainLiveData?.value?.user?.id.toString() == userId.toString() - ) { - RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle) - } - } - } - } - -*/ -/** - * 获取所有信息*//* - - - - private fun getAllData() { - YCBManager.getAllData { - LogUtils.d("getAll Info!") - mainScope.launch { - mViewModel.allDataInfo.postValue(it) - } - } - } - -*/ -/** - *15秒钟之内只能上传一次睡眠数据 避免重复上传*//* - - - - private fun refreshTime() { - if (isRefresh) { - isRefresh = false - mainScope.launch { - delay(15 * 1000) - isRefresh = true - } - } - } - -*/ -/** - * 获取历史步数*//* - - - - private fun getStep() { - YCBManager.getHistoryInfo(YCBOrder.STEP_DATA) { - mainScope.launch { - LogUtils.d("getStep Info!") - var jsonArray = JSONArray() - var arrayOrigin = JSONArray() - for (i in 0 until it.size) { - var info = it[i] as HashMap - var jsonOrigin = JSONObject() - for ((k, v) in info) { - jsonOrigin.put(k, v) - } - arrayOrigin.put(jsonOrigin) - var dataDayStr = RxTimeTool.milliseconds2String( - System.currentTimeMillis(), - SimpleDateFormat("yyyy-MM-dd") - ) - var todayStartTime = - RxTimeTool.string2Milliseconds("$dataDayStr 00:00:00") //今天0点的时间 - - var startTime = (info["sportStartTime"] as Long) - if (startTime < todayStartTime) { - continue - } - - var json = JSONObject() - json.put("startTime", (info["sportStartTime"] as Long) / 1000) - json.put("endTime", (info["sportEndTime"] as Long) / 1000) - json.put("step", info["sportStep"]) - json.put("calories", info["sportCalorie"]) - json.put("distance", info["sportDistance"]) - jsonArray.put(json) - } - mViewModel.uploadStep(jsonArray) - } - } - } - -*/ -/** - * 手表信息上传*//* - - - - private fun uploadWhatchData() { - LogUtils.d("手表数据是否上传:$isRefresh") - if (isRefresh) {//避免重复多次上传导致服务器负载过高,五秒钟之内不允许重复上传。蓝牙断开重连也可以上传 - LogUtils.d("手表数据开始上传...") - refreshTime() - getStep() - getSleepNew() - getAllData() - } - } - -*/ -/** - * 获取血糖信息*//* - - - - private fun getXtInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.getXtInfo(userId, isShowLoading) - } - -*/ -/** - * 获取24小时健康报告*//* - - - - private fun get24HourReportInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.get24HourReportInfo(userId, isShowLoading) - } - -*/ -/** - * 新 睡眠时间上传 - * 限制睡眠在一定时间内请求的次数*//* - - - - private fun getSleepNew() { - YCBManager.getHistoryInfo(YCBOrder.SLEEP_DATA) { - LogUtils.d("getSleep Info!") - mainScope.launch { - if (it.isNullOrEmpty()) { - return@launch - } - - CommonUtils.getMyUserInfo()?.apply { - try { - var arraySleep = JSONArray() - var rawdata = sleepOriganData(it) - for (i in 0 until it.size) { - var json = JSONObject() - var sleepDetailArray = JSONArray() //详细的睡眠时间 - var lastData = it[i] as HashMap<*, *> - var startTime = lastData["startTime"] as Long - var endTime = lastData["endTime"] as Long - - var lightAll = lastData["lightSleepTotal"] as Int //潜睡时长 - var deepLightAll = lastData["deepSleepTotal"] as Int //深睡时长 - - var deepSleepCount = lastData["deepSleepCount"] as Int //深睡次数 - var lightSleepCount = lastData["lightSleepCount"] as Int //浅睡次数 - - var listSleepData = lastData["sleepData"] as ArrayList<*> - - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put( - "sleepStartTime", - (value["sleepStartTime"] as Long) / 1000 - ) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - jsonValue.put("userId", id) - jsonValue.put("createBy", name) - sleepDetailArray.put(jsonValue) - } - - json.put("userId", id) - json.put("createBy", name) - json.put("lightSleepCount", lightSleepCount) //浅睡次数 - json.put("deepSleepCount", deepSleepCount) //深睡次数 - json.put("hmWatchSleepData", sleepDetailArray) - json.put("lightSleepTotal", max(lightAll, deepLightAll)) //潜睡时长 - json.put("deepSleepTotal", min(lightAll, deepLightAll)) //深睡时长 - json.put("startTime", startTime / 1000) //开始时间 - json.put("endTime", endTime / 1000) //结束时间 - json.put("os", "android") - if (i == it.size - 1) { - json.put("original", rawdata.toString()) - } else { - json.put("original", "---") - } - arraySleep.put(json) - } - if (arraySleep.length() > 0) { - mViewModel.uploadSleep(arraySleep) - } - } catch (e: Exception) { - LogUtils.e("睡眠数据上传错误:$e") - } - } - } - } - } - -*/ -/** - * 修改背景色*//* - - - - private fun changeBg(view: View, colId: Int) { - var bg = view.background as GradientDrawable - bg.setColor(ContextCompat.getColor(requireContext(), colId)) - bg.mutate() - } - - private val reqGpsPermissionDialog by lazy { - NoticeSettingDialog(requireContext(), "请打开GPS权限", { - - }) { - // 转到手机设置界面,用户设置GPS - var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - startActivityForResult(intent, 1001) // 设置完成后返回到原来的界面 - } - } - - private fun requestGPSPermission() { - reqGpsPermissionDialog.show() - } - -*/ -/** - * 蓝牙链接*//* - - - - private fun connect(mac: String) { - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//如果不是蓝牙设备,不进行连接 - return - } - - if (mac.isNullOrEmpty()) { - initBlueToothStatu() - return - } - - if (!checkBlueConnectPermission(requireContext())) { - CommonToastUtils.showToast("请开启App蓝牙搜索权限!") - getBluePermission(requireContext()) { - if (it) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - requestGPSPermission() - } - } - } - return - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - CommonToastUtils.showToast("请打开GPS权限!") - requestGPSPermission() - return - } - - mainScope.launch(Dispatchers.IO) { - LogUtils.d("HealthFrag Connect!!!") - YCBBlueConnectHelper.connectionBlueTooth(mac, true) { - mainUIUpdate(it) - } - } - } - - private fun mainUIUpdate(connectState: YCBBlueConnectHelper.BLEConnectState) { - mainScope.launch(Dispatchers.Main) { - when (connectState) { - YCBBlueConnectHelper.BLEConnectState.Connecting -> { - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connecting - ) - ) -// binding.mContent.visibility = View.GONE -// binding.mEle.visibility = View.VISIBLE -// binding.mEle.text = getString(R.string.blue_tooth_connecting) - } - YCBBlueConnectHelper.BLEConnectState.Connected -> { - getConnectStatus() - } - YCBBlueConnectHelper.BLEConnectState.DisConnect -> { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 - initBlueToothStatu() - } - } - } - } - - - private fun initBlueToothStatu() { - setDeviceInfo(DeviceInfoBean(blueTooth(), YCBBlueConnectHelper.BLEConnectState.DisConnect)) -// binding.mContent.visibility = View.VISIBLE -// binding.mEle.visibility = View.GONE - } - - //workmanager 后台上传任务 - @Subscribe(threadMode = ThreadMode.MAIN) - fun workManagerSuccess(event: WorkManagerEvent) { - //上传成功回传刷新 - LogUtils.d("work is ok") - mViewModel.getAllInfo(showIdInfo,false) - } - - //个人信息修改 主界面刷新 - @Subscribe(threadMode = ThreadMode.MAIN) - fun refresh(event: MyInfoEvent) { - if (dialogBind.isShowing) { - dialogBind.dismiss() - } - request() - } - - //绑定状态下的蓝牙连接状态 - @Subscribe(threadMode = ThreadMode.MAIN) - fun blueToothStatus(event: BlueToothConnectEvent) { - LogUtils.d("blueToothStatus change!!") - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } - - //家人信息改变 刷新 - @Subscribe(threadMode = ThreadMode.MAIN) - fun familyChange(event: FamilyEvent) { - mViewModel.getMyFamilyList() - } - -*/ -/** - * 重新签名之后隐藏提示框*//* - - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun againSignEvent(event: AgainSignEvent) { - signDialog.dismiss() - } - -*/ -/** - * 24小时健康状态更新事件*//* - - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun health24HourStatusUpdate(event: Health24HourStatusEvent) { - if (-2 != event.healthStatus) { - updateHealthDesc(event.healthStatus) - } - } - -*/ -/** - * 血糖开通/续费成功*//* - - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtOpenSuccess(event: XTangOpenEvent) { - var time = RxTimeTool.getCurrentDateTime("mm").toInt() - var sPrefix = String.format("%02d", time / 10 * 10) //当前时间对应的整分钟数 - var nowTimeStr = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH") + ":${sPrefix}" //整点时间 - updateBloodsugarStatus(event.model, nowTimeStr) - } - -*/ -/** - * 血糖信息更新*//* - - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtDataUpdate(event: XTangUpdateEvent) { - LogUtils.d("xtDataUpdate!!!") - updateBloodSugarInfo(event.info) - } - -*/ -/** - * 睡眠的原始数据*//* - - - - private fun sleepOriganData(list: ArrayList): JSONArray { - var array = JSONArray() - list.forEach { - try { - var json = JSONObject() - var lastData = it as HashMap<*, *> - - var startTime = lastData["startTime"] as Long - var endTIme = lastData["endTime"] as Long - - var l = lastData["lightSleepTotal"] as Int //潜睡时长 - var d = lastData["deepSleepTotal"] as Int //深睡时长 - - json.put("startTime", startTime) - json.put("endTime", endTIme) - json.put("lightSleepTotal", l) - json.put("deepSleepTotal", d) - - var listSleepData = lastData["sleepData"] as ArrayList<*> - var sleepArray = JSONArray() - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put("sleepStartTime", (value["sleepStartTime"] as Long)) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - sleepArray.put(jsonValue) - } - json.put("sleepData", sleepArray) - array.put(json) - } catch (e: Exception) { - e.printStackTrace() - } - } - return array - } - -*/ -/** - * 计算要休眠的时间*//* - - - - private fun getNowTime() { - var tenTimes = 11 * 60 * 1000 //整十分钟对应的毫秒数 - var time = RxTimeTool.getCurTimeString(SimpleDateFormat("mm")).toInt() - var sPrefix = time / 10 //当前时间对应的整分钟数 - var nowTimeStr = - RxTimeTool.getCurTimeString(SimpleDateFormat("yyyy-MM-dd HH")) + ":${sPrefix * 10}:00" //整点时间 - var nowTimeMill = RxTimeTool.string2Milliseconds(nowTimeStr)//整分钟数对应的毫秒数 - - var nextTimeMill = nowTimeMill + tenTimes //下个整十分钟数对应的毫秒数 - var sleepSec = nextTimeMill - System.currentTimeMillis() //距离下个时间要休眠的毫秒数 - - startTenLive(sleepSec) - - } - -*/ -/** - * 15秒钟一次更新*//* - - - - private fun startGetDeviceInfoLive() { - getDeviceInfoJob = mainScope.launch(Dispatchers.IO) { - delay(1000 * 15) - LogUtils.d("休眠结束:${RxTimeTool.curTimeString}") - getDeviceInfoLive.postValue("") - } - } - -*/ -/** - * 十分钟休眠开始 - * times 需要休眠的毫秒数*//* - - - - private fun startTenLive(times: Long) { - LogUtils.d("休眠开始时间:${RxTimeTool.curTimeString}") - LogUtils.d("休眠时长:${times}") - tenJob = mainScope.launch(Dispatchers.IO) { - delay(times) - LogUtils.d("休眠结束:${RxTimeTool.curTimeString}") - tenLive.postValue("") - } - } - -*/ -/** - * 由于SDK问题返回的时间存在秒和毫秒 两种值 - * 这里 返回的类型为毫秒数*//* - - - - private fun formatTime(time: Long): Long { - if (time > 9999999999) { - return time - } - return time * 1000 - } - - override fun onDestroy() { - super.onDestroy() - tenJob?.let { - it.cancel() - } - } - -*/ -/** - * 更新血糖状态*//* - - - - private fun updateBloodsugarStatus(model: Int, updateTime: String) { - mHealthAdapter.xtangInfo?.let { - it.model = model - it.time = updateTime - } - mHealthAdapter.notifyDataSetChanged() - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == RESULT_OK) { - when (requestCode) { - 1001 -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isGpsOpen(requireContext())) {//如果GPS已打开 - LogUtils.d("GPS Is Open!") - mainScope.launch { - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } - } - } - } - } - } -} -*/ diff --git a/app/src/main/java/com/zj365/dc/fragment/HealthFrag.kt b/app/src/main/java/com/zj365/dc/fragment/HealthFrag.kt deleted file mode 100644 index 9c3ddad..0000000 --- a/app/src/main/java/com/zj365/dc/fragment/HealthFrag.kt +++ /dev/null @@ -1,2205 +0,0 @@ -/* -package com.zj365.dc.fragment - -import android.app.Activity.RESULT_OK -import android.content.Intent -import android.graphics.Typeface -import android.graphics.drawable.Drawable -import android.graphics.drawable.GradientDrawable -import android.os.Build -import android.provider.Settings -import android.text.Spannable -import android.text.SpannableString -import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.lifecycle.MutableLiveData -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import cn.jpush.android.api.JPushInterface -import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack -import com.tamsiree.rxkit.RxTimeTool -import com.xty.base.fragment.BaseVmFrag -import com.xty.base.utils.UserInfoDefin -import com.xty.common.Const -import com.xty.common.LogUtils -import com.xty.common.MMkvHelper -import com.xty.common.UmengEventId -import com.xty.common.app.MyApp -import com.xty.common.arouter.ARouterUrl -import com.xty.common.arouter.RouteManager -import com.xty.common.bracelet.YCBBlueConnectHelper -import com.xty.common.bracelet.YCBManager -import com.xty.common.bracelet.YCBOrder -import com.xty.common.bracelet.checkBlueConnectPermission -import com.xty.common.bracelet.getBluePermission -import com.xty.common.bracelet.isGpsOpen -import com.xty.common.event.AgainSignEvent -import com.xty.common.event.BlueToothConnectEvent -import com.xty.common.event.FamilyEvent -import com.xty.common.event.Health24HourStatusEvent -import com.xty.common.event.MyInfoEvent -import com.xty.common.event.WorkManagerEvent -import com.xty.common.event.XTangOpenEvent -import com.xty.common.event.XTangUpdateEvent -import com.xty.common.marqueen.SimpleMF -import com.xty.common.onEventObject -import com.xty.common.services.MqTTService -import com.xty.common.setImageUser -import com.xty.common.util.CommonToastUtils -import com.xty.common.util.CommonUtils -import com.xty.common.weight.CenterImageSpan -import com.xty.common.work.MyWorkManger -import com.xty.health.weight.DeviceChooseDialog -import com.xty.health.weight.DialogTip -import com.xty.healthuser.BuildConfig -import com.xty.healthuser.R -import com.xty.healthuser.act.MainActivity -import com.xty.healthuser.adapter.BannerCustomAdapter -import com.xty.healthuser.adapter.FamilyAdapter -import com.xty.healthuser.adapter.HealthAdapter -import com.xty.healthuser.adapter.holder.VideoHolder -import com.xty.healthuser.databinding.FragHealthBinding -import com.xty.healthuser.model.DeviceInfoBean -import com.xty.healthuser.vm.HealthVm -import com.xty.healthuser.weight.AgainSignDialog -import com.zj365.mime.weight.NoticeSettingDialog -import com.xty.network.MyRetrofit -import com.xty.network.model.BannerBean -import com.xty.network.model.FamilyBean -import com.xty.network.model.MainBean -import com.xty.network.model.MessageBean -import com.xty.network.model.ReportBean -import com.xty.network.model.XTangInfoBean -import com.youth.banner.indicator.RoundLinesIndicator -import com.youth.banner.listener.OnPageChangeListener -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode -import org.json.JSONArray -import org.json.JSONObject -import java.text.SimpleDateFormat -import java.util.regex.Matcher -import java.util.regex.Pattern -import kotlin.math.max -import kotlin.math.min - -*/ -/** - * 健康 - *//* - -class HealthFrag : BaseVmFrag() { - private var isDemonstrate: Boolean = false - val binding by lazy { FragHealthBinding.inflate(layoutInflater) } - - //重签名 - private val signDialog by lazy { - AgainSignDialog(requireContext(), { - RouteManager.goAct(ARouterUrl.LOGIN_ACT) - requireActivity().finish() - }) { - RouteManager.goAct(ARouterUrl.AGAIN_SIGN) - } - } - var canGoto24Healthresult: Boolean = true - - //家人列表适配器 - private val mFamilyAdapter by lazy { FamilyAdapter() } - - private val mHealthAdapter by lazy { HealthAdapter(requireContext()) } - - private val mBannerAdapter by lazy { BannerCustomAdapter(requireContext()) } - - private var showIdInfo = "" //需要显示的信息的id - override fun setViewModel() = HealthVm() - - */ -/**----------------*//* - - val tenLive by lazy { MutableLiveData() } - var tenJob: Job? = null - - val getDeviceInfoLive by lazy { MutableLiveData() } - var getDeviceInfoJob: Job? = null - var isRefresh = true - - var reportBean: ReportBean? = null//24小时日报数据 - - private val dialogBind by lazy { - DialogTip(requireContext(), "需绑定安瑜健康手表,才能查看", "去绑定") { - dialogChooseDevice.show() - } - } - private val dialogInfoUn by lazy { - DialogTip(requireContext(), "请完善基本信息") { - RouteManager.goAct(ARouterUrl.INFO_SIMPLE) - } - } - private val dialogChooseDevice by lazy { - DeviceChooseDialog(requireContext()) { - bundle.clear() - bundle.putInt("type", it) - RouteManager.goAct(ARouterUrl.DEVICE_ACTIVE, bundle) - } - } - - override fun setLayout(): View = binding.root - override fun initView() { - super.initView() - statusBar(binding.statusBar) - - initFamilyAdapter() - request() - refresh() - - binding.mBanner.addBannerLifecycleObserver(this) - .setAdapter(mBannerAdapter) - .setIndicator(RoundLinesIndicator(context)) - .setIndicatorSelectedWidth(dp2px(15)) - .addOnPageChangeListener(onPageChangeListener) - - mBannerAdapter.setOnBannerListener { data, position -> - var bannerBean = data as BannerBean - onEventObject( - requireContext(), - UmengEventId.Banner, - "type:${bannerBean.bannerType}; 标题:${bannerBean.title}" - ) - when (bannerBean.bannerType) { - 1 -> {//图片 - - } - - 5 -> { //内部跳转 - bundle.clear() - bundle.putString("title", bannerBean.title) - bundle.putString("url", bannerBean.linkAddress) - RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) - } - - 10 -> {//web 跳转 - bundle.clear() - bundle.putString("title", bannerBean.title) - bundle.putString("url", bannerBean.linkAddress) - RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) - } -// 15 -> {//视频(如果是视频的话收不到该事件) -// if (binding.mBanner.adapter.viewHolder imCards VideoHolder) { -// val holder = binding.mBanner.adapter.viewHolder as VideoHolder -// var player = holder.player -// player.onPrepared() -// } -// } - } - } - - binding.mOrganView.mGridView.adapter = mHealthAdapter - binding.mOrganView.mGridView.setOnItemClickListener { parent, view, position, id -> - onEventObject(requireContext(), UmengEventId.HealthMonitor, pageNames[position]) - when (val index = pageIndexs[position]) { - 6 -> { //血糖 - mHealthAdapter.xtangInfo?.apply { -// if (model == 0) { -// bundle.clear() -// bundle.putBoolean("isOpen", false) -// if (showIdInfo.isNullOrEmpty()) {//给自己开通 -// bundle.putString("id", CommonUtils.getMyUserId()) -// } else {//给他人开通 -// bundle.putString("id", showIdInfo) -// } -// -// RouteManager.goAct(ARouterUrl.XT_OPEN, bundle) -// } else { -// goPage(index) -// } - goPage(index) - } - } - - 7 -> {//心电 - if (MMkvHelper.getInt(Const.Watch_Device_Type) == -1) { //演示模式 - CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~") - } else if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表 - CommonToastUtils.showToast("尊敬的用户您好,血脂功能暂未开放,敬请期待哦~") - } else { - if (showIdInfo.isEmpty()) { - goPage(index) - } else { - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.XD_HISTORY, bundle) - } - } - } - - -1 -> {//步数 - if (isDemonstrate) { - - return@setOnItemClickListener - } - mViewModel.allData.value?.apply { -// if (data.adorn.wearCount <= 3) { -// CommonToastUtils.showToast("尊敬的用户您好,您正处于3天建模期,请坚持佩戴") -// return@setOnItemClickListener -// } - bundle.clear() - bundle.putInt("status", data.adorn.health + 1) - bundle.putInt("type", 1) - if (showIdInfo.isNullOrEmpty()) { - bundle.putString("userId", CommonUtils.getMyUserId()) - } else showIdInfo?.let { - bundle.putString("userId", it) - } - RouteManager.goAct(ARouterUrl.RANK_LIST, bundle) - } - } - - else -> { - goPage(index) - } - } - } - - setOnClickListener() - updateWarningStatus() - - } - - private fun updateWarningStatus() { - val position = mFamilyAdapter.position - if (position == 0 || position == -1) { - if (notifyStatus == 0) { - //未读 - binding.mCom.llWarning.visibility = View.VISIBLE - } else { - //已读 - binding.mCom.llWarning.visibility = View.GONE - } - } else { - binding.mCom.llWarning.visibility = View.GONE - } - } - - */ -/** - * - * -1:步数 0:心率 1:血氧 2:呼吸率 3:体温 4:睡眠 5:血压 6:血糖 7:心电|血脂 - *//* - - private val pageIndexs = arrayOf( - 0, 1, 2, 3, -1, 4, 5, 6, 7 - ) - - private val pageNames = arrayOf( - "心率", "血氧", "呼吸率", "体温", "步数", "睡眠", "血压", "血糖", "心电|血脂" - ) - - private var onPageChangeListener = object : OnPageChangeListener { - override fun onPageScrolled( - position: Int, - positionOffset: Float, - positionOffsetPixels: Int - ) { - } - - override fun onPageSelected(position: Int) { - var viewHolder = binding.mBanner.adapter.viewHolder - if (viewHolder is VideoHolder) { - var player = viewHolder.player - player.setVideoAllCallBack(object : VideoAllCallBack { - override fun onStartPrepared(url: String?, vararg objects: Any?) { - } - - override fun onPrepared(url: String?, vararg objects: Any?) { - } - - override fun onClickStartIcon(url: String?, vararg objects: Any?) { - binding.mBanner.stop() - binding.mBanner.isAutoLoop(false) - } - - override fun onClickStartError(url: String?, vararg objects: Any?) { - } - - override fun onClickStop(url: String?, vararg objects: Any?) { - } - - override fun onClickStopFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onClickResume(url: String?, vararg objects: Any?) { - } - - override fun onClickResumeFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - override fun onClickSeekbar(url: String?, vararg objects: Any?) { - } - - override fun onClickSeekbarFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - override fun onAutoComplete(url: String?, vararg objects: Any?) { - println("Test----------onAutoComplete url:$url;objects$objects") - binding.mBanner.isAutoLoop(true) - binding.mBanner.start() - } - - override fun onEnterFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onQuitFullscreen(url: String?, vararg objects: Any?) { - } - - override fun onQuitSmallWidget(url: String?, vararg objects: Any?) { - } - - override fun onEnterSmallWidget(url: String?, vararg objects: Any?) { - } - - override fun onTouchScreenSeekVolume( - url: String?, - vararg objects: Any? - ) { - } - - override fun onTouchScreenSeekPosition( - url: String?, - vararg objects: Any? - ) { - } - - override fun onTouchScreenSeekLight( - url: String?, - vararg objects: Any? - ) { - } - - override fun onPlayError(url: String?, vararg objects: Any?) { - } - - override fun onClickStartThumb(url: String?, vararg objects: Any?) { - } - - override fun onClickBlank(url: String?, vararg objects: Any?) { - } - - override fun onClickBlankFullscreen( - url: String?, - vararg objects: Any? - ) { - } - - }) - } - } - - override fun onPageScrollStateChanged(state: Int) { - } - } - - private fun setOnClickListener() { - binding.mOrganView.mSub.setOnClickListener(onClickListener) - binding.mChildView.mGuide1.setOnClickListener(onClickListener) - binding.mChildView.mGuide2.setOnClickListener(onClickListener) - binding.mChildView.mGuide4.setOnClickListener(onClickListener) - binding.mChildView.mReport.setOnClickListener(onClickListener) - binding.mChildView.ivWarn1.setOnClickListener(onClickListener) - binding.mChildView.ivWarn2.setOnClickListener(onClickListener) - binding.mChildView.ivWarn3.setOnClickListener(onClickListener) - binding.mChildView.ivTongueDiagnosis.setOnClickListener(onClickListener) - binding.mCom.mCard.setOnClickListener(onClickListener) - binding.mChildView.mRelInterDk.setOnClickListener(onClickListener) - binding.mChildView.mRelInterBD.setOnClickListener(onClickListener) - binding.mChildView.mRelInterFamily.setOnClickListener(onClickListener) - binding.mCom.mWearManager.setOnClickListener(onClickListener) - binding.mCom.mBtnBind.setOnClickListener(onClickListener) - binding.mCom.mMsg.setOnClickListener(onClickListener) - binding.mCom.mMsgLayout.setOnClickListener(onClickListener) - binding.mOrganView.llCompare.setOnClickListener(onClickListener) - } - - private var onClickListener = View.OnClickListener { - when (it.id) { - R.id.ll_compare -> {//健康对比 - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - goComparePage() - } - - R.id.mSub -> {//健康监测 - goPage(0) - } - //设备连接 - R.id.mWearManager -> { - if (MMkvHelper.getInt(Const.Watch_Device_Type) == Const.Companion.WatchDevice.LightA3.ordinal) {//4G手表 - RouteManager.goAct(ARouterUrl.WEAR_MANAGER) - } else if (YCBBlueConnectHelper.getBlueStatus(false)) {//蓝牙手表并已经连接 - RouteManager.goAct(ARouterUrl.DEVICE_SETTING) - } else { - if (blueTooth()) { - bundle.clear() - bundle.putBoolean("isBind", true) - bundle.putString("devMac", CommonUtils.getBlueToothMac()) - RouteManager.goAct(ARouterUrl.DEVICE_CONNECT, bundle) - } else { - dialogBind.show() - } - } - } - //消息 - R.id.mMsg, R.id.mMsgLayout -> { - RouteManager.goAct(ARouterUrl.WARNING_MSG) - } - //我的家人 - R.id.mRelInterFamily -> { - onEventObject(requireContext(), UmengEventId.MyFamily, "首页") - if (isBind()) { - RouteManager.goAct(ARouterUrl.FAMILY) - } else { - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } - //榜单 - R.id.mRelInterBD -> { - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - mViewModel.allData.value?.apply { - if (data.adorn.activeWear <= 3) { - CommonToastUtils.showToast("尊敬的用户您好,您正处于3天建模期,请坚持佩戴") - return@OnClickListener - } - onEventObject(requireContext(), UmengEventId.HealthRank) - bundle.clear() - bundle.putInt("status", data.adorn.health + 1) - bundle.putInt("type", 0) - RouteManager.goAct(ARouterUrl.RANK_LIST, bundle) - } - - } - //打卡 - R.id.mRelInterDk -> { - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - CommonUtils.getMyUserInfo()?.apply { - onEventObject(requireContext(), UmengEventId.HealthDk) - bundle.clear() - bundle.putSerializable("user", this) - RouteManager.goAct(ARouterUrl.DK_ACT, bundle) - } - } - //评估 - R.id.mCard -> { - if (isDemonstrate) { - bundle.clear() - bundle.putBoolean("isDemonstrate", isDemonstrate) -// RouteManager.goAct(ARouterUrl.HEALTH_24HOUR_REPORT, bundle)//新24小时 - RouteManager.goAct(ARouterUrl.HEALTH_ESTIMATE, bundle)//新24小时 - return@OnClickListener - } -// if (!canGoto24Healthresult) { -// showToast("数据不足或数据建模中,无法查看健康评估") -// return@OnClickListener -// } - CommonUtils.getMyUserInfo()?.apply { - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putString( - "openId", - if (openId.isNullOrEmpty()) "" else openId - ) - bundle.putSerializable("reportBean", reportBean) -// RouteManager.goAct(ARouterUrl.HEALTH_24HOUR_REPORT, bundle)//新24小时 - RouteManager.goAct(ARouterUrl.HEALTH_ESTIMATE, bundle)//新24小时 -// RouteManager.goAct(ARouterUrl.HEALTH_STATUS, bundle)//旧版健康分析改24小时分析接口调用 - } - - } - //防癌 - R.id.ivWarn3 -> { -// onEventObject(requireContext(), UmengEventId.HealthRisk) - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.PRVENT_CANCER, bundle) -// showToast("功能暂未开通,敬请期待") - } - //舌诊 - R.id.ivTongueDiagnosis -> { -// onEventObject(requireContext(), UmengEventId.HealthRisk) - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.TONGUE_MAIN_ACTIVITY, bundle) -// showToast("功能暂未开通,敬请期待") - } - //问卷 - R.id.ivWarn2 -> { - onEventObject(requireContext(), UmengEventId.HealthRisk) - bundle.clear() - bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.SUBMIT_REPORT, bundle) - RouteManager.goAct(ARouterUrl.SUBMIT_REPORTMain, bundle) - } - //预警 - R.id.ivWarn1 -> { - if (isDemonstrate) { - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putInt("page", 1) - RouteManager.goAct(ARouterUrl.WARRING, bundle) - return@OnClickListener - } - mViewModel.allData.value?.apply { - data.apply { - if (adorn.wearCount > 29 && adorn.activeWear > 14) { - onEventObject(requireContext(), UmengEventId.Health30Day) - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putInt("page", 1) - RouteManager.goAct(ARouterUrl.WARRING, bundle) - } else { - if (showIdInfo.isEmpty()) { - onEventObject( - requireContext(), - UmengEventId.Health30Day, - "佩戴未满30天或活跃天数未满15天。" - ) - CommonToastUtils.showToast("尊敬的用户您好,该功能需要佩戴30天且活跃佩戴15天查看,请坚持佩戴且每日同步数据!") - } else { - onEventObject( - requireContext(), - UmengEventId.Health30Day, - "关联用户处于7天建模中!" - ) - CommonToastUtils.showToast("您关联的用户正处于7天建模中……") - } - } - } - } - } - //健康日报 - R.id.mReport -> { - onEventObject(requireContext(), UmengEventId.HealthReport, "首页") - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putBoolean("isDemonstrate", isDemonstrate) - RouteManager.goAct(ARouterUrl.HEALTH_REPORT, bundle) - } - //健康管家 - R.id.mGuide2 -> { - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - if (showIdInfo.isNullOrEmpty()) { - if (isBind()) { - onEventObject(requireContext(), UmengEventId.HealthAdmin) - CommonUtils.getMyUserInfo()?.apply { - bundle.clear() - bundle.putString("fromUserId", id.toString()) - RouteManager.goAct(ARouterUrl.HOUSE_KEEPER, bundle) - } - - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "未绑定点击") - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "关注家人点击") - CommonToastUtils.showToast("不支持上传家人健康信息") - } - } - //健康方案 - R.id.mGuide_1 -> { -// Const.mainLiveData.value?.apply { -// bundle.clear() -// bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.HEALTH_PROP, bundle) -// } - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - onEventObject(requireContext(), UmengEventId.HealthProgrammes, "首页") - RouteManager.goAct(ARouterUrl.MY_PROG) - } - - R.id.mGuide_4 -> { - RouteManager.goAct(ARouterUrl.DATA_MANAGE) -// RouteManager.goAct(ARouterUrl.MY_UPLOAD) - } - //绑定 - R.id.mBtnBind -> { - dialogChooseDevice.show() - } - } - } - - private fun goComparePage() { - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle) - } - - */ -/** - * 设置设备信息 - *//* - - private fun setDeviceInfo(deviceInfo: DeviceInfoBean?) { - if (null != deviceInfo) { - if (blueTooth()) { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } else { - binding.mCom.mWatchType.text = getString(R.string.lite_4g) - val drawable = getDrawable(R.mipmap.ic_watch_4g) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mBindState.visibility = View.VISIBLE - if (deviceInfo.bindState) {//已绑定 - binding.mCom.mBindState.apply { - text = "已绑定" - background = null - val drawable = getDrawable(R.mipmap.ic_bangding) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - - when (deviceInfo.connectState) { - YCBBlueConnectHelper.BLEConnectState.Connected -> {//已连接 - binding.mCom.mConnectStatu.apply { - setBackgroundResource(R.drawable.shape_bind_bg_new_2) - text = deviceInfo.battery - setTextColor(resources.getColor(R.color.col_27B8, null)) - var drawable: Drawable = getDrawable(R.mipmap.ic_battery) - if (!deviceInfo.battery.isNullOrEmpty()) { - val str = - deviceInfo.battery.substring(2, deviceInfo.battery.length - 1) - val pattern: Pattern = Pattern.compile("[0-9]*") - val isNum: Matcher = pattern.matcher(str) - if (isNum.matches()) { - val battery = str.toInt() - drawable = if (battery > 20) { - getDrawable(R.mipmap.ic_battery) -// } else if (battery > 70) { -// getDrawable(R.mipmap.ic_battery_90) -// } else if (battery > 50) { -// getDrawable(R.mipmap.ic_battery_70) -// } else if (battery > 30) { -// getDrawable(R.mipmap.ic_battery_50) -// } else if (battery > 10) { -// getDrawable(R.mipmap.ic_battery_30) - } else { - setTextColor(resources.getColor(R.color.col_2628, null)) - text = - context.resources.getString(R.string.health_low_battery) - setBackgroundResource(R.drawable.shape_bind_bg_new_1) - getDrawable(R.mipmap.ic_diancbuz) - } - } - } - drawable!!.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - - YCBBlueConnectHelper.BLEConnectState.Connecting -> {//连接中 - binding.mCom.mConnectStatu.apply { - text = "连接中..." - setCompoundDrawables(null, null, null, null) - } - } - - YCBBlueConnectHelper.BLEConnectState.DisConnect -> {//未连接 - binding.mCom.mConnectStatu.apply { - text = "未连接" - val drawable = getDrawable(R.mipmap.ic_not_connect) - drawable!!.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - } - - binding.mCom.mConnectStatu.visibility = View.VISIBLE - } else { - binding.mCom.mBindState.apply { - text = "未绑定" - val drawable = getDrawable(R.mipmap.ic_unbind) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mConnectStatu.visibility = View.GONE - } - } else { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - binding.mCom.mBindState.visibility = View.GONE - binding.mCom.mConnectStatu.visibility = View.GONE - } - } - - */ -/** - * 设置天气信息 - *//* - - private fun setWeatherInfo(weather: MainBean.Weather?) { -// if (null == weather) { -// binding.mCom.tvLocationWeather.visibility = View.GONE -// } else { -// weather.apply { -// if (city.isNullOrEmpty() || weatherNo.isNullOrEmpty()) { -// binding.mCom.tvLocationWeather.visibility = View.GONE -// return -// } -// binding.mCom.tvLocationWeather.text = "${city} ${weatherInfo}" -// var icon = when (weatherNo) { -// "32" -> {//晴天 -// R.mipmap.weather_sunny -// } -// "44" -> {//多云 -// R.mipmap.weather_cloudy -// } -// "20" -> {//阴天 -// R.mipmap.weather_yin -// } -// "12" -> {//雨天 -// R.mipmap.weather_rain -// } -// "45" -> {//雷阵雨 -// R.mipmap.weather_thunder_shower -// } -// "16" -> {//雪 -// R.mipmap.weather_snow -// } -// else -> { -// R.mipmap.weather_sunny -// } -// } -// val drawable = getDrawable(icon) -// drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) -// binding.mCom.tvLocationWeather.setCompoundDrawables(null, null, drawable, null) -// binding.mCom.tvLocationWeather.visibility = View.VISIBLE -// } -// } - } - - */ -/** - * 设置设备信息 - *//* - - private fun setBindDeviceInfo(deviceInfo: MainBean.DeviceTotal?) { - deviceInfo?.let { - binding.mChildView.tvXueyaNum.text = "已绑定" + it.sphygmomanometer + "台" - binding.mChildView.tvXuetangNum.text = "已绑定" + it.bloodGlucose + "台" - } - binding.mChildView.llXueya.setOnClickListener { - //已绑定血压列表 - RouteManager.goAct(ARouterUrl.XUEYAJI_BIND_LIST, null) - } - binding.mChildView.llXuetang.setOnClickListener { - //已绑定血糖列表 - RouteManager.goAct(ARouterUrl.XUETANGYI_BIND_LIST, null) - } - } - - // 刷新注册 - private fun refresh() { - refresh.setRefresh(binding.mRefresh) { - getXtInfo(showIdInfo) - get24HourReportInfo(showIdInfo) - request() - uploadWhatchData() - } - } - - private fun request() { - mViewModel.getBanners(CommonUtils.getMyUserId())//当期登录用户id - - mViewModel.getAllInfo(showIdInfo, false) - mViewModel.getDkInfo(false, showIdInfo) - // 如果显示的是家人Tab则不刷新用户信息,防止头像错乱 - if (mFamilyAdapter.position < 1) { - mViewModel.getMySetting() - } - mViewModel.getMyFamilyList() - mViewModel.getTips() - mViewModel.getRank(2) - } - - //蓝牙连接状态之后 数据上传 - private fun getConnectStatus() { - LogUtils.d("getConnectStatus!") - if (YCBBlueConnectHelper.getBlueStatus(false)) { - LogUtils.d("start get DeviceInfo!") - - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 -// binding.mCom.visibility = View.GONE -// binding.mEle.visibility = View.VISIBLE -// binding.mEle.text = value - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - value - ) - ) - - uploadWhatchData() - - mViewModel.settingLive.value?.let { - MyWorkManger.setMyWork( - MyApp.instance!!, - it.data.user.bluetooth - ) //开启后台定时上传任务 - } - - } else {//如果获取手表信息失败,断开连接以后让用户手动连接 - YCBBlueConnectHelper.disconnect() - initBlueToothStatu() - } - } - } - } else { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 - initBlueToothStatu() - } - } - - private fun blueTooth(): Boolean { - -// CommonUtils.getBlueToothMac()?.let { -// if (!it.isNullOrEmpty()) { -// return true -// } -// } - return CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type)) && !CommonUtils.getBlueToothMac() - .isNullOrEmpty() - } - - - */ -/** - * 是否绑定了设备 - *//* - - private fun isBind(): Boolean { - return true - */ -/* Const.mainLiveData?.value?.let { - if(!it.user.bluetooth.isNullOrEmpty()){ - return true - } - } - return false*//* - - } - - //界面跳转 - fun goPage(page: Int) { - if (isBind()) { - bundle.clear() - bundle.putInt("page", page) - bundle.putBoolean("isDemonstrate", isDemonstrate) - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.HEALTHMAIN, bundle) - } else { - CommonToastUtils.showToast(R.string.please_bind_device) - } - } - - private fun setTips(datas: List) { -// val datas: List = listOf( -// "《赋得古原草送别》", -// "离离原上草,一岁一枯荣。", -// "野火烧不尽,春风吹又生。", -// "远芳侵古道,晴翠接荒城。", -// "又送王孙去,萋萋满别情。" -// ) - val marqueeFactory: SimpleMF = SimpleMF(context) - marqueeFactory.data = datas - binding.mCom.simpleMarqueeView.setMarqueeFactory(marqueeFactory) - binding.mCom.simpleMarqueeView.setDrawable( - getDrawable(R.mipmap.ic_tips_new), - null, - null, - null - ) - if (binding.mCom.simpleMarqueeView.isFlipping) { - binding.mCom.simpleMarqueeView.stopFlipping() - } -// binding.mCom.simpleMarqueeView.flipInterval = 3 * 1000//轮播间隔时间 - binding.mCom.simpleMarqueeView.startFlipping() - } - - private fun updateBadgeNum(num: Int) { - if (num > 0) { - var badgeText = if (num > 99) "99+" else "$num" - binding.mCom.mBadge.text = badgeText - binding.mCom.mBadge.post { - val layoutParams = binding.mCom.mBadge.layoutParams as ViewGroup.LayoutParams - val text = binding.mCom.mBadge.text.toString() - binding.mCom.mBadgeCard.radius = binding.mCom.mBadge.height / 2f - var textWidth = binding.mCom.mBadge.paint.measureText(text) - if (binding.mCom.mBadge.height >= textWidth) { //等宽高的圆形 - layoutParams.width = binding.mCom.mBadge.height - - } else { //宽高不等 将宽度两边加10 - layoutParams.width = textWidth.toInt() + 20 - } - binding.mCom.mBadge.layoutParams = layoutParams - } - binding.mCom.mBadgeCard.visibility = View.VISIBLE - } else { - binding.mCom.mBadgeCard.visibility = View.GONE - } - } - - override fun onResume() { - super.onResume() - mViewModel.getWarningMsg() - } - - override fun observer() { - //预警消息 - mViewModel.warningMsgLive.observe(this) { - updateBadgeNum(it.data.noReadNum) - val systemMessage = it.data.systemMessage - if (systemMessage != null && systemMessage.isNotEmpty()) { - val sysMsg = systemMessage[0] - updateWarningInfo(sysMsg) - } else { - updateWarningInfo(null) - } - } - - //首页轮播图 - mViewModel.bannerLive.observe(this) { - if (null == it) { - return@observe - } - mBannerAdapter.setDatas(it.data) - mBannerAdapter.notifyDataSetChanged() - } - - //手表信息组装上传 - mViewModel.allDataInfo.observe(this) { - if (null == it || it["data"] == null || it["data"] !is ArrayList<*>) { - LogUtils.d("手表数据:暂时无数据...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 - get24HourReportInfo(showIdInfo)//如果手表没数据也需要获取24小时日报 - return@observe - } - - LogUtils.d("手表数据:全部信息开始上传...") - //是否为错误数据 - var existError = false - - val lists = it["data"] as ArrayList - var array = JSONArray() - lists.forEach { bean -> - - var json = JSONObject() - var nowData = bean as java.util.HashMap - val iterator = nowData.iterator() - while (iterator.hasNext()) { - val next = iterator.next() - var values = if (next.value is Long) (next.value as Long) / 1000 else next.value - when (next.key) { - "OOValue" -> json.put("ooValue", values) - - "DBPValue" -> { - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - //医学上是大值 收缩压 - //小值 - json.put("sbpValue", min(sbp, dbp)) - } - - "SBPValue" -> { - //医学上是小值 舒张压 - //大值 - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - json.put("dbpValue", max(sbp, dbp)) - } - - else -> json.put(next.key, values) - } - } - if (json.has("startTime")) { - var times = json.get("startTime").toString().toLong() - - if (times < 0 || times > System.currentTimeMillis() / 1000) { //错误数据 不使用 - existError = true - } else { - array.put(json) - } - } - } - //错误数据保存到本地日志 - if (existError) { - // saveFile(it.toString()) //存到本地日志 - } - - LogUtils.d("手表数据:array Length:${array.length()}") - if (array.length() > 0) { -// var lastJson = array[array.length() - 1] as JSONObject -// lastJson.put("original", it.toString()) - mViewModel.uploadAllInfo(array) - } - } - - //手表数据上传 - mViewModel.uploadMultiple.observe(this) { - CommonToastUtils.showSucceedToast(R.string.upload_data_success) - LogUtils.d("all data upload success ") - get24HourReportInfo(showIdInfo)//数据上传成功后获取24小时日报 - getXtInfo(showIdInfo)//数据上传成功后获取血糖信息 - YCBManager.deleteHistory(YCBOrder.DELETE_ALL) //删除 数据 - mainScope.launch { - delay(500) - mViewModel.getAllInfo(showIdInfo, false) - } - } - //睡眠上传 - mViewModel.uploadSleep.observe(this) { - //睡眠上传成功 清除睡眠数据 - LogUtils.d("sleep upload success ") - YCBManager.deleteHistory(YCBOrder.SLEEP_HISTORY) - //clearSleep() - } - - //步数上传 - mViewModel.uploadStep.observe(this) { - //步数上传成功 - //YCBManager.deleteHistory(YCBOrder.STEP_HISTORY) - LogUtils.d("step upload success ") - mViewModel.getDkInfo(false, showIdInfo) - } - - //小贴士 - mViewModel.tipsLive.observe(this) { - LogUtils.d("TipsData:${it.data.size}") - var list = mutableListOf() - it.data.forEach { tipsBean -> - list.add("${tipsBean.title}${tipsBean.content}") - } - setTips(list) - } - - //步数信息 - mViewModel.dkInfo.observe(this) { - mHealthAdapter.dkBean = it.data - mHealthAdapter.notifyDataSetChanged() - } - - //排名信息 - mViewModel.rankLive.observe(this) { - val content = getString( - R.string.rank_num, - if (it.data.userRank == 0) "-" else "${it.data.userRank}" - ) - binding.mChildView.tvBdContent.text = setStrSpan( - content, - 15, - getColor(R.color.col_25C), - Typeface.BOLD, - content.length - 1 - (it.data.userRank).toString().length, - content.length - 1 - ) - } - - //个人设置信息获取 - mViewModel.settingLive.observe(this) { - if (null == it.data) return@observe - it.data.let { settingBean -> - - if (BuildConfig.isRelease) {//设置极光推送别名 - JPushInterface.setAlias( - requireContext(), - settingBean.user.id.toInt(), - "user_release_${settingBean.user.id}" - ) - } - - Const.mainLiveData.value = settingBean - mViewModel.getWelcomeInfo(settingBean.user.id) - mViewModel.getWarningMsg()//获取预警消息 - - requestByDeviceModel() - // 激活过才能开启定是我任务 - //Log.e("worker", "定时任务开启") - - if (!mFamilyAdapter.data.isNullOrEmpty() && mFamilyAdapter.data.size > 0) { - mFamilyAdapter.data[0].avatarUrl = - if (settingBean.user.avatarUrl.isNullOrEmpty()) "" else settingBean.user.avatarUrl - } - - //设置用户头像 - setUserImage(settingBean.user.id, settingBean.user.avatarUrl) - - if (settingBean.user.bluetooth.isNullOrEmpty()) { //没有mac地址表示未绑定 -// binding.mContent.visibility = View.VISIBLE - binding.mCom.mLayoutResult.visibility = View.GONE - binding.mCom.mBtnBind.visibility = View.VISIBLE - setDeviceInfo(DeviceInfoBean(false)) -// if (!(activity as MainActivity).isDialogShow) { -// dialogBind.show() -// } - } else { - binding.mCom.mLayoutResult.visibility = View.VISIBLE - binding.mCom.mBtnBind.visibility = View.GONE - //重新签名提示 - var signTime = settingBean.user.esignatureDate - if (!signTime.isNullOrEmpty()) { - var againTime = RxTimeTool.string2Milliseconds("2022-07-01 21:00:00") - var signTime = RxTimeTool.string2Milliseconds(signTime) - if (signTime < againTime) { - signDialog.show() - } - } - MyRetrofit.get().BLUETOOTH_MAC = settingBean.user.bluetooth - if (CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//如果是蓝牙设备 - startGetDeviceInfoLive() - if (settingBean.user.bluetooth != MMkvHelper.getString(Const.Blue_Tooth)) {//如果不是同一设备 - YCBBlueConnectHelper.disconnect()//断开蓝牙,断开后收到BlueToothConnectEvent会自动连接 - YCBBlueConnectHelper.cancelTimer() - } else { - LogUtils.d("startConnect::${settingBean.user.bluetooth}") - mainUIUpdate(YCBBlueConnectHelper.BLEConnectState.Connecting)//刷新蓝牙连接状态 - connect(settingBean.user.bluetooth) - } - } - } - - if (Const.Companion.WatchDevice.LightA3.ordinal == Const.watchType) {//如果是4G设备,设置连接状态与电量信息 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - if (Const.battery.isNullOrEmpty()) "" else "电量${Const.battery}%" - ) - ) - get24HourReportInfo(showIdInfo)// 这里调用一次接口,防止首次进入App不会刷新评估状态 - } - - MMkvHelper.put(Const.Blue_Tooth, settingBean.user.bluetooth) - if (!settingBean.user.deviceId.isNullOrEmpty()) { - Const.DeviceIdNum = settingBean.user.deviceId - } else { - Const.DeviceIdNum = "" - } -// MMkvHelper.saveAccountConfig(requireContext(),settingBean.user.phone,Const.DEVICE_TYPE, settingBean.user.deviceId) - } - //个人信息拿到之后再去获取mqtt信息 - mViewModel.getMqttInfo() - } - - //血糖信息获取 - mViewModel.xtInfo.observe(this) { - updateBloodSugarInfo(it.data) - } - - //获取首页所有信息返回 - mViewModel.allData.observe(this) { - it.data.let { bean -> - - if (null == bean) { - LogUtils.e("没得数据,不做任何处理!") - return@observe - } - - if (bean.user.name.isNullOrEmpty()) { - dialogInfoUn.show() - } - isDemonstrate = bean.demonstrate == 1 //1 演示模式,0 普通模式 - (requireActivity() as MainActivity).isDemonstrate = isDemonstrate - if (isDemonstrate) { - binding.mCom.mWearInfo.visibility = View.INVISIBLE - binding.mCom.mWatchType.visibility = View.INVISIBLE - } else { - binding.mCom.mWatchType.visibility = View.VISIBLE - binding.mCom.mWearInfo.visibility = View.VISIBLE - } - if (mFamilyAdapter.position != -1) { - if (mFamilyAdapter.getItem(mFamilyAdapter.position).userJointId != bean.user.id.toInt()) { - if (mFamilyAdapter.position == 0 && bean.user?.id.toString() == CommonUtils.getMyUserId()) {//如果是自己加载用户头像并保存用户信息 - } else { - LogUtils.e("当前用户与请求用户信息不一致,不作处理!") - return@observe - } - } - } - - if (showIdInfo.isEmpty()) { //自己 -// binding.mChildView.mGuide2.visibility = View.VISIBLE - binding.mChildView.mInter.visibility = View.VISIBLE - binding.mChildView.lleach.visibility = View.VISIBLE - } else { -// binding.mChildView.mGuide2.visibility = View.GONE//隐藏健康管家 - binding.mChildView.mInter.visibility = View.GONE//隐藏健康互动标题 - binding.mChildView.lleach.visibility = View.GONE//隐藏健康打卡,榜单,我的家人功能 - Const.otherLiveData.value = bean - } - setWeatherInfo(bean.weather) - Const.battery = bean.power - Const.watchType = bean.watchType - MMkvHelper.put(Const.Watch_Device_Type, bean.watchType) - if (Const.Companion.WatchDevice.LightA3.ordinal == bean.watchType) {//如果是4G设备,设置连接状态与电量信息 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - if (Const.battery.isNullOrEmpty()) "" else "电量${Const.battery}%" - ) - ) - get24HourReportInfo(showIdInfo)// 这里调用一次接口,防止首次进入App不会刷新评估状态 - } else { - if (showIdInfo.isEmpty()) { //自己 - val localBlueMac = MMkvHelper.getString(Const.Blue_Tooth) - if (!localBlueMac.isNullOrEmpty() && YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.DisConnect) {//如果本地有蓝牙信息且属于未连接状态,则直接连接 - LogUtils.d("startConnect::${localBlueMac}") - mainUIUpdate(YCBBlueConnectHelper.BLEConnectState.Connecting)//刷新蓝牙连接状态 - connect(localBlueMac) - } else if (YCBBlueConnectHelper.getBleNowStatus() == YCBBlueConnectHelper.BLEConnectState.Connected) { - getConnectStatus() - } - } else { - setDeviceInfo(null) - } - - } - mHealthAdapter.mainBean = bean - mHealthAdapter.notifyDataSetChanged() - //总佩戴 活跃 休眠 - binding.mCom.mWearInfo.text = getString( - R.string.wear_info, - bean.adorn?.wearCount?.toString(), - bean.adorn?.activeWear?.toString(), - bean.adorn.dormancy?.toString() - ) - setBindDeviceInfo(bean.deviceTotal) - } - - } - //环信服务器连接 - mViewModel.mqtt.observe(this) { - it.data.appUserId = mViewModel.settingLive.value!!.data.user.id.toString() - var intent = requireActivity().intent - intent.putExtra("bean", it.data) - intent.setClass(requireContext(), MqTTService::class.java) - requireActivity().startService(intent) - } - - //我家人信息 - mViewModel.familyLive.observe(this) { - it.data.add(0, FamilyBean().apply { - this.fCall = "我" - }) - var selectPosition = 0 - if (showIdInfo.isNotEmpty()) { - it.data.forEachIndexed { index, familyBean -> - if (showIdInfo == familyBean.userJointId.toString()) { - selectPosition = index - return@forEachIndexed - } - } - //如果家人解绑了 则直接查自己的 - if (selectPosition == 0) { - showIdInfo = "" - } - } - - val content = - getString(R.string.family_num, "" + "${it.data.size - 1}") - binding.mChildView.tvFamilyContent.text = setStrSpan( - content, - 15, - getColor(R.color.col_25C), - Typeface.BOLD, - content.length - 3 - (it.data.size - 1).toString().length, - content.length - 3 - ) - it.data.add(FamilyBean().apply { - this.fCall = "家人" - }) - mFamilyAdapter.position = selectPosition - mFamilyAdapter.setNewInstance(it.data) - } - - //定时上报任务 - tenLive.observe(this) { - LogUtils.d("整十分钟定时任务开启:${RxTimeTool.curTimeString}") - //开启下一个整10分的休眠 - getNowTime() - //上传数据 - uploadWhatchData() - } - - //15秒钟更新一次蓝牙设备信息 - getDeviceInfoLive.observe(this) { - LogUtils.d("定时更新一次蓝牙设备信息:${RxTimeTool.curTimeString}") - startGetDeviceInfoLive() - - if (!MMkvHelper.contains(Const.Watch_Device_Type)) {//没有手表型号 - LogUtils.d("没有获取到手表型号") - return@observe - } - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//不是蓝牙设备 - LogUtils.d("不是蓝牙设备!") - return@observe - } - - if (!YCBBlueConnectHelper.getBlueStatus(false)) {//蓝牙未连接 - LogUtils.d("蓝牙设备未连接!") - return@observe - } - - if ((!showIdInfo.isNullOrEmpty() && showIdInfo != CommonUtils.getMyUserId())) {//不是当前用户 - LogUtils.d("当前用户与showIdInfo不匹配!") - return@observe - } - - LogUtils.d("定时获取一次 DeviceInfo!") - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connected, - value - ) - ) - } - } - } - } - - //24小时健康报告返回信息 - mViewModel.infoLive.observe(this) { - if (null == it.data) { - LogUtils.e("返回数据为空!") - return@observe - } - - if (null == it.data.healthy) { - LogUtils.e("健康信息数据为空!") - return@observe - } - - if (mFamilyAdapter.position != -1) { - if (mFamilyAdapter.getItem(mFamilyAdapter.position).userJointId != it.data.user?.id) { - if (mFamilyAdapter.position == 0 && it.data.user?.id.toString() == CommonUtils.getMyUserId()) {//如果是自己,啥也不做 - - } else { - LogUtils.e("当前用户与请求用户信息不一致,不作处理!") - return@observe - } - } - } - - reportBean = it.data - - var healthResult = it.data.healthy.result - updateHealthDesc(healthResult) - //健康状态 - binding.mCom.mHealthStatus.setImageResource(UserInfoDefin.healthIcon[healthResult + 1]) - updateStarInfo( - healthResult, - if (it.data.star.isNullOrEmpty()) 0 else it.data.star.toInt() - ) -// if (healthResult == 3) { -// binding.mCom.mHealthStatus.setCompoundDrawables(null, null, null, null) -// } else { -// var drawable = ContextCompat.getDrawable( -// requireContext(), -// UserInfoDefin.healthIcon[healthResult + 1] -// ) -// drawable!!.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) -// binding.mCom.mHealthStatus.setCompoundDrawables(drawable, null, null, null) -// } - } - } - - var notifyStatus: Int? = -1 - private fun updateWarningInfo(sysMsg: MessageBean.SysMsg?) { - if (sysMsg == null || mFamilyAdapter.position > 0) { //如果不是自己,不显示预警消息 - binding.mCom.llWarning.visibility = View.GONE - return - } else if (mFamilyAdapter.position == 0 || mFamilyAdapter.position == -1) { - binding.mCom.llWarning.visibility = View.VISIBLE - } - notifyStatus = sysMsg.notifyStatus - if (notifyStatus == 0) { - //未读 显示预警消息 - binding.mCom.llWarning.visibility = View.VISIBLE - } else { - //已读 显示预警消息 - binding.mCom.llWarning.visibility = View.GONE - } - binding.mCom.tvWarning.isSelected = true - binding.mCom.tvWarning.text = sysMsg.notifyContent - } - - */ -/** - * 通过设备型号来处理不同业务逻辑 - *//* - - private fun requestByDeviceModel() { - when (MMkvHelper.getInt(Const.Watch_Device_Type)) {//如果是4GA3设备,则隐藏心电板块 - Const.Companion.WatchDevice.LightA3.ordinal -> { - getXtInfo(showIdInfo, false)//获取血糖信息 -// get24HourReportInfo(showIdInfo)//获取24小时日报 - } - - else -> { - if (!YCBBlueConnectHelper.isBlueExits()) {//检查蓝牙设备,如未发现蓝牙设备则获取用户上次的血糖信息和24小时信息 - LogUtils.d("未发现蓝牙设备...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 -// get24HourReportInfo(showIdInfo)//如果手表没数据也需要获取24小时日报 - } - if (tenJob == null) { - getNowTime() // 整十分钟数据上报休眠开始 - } else { - tenJob!!.cancel() - getNowTime() // 整十分钟数据上报休眠开始 - } - } - } - } - - private fun updateStarInfo(status: Int, star: Int) { - mViewModel.allData.value?.apply { - if (data.adorn.wearCount <= 3) { - binding.mCom.mDescInfo.text = - getString(R.string.model_day, "" + (4 - data.adorn.wearCount)) - return - } - } - - binding.mCom.mDescInfo.apply { - text = "" - - append(getString(R.string.health_star_mark)) - - var selectStarImage = UserInfoDefin.getStarImage(context, status) - selectStarImage?.setBounds( - 0, - 0, - (selectStarImage.minimumWidth / 1.4).toInt(), - (selectStarImage.minimumHeight / 1.4).toInt() - ) - - var unSelectStarImage = context.getDrawable(com.xty.health.R.mipmap.icon_insufficient) - unSelectStarImage?.setBounds( - 0, - 0, - (unSelectStarImage.minimumWidth / 1.4).toInt(), - (unSelectStarImage.minimumHeight / 1.4).toInt() - ) - - for (i in 1..5) { - val spanStr = SpannableString("custom$i") - var span = - (if (star >= i) selectStarImage else unSelectStarImage)?.let { starDrawable -> - CenterImageSpan(starDrawable) - } - spanStr.setSpan(span, 0, spanStr.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) - append(spanStr) - append(" ") - } - } - } - - */ -/** - * 更新血糖模块信息 - *//* - - private fun updateBloodSugarInfo(info: XTangInfoBean) { - if (null == info) { - LogUtils.e("血糖模块信息没有,出错了~") - return - } - - if (!info.errorMsg.isNullOrEmpty()) { - CommonToastUtils.showToast(info.errorMsg) - } - - mHealthAdapter.xtangInfo = info - mHealthAdapter.notifyDataSetChanged() - -// when (info.model) { -// //0 未开通 1:建模中 2:建模完成 -// 0 -> { -// binding.mOrganView.mBsStatus.text = "未开通" -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.VISIBLE -// binding.mOrganView.mBsCurrentStatu.visibility = View.GONE -// } -// 1 -> { -// binding.mOrganView.mBsStatus.text = "建模中" -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.GONE -// binding.mOrganView.mBsCurrentStatu.text = "建模中" -// binding.mOrganView.mBsCurrentStatu.visibility = View.VISIBLE -// } -// 2 -> { -// binding.mOrganView.mBsStatus.text = -// OrganStatusCalcUtil.bloodSugarStatuText(info.bloodsugar) -// binding.mOrganView.mBsTime.text = -// if (info.time.isNullOrEmpty()) RxTimeTool.getCurrentDateTime(" yyyy-MM-dd HH:mm:ss") else info.time -// binding.mOrganView.mBsOper.visibility = View.GONE -// binding.mOrganView.mBsCurrentStatu.text = setSugarSpan(info.bloodsugar) -// binding.mOrganView.mBsCurrentStatu.visibility = View.VISIBLE -// } -// } - } - - - */ -/** - * 更新健康状态 - *//* - - private fun updateHealthDesc(healthStatus: Int) { - canGoto24Healthresult = healthStatus != 0 && healthStatus != -1 - binding.mCom.mDesc.apply { - text = UserInfoDefin.getHealthArray(requireContext())[healthStatus + 1] - //todo 数据不足 不允许进入健康管理 - setTextColor( - ContextCompat.getColor( - requireContext(), - UserInfoDefin.healthCol[healthStatus + 1] - ) - ) - } - -// text = -// setStrSpan(content, 13, getColor(com.xty.health.R.color.col_ff7), Typeface.BOLD, content.length - 3 - percent.length, content.length - 3) - } - - */ -/** - * 家人信息绑定 - *//* - - private fun initFamilyAdapter() { - binding.mCom.mRecycle.layoutManager = - LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) - binding.mCom.mRecycle.adapter = mFamilyAdapter - mFamilyAdapter.setOnItemClickListener { adapter, view, position -> - if (position == mFamilyAdapter.data.size - 1) { - onEventObject(requireContext(), UmengEventId.Family) - RouteManager.goAct(ARouterUrl.BIND_FAMILY) - } else { - var bean = adapter.getItem(position) as FamilyBean - showIdInfo = if (bean.id == 0) { - "" - } else { - bean.userJointId.toString() - } - binding.mCom.mWearManager.visibility = - if (showIdInfo.isNullOrEmpty()) View.VISIBLE else View.GONE - setUserImage( - if (showIdInfo.isNullOrEmpty()) "0" else showIdInfo, - bean.avatarUrl - ) - binding.mCom.mUserName.text = bean.fCall - mFamilyAdapter.position = position - mFamilyAdapter.notifyDataSetChanged() - mViewModel.getAllInfo(showIdInfo, true) - getXtInfo(showIdInfo) - get24HourReportInfo(showIdInfo) - mViewModel.getDkInfo(false, showIdInfo) - updateWarningStatus() - } - } - } - - */ -/** - * 设置用户头像 - *//* - - private fun setUserImage(userId: String, headerImage: String?) { - binding.mCom.mHeaderImage.apply { - tag = userId - setImageUser(requireContext(), headerImage) - setOnClickListener { - if (tag.toString() - .isNullOrEmpty() || tag.toString() == "0" || Const.mainLiveData?.value?.user?.id.toString() == userId.toString() - ) { - RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle) - } - } - } - } - - */ -/** - * 获取所有信息 - *//* - - private fun getAllData() { - YCBManager.getAllData { - mainScope.launch { - mViewModel.allDataInfo.postValue(it) - } - } - } - - */ -/** - *15秒钟之内只能上传一次睡眠数据 避免重复上传 - *//* - - private fun refreshTime() { - if (isRefresh) { - isRefresh = false - mainScope.launch { - delay(15 * 1000) - isRefresh = true - - } - } - } - - */ -/** - * 获取历史步数 - *//* - - private fun getStep() { - YCBManager.getHistoryInfo(YCBOrder.STEP_DATA) { - mainScope.launch { - LogUtils.d("getStep Info!") - var jsonArray = JSONArray() - var arrayOrigin = JSONArray() - for (i in 0 until it.size) { - var info = it[i] as HashMap - var jsonOrigin = JSONObject() - for ((k, v) in info) { - jsonOrigin.put(k, v) - } - arrayOrigin.put(jsonOrigin) - var dataDayStr = RxTimeTool.milliseconds2String( - System.currentTimeMillis(), - SimpleDateFormat("yyyy-MM-dd") - ) - var todayStartTime = - RxTimeTool.string2Milliseconds("$dataDayStr 00:00:00") //今天0点的时间 - - var startTime = (info["sportStartTime"] as Long) - if (startTime < todayStartTime) { - continue - } - - - var json = JSONObject() - json.put("startTime", (info["sportStartTime"] as Long) / 1000) - json.put("endTime", (info["sportEndTime"] as Long) / 1000) - json.put("step", info["sportStep"]) - json.put("calories", info["sportCalorie"]) - json.put("distance", info["sportDistance"]) - jsonArray.put(json) - } - mViewModel.uploadStep(jsonArray) - - } - } - } - - */ -/** - * 手表信息上传 - *//* - - private fun uploadWhatchData() { - LogUtils.d("手表数据是否上传:$isRefresh") - if (isRefresh) {//避免重复多次上传导致服务器负载过高,五秒钟之内不允许重复上传。蓝牙断开重连也可以上传 - LogUtils.d("手表数据开始上传...") - refreshTime() - getStep() - getSleepNew() - getAllData() - } - } - - */ -/** - * 获取血糖信息 - *//* - - private fun getXtInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.getXtInfo(userId, isShowLoading) - } - - */ -/** - * 获取24小时健康报告 - *//* - - private fun get24HourReportInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.get24HourReportInfo(userId, isShowLoading) - } - - */ -/** - * 新 睡眠时间上传 - * 限制睡眠在一定时间内请求的次数 - *//* - - private fun getSleepNew() { - YCBManager.getHistoryInfo(YCBOrder.SLEEP_DATA) { - LogUtils.d("getSleep Info!") - mainScope.launch { - if (it.isNullOrEmpty()) { - return@launch - } - - CommonUtils.getMyUserInfo()?.apply { - try { - var arraySleep = JSONArray() - var rawdata = sleepOriganData(it) - for (i in 0 until it.size) { - var json = JSONObject() - var sleepDetailArray = JSONArray() //详细的睡眠时间 - var lastData = it[i] as HashMap<*, *> - var startTime = lastData["startTime"] as Long - var endTime = lastData["endTime"] as Long - - var lightAll = lastData["lightSleepTotal"] as Int //潜睡时长 - var deepLightAll = lastData["deepSleepTotal"] as Int //深睡时长 - - var deepSleepCount = lastData["deepSleepCount"] as Int //深睡次数 - var lightSleepCount = lastData["lightSleepCount"] as Int //浅睡次数 - - var listSleepData = lastData["sleepData"] as ArrayList<*> - - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put( - "sleepStartTime", - (value["sleepStartTime"] as Long) / 1000 - ) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - jsonValue.put("userId", id) - jsonValue.put("createBy", name) - sleepDetailArray.put(jsonValue) - } - - json.put("userId", id) - json.put("createBy", name) - json.put("lightSleepCount", lightSleepCount) //浅睡次数 - json.put("deepSleepCount", deepSleepCount) //深睡次数 - json.put("hmWatchSleepData", sleepDetailArray) - json.put("lightSleepTotal", max(lightAll, deepLightAll)) //潜睡时长 - json.put("deepSleepTotal", min(lightAll, deepLightAll)) //深睡时长 - json.put("startTime", startTime / 1000) //开始时间 - json.put("endTime", endTime / 1000) //结束时间 - json.put("os", "android") - if (i == it.size - 1) { - json.put("original", rawdata.toString()) - } else { - json.put("original", "---") - } - arraySleep.put(json) - } - if (arraySleep.length() > 0) { - mViewModel.uploadSleep(arraySleep) - } - } catch (e: Exception) { - LogUtils.e("睡眠数据上传错误:$e") - } - } - } - } - } - - */ -/** - * 修改背景色 - *//* - - private fun changeBg(view: View, colId: Int) { - var bg = view.background as GradientDrawable - bg.setColor(ContextCompat.getColor(requireContext(), colId)) - bg.mutate() - } - - private val reqGpsPermissionDialog by lazy { - NoticeSettingDialog(requireContext(), "请打开GPS权限", { - - }) { - // 转到手机设置界面,用户设置GPS - var intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); - startActivityForResult(intent, 1001) // 设置完成后返回到原来的界面 - } - } - - - private fun requestGPSPermission() { - reqGpsPermissionDialog.show() - } - - */ -/** - * 蓝牙链接 - *//* - - private fun connect(mac: String) { - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//如果不是蓝牙设备,不进行连接 - return - } - - if (mac.isNullOrEmpty()) { - initBlueToothStatu() - return - } - - if (!checkBlueConnectPermission(requireContext())) { - CommonToastUtils.showToast("请开启App蓝牙搜索权限!") - getBluePermission(requireContext()) { - if (it) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - requestGPSPermission() - } - } - } - return - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - CommonToastUtils.showToast("请打开GPS权限!") - requestGPSPermission() - return - } - - mainScope.launch(Dispatchers.IO) { - LogUtils.d("HealthFrag Connect!!!") - YCBBlueConnectHelper.connectionBlueTooth(mac, true) { - mainUIUpdate(it) - } - } - } - - private fun mainUIUpdate(connectState: YCBBlueConnectHelper.BLEConnectState) { - - mainScope.launch(Dispatchers.Main) { - when (connectState) { - YCBBlueConnectHelper.BLEConnectState.Connecting -> { - setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connecting - ) - ) -// binding.mContent.visibility = View.GONE -// binding.mEle.visibility = View.VISIBLE -// binding.mEle.text = getString(R.string.blue_tooth_connecting) - } - - YCBBlueConnectHelper.BLEConnectState.Connected -> { - getConnectStatus() - } - - YCBBlueConnectHelper.BLEConnectState.DisConnect -> { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 - initBlueToothStatu() - } - } - } - } - - - private fun initBlueToothStatu() { - setDeviceInfo(DeviceInfoBean(blueTooth(), YCBBlueConnectHelper.BLEConnectState.DisConnect)) -// binding.mContent.visibility = View.VISIBLE -// binding.mEle.visibility = View.GONE - } - - //workmanager 后台上传任务 - @Subscribe(threadMode = ThreadMode.MAIN) - fun workManagerSuccess(event: WorkManagerEvent) { - //上传成功回传刷新 - LogUtils.d("work is ok") - mViewModel.getAllInfo(showIdInfo, false) - } - - //个人信息修改 主界面刷新 - @Subscribe(threadMode = ThreadMode.MAIN) - fun refresh(event: MyInfoEvent) { - if (dialogBind.isShowing) { - dialogBind.dismiss() - } - request() - } - - //绑定状态下的蓝牙连接状态 - @Subscribe(threadMode = ThreadMode.MAIN) - fun blueToothStatus(event: BlueToothConnectEvent) { - LogUtils.d("blueToothStatus change!!") - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } - - //家人信息改变 刷新 - @Subscribe(threadMode = ThreadMode.MAIN) - fun familyChange(event: FamilyEvent) { - mViewModel.getMyFamilyList() - } - - */ -/** - * 重新签名之后隐藏提示框 - *//* - - @Subscribe(threadMode = ThreadMode.MAIN) - fun againSignEvent(event: AgainSignEvent) { - signDialog.dismiss() - } - - */ -/** - * 24小时健康状态更新事件 - *//* - - @Subscribe(threadMode = ThreadMode.MAIN) - fun health24HourStatusUpdate(event: Health24HourStatusEvent) { - if (-2 != event.healthStatus) { - updateHealthDesc(event.healthStatus) - } - } - - */ -/** - * 血糖开通/续费成功 - *//* - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtOpenSuccess(event: XTangOpenEvent) { - var time = RxTimeTool.getCurrentDateTime("mm").toInt() - var sPrefix = String.format("%02d", time / 10 * 10) //当前时间对应的整分钟数 - var nowTimeStr = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH") + ":${sPrefix}" //整点时间 - updateBloodsugarStatus(event.model, nowTimeStr) - } - - */ -/** - * 血糖信息更新 - *//* - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtDataUpdate(event: XTangUpdateEvent) { - LogUtils.d("xtDataUpdate!!!") - updateBloodSugarInfo(event.info) - } - - */ -/** - * 睡眠的原始数据 - *//* - - private fun sleepOriganData(list: ArrayList): JSONArray { - var array = JSONArray() - list.forEach { - try { - var json = JSONObject() - var lastData = it as HashMap<*, *> - - var startTime = lastData["startTime"] as Long - var endTIme = lastData["endTime"] as Long - - var l = lastData["lightSleepTotal"] as Int //潜睡时长 - var d = lastData["deepSleepTotal"] as Int //深睡时长 - - json.put("startTime", startTime) - json.put("endTime", endTIme) - json.put("lightSleepTotal", l) - json.put("deepSleepTotal", d) - - var listSleepData = lastData["sleepData"] as ArrayList<*> - var sleepArray = JSONArray() - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put("sleepStartTime", (value["sleepStartTime"] as Long)) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - sleepArray.put(jsonValue) - } - json.put("sleepData", sleepArray) - array.put(json) - } catch (e: Exception) { - e.printStackTrace() - } - } - return array - } - - */ -/** - * 计算要休眠的时间 - *//* - - private fun getNowTime() { - var tenTimes = 11 * 60 * 1000 //整十分钟对应的毫秒数 - var time = RxTimeTool.getCurTimeString(SimpleDateFormat("mm")).toInt() - var sPrefix = time / 10 //当前时间对应的整分钟数 - var nowTimeStr = - RxTimeTool.getCurTimeString(SimpleDateFormat("yyyy-MM-dd HH")) + ":${sPrefix * 10}:00" //整点时间 - var nowTimeMill = RxTimeTool.string2Milliseconds(nowTimeStr)//整分钟数对应的毫秒数 - - var nextTimeMill = nowTimeMill + tenTimes //下个整十分钟数对应的毫秒数 - var sleepSec = nextTimeMill - System.currentTimeMillis() //距离下个时间要休眠的毫秒数 - - startTenLive(sleepSec) - } - - */ -/** - * 15秒钟一次更新 - *//* - - private fun startGetDeviceInfoLive() { - getDeviceInfoJob = mainScope.launch(Dispatchers.IO) { - delay(1000 * 15) - LogUtils.d("休眠结束:${RxTimeTool.curTimeString}") - getDeviceInfoLive.postValue("") - } - } - - */ -/** - * 十分钟休眠开始 - * times 需要休眠的毫秒数 - *//* - - private fun startTenLive(times: Long) { - LogUtils.d("休眠开始时间:${RxTimeTool.curTimeString}") - LogUtils.d("休眠时长:${times}") - tenJob = mainScope.launch(Dispatchers.IO) { - delay(times) - LogUtils.d("休眠结束:${RxTimeTool.curTimeString}") - tenLive.postValue("") - } - } - - */ -/** - * 由于SDK问题返回的时间存在秒和毫秒 两种值 - * 这里 返回的类型为毫秒数 - *//* - - private fun formatTime(time: Long): Long { - if (time > 9999999999) { - return time - } - return time * 1000 - } - - override fun onDestroy() { - super.onDestroy() - tenJob?.let { - it.cancel() - } - } - - */ -/** - * 更新血糖状态 - *//* - - private fun updateBloodsugarStatus(model: Int, updateTime: String) { - mHealthAdapter.xtangInfo?.let { - it.model = model - it.time = updateTime - } - mHealthAdapter.notifyDataSetChanged() - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == RESULT_OK) { - when (requestCode) { - 1001 -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isGpsOpen(requireContext())) {//如果GPS已打开 - LogUtils.d("GPS Is Open!") - mainScope.launch { - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } - } - } - } - } - } -// private lateinit var dataCallback: DataCallback -// -// override fun onAttach(context: Context) { -// super.onAttach(context) -// if (context is DataCallback) { -// dataCallback = context -// } else { -// throw IllegalArgumentException("Host activity must implement DataCallback") -// } -// } -// -// // 在需要传递数据的地方调用该方法 -// private fun sendDataToSecondFragment(data: String) { -// dataCallback.onDataReceived(data) -// } -// interface DataCallback { -// fun onDataReceived(data: String) -// } -}*/ 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 5df36ef..3dad21b 100644 --- a/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/HealthHomeFrag.kt @@ -1,96 +1,58 @@ package com.zj365.dc.fragment -import android.app.Activity.RESULT_OK +import android.R.attr.path import android.content.Intent -import android.graphics.Typeface -import android.graphics.drawable.Drawable -import android.graphics.drawable.GradientDrawable -import android.os.Build import android.provider.Settings -import android.text.TextUtils import android.view.View -import android.view.ViewGroup -import androidx.core.content.ContextCompat -import androidx.lifecycle.MutableLiveData import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import cn.jpush.android.api.JPushInterface +import com.lifesense.android.ble.core.application.ApplicationContext import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack -import com.tamsiree.rxkit.RxTimeTool +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram +import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.xty.base.fragment.BaseVmFrag -import com.xty.base.utils.UserInfoDefin -import com.xty.common.Const -import com.xty.common.LogUtils -import com.xty.common.MMkvHelper import com.xty.common.UmengEventId -import com.xty.common.app.MyApp import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager -import com.xty.common.bracelet.YCBBlueConnectHelper -import com.xty.common.bracelet.YCBManager -import com.xty.common.bracelet.YCBOrder -import com.xty.common.bracelet.checkBlueConnectPermission -import com.xty.common.bracelet.getBluePermission -import com.xty.common.bracelet.isGpsOpen import com.xty.common.event.AgainSignEvent -import com.xty.common.event.BlueToothConnectEvent import com.xty.common.event.ChangeFamilyEvent import com.xty.common.event.FamilyEvent -import com.xty.common.event.Health24HourStatusEvent +import com.xty.common.event.LoginOrRegisterEvent +import com.xty.common.event.LoginOutEvent import com.xty.common.event.MyInfoEvent -import com.xty.common.event.WorkManagerEvent -import com.xty.common.event.XTangOpenEvent -import com.xty.common.event.XTangUpdateEvent -import com.xty.common.marqueen.SimpleMF import com.xty.common.onEventObject -import com.xty.common.setImageUser -import com.xty.common.util.CommonToastUtils import com.xty.common.util.CommonUtils -import com.xty.common.work.MyWorkManger -import com.zj365.mime.weight.NoticeSettingDialog -import com.xty.network.MyRetrofit import com.xty.network.model.BannerBean import com.xty.network.model.FamilyBean +import com.xty.network.model.HomeLayoutBean import com.xty.network.model.MainBean -import com.xty.network.model.MessageBean -import com.xty.network.model.ReportBean import com.xty.network.model.ScienceBean -import com.xty.network.model.XTangInfoBean import com.youth.banner.indicator.RoundLinesIndicator import com.youth.banner.listener.OnPageChangeListener -import com.zj365.dc.BuildConfig import com.zj365.dc.R -import com.zj365.dc.activity.MainActivity import com.zj365.dc.adapter.BannerCustomAdapter import com.zj365.dc.adapter.FamilyAdapter +import com.zj365.dc.adapter.HomeContentLayoutAdapter +import com.zj365.dc.adapter.HomeTopLayoutAdapter import com.zj365.dc.adapter.ScienceAdapter import com.zj365.dc.adapter.holder.VideoHolder import com.zj365.dc.databinding.FragHealthBinding -import com.zj365.dc.vm.HealthVm +import com.zj365.dc.vm.HomeVm import com.zj365.dc.weight.AgainSignDialog import com.zj365.health.weight.DialogTip -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import com.zj365.mime.weight.NoticeSettingDialog import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode -import org.json.JSONArray -import org.json.JSONObject -import java.text.SimpleDateFormat -import java.util.regex.Matcher -import java.util.regex.Pattern -import kotlin.math.max -import kotlin.math.min + /** * 健康*/ class -HealthHomeFrag : BaseVmFrag() { +HealthHomeFrag : BaseVmFrag() { val binding by lazy { FragHealthBinding.inflate(layoutInflater) } @@ -110,19 +72,23 @@ HealthHomeFrag : BaseVmFrag() { private val mFamilyAdapter by lazy { FamilyAdapter() } private val mBannerAdapter by lazy { BannerCustomAdapter(requireContext()) } + + private val mMiddleBannerAdapter by lazy { BannerCustomAdapter(requireContext()) } private var showIdInfo = "" //需要显示的信息的id private var showFamily: FamilyBean? = null - override fun setViewModel() = HealthVm() + override fun setViewModel() = HomeVm() + + var defaultFamilyList = ArrayList() val adapterSince by lazy { ScienceAdapter() } - private val getDeviceInfoLive by lazy { MutableLiveData() } - private var getDeviceInfoJob: Job? = null - private var isRefresh = true + val layoutTopAdapter by lazy { HomeTopLayoutAdapter(requireContext()) } + + val layoutContentAdapter by lazy { HomeContentLayoutAdapter(requireContext()) } + - private var reportBean: ReportBean? = null//24小时日报数据 private val dialogBind by lazy { DialogTip(requireContext(), "需绑定安瑜健康手表,才能查看", "去绑定") { @@ -149,6 +115,12 @@ HealthHomeFrag : BaseVmFrag() { .setIndicatorSelectedWidth(dp2px(15)) .addOnPageChangeListener(onPageChangeListener) + binding.mBannerTwo.addBannerLifecycleObserver(this) + .setAdapter(mMiddleBannerAdapter) + .setIndicator(RoundLinesIndicator(context)) + .setIndicatorSelectedWidth(dp2px(15)) + .addOnPageChangeListener(onPageChangeListener) + mBannerAdapter.setOnBannerListener { data, position -> var bannerBean = data as BannerBean onEventObject( @@ -176,6 +148,34 @@ HealthHomeFrag : BaseVmFrag() { } } } + + mMiddleBannerAdapter.setOnBannerListener { data, position -> + var bannerBean = data as BannerBean + onEventObject( + requireContext(), + UmengEventId.Banner, + "type:${bannerBean.bannerType}; 标题:${bannerBean.title}" + ) + when (bannerBean.bannerType) { + 1 -> {//图片 + + } + + 5 -> { //内部跳转 + bundle.clear() + bundle.putString("title", bannerBean.title) + bundle.putString("url", bannerBean.linkAddress) + RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) + } + + 10 -> {//web 跳转 + bundle.clear() + bundle.putString("title", bannerBean.title) + bundle.putString("url", bannerBean.linkAddress) + RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) + } + } + } setOnClickListener() // updateWarningStatus() initAdapter() @@ -193,6 +193,135 @@ HealthHomeFrag : BaseVmFrag() { } + binding.mCom.rvLayout.layoutManager= LinearLayoutManager(requireContext(),LinearLayoutManager.HORIZONTAL,false) + binding.mCom.rvLayout.adapter = layoutTopAdapter + layoutTopAdapter.setOnItemClickListener { adapter, view, position -> + var contentData = adapter.getItem(position) as HomeLayoutBean.HomeChildBean + when(contentData.jumpType){ + 1 ->{ + contentData.jumpUrl?.let { + when(contentData.jumpUrl){ + "AI_TONGUE" ->{ //AI 舌诊 + onEventObject(requireContext(), UmengEventId.HealthRisk) + bundle.clear() + bundle.putString("id", showIdInfo) + RouteManager.goAct(ARouterUrl.TONGUE_MAIN_ACTIVITY, bundle) + } + + "AI_TUMOR" ->{ //防癌 + bundle.clear() + bundle.putString("id", showIdInfo) + RouteManager.goAct(ARouterUrl.PRVENT_CANCER, bundle) + } + + "MEALS"->{ //膳食管理 + + } + + else ->{ + + } + } + } + + } + + 2->{ + contentData.jumpUrl?.let { + bundle.clear() + bundle.putString("title", contentData.name) + bundle.putString("url", contentData.jumpUrl) + RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) + } + + } + + else ->{ + contentData.jumpUrl?.let { + val appId = "wxd930ea5d5a258f4f" // 填移动应用(App)的 AppId,非小程序的 AppID + + val api = WXAPIFactory.createWXAPI(ApplicationContext.context, appId) + + val req = WXLaunchMiniProgram.Req() + req.userName = "gh_d43f693ca31f" // 填小程序原始id + + req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 + + api.sendReq(req) + } + + } + } + } + + binding.mChildView.homeContentRv.layoutManager = GridLayoutManager(requireContext(),3) + binding.mChildView.homeContentRv.adapter = layoutContentAdapter + layoutContentAdapter.setOnItemClickListener { adapter, view, position -> + + var contentData = adapter.getItem(position) as HomeLayoutBean.HomeChildBean + when(contentData.jumpType){ + 1 ->{ + contentData.jumpUrl?.let { + when(contentData.jumpUrl){ + "AI_TONGUE" ->{ //AI 舌诊 + onEventObject(requireContext(), UmengEventId.HealthRisk) + bundle.clear() + bundle.putString("id", showIdInfo) + RouteManager.goAct(ARouterUrl.TONGUE_MAIN_ACTIVITY, bundle) + } + + "AI_TUMOR" ->{ //防癌 + bundle.clear() + bundle.putString("id", showIdInfo) + RouteManager.goAct(ARouterUrl.PRVENT_CANCER, bundle) + } + + "MEALS"->{ //膳食管理 + + } + + else ->{ + + } + } + } + + } + + 2->{ + contentData.jumpUrl?.let { + bundle.clear() + bundle.putString("title", contentData.name) + bundle.putString("url", contentData.jumpUrl) + RouteManager.goAct(ARouterUrl.WEB_ACT, bundle) + } + + } + + else ->{ + contentData.jumpUrl?.let { + val appId = "wxd930ea5d5a258f4f" // 填移动应用(App)的 AppId,非小程序的 AppID + + val api = WXAPIFactory.createWXAPI(ApplicationContext.context, appId) + + val req = WXLaunchMiniProgram.Req() + req.userName = "gh_d43f693ca31f" // 填小程序原始id + + req.path = it ////拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + + req.miniprogramType = + WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE // 可选打开 开发版,体验版和正式版 + + api.sendReq(req) + } + + } + } + } + } @@ -307,54 +436,29 @@ HealthHomeFrag : BaseVmFrag() { } private fun setOnClickListener() { - binding.mChildView.llAiConfectioner.setOnClickListener(onClickListener) + /*binding.mChildView.llAiConfectioner.setOnClickListener(onClickListener) binding.mChildView.llAiSkinMeasurement.setOnClickListener(onClickListener) binding.mChildView.llCancerScreening.setOnClickListener(onClickListener) binding.mChildView.llMentalTest.setOnClickListener(onClickListener) binding.mChildView.llAiTongueDiagnosis.setOnClickListener(onClickListener) - binding.mChildView.llDietManagement.setOnClickListener(onClickListener) - - /*//30天健康风险 - binding.tvHealthRisk.setOnClickListener(onClickListener) - //健康风险评估 - binding.tvRiskCommit.setOnClickListener(onClickListener) - //防癌筛查 - binding.tvCheckCancer.setOnClickListener(onClickListener) - //舌诊 - binding.tvTongueDiagnosis.setOnClickListener(onClickListener) - //手表 - binding.mChildHomeView.llWatch.setOnClickListener { - - if (Const.watchType == -1) { //当前未绑定,并且选择的用户是自己 - if (showIdInfo == "") { - RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) - } else { - CommonToastUtils.showToast("家人已解绑手表,无法查看") - } - } else { - bundle.clear() - if (showIdInfo == "") { //如果是自己,直接传自己的设备信息过去 - CommonUtils.getMyUserInfo()?.let { - bundle.putSerializable("user", it) - } - } else { //其他用户传id过去查询设备信息 - bundle.putSerializable("userId", showIdInfo) - } - RouteManager.goAct(ARouterUrl.DEV_INFO, bundle) - } - }*/ + binding.mChildView.llDietManagement.setOnClickListener(onClickListener)*/ +/* binding.mCom.llHealthRecords.setOnClickListener(onClickListener) - /*binding.mChildHomeView.mRelInterDk.setOnClickListener(onClickListener) + *//*binding.mChildHomeView.mRelInterDk.setOnClickListener(onClickListener) binding.mChildHomeView.mRelInterBD.setOnClickListener(onClickListener) - binding.mChildHomeView.mRelInterFamily.setOnClickListener(onClickListener)*/ + binding.mChildHomeView.mRelInterFamily.setOnClickListener(onClickListener)*//* binding.mCom.llHealthCode.setOnClickListener(onClickListener) binding.mCom.llDailyBenefit.setOnClickListener(onClickListener) binding.mCom.llVideoInterview.setOnClickListener(onClickListener) - /*binding.mOrganView.llCompare.setOnClickListener(onClickListener) + *//*binding.mOrganView.llCompare.setOnClickListener(onClickListener) binding.myManager.setOnClickListener(onClickListener) binding.myHealthDa.setOnClickListener(onClickListener)*/ + + binding.tvMore.setOnClickListener { + RouteManager.goAct(ARouterUrl.SCIENCE_LIST) + } } @@ -365,66 +469,6 @@ HealthHomeFrag : BaseVmFrag() { RouteManager.goAct(ARouterUrl.HEALTH_RECORD, bundle) } - /* R.id.my_manager -> { //我的管家 - CommonUtils.getMyUserId()?.let { - bundle.clear() - bundle.putString("fromUserId", it) - RouteManager.goAct(ARouterUrl.MY_KEEPER, bundle) - } - } - - R.id.ll_compare -> {//健康对比 - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - goComparePage() - } - - //我的家人 - R.id.mRelInterFamily -> { - onEventObject(requireContext(), UmengEventId.MyFamily, "首页") - if (isBind()) { - RouteManager.goAct(ARouterUrl.FAMILY) - } else { - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } - //榜单 - R.id.mRelInterBD -> { - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - mViewModel.allData.value?.apply { - if (data.adorn.activeWear <= 3) { - CommonToastUtils.showToast("尊敬的用户您好,您正处于3天建模期,请坚持佩戴") - return@OnClickListener - } - onEventObject(requireContext(), UmengEventId.HealthRank) - bundle.clear() - bundle.putInt("status", data.adorn.health + 1) - bundle.putInt("type", 0) - RouteManager.goAct(ARouterUrl.RANK_LIST, bundle) - } - - } - //打卡 - R.id.mRelInterDk -> { - CommonUtils.getMyUserInfo()?.apply { - onEventObject(requireContext(), UmengEventId.HealthDk) - bundle.clear() - bundle.putSerializable("user", this) - RouteManager.goAct(ARouterUrl.DK_ACT, bundle) - } - } - //评估 - R.id.tv_risk_commit -> { -// onEventObject(requireContext(), UmengEventId.HealthRisk) - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.SUBMIT_REPORTMain, bundle) - }*/ //防癌 R.id.ll_cancer_screening -> { // onEventObject(requireContext(), UmengEventId.HealthRisk) @@ -441,226 +485,8 @@ HealthHomeFrag : BaseVmFrag() { RouteManager.goAct(ARouterUrl.TONGUE_MAIN_ACTIVITY, bundle) // showToast("功能暂未开通,敬请期待") } - /* //问卷 - R.id.ivWarn2 -> { - onEventObject(requireContext(), UmengEventId.HealthRisk) - bundle.clear() - bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.SUBMIT_REPORT, bundle) - RouteManager.goAct(ARouterUrl.SUBMIT_REPORTMain, bundle) - } - //预警 - R.id.tv_health_risk -> { - if (isDemonstrate) { - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putInt("page", 1) - RouteManager.goAct(ARouterUrl.WARRING, bundle) - return@OnClickListener - } - mViewModel.allData.value?.apply { - data.apply { - if (adorn.wearCount > 29 && adorn.activeWear > 14) { - onEventObject(requireContext(), UmengEventId.Health30Day) - bundle.clear() - bundle.putString("id", showIdInfo) - bundle.putInt("page", 1) - RouteManager.goAct(ARouterUrl.WARRING, bundle) - } else { - if (showIdInfo.isEmpty()) { - onEventObject( - requireContext(), - UmengEventId.Health30Day, - "佩戴未满30天或活跃天数未满15天。" - ) - CommonToastUtils.showToast("尊敬的用户您好,该功能需要佩戴30天且活跃佩戴15天查看,请坚持佩戴且每日同步数据!") - } else { - onEventObject( - requireContext(), - UmengEventId.Health30Day, - "关联用户处于7天建模中!" - ) - CommonToastUtils.showToast("您关联的用户正处于7天建模中……") - } - } - } - } - } - //健康管家 - R.id.mGuide2 -> { - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - if (showIdInfo.isNullOrEmpty()) { - if (isBind()) { - onEventObject(requireContext(), UmengEventId.HealthAdmin) - CommonUtils.getMyUserInfo()?.apply { - bundle.clear() - bundle.putString("fromUserId", id.toString()) - RouteManager.goAct(ARouterUrl.HOUSE_KEEPER, bundle) - } - - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "未绑定点击") - CommonToastUtils.showToast(com.xty.common.R.string.please_bind_device) - } - } else { - onEventObject(requireContext(), UmengEventId.HealthAdmin, "关注家人点击") - CommonToastUtils.showToast("不支持上传家人健康信息") - } - } - //健康方案 - R.id.mGuide_1 -> { -// Const.mainLiveData.value?.apply { -// bundle.clear() -// bundle.putString("id", showIdInfo) -// RouteManager.goAct(ARouterUrl.HEALTH_PROP, bundle) -// } - if (isDemonstrate) { - dialogBind.show() - return@OnClickListener - } - onEventObject(requireContext(), UmengEventId.HealthProgrammes, "首页") - RouteManager.goAct(ARouterUrl.MY_PROG) - } - - R.id.mGuide_4 -> { - RouteManager.goAct(ARouterUrl.DATA_MANAGE) - } - //绑定 - R.id.mBtnBind -> { - RouteManager.goAct(ARouterUrl.DEVICE_CHOICE) - }*/ } } - - private fun goComparePage() { - bundle.clear() - bundle.putString("id", showIdInfo) - RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle) - } - -/** - * 设置设备信息*/ - /*private fun setDeviceInfo(deviceInfo: DeviceInfoBean?) { - if (null != deviceInfo) { - if (blueTooth()) { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - binding.mCom.mWatchType.visibility = View.VISIBLE - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } else { - binding.mCom.mWatchType.text = getString(R.string.lite_4g) - binding.mCom.mWatchType.visibility = View.VISIBLE - val drawable = getDrawable(R.mipmap.ic_watch_4g) - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mBindState.visibility = View.VISIBLE - - if (deviceInfo.bindState) {//已绑定 - binding.mCom.mBindState.apply { - text = "已绑定" - background = null - val drawable = getDrawable(R.mipmap.ic_bangding) - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mWearManager.text = "佩戴管理" - - when (deviceInfo.connectState) { - YCBBlueConnectHelper.BLEConnectState.Connected -> {//已连接 - binding.mCom.mConnectStatu.apply { - setBackgroundResource(R.drawable.shape_bind_bg_new_2) - text = deviceInfo.battery - setTextColor(resources.getColor(R.color.col_27B8, null)) - var drawable: Drawable = getDrawable(R.mipmap.ic_battery) - if (!deviceInfo.battery.isNullOrEmpty()) { - val str = - deviceInfo.battery.substring(2, deviceInfo.battery.length - 1) - val pattern: Pattern = Pattern.compile("[0-9]*") - val isNum: Matcher = pattern.matcher(str) - if (isNum.matches()) { - val battery = str.toInt() - drawable = if (battery > 20) { - getDrawable(R.mipmap.ic_battery) -// } else if (battery > 70) { -// getDrawable(R.mipmap.ic_battery_90) -// } else if (battery > 50) { -// getDrawable(R.mipmap.ic_battery_70) -// } else if (battery > 30) { -// getDrawable(R.mipmap.ic_battery_50) -// } else if (battery > 10) { -// getDrawable(R.mipmap.ic_battery_30) - } else { - setTextColor(resources.getColor(R.color.col_2628, null)) - text = - context.resources.getString(R.string.health_low_battery) - setBackgroundResource(R.drawable.shape_bind_bg_new_1) - getDrawable(R.mipmap.ic_diancbuz) - } - } - } - drawable.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - - YCBBlueConnectHelper.BLEConnectState.Connecting -> {//连接中 - binding.mCom.mConnectStatu.apply { - text = "连接中..." - setCompoundDrawables(null, null, null, null) - } - } - - YCBBlueConnectHelper.BLEConnectState.DisConnect -> {//未连接 - binding.mCom.mConnectStatu.apply { - text = "未连接" - val drawable = getDrawable(R.mipmap.ic_not_connect) - drawable.setBounds( - 0, - 0, - drawable.minimumWidth, - drawable.minimumHeight - ) - setCompoundDrawables(drawable, null, null, null) - } - } - } - binding.mChildHomeView.mRelInterBD.visibility = View.VISIBLE - binding.mCom.mConnectStatu.visibility = View.VISIBLE - } else { - binding.mCom.mBindState.apply { - text = "未绑定" - val drawable = getDrawable(R.mipmap.ic_unbind) - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - setCompoundDrawables(drawable, null, null, null) - } - binding.mCom.mWearManager.text = "绑定手表" - - binding.mChildHomeView.mRelInterBD.visibility = View.GONE - binding.mCom.mConnectStatu.visibility = View.INVISIBLE - binding.mCom.mWatchType.visibility = View.INVISIBLE - - } - } else { - binding.mCom.mWatchType.text = getString(R.string.blue_tooth) - val drawable = getDrawable(R.mipmap.ic_watch_bluetooth) - drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) - binding.mCom.mWatchType.visibility = View.VISIBLE - binding.mCom.mWatchType.setCompoundDrawables(drawable, null, null, null) - binding.mCom.mBindState.visibility = View.INVISIBLE - binding.mCom.mConnectStatu.visibility = View.INVISIBLE - } - }*/ - /** * 设置天气信息*/ @@ -716,50 +542,16 @@ HealthHomeFrag : BaseVmFrag() { } private fun request() { - mViewModel.getBanners(CommonUtils.getMyUserId())//当期登录用户id + mViewModel.getBanners(CommonUtils.getMyUserId(),1)//当期登录用户id - // mViewModel.getAllInfo(showIdInfo, false) - // mViewModel.getDkInfo(false, showIdInfo) - // 如果显示的是家人Tab则不刷新用户信息,防止头像错乱 - if (mFamilyAdapter.position < 1) { - mViewModel.getMySetting() - } mViewModel.getMyFamilyList() - /* mViewModel.getTips() - mViewModel.getRank(2)*/ - - mViewModel.getScinceList() - } - //蓝牙连接状态之后 数据上传 - private fun getConnectStatus() { - LogUtils.d("getConnectStatus!") - if (YCBBlueConnectHelper.getBlueStatus(false)) { - LogUtils.d("start get DeviceInfo!") - - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 + mViewModel.getScinceList() - mViewModel.settingLive.value?.let { - MyWorkManger.setMyWork( - MyApp.instance!!, - it.data.user.bluetooth - ) //开启后台定时上传任务 - } + mViewModel.getHomeLayout() - } else {//如果获取手表信息失败,断开连接以后让用户手动连接 - YCBBlueConnectHelper.disconnect() - } - } - } - } else { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 -// initBlueToothStatu() - } + // mViewModel.getBanners(CommonUtils.getMyUserId(),2)//当期登录用户id } @@ -775,135 +567,25 @@ HealthHomeFrag : BaseVmFrag() { return@observe } - mBannerAdapter.setDatas(it.data) + mBannerAdapter.setDatas(it[1]) mBannerAdapter.notifyDataSetChanged() - } - - mViewModel.scinceLive.observe(this) { - adapterSince.setNewInstance(it.data) - } - - //手表信息组装上传 - mViewModel.allDataInfo.observe(this) { - if (null == it || it["data"] == null || it["data"] !is ArrayList<*>) { - LogUtils.d("手表数据:暂时无数据...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 - get24HourReportInfo(showIdInfo)//如果手表没数据也需要获取24小时日报 - return@observe - } - - LogUtils.d("手表数据:全部信息开始上传...") - //是否为错误数据 - var existError = false - - val lists = it["data"] as ArrayList - var array = JSONArray() - lists.forEach { bean -> - - var json = JSONObject() - var nowData = bean as java.util.HashMap - val iterator = nowData.iterator() - while (iterator.hasNext()) { - val next = iterator.next() - var values = if (next.value is Long) (next.value as Long) / 1000 else next.value - when (next.key) { - "OOValue" -> json.put("ooValue", values) - - "DBPValue" -> { - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - //医学上是大值 收缩压 - //小值 - json.put("sbpValue", min(sbp, dbp)) - } - - "SBPValue" -> { - //医学上是小值 舒张压 - //大值 - var sbp = nowData["SBPValue"] as Int - var dbp = nowData["DBPValue"] as Int - json.put("dbpValue", max(sbp, dbp)) - } - - else -> json.put(next.key, values) - } - } - if (json.has("startTime")) { - var times = json.get("startTime").toString().toLong() - - if (times < 0 || times > System.currentTimeMillis() / 1000) { //错误数据 不使用 - existError = true - } else { - array.put(json) - } - } - } - //错误数据保存到本地日志 - if (existError) { - // saveFile(it.toString()) //存到本地日志 - } - - LogUtils.d("手表数据:array Length:${array.length()}") - if (array.length() > 0) { -// var lastJson = array[array.length() - 1] as JSONObject -// lastJson.put("original", it.toString()) - mViewModel.uploadAllInfo(array) - - } - - } - - //小贴士 - mViewModel.tipsLive.observe(this) { - LogUtils.d("TipsData:${it.data.size}") - var list = mutableListOf() - it.data.forEach { tipsBean -> - list.add("${tipsBean.title}${tipsBean.content}") + if(it[2].isNullOrEmpty()){ + binding.mBannerTwo.visibility = View.GONE + }else{ + binding.mBannerTwo.visibility = View.VISIBLE + mMiddleBannerAdapter.setDatas(it[2]) + mMiddleBannerAdapter.notifyDataSetChanged() } } - //个人设置信息获取 - mViewModel.settingLive.observe(this) { - if (null == it.data) return@observe - it.data.let { settingBean -> - - if (BuildConfig.isRelease) {//设置极光推送别名 - JPushInterface.setAlias( - requireContext(), - settingBean.user.id.toInt(), - "user_release_${settingBean.user.id}" - ) - } - - - Const.mainLiveData.value = settingBean - mViewModel.getWelcomeInfo(settingBean.user.id) - mViewModel.getWarningMsg()//获取预警消息 - - requestByDeviceModel() - // 激活过才能开启定是我任务 - //Log.e("worker", "定时任务开启") - - if (!mFamilyAdapter.data.isNullOrEmpty() && mFamilyAdapter.data.size > 0) { - mFamilyAdapter.data[0].avatarUrl = - if (settingBean.user.avatarUrl.isNullOrEmpty()) "" else settingBean.user.avatarUrl - } - - MMkvHelper.put(Const.Blue_Tooth, settingBean.user.bluetooth) - if (!settingBean.user.deviceId.isNullOrEmpty()) { - Const.DeviceIdNum = settingBean.user.deviceId - } else { - Const.DeviceIdNum = "" - } - } - //个人信息拿到之后再去获取mqtt信息 - mViewModel.getMqttInfo() - + mViewModel.scinceLive.observe(this) { + adapterSince.setNewInstance(it.data) } //我家人信息 mViewModel.familyLive.observe(this) { + mFamilyAdapter.data.clear() it.data.add(0, FamilyBean().apply { this.fCall = "我" }) @@ -927,129 +609,30 @@ HealthHomeFrag : BaseVmFrag() { mFamilyAdapter.setNewInstance(it.data) } - //15秒钟更新一次蓝牙设备信息 - getDeviceInfoLive.observe(this) { - LogUtils.d("定时更新一次蓝牙设备信息:${RxTimeTool.curTimeString}") - startGetDeviceInfoLive() - - if (!MMkvHelper.contains(Const.Watch_Device_Type)) {//没有手表型号 - LogUtils.d("没有获取到手表型号") - return@observe - } - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//不是蓝牙设备 - LogUtils.d("不是蓝牙设备!") - return@observe - } - - if (!YCBBlueConnectHelper.getBlueStatus(false)) {//蓝牙未连接 - LogUtils.d("蓝牙设备未连接!") - return@observe - } - - if ((!showIdInfo.isNullOrEmpty() && showIdInfo != CommonUtils.getMyUserId())) {//不是当前用户 - LogUtils.d("当前用户与showIdInfo不匹配!") - return@observe - } - - LogUtils.d("定时获取一次 DeviceInfo!") - //连接之后 直接进行数据的同步 - YCBManager.getDeviceInfo { isok, value -> - mainScope.launch { - LogUtils.d("getDeviceInfo isOk:$isok;;; value=$value") - if (isok) {//获取到设备信息,设备准备就绪上传手表数据 - } - } - } - } - - //24小时健康报告返回信息 - mViewModel.infoLive.observe(this) { - - if (null == it.data) { - LogUtils.e("返回数据为空!") - return@observe - } - - if (null == it.data.healthy) { - LogUtils.e("健康信息数据为空!") - return@observe - } - - if (mFamilyAdapter.position != -1) { - if (mFamilyAdapter.getItem(mFamilyAdapter.position).userJointId != it.data.user?.id) { - if (mFamilyAdapter.position == 0 && it.data.user?.id.toString() == CommonUtils.getMyUserId()) {//如果是自己,啥也不做 - - } else { - LogUtils.e("当前用户与请求用户信息不一致,不作处理!") - return@observe - } - } - } - - reportBean = it.data - - var healthResult = it.data.healthy.result - updateHealthDesc(healthResult) - } - } - - -/** - * 通过设备型号来处理不同业务逻辑*/ - - - private fun requestByDeviceModel() { - when (MMkvHelper.getInt(Const.Watch_Device_Type)) {//如果是4GA3设备,则隐藏心电板块 - Const.Companion.WatchDevice.LightA3.ordinal -> { - getXtInfo(showIdInfo, false)//获取血糖信息 - } - - else -> { - if (!YCBBlueConnectHelper.isBlueExits()) {//检查蓝牙设备,如未发现蓝牙设备则获取用户上次的血糖信息和24小时信息 - LogUtils.d("未发现蓝牙设备...") - getXtInfo(showIdInfo)//如果手表没数据也需要获取获取血糖信息 - } - } - } - } - -/** - * 更新血糖模块信息*/ - - - private fun updateBloodSugarInfo(info: XTangInfoBean) { - if (null == info) { - LogUtils.e("血糖模块信息没有,出错了~") - return - } - - if (!info.errorMsg.isNullOrEmpty()) { - CommonToastUtils.showToast(info.errorMsg) + mViewModel.layoutLive.observe(this){ + layoutTopAdapter.setNewInstance(it.data.top) + layoutContentAdapter.setNewInstance(it.data.middle) } } -/** - * 更新健康状态*/ - - - private fun updateHealthDesc(healthStatus: Int) { - canGoto24Healthresult = healthStatus != 0 && healthStatus != -1 - } + private fun initFamilyAdapter() { -/** - * 家人信息绑定*/ + defaultFamilyList.add(0, FamilyBean().apply { + this.fCall = "我" + }) + defaultFamilyList.add(1, FamilyBean().apply { + this.fCall = "家人" + }) - private fun initFamilyAdapter() { binding.mCom.mRecycle.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) binding.mCom.mRecycle.adapter = mFamilyAdapter mFamilyAdapter.setOnItemClickListener { adapter, view, position -> - if (position == mFamilyAdapter.data.size - 1) { - onEventObject(requireContext(), UmengEventId.Family) - RouteManager.goAct(ARouterUrl.BIND_FAMILY) + if (position == mFamilyAdapter.data.size - 1) { //第一期暂不做 + /* onEventObject(requireContext(), UmengEventId.Family) + RouteManager.goAct(ARouterUrl.BIND_FAMILY)*/ } else { var bean = adapter.getItem(position) as FamilyBean showIdInfo = if (bean.id == 0) { @@ -1065,177 +648,10 @@ HealthHomeFrag : BaseVmFrag() { EventBus.getDefault().post(ChangeFamilyEvent(showIdInfo)) } } - } - - - - private fun getAllData() { - YCBManager.getAllData { - mainScope.launch { - mViewModel.allDataInfo.postValue(it) - } - } - } - -/** - *15秒钟之内只能上传一次睡眠数据 避免重复上传*/ - - - private fun refreshTime() { - if (isRefresh) { - isRefresh = false - mainScope.launch { - delay(15 * 1000) - isRefresh = true - - } - } - } - -/** - * 获取历史步数*/ - - - private fun getStep() { - YCBManager.getHistoryInfo(YCBOrder.STEP_DATA) { - mainScope.launch { - LogUtils.d("getStep Info!") - var jsonArray = JSONArray() - var arrayOrigin = JSONArray() - for (i in 0 until it.size) { - var info = it[i] as HashMap - var jsonOrigin = JSONObject() - for ((k, v) in info) { - jsonOrigin.put(k, v) - } - arrayOrigin.put(jsonOrigin) - var dataDayStr = RxTimeTool.milliseconds2String( - System.currentTimeMillis(), - SimpleDateFormat("yyyy-MM-dd") - ) - var todayStartTime = - RxTimeTool.string2Milliseconds("$dataDayStr 00:00:00") //今天0点的时间 - - var startTime = (info["sportStartTime"] as Long) - if (startTime < todayStartTime) { - continue - } - - - var json = JSONObject() - json.put("startTime", (info["sportStartTime"] as Long) / 1000) - json.put("endTime", (info["sportEndTime"] as Long) / 1000) - json.put("step", info["sportStep"]) - json.put("calories", info["sportCalorie"]) - json.put("distance", info["sportDistance"]) - jsonArray.put(json) - } - mViewModel.uploadStep(jsonArray) - - } - } - } - - -/** - * 获取血糖信息*/ - - - private fun getXtInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.getXtInfo(userId, isShowLoading) - } - -/** - * 获取24小时健康报告*/ - - - private fun get24HourReportInfo(userId: String, isShowLoading: Boolean = false) { - mViewModel.get24HourReportInfo(userId, isShowLoading) - } -/** - * 新 睡眠时间上传 - * 限制睡眠在一定时间内请求的次数*/ - - - private fun getSleepNew() { - YCBManager.getHistoryInfo(YCBOrder.SLEEP_DATA) { - LogUtils.d("getSleep Info!") - mainScope.launch { - if (it.isNullOrEmpty()) { - return@launch - } - - CommonUtils.getMyUserInfo()?.apply { - try { - var arraySleep = JSONArray() - var rawdata = sleepOriganData(it) - for (i in 0 until it.size) { - var json = JSONObject() - var sleepDetailArray = JSONArray() //详细的睡眠时间 - var lastData = it[i] as HashMap<*, *> - var startTime = lastData["startTime"] as Long - var endTime = lastData["endTime"] as Long - - var lightAll = lastData["lightSleepTotal"] as Int //潜睡时长 - var deepLightAll = lastData["deepSleepTotal"] as Int //深睡时长 - - var deepSleepCount = lastData["deepSleepCount"] as Int //深睡次数 - var lightSleepCount = lastData["lightSleepCount"] as Int //浅睡次数 - - var listSleepData = lastData["sleepData"] as ArrayList<*> - - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put( - "sleepStartTime", - (value["sleepStartTime"] as Long) / 1000 - ) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - jsonValue.put("userId", id) - jsonValue.put("createBy", name) - sleepDetailArray.put(jsonValue) - } - - json.put("userId", id) - json.put("createBy", name) - json.put("lightSleepCount", lightSleepCount) //浅睡次数 - json.put("deepSleepCount", deepSleepCount) //深睡次数 - json.put("hmWatchSleepData", sleepDetailArray) - json.put("lightSleepTotal", max(lightAll, deepLightAll)) //潜睡时长 - json.put("deepSleepTotal", min(lightAll, deepLightAll)) //深睡时长 - json.put("startTime", startTime / 1000) //开始时间 - json.put("endTime", endTime / 1000) //结束时间 - json.put("os", "android") - if (i == it.size - 1) { - json.put("original", rawdata.toString()) - } else { - json.put("original", "---") - } - arraySleep.put(json) - } - if (arraySleep.length() > 0) { - mViewModel.uploadSleep(arraySleep) - } - } catch (e: Exception) { - LogUtils.e("睡眠数据上传错误:$e") - } - } - } - } - } - -/** - * 修改背景色*/ - - private fun changeBg(view: View, colId: Int) { - var bg = view.background as GradientDrawable - bg.setColor(ContextCompat.getColor(requireContext(), colId)) - bg.mutate() + mFamilyAdapter.position = 0 + mFamilyAdapter.setNewInstance(defaultFamilyList) } - private val reqGpsPermissionDialog by lazy { NoticeSettingDialog(requireContext(), "请打开GPS权限", { @@ -1251,88 +667,6 @@ HealthHomeFrag : BaseVmFrag() { reqGpsPermissionDialog.show() } -/** - * 蓝牙链接*/ - - - private fun connect(mac: String) { - - if (!CommonUtils.isBlueTooth(MMkvHelper.getInt(Const.Watch_Device_Type))) {//如果不是蓝牙设备,不进行连接 - return - } - - if (mac.isNullOrEmpty()) { -// initBlueToothStatu() - return - } - - if (!checkBlueConnectPermission(requireContext())) { - CommonToastUtils.showToast("请开启App蓝牙搜索权限!") - getBluePermission(requireContext()) { - if (it) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - requestGPSPermission() - } - } - } - return - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isGpsOpen(requireContext())) { - CommonToastUtils.showToast("请打开GPS权限!") - requestGPSPermission() - return - } - - mainScope.launch(Dispatchers.IO) { - LogUtils.d("HealthFrag Connect!!!") - YCBBlueConnectHelper.connectionBlueTooth(mac, true) { - mainUIUpdate(it) - } - } - } - - private fun mainUIUpdate(connectState: YCBBlueConnectHelper.BLEConnectState) { - - mainScope.launch(Dispatchers.Main) { - when (connectState) { - YCBBlueConnectHelper.BLEConnectState.Connecting -> { - /* setDeviceInfo( - DeviceInfoBean( - true, - YCBBlueConnectHelper.BLEConnectState.Connecting - ) - )*/ -// binding.mContent.visibility = View.GONE -// binding.mEle.visibility = View.VISIBLE -// binding.mEle.text = getString(R.string.blue_tooth_connecting) - } - - YCBBlueConnectHelper.BLEConnectState.Connected -> { - getConnectStatus() - } - - YCBBlueConnectHelper.BLEConnectState.DisConnect -> { - //断开连接重置状态 为了重新连接自后可以进行睡眠上传 - // initBlueToothStatu() - } - } - } - } - - -/* private fun initBlueToothStatu() { - setDeviceInfo(DeviceInfoBean(blueTooth(), YCBBlueConnectHelper.BLEConnectState.DisConnect)) - }*/ - - //workmanager 后台上传任务 - @Subscribe(threadMode = ThreadMode.MAIN) - fun workManagerSuccess(event: WorkManagerEvent) { - //上传成功回传刷新 - LogUtils.d("work is ok") - mViewModel.getAllInfo(showIdInfo, false) - } - //个人信息修改 主界面刷新 @Subscribe(threadMode = ThreadMode.MAIN) fun refresh(event: MyInfoEvent) { @@ -1342,14 +676,6 @@ HealthHomeFrag : BaseVmFrag() { request() } - //绑定状态下的蓝牙连接状态 - @Subscribe(threadMode = ThreadMode.MAIN) - fun blueToothStatus(event: BlueToothConnectEvent) { - LogUtils.d("blueToothStatus change!!") - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } //家人信息改变 刷新 @Subscribe(threadMode = ThreadMode.MAIN) @@ -1357,129 +683,19 @@ HealthHomeFrag : BaseVmFrag() { mViewModel.getMyFamilyList() } -/** - * 重新签名之后隐藏提示框*/ @Subscribe(threadMode = ThreadMode.MAIN) fun againSignEvent(event: AgainSignEvent) { signDialog.dismiss() } - -/** - * 24小时健康状态更新事件 -*/ - - @Subscribe(threadMode = ThreadMode.MAIN) - fun health24HourStatusUpdate(event: Health24HourStatusEvent) { - if (-2 != event.healthStatus) { - updateHealthDesc(event.healthStatus) - } - } - -/** - * 血糖开通/续费成功*/ - - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtOpenSuccess(event: XTangOpenEvent) { - var time = RxTimeTool.getCurrentDateTime("mm").toInt() - var sPrefix = String.format("%02d", time / 10 * 10) //当前时间对应的整分钟数 - var nowTimeStr = RxTimeTool.getCurrentDateTime("yyyy-MM-dd HH") + ":${sPrefix}" //整点时间 -// updateBloodsugarStatus(event.model, nowTimeStr) + fun LoginOrRegisterChange(event: LoginOrRegisterEvent){ + request() } -/** - * 血糖信息更新*/ - - @Subscribe(threadMode = ThreadMode.MAIN) - fun xtDataUpdate(event: XTangUpdateEvent) { - LogUtils.d("xtDataUpdate!!!") - updateBloodSugarInfo(event.info) - } - -/** - * 睡眠的原始数据*/ - - - private fun sleepOriganData(list: ArrayList): JSONArray { - var array = JSONArray() - list.forEach { - try { - var json = JSONObject() - var lastData = it as HashMap<*, *> - - var startTime = lastData["startTime"] as Long - var endTIme = lastData["endTime"] as Long - - var l = lastData["lightSleepTotal"] as Int //潜睡时长 - var d = lastData["deepSleepTotal"] as Int //深睡时长 - - json.put("startTime", startTime) - json.put("endTime", endTIme) - json.put("lightSleepTotal", l) - json.put("deepSleepTotal", d) - - var listSleepData = lastData["sleepData"] as ArrayList<*> - var sleepArray = JSONArray() - listSleepData.forEach { - var value = it as HashMap<*, *> - var jsonValue = JSONObject() - jsonValue.put("sleepStartTime", (value["sleepStartTime"] as Long)) - jsonValue.put("sleepLen", value["sleepLen"] as Int) - jsonValue.put("sleepType", value["sleepType"] as Int) - sleepArray.put(jsonValue) - } - json.put("sleepData", sleepArray) - array.put(json) - } catch (e: Exception) { - e.printStackTrace() - } - } - return array - } - -/** - * 15秒钟一次更新*/ - + fun loginOutChange(event: LoginOutEvent){ - private fun startGetDeviceInfoLive() { - getDeviceInfoJob = mainScope.launch(Dispatchers.IO) { - delay(1000 * 15) - LogUtils.d("休眠结束:${RxTimeTool.curTimeString}") - getDeviceInfoLive.postValue("") - } - } - -/** - * 更新血糖状态*/ - - -/* private fun updateBloodsugarStatus(model: Int, updateTime: String) { - mHealthAdapter.xtangInfo?.let { - it.model = model - it.time = updateTime - } - mHealthAdapter.notifyDataSetChanged() - }*/ - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == RESULT_OK) { - when (requestCode) { - 1001 -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isGpsOpen(requireContext())) {//如果GPS已打开 - LogUtils.d("GPS Is Open!") - mainScope.launch { - CommonUtils.getBlueToothMac()?.let { - connect(it) - } - } - } - } - } - } } } diff --git a/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt b/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt index c8ead98..242252c 100644 --- a/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt +++ b/app/src/main/java/com/zj365/dc/fragment/MessageFragment.kt @@ -4,9 +4,13 @@ import android.graphics.Color import android.view.View import androidx.recyclerview.widget.LinearLayoutManager import com.xty.base.fragment.BaseFragList +import com.xty.common.event.LoginOrRegisterEvent +import com.xty.common.event.LoginOutEvent import com.zj365.dc.adapter.HomeMessageAdapter import com.zj365.dc.databinding.FragMessageBinding import com.zj365.dc.vm.MessageVm +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode class MessageFragment : BaseFragList() { @@ -45,4 +49,14 @@ class MessageFragment : BaseFragList() { override fun setLayout()=binding.root + @Subscribe(threadMode = ThreadMode.MAIN) + fun LoginOrRegisterChange(event: LoginOrRegisterEvent){ + refresh() + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun loginOutChange(event: LoginOutEvent){ + + } + } \ No newline at end of file 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 b6d2ef4..cf05d98 100644 --- a/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt +++ b/app/src/main/java/com/zj365/dc/fragment/MineFrag.kt @@ -1,24 +1,29 @@ package com.zj365.dc.fragment import android.os.Build -import android.text.TextUtils import android.view.View import androidx.annotation.RequiresApi +import com.xty.base.dialog.AppUpdateDialog import com.xty.base.fragment.BaseVmFrag import com.xty.common.* import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager import com.xty.common.bracelet.YCBBlueConnectHelper +import com.xty.common.event.LoginOrRegisterEvent +import com.xty.common.event.LoginOutEvent import com.xty.common.event.MyInfoEvent import com.xty.common.util.CommonToastUtils import com.xty.common.util.CommonUtils import com.xty.network.model.SettingBean +import com.zj365.dc.BuildConfig import com.zj365.dc.activity.MainActivity import com.zj365.dc.databinding.FragMineBinding import com.zj365.health.weight.DialogTip import com.zj365.mime.vm.SettingVm import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode /** ** 我的 @@ -28,6 +33,14 @@ import org.greenrobot.eventbus.EventBus class MineFrag : BaseVmFrag() { private val binding by lazy { FragMineBinding.inflate(layoutInflater) } + + private val dialog by lazy { + AppUpdateDialog(requireActivity()) { + if (it) { + //finish() + } + } + } override fun setLayout(): View = binding.root private val defaultIcon by lazy { @@ -64,9 +77,14 @@ class MineFrag : BaseVmFrag() { } binding.mllIntegral.setOnClickListener { //积分 - bundle.clear() - bundle.putSerializable("user", user) - RouteManager.goAct(ARouterUrl.MY_INTEGRAL, bundle) + if(MMkvHelper.getLong(Const.USER_ID).toString() == "0"){ + RouteManager.goAct(ARouterUrl.LOGIN_ACT) + }else{ + bundle.clear() + bundle.putSerializable("user", user) + RouteManager.goAct(ARouterUrl.MY_INTEGRAL, bundle) + } + } binding.llAboutUs.setOnClickListener { RouteManager.goAct(ARouterUrl.ABOUT) @@ -138,10 +156,20 @@ class MineFrag : BaseVmFrag() { } } } + binding.llDataComparsion.setOnClickListener { + if(MMkvHelper.getLong(Const.USER_ID).toString() == "0"){ + RouteManager.goAct(ARouterUrl.LOGIN_ACT) + }else { + goComparePage() + } + } + + binding.llUpGraded.setOnClickListener { + mViewModel.getVersionNew(BuildConfig.VERSION_CODE) + } /*binding.mInfo.setOnClickListener { RouteManager.goAct(ARouterUrl.BASE_INFO_CHANGE, bundle) }*/ - mViewModel.getNesProg("") } override fun onResume() { @@ -153,10 +181,6 @@ class MineFrag : BaseVmFrag() { mViewModel.getMySetting() } mViewModel.getScore(1) - // mViewModel.getMyFamilyList() - // mViewModel.getNesProg("") - // mViewModel.getInviteCountRequest(CommonUtils.getMyUserId().toString()) -// mViewModel.getNotReadCount() } } @@ -167,7 +191,16 @@ class MineFrag : BaseVmFrag() { mViewModel.scoreLive.observe(this) { binding.mIntegral.text = (if (it.data.num.isNullOrEmpty()) "0" else it.data.num!!) } - //设置邀请人数 + + mViewModel.updateLive.observe(this) { + if (!it.data.url.isNullOrEmpty()) { + dialog.showUploadDialog(it.data.url!!, it.data.log,it.data.versionName ,it.data.isupdate) { show -> + } + }else{ + CommonToastUtils.showSucceedToast("已经是最新版本") + } + } + Const.mainLiveData.observe(this) { if (null == it) { @@ -225,6 +258,24 @@ class MineFrag : BaseVmFrag() { } + private fun goComparePage() { + bundle.clear() + bundle.putString("id", user?.id) + RouteManager.goAct(ARouterUrl.COMPARE_PAGE_DATA_ACT, bundle) + } + @Subscribe(threadMode = ThreadMode.MAIN) + fun onLoginOrRegisterSuccess(event: LoginOrRegisterEvent){ + mViewModel.getMySetting() + mViewModel.getScore(1) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onLoginOutUIChange(event: LoginOutEvent){ + refreshLogoutUI() + } + + + /*** 设置消息数量*/ @@ -251,4 +302,12 @@ class MineFrag : BaseVmFrag() { // } } + fun refreshLogoutUI(){ + user = null + binding.mIntegral.text = "0" + binding.mName.text = "" + binding.mPhone.text = "账户:" + binding.mImage.setImageResource(defaultIcon[0]) + } + } diff --git a/app/src/main/java/com/zj365/dc/vm/HealthVm.kt b/app/src/main/java/com/zj365/dc/vm/HealthVm.kt index aa275c7..ffa7845 100644 --- a/app/src/main/java/com/zj365/dc/vm/HealthVm.kt +++ b/app/src/main/java/com/zj365/dc/vm/HealthVm.kt @@ -122,17 +122,17 @@ class HealthVm : BaseVm() { } } - /** +/* *//** * 首页轮播图 * * @param id 机构ID - */ + *//* fun getBanners(id: String?){ startHttp(false) { var value=apiInterface().getBanners(id) value.getCodeStatus(bannerLive,nowData) } - } + }*/ /** * 首页小贴士 diff --git a/app/src/main/java/com/zj365/dc/vm/HomeVm.kt b/app/src/main/java/com/zj365/dc/vm/HomeVm.kt new file mode 100644 index 0000000..3200227 --- /dev/null +++ b/app/src/main/java/com/zj365/dc/vm/HomeVm.kt @@ -0,0 +1,83 @@ +package com.zj365.dc.vm + +import androidx.lifecycle.MutableLiveData +import com.xty.base.vm.BaseVm +import com.xty.network.model.BannerBean +import com.xty.network.model.FamilyBean +import com.xty.network.model.HomeLayoutBean +import com.xty.network.model.RespBody +import com.xty.network.model.ScienceBean +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.withContext +import org.json.JSONObject + +class HomeVm: BaseVm() { + + val bannerLive by lazy { MutableLiveData>>() } + val familyLive by lazy { MutableLiveData>>() } + + val scinceLive by lazy{MutableLiveData>>()} + + val layoutLive by lazy { MutableLiveData>() } + + + fun getBanners(id: String?,location:Int){ + startHttp(false) { + + withContext(Dispatchers.IO){ + var json = JSONObject() + json.put("userId",id) + json.put("location",location) // 1,首页顶部,2,首页中部 + var nowLine = async{apiInterface().getBanners(retrofits.getRequestBody(json.toString()))} + var showInfo = nowLine.await() + // var value=apiInterface().getBanners(retrofits.getRequestBody(json.toString())) + var dataMap = setMapValue(bannerLive.value,showInfo.data,location) + if (dataMap != null){ + bannerLive.postValue(dataMap) + } + // value.getCodeStatus(bannerLive,nowData) + } + + } + } + + fun setMapValue(map: MutableMap>?, list: MutableList?, type: Int): MutableMap>? { + if (list == null) { + return null + } else { //当得到的值不是空的时候 + var mapNew = mutableMapOf>() + if (map == null) { + mapNew[type] = list + return mapNew + } else { + map[type] = list + return map + } + } + } + + fun getMyFamilyList(){ + startHttp (false){ + var json= JSONObject() + + var request= apiInterface().getMyFamily(retrofits.getRequestBody(json.toString())) + request.getCodeStatus(familyLive,nowData) + } + } + + fun getScinceList(){ + startHttp { + var body= apiInterface().getScinceList() + body.getCodeStatus(scinceLive,nowData) + } + } + + fun getHomeLayout(){ + startHttp { + var body= apiInterface().getHomeLayout() + body.getCodeStatus(layoutLive,nowData) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/zj365/dc/vm/LoginVm.kt b/app/src/main/java/com/zj365/dc/vm/LoginVm.kt index c15f66b..f946b7b 100644 --- a/app/src/main/java/com/zj365/dc/vm/LoginVm.kt +++ b/app/src/main/java/com/zj365/dc/vm/LoginVm.kt @@ -36,14 +36,19 @@ class LoginVm() : BaseVm() { return } if (pwd.isEmpty()) { - CommonToastUtils.showToast(R.string.please_input_password) + CommonToastUtils.showToast(R.string.please_input_new_pwd) return + } else { + if (pwd.length < 6) { + CommonToastUtils.showToast(R.string.please_input_new_pwd) + return + } + } startHttp { val json = JSONObject() json.put("phone", account) json.put("userPwd", RxTool.Md5(pwd)) - //json.put("userPwd", pwd) val login = apiInterface().login(retrofits.getRequestBody(json.toString())) if (login.body()?.code == 500) { login.body()?.msg?.let { CommonToastUtils.showToast(it) } diff --git a/app/src/main/java/com/zj365/dc/vm/RegisterVm.kt b/app/src/main/java/com/zj365/dc/vm/RegisterVm.kt index 9031901..796cc7d 100644 --- a/app/src/main/java/com/zj365/dc/vm/RegisterVm.kt +++ b/app/src/main/java/com/zj365/dc/vm/RegisterVm.kt @@ -41,11 +41,7 @@ class RegisterVm : BaseVm() { fun register( phone: String, code: String, - password: String, - birthday: String? = null, - bean: WxInfoBean? = null, - simple: SimpleInfoBean? = null, - invitePhone: String? = "" + password: String ) { if (phone.isEmpty()) { CommonToastUtils.showToast(R.string.please_input_phone) @@ -69,29 +65,8 @@ class RegisterVm : BaseVm() { withContext(Dispatchers.IO) { val json = JSONObject() json.put("phone", phone) -// json.put("sex",1) //性别默认传1 - json.put("birthday", birthday) -// json.put("birthdayType",birthdayType) json.put("code", code) json.put("password", RxTool.Md5(password)) - if (!TextUtils.isEmpty(invitePhone)) { - json.put("invitePhone", invitePhone) - } - if (bean != null) { - json.put("openId", bean.openid) - json.put("name", bean.nickname) - json.put("avatarUrl", bean.headimgurl) - json.put("sex", if (bean.sex == 0) 1 else bean.sex) - } - if (simple != null) { - json.put("name", simple.name) - if (simple.avatar.isNotEmpty()) { - val image = async { upLoadImage(simple.avatar) } - val await = image.await() - json.put("avatarUrl", await.fileId) - } - json.put("sex", simple.sex) - } val register = apiInterface().register(retrofits.getRequestBody(json.toString())) saveToken(register.raw().headers) register.body()?.getCodeStatus(registerVm, nowData) @@ -115,4 +90,23 @@ class RegisterVm : BaseVm() { var body = apiInterface().uploadImage(fileRb) return body.data } + + fun login(account: String, pwd: String) { + startHttp { + val json = JSONObject() + json.put("phone", account) + json.put("userPwd", RxTool.Md5(pwd)) + //json.put("userPwd", pwd) + val login = apiInterface().login(retrofits.getRequestBody(json.toString())) + if (login.body()?.code == 500) { + login.body()?.msg?.let { CommonToastUtils.showToast(it) } + return@startHttp + } + saveToken(login.raw().headers) + val bodys = login.body() as RespBody + + MMkvHelper.put(Const.USER_ID, bodys.data.id) + bodys.getCodeStatus(mLogin, nowData, loading) + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/act_diet_management.xml b/app/src/main/res/layout/act_diet_management.xml new file mode 100644 index 0000000..0b6d031 --- /dev/null +++ b/app/src/main/res/layout/act_diet_management.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/act_info_simple.xml b/app/src/main/res/layout/act_info_simple.xml index 5977f0e..ecb2f1a 100644 --- a/app/src/main/res/layout/act_info_simple.xml +++ b/app/src/main/res/layout/act_info_simple.xml @@ -265,7 +265,7 @@ android:paddingRight="@dimen/dp_20" android:paddingLeft="@dimen/dp_20" android:background="@drawable/shape_btn_select_bg_white" - android:textColor="@color/col_8D0" + android:textColor="@color/col_02c" android:textSize="@dimen/dp_16" android:text="去绑定手表"/> diff --git a/app/src/main/res/layout/act_login.xml b/app/src/main/res/layout/act_login.xml index 25a4c35..c55953b 100644 --- a/app/src/main/res/layout/act_login.xml +++ b/app/src/main/res/layout/act_login.xml @@ -76,6 +76,7 @@ android:paddingTop="@dimen/dp_18" android:paddingBottom="@dimen/dp_18" android:singleLine="true" + android:maxLength="11" android:text="" android:textColor="@color/col_313" android:textColorHint="@color/col_c7c" diff --git a/app/src/main/res/layout/act_register.xml b/app/src/main/res/layout/act_register.xml index c052b83..7983292 100644 --- a/app/src/main/res/layout/act_register.xml +++ b/app/src/main/res/layout/act_register.xml @@ -53,6 +53,7 @@ android:hint="@string/please_input_phone" android:inputType="phone" android:layout_marginTop="@dimen/dp_62" + android:maxLength="11" android:paddingTop="@dimen/dp_18" android:paddingBottom="@dimen/dp_18" android:textColorHint="@color/col_c7c" @@ -112,10 +113,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_r25_eeeeee" - android:hint="请输入6位密码" + android:hint="请输入6位以上密码" android:paddingTop="@dimen/dp_18" android:paddingBottom="@dimen/dp_18" android:textColorHint="@color/col_c7c" + android:inputType="textPassword" android:paddingLeft="@dimen/dp_20" android:textColor="@color/col_313" android:singleLine="true" diff --git a/app/src/main/res/layout/child_healt.xml b/app/src/main/res/layout/child_healt.xml index af49960..61b5e77 100644 --- a/app/src/main/res/layout/child_healt.xml +++ b/app/src/main/res/layout/child_healt.xml @@ -14,9 +14,15 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"> + + - + android:id="@+id/rv_layout"/> - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_top_layout.xml b/app/src/main/res/layout/item_home_top_layout.xml new file mode 100644 index 0000000..9e5a72b --- /dev/null +++ b/app/src/main/res/layout/item_home_top_layout.xml @@ -0,0 +1,28 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/icon_calorie_analyze.png b/app/src/main/res/mipmap-xxhdpi/icon_calorie_analyze.png new file mode 100644 index 0000000..4bb6a77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_calorie_analyze.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_diet_more.png b/app/src/main/res/mipmap-xxhdpi/icon_diet_more.png new file mode 100644 index 0000000..1702da9 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_diet_more.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_food_diary.png b/app/src/main/res/mipmap-xxhdpi/icon_food_diary.png new file mode 100644 index 0000000..6c34740 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_food_diary.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_healthy_diet.png b/app/src/main/res/mipmap-xxhdpi/icon_healthy_diet.png new file mode 100644 index 0000000..bd3188d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_healthy_diet.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_medicine_food.png b/app/src/main/res/mipmap-xxhdpi/icon_medicine_food.png new file mode 100644 index 0000000..701a5ef Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_medicine_food.png differ diff --git a/base/src/main/java/com/xty/base/act/BaseVmAct.kt b/base/src/main/java/com/xty/base/act/BaseVmAct.kt index a200c7f..4ff3a7c 100644 --- a/base/src/main/java/com/xty/base/act/BaseVmAct.kt +++ b/base/src/main/java/com/xty/base/act/BaseVmAct.kt @@ -29,6 +29,7 @@ abstract class BaseVmAct: IBaseAct() { mViewModel.nowData.observe(this){ loadingView.dismiss() + MMkvHelper.clearUserInfo() /*if(componentName.className!="LoginAct" ){ ToastUtils.show(R.string.again_login) RxActivityTool.finishAllActivity() diff --git a/base/src/main/java/com/xty/base/fragment/BaseVmFrag.kt b/base/src/main/java/com/xty/base/fragment/BaseVmFrag.kt index 2a590f5..417906c 100644 --- a/base/src/main/java/com/xty/base/fragment/BaseVmFrag.kt +++ b/base/src/main/java/com/xty/base/fragment/BaseVmFrag.kt @@ -24,13 +24,14 @@ abstract class BaseVmFrag : IBaseFrag() { super.initView() mViewModel = setViewModel() mViewModel.loading = loadingView - /* mViewModel.nowData.observe(this) { + + mViewModel.nowData.observe(this) { loadingView.dismiss() ToastUtils.show(R.string.again_login) - RxActivityTool.finishAllActivity() + //RxActivityTool.finishAllActivity() MMkvHelper.clearUserInfo() - RouteManager.goAct(ARouterUrl.LOGIN_ACT) - }*/ + // RouteManager.goAct(ARouterUrl.LOGIN_ACT) + } observer() } diff --git a/base/src/main/res/mipmap-xhdpi/ic_upload.png b/base/src/main/res/mipmap-xhdpi/ic_upload.png index e11f3c2..90813f5 100644 Binary files a/base/src/main/res/mipmap-xhdpi/ic_upload.png and b/base/src/main/res/mipmap-xhdpi/ic_upload.png differ diff --git a/base/src/main/res/mipmap-xxhdpi/ic_upload.png b/base/src/main/res/mipmap-xxhdpi/ic_upload.png index 10337db..6fc2ade 100644 Binary files a/base/src/main/res/mipmap-xxhdpi/ic_upload.png and b/base/src/main/res/mipmap-xxhdpi/ic_upload.png differ diff --git a/common/build.gradle b/common/build.gradle index 1deabce..d1c43f0 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -103,4 +103,6 @@ dependencies { api 'com.google.zxing:core:3.3.3' api 'com.github.maning0303:MNZXingCode:V2.1.9' + api 'pub.devrel:easypermissions:3.0.0' + } \ No newline at end of file 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 a134852..2fb8e06 100644 --- a/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt +++ b/common/src/main/java/com/xty/common/arouter/ARouterUrl.kt @@ -3,17 +3,18 @@ package com.xty.common.arouter class ARouterUrl { companion object { //app - const val MAIN_ACT = "/com/zj365/dc/act/MainActivity" - const val LOGIN_ACT = "/com/zj365/dc/act/LoginAct" - const val REGIST_ACT = "/com/zj365/dc/act/RegisterAct" - const val DEVICE_ACTIVE = "/com/zj365/dc/act/OneKeyBinderDeviceAct" + 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 BASIC_INFO = "/com/zj365/dc/act/BasicInfoAct" const val BIND_WX_PHONE = "/com/zj365/dc/act/BindWxPhone" - const val DEVICE_CONNECT = "/com/zj365/dc/act/DeviceConnectAct" - const val DEVICE_CHOICE = "/com/zj365/dc/act/DeviceChoiceAct" + const val DEVICE_CONNECT = "/com/zj365/dc/activity/DeviceConnectAct" + const val DEVICE_CHOICE = "/com/zj365/dc/activity/DeviceChoiceAct" const val INFO_SIMPLE = "/com/zj365/dc/act/InfoSimpleAct" - const val DEVICE_SEARCH = "/com/zj365/dc/act/DeviceSearchBodyFatAct" - const val DEVICE_BIND = "/com/zj365/dc/act/DeviceBindAct" + const val DEVICE_SEARCH = "/com/zj365/dc/activity/DeviceSearchBodyFatAct" + const val DEVICE_BIND = "/com/zj365/dc/activity/DeviceBindAct" + const val SCIENCE_LIST = "/com/zj365/dc/activity/HealthScienceAct" // const val FAMILY_INFO="/com/zj365/dc/act/FamilyMainAct" diff --git a/common/src/main/java/com/xty/common/event/LoginOrRegisterEvent.kt b/common/src/main/java/com/xty/common/event/LoginOrRegisterEvent.kt new file mode 100644 index 0000000..4bf239d --- /dev/null +++ b/common/src/main/java/com/xty/common/event/LoginOrRegisterEvent.kt @@ -0,0 +1,4 @@ +package com.xty.common.event + +class LoginOrRegisterEvent { +} \ No newline at end of file diff --git a/common/src/main/java/com/xty/common/event/LoginOutEvent.kt b/common/src/main/java/com/xty/common/event/LoginOutEvent.kt new file mode 100644 index 0000000..6a3d171 --- /dev/null +++ b/common/src/main/java/com/xty/common/event/LoginOutEvent.kt @@ -0,0 +1,4 @@ +package com.xty.common.event + +class LoginOutEvent { +} \ No newline at end of file diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index bdfba48..c30f27d 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -144,7 +144,7 @@ 请输入账号 (手机号) 请输入机构授权码(选填) 请输入正确的手机号 - 请输入密码 + 请输入6位以上密码 请输入不少于6位数的密码 请输入不少于6位数的密码 请输入不少于6位数的密码 diff --git a/config.gradle b/config.gradle index 05b07ad..3403a64 100644 --- a/config.gradle +++ b/config.gradle @@ -6,7 +6,7 @@ ext { appId : "com.zj365.dc", minSdk : 23, targetSdk : 32, - versionCode : 1, + versionCode : 2, versionName : "1.0.0" ] @@ -28,7 +28,7 @@ ext { /* debug_url : "https://auprty.com/app/", release_url: "https://auprty.com/app/"*/ //测试环境 - debug_url : "http://175.6.39.20:8181/app/", + debug_url : "http://java01.zhongjian365.com/app/", release_url: "http://175.6.39.20:8181/app/" ] diff --git a/gradle.properties b/gradle.properties index 8b7a7a9..e1dc032 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,4 +21,5 @@ android.enableJetifier=true kotlin.code.style=official kotlin.incremental=true org.gradle.parallel=true -android.injected.testOnly=false \ No newline at end of file +android.injected.testOnly=false +android.defaults.buildfeatures.buildconfig=true \ No newline at end of file diff --git a/health/src/main/AndroidManifest.xml b/health/src/main/AndroidManifest.xml index 49573a4..d59ff76 100644 --- a/health/src/main/AndroidManifest.xml +++ b/health/src/main/AndroidManifest.xml @@ -229,6 +229,12 @@ + + \ No newline at end of file diff --git a/health/src/main/res/layout/act_datamanager_tijian.xml b/health/src/main/res/layout/act_datamanager_tijian.xml index a755409..c1b53f4 100644 --- a/health/src/main/res/layout/act_datamanager_tijian.xml +++ b/health/src/main/res/layout/act_datamanager_tijian.xml @@ -147,7 +147,7 @@ android:paddingTop="@dimen/dp_10" android:paddingBottom="@dimen/dp_10" android:text="管理" - android:textColor="@color/col_8D0" + android:textColor="@color/col_02c" android:textSize="@dimen/sp_18" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" diff --git a/health/src/main/res/layout/act_datamanager_user_medical.xml b/health/src/main/res/layout/act_datamanager_user_medical.xml index f4bcfde..57ae932 100644 --- a/health/src/main/res/layout/act_datamanager_user_medical.xml +++ b/health/src/main/res/layout/act_datamanager_user_medical.xml @@ -63,7 +63,7 @@ android:paddingTop="@dimen/dp_10" android:paddingBottom="@dimen/dp_10" android:text="管理" - android:textColor="@color/col_8D0" + android:textColor="@color/col_02c" android:textSize="@dimen/sp_18" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" diff --git a/health/src/main/res/layout/act_order_detail.xml b/health/src/main/res/layout/act_order_detail.xml index e80b206..2e7811c 100644 --- a/health/src/main/res/layout/act_order_detail.xml +++ b/health/src/main/res/layout/act_order_detail.xml @@ -15,14 +15,11 @@ android:id="@+id/llUploadSuccess" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/dp_14" - android:layout_marginTop="@dimen/dp_10" - android:layout_marginRight="@dimen/dp_14" - android:layout_marginBottom="@dimen/dp_14" + android:layout_margin="@dimen/dp_14" android:background="@drawable/shape_white_8radius" android:orientation="vertical" android:paddingLeft="@dimen/dp_16" - android:paddingTop="@dimen/dp_23" + android:paddingTop="@dimen/dp_20" android:paddingRight="@dimen/dp_16"> - diff --git a/health/src/main/res/layout/item_order_list.xml b/health/src/main/res/layout/item_order_list.xml index d190389..9e105c3 100644 --- a/health/src/main/res/layout/item_order_list.xml +++ b/health/src/main/res/layout/item_order_list.xml @@ -9,10 +9,7 @@ android:id="@+id/llUploadSuccess" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/dp_14" - android:layout_marginRight="@dimen/dp_14" android:orientation="vertical" - android:paddingTop="@dimen/dp_20" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -20,6 +17,9 @@ @@ -77,7 +77,7 @@ android:layout_marginBottom="@dimen/dp_8" android:text="交易成功" android:textColor="@color/col_D9BD" - android:textSize="@dimen/sp_12" + android:textSize="@dimen/sp_13" android:textStyle="bold" tools:ignore="HardcodedText" /> @@ -89,18 +89,21 @@ android:layout_height="wrap_content" tools:text="68.9" android:textColor="@color/col_c7c" + android:textStyle="bold" android:textSize="@dimen/sp_13" /> + + - + 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 1744c93..043ae70 100644 --- a/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt +++ b/mine/src/main/java/com/zj365/mime/act/DevInfoAct.kt @@ -1,33 +1,47 @@ package com.zj365.mime.act +import android.Manifest +import android.content.Intent +import android.net.Uri +import android.text.SpannableString +import android.text.Spanned +import android.text.TextPaint +import android.text.style.ClickableSpan import android.view.View import android.widget.ImageView import androidx.core.content.ContextCompat import com.alibaba.android.arouter.facade.annotation.Route import com.xty.base.act.BaseVmAct -import com.xty.common.bracelet.YCBBlueConnectHelper import com.xty.common.Const import com.xty.common.MMkvHelper +import com.xty.common.MyLinkedMovementMethod import com.xty.common.arouter.ARouterUrl +import com.xty.common.bracelet.YCBBlueConnectHelper import com.xty.common.event.BlueToothConnectEvent import com.xty.common.event.MyInfoEvent +import com.xty.network.MyRetrofit +import com.xty.network.model.SettingBean import com.zj365.mime.R import com.zj365.mime.databinding.ActDevInfoBinding import com.zj365.mime.vm.SettingVm import com.zj365.mime.weight.FactorySettingDialog -import com.xty.network.MyRetrofit -import com.xty.network.model.SettingBean import org.greenrobot.eventbus.EventBus +import pub.devrel.easypermissions.EasyPermissions + /** * 设备解绑 设备信息 */ @Route(path = ARouterUrl.DEV_INFO) -class DevInfoAct : BaseVmAct() { +class DevInfoAct : BaseVmAct(),EasyPermissions.PermissionCallbacks { val binding by lazy { ActDevInfoBinding.inflate(layoutInflater) } override fun setLayout() = binding.root + companion object{ + val perssionCode = 0x0001 + } + var user: SettingBean.User? = null var userId: String? = null private val unBindDialog by lazy { @@ -76,6 +90,32 @@ class DevInfoAct : BaseVmAct() { userId?.let { mViewModel.getUserDeviceInfo(userId!!) } + + + var txtCol = ContextCompat.getColor(this, R.color.col_02c) + binding.tvContactKefu.movementMethod = MyLinkedMovementMethod().getInstance() + var span = SpannableString("续期或信号问题请联系客服") + span.setSpan(object : ClickableSpan() { + override fun onClick(widget: View) { + + if(EasyPermissions.hasPermissions(this@DevInfoAct,Manifest.permission.CALL_PHONE)){ + startActivity(Intent(Intent.ACTION_CALL, Uri.parse("400 0063 365"))) + + }else{ + EasyPermissions.requestPermissions(this@DevInfoAct,"申请打电话权限",perssionCode,Manifest.permission.CALL_PHONE); + + } + } + + override fun updateDrawState(ds: TextPaint) { + super.updateDrawState(ds) + ds.color = txtCol + ds.isUnderlineText = false + } + + }, 8, span.length, Spanned.SPAN_INCLUSIVE_INCLUSIVE) + + } override fun liveObserver() { @@ -131,4 +171,11 @@ class DevInfoAct : BaseVmAct() { } } + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + startActivity(Intent(Intent.ACTION_CALL, Uri.parse("400 0063 365"))) + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + } + } \ No newline at end of file diff --git a/mine/src/main/java/com/zj365/mime/act/SettingNewAct.kt b/mine/src/main/java/com/zj365/mime/act/SettingNewAct.kt index d7eefd9..c190bc9 100644 --- a/mine/src/main/java/com/zj365/mime/act/SettingNewAct.kt +++ b/mine/src/main/java/com/zj365/mime/act/SettingNewAct.kt @@ -11,6 +11,7 @@ import com.xty.common.arouter.ARouterUrl import com.xty.common.arouter.RouteManager import com.xty.common.bracelet.YCBBlueConnectHelper import com.xty.common.event.BlueToothConnectEvent +import com.xty.common.event.LoginOutEvent import com.xty.common.work.MyWorkManger import com.xty.network.MyRetrofit import com.xty.network.model.SettingBean @@ -145,8 +146,9 @@ class SettingNewAct: BaseVmAct() { MMkvHelper.clearUserInfo()//清除用户登录信息 YCBBlueConnectHelper.disconnect()//断开蓝牙连接 YCBBlueConnectHelper.cancelTimer()//断开重连定时器 + EventBus.getDefault().post(LoginOutEvent()) EventBus.getDefault().post(BlueToothConnectEvent())//刷新蓝牙连接信息 RouteManager.goAct(ARouterUrl.LOGIN_ACT) - RxActivityTool.finishAllActivity() + finish() } } \ No newline at end of file diff --git a/mine/src/main/java/com/zj365/mime/vm/SettingVm.kt b/mine/src/main/java/com/zj365/mime/vm/SettingVm.kt index d491456..ce8d255 100644 --- a/mine/src/main/java/com/zj365/mime/vm/SettingVm.kt +++ b/mine/src/main/java/com/zj365/mime/vm/SettingVm.kt @@ -9,6 +9,7 @@ import com.xty.network.model.RespBody import com.xty.network.model.ScoreBean import com.xty.network.model.SettingBean import com.xty.network.model.UnReadMessageBean +import com.xty.network.model.Update import com.xty.network.model.UserEquipmentInformationizationBean import org.json.JSONObject @@ -24,6 +25,8 @@ class SettingVm : BaseVm() { val deviceInfo by lazy { MutableLiveData>() } val inviteCountLive by lazy { MutableLiveData>() } + val updateLive by lazy { MutableLiveData>() } + fun getNesProg(id: String) { startHttp { val json = JSONObject() @@ -135,4 +138,11 @@ class SettingVm : BaseVm() { response.getCodeStatus(destLive,nowData) } } + + fun getVersionNew(versionCode:Int) { + startHttp { + var response = apiInterface().getVersionNew(versionCode) + response.getCodeStatus(updateLive, nowData) + } + } } \ No newline at end of file diff --git a/mine/src/main/res/layout/act_dev_info.xml b/mine/src/main/res/layout/act_dev_info.xml index 4807c76..ed874f0 100644 --- a/mine/src/main/res/layout/act_dev_info.xml +++ b/mine/src/main/res/layout/act_dev_info.xml @@ -1,5 +1,5 @@ - @@ -105,4 +106,38 @@ - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/network/src/main/java/com/xty/network/ApiInterface.kt b/network/src/main/java/com/xty/network/ApiInterface.kt index d7a1db9..95b1430 100644 --- a/network/src/main/java/com/xty/network/ApiInterface.kt +++ b/network/src/main/java/com/xty/network/ApiInterface.kt @@ -480,8 +480,8 @@ interface ApiInterface { /** * 首页轮播图 */ - @GET("customer/bannerImg/listNew") - suspend fun getBanners(@Query("userId") id: String?): RespBody> + @POST("customer/bannerImg/listNew") + suspend fun getBanners(@Body rb: RequestBody): RespBody> /** * 打卡首页信息 @@ -901,6 +901,12 @@ interface ApiInterface { @GET("customer/analyse/coupeNew") suspend fun getScinceList(): RespBody> + /** + * 获取首页布局 + */ + @POST("customer/layout/list") + suspend fun getHomeLayout():RespBody + /** * 关于 */ diff --git a/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt b/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt new file mode 100644 index 0000000..672dcae --- /dev/null +++ b/network/src/main/java/com/xty/network/model/HomeLayoutBean.kt @@ -0,0 +1,18 @@ +package com.xty.network.model + +data class HomeLayoutBean( + val middle:ArrayList, + val top:ArrayList +){ + + data class HomeChildBean( + var id:Int, + var name:String, //名称 + var imageUrl:String, //图标 + var type:Int, + var jumpType:Int, //1,原生跳转,2,h5跳转,3,小程序跳转 + var jumpUrl:String?, //跳转地址或编码 + var status:Int, + var seq:String + ) +}