diff --git a/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt b/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt index 001cbc6..e8454c9 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/api/HomeApi.kt @@ -1,10 +1,10 @@ package com.xjjk.healthyclients.data.api +import com.xjjk.healthyclients.bean.home.EncryptInfoBean import com.xjjk.healthyclients.bean.home.HomeBannerBean import com.xjjk.healthyclients.bean.home.HomeNoticeBean import com.xjjk.healthyclients.bean.home.HomeWatchAllDataBean import com.xjjk.healthyclients.bean.home.WatchInfoBean -import com.xjjk.healthyclients.bean.home.EncryptInfoBean import com.xjjk.healthyclients.bean.user.CheckInBean import com.xjjk.healthyclients.bean.user.PointDetailBean import com.xjjk.healthyclients.bean.user.PointRank @@ -92,5 +92,16 @@ interface HomeApi { @GET("/health-system/api/sys/encryptInfo") suspend fun getSysEnCryptInfo(@QueryMap params: MutableMap): ApiResponse + /** + * 绑定手表 + */ + @GET("/health-watch/watch/watchDevice/app/bindDevice") + suspend fun getBindDevice(@QueryMap params: MutableMap): ApiResponse + /** + * 解绑手表 + */ + @GET("/health-watch/watch/watchDevice/app/unbundleDevice") + suspend fun getUnbundleDevice(@QueryMap params: MutableMap): ApiResponse + } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt b/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt index 79f1463..304b073 100644 --- a/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt +++ b/app/src/main/java/com/xjjk/healthyclients/data/repository/HomeRepository.kt @@ -109,4 +109,18 @@ object HomeRepository : BaseRepository() { service.getSysEnCryptInfo(map) } } + suspend fun getBindDevice(watchNo: String?): ApiResponse { + return apiCall { + val map = mutableMapOf() + map["watchNo"] = watchNo + service.getBindDevice(map) + } + } + suspend fun getUnbundleDevice(watchNo: String?): ApiResponse { + return apiCall { + val map = mutableMapOf() + map["watchNo"] = watchNo + service.getUnbundleDevice(map) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt b/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt index f6cf957..55c1320 100644 --- a/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt +++ b/app/src/main/java/com/xjjk/healthyclients/fragment/HomeFragment.kt @@ -16,6 +16,7 @@ import com.xjjk.healthyclients.R import com.xjjk.healthyclients.adapter.common.MultiItemTypeAdapter import com.xjjk.healthyclients.base.BaseVMBFragment import com.xjjk.healthyclients.bean.guidance.GuidanceListBean +import com.xjjk.healthyclients.bean.home.WatchInfoBean import com.xjjk.healthyclients.databinding.FragmentHomeBinding import com.xjjk.healthyclients.event.HomeTabChangeEvent import com.xjjk.healthyclients.retrofit.UrlConfig @@ -35,6 +36,7 @@ import com.xjjk.healthyclients.ui.viewmodel.HomeViewModel import com.xjjk.healthyclients.utils.ConstantUtils import com.xjjk.healthyclients.utils.IMInputActionSettingUtils import com.xjjk.healthyclients.utils.TUIUtils +import com.xjjk.healthyclients.view.WatchBindDialog import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest @@ -48,12 +50,15 @@ class HomeFragment : BaseVMBFragment(R.layout.fragment_home), SwipeRefreshLayout.OnRefreshListener { + var watchBindDialog: WatchBindDialog ?=null + var stringList: MutableList = mutableListOf() var mDoctorList = arrayListOf() var mGuidanceFragmentDoctorAdapter: GuidanceFragmentDoctorAdapter? = null var REQUEST_DURATION = 1000 * 120L var noticeTime = REQUEST_DURATION + var watchInfo: WatchInfoBean? = null /** 通知轮播协程 Job,重新启动前先取消旧任务,防止多协程并发叠加 */ private var noticeJob: Job? = null @@ -62,6 +67,14 @@ class HomeFragment : override fun initView(root: View?, savedInstanceState: Bundle?) { mBinding.swipeRefresh.initColors() mBinding.swipeRefresh.setOnRefreshListener(this@HomeFragment) + watchBindDialog = WatchBindDialog(requireContext()) { watchName, type -> + // 0 绑定 1 解绑 + if (type == 0) { + mViewModel.getBindDevice(watchName) + } else { + mViewModel.getUnbundleDevice(watchName) + } + } var manager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) mBinding.layoutItem3.fragmentGuidanceRvDoctor.layoutManager = manager @@ -136,13 +149,35 @@ class HomeFragment : layoutItem1.homeHeadTab4, layoutItem3.tvDoctorMore ) } - mBinding.watchView.mBinding.layoutWatchMore.setOnClickListener{ + mBinding.watchView.mBinding.imgWatchMore.setOnClickListener { if (DataStoreManager.isLogin()) { - EventBus.getDefault().post(HomeTabChangeEvent().apply { index = 3 }) + if (watchInfo?.hasWatch==true){ + EventBus.getDefault().post(HomeTabChangeEvent().apply { index = 3 }) + }else { + showWatchBindDialog() + } } else { toActivity(LoginActivity::class.java) } } + mBinding.watchView.mBinding.watchName.setOnClickListener { + if (DataStoreManager.isLogin()) { + if (watchInfo?.hasWatch==true){ + showWatchBindDialog(watchInfo?.watchNo) + } + } else { + toActivity(LoginActivity::class.java) + } + } + + mBinding.watchView.mBinding.btnBindWatch.setOnClickListener { + showWatchBindDialog() + } + } + + private fun showWatchBindDialog(watchId: String? = null) { + watchBindDialog?.showWatchInfo(watchId) + } override fun onClick(v: View?) { @@ -180,7 +215,7 @@ class HomeFragment : return } requireContext().startWebActivity( - UrlConfig.getBankH5Url()+ "?param=" + value, + UrlConfig.getBankH5Url() + "?param=" + value, isFull = true, myTitle = "健康银行", hideStatus = true @@ -320,24 +355,34 @@ class HomeFragment : } } } - lifecycleScope.launch{ - repeatOnLifecycle(Lifecycle.State.CREATED){ + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { mViewModel.watchInfo.collectLatest { bean -> + watchInfo = bean mBinding.watchView.setWatchInfo(bean) - if (bean?.hasWatch==true) {//有手表的情况下去获取手表数据 + if (bean?.hasWatch == true) {//有手表的情况下去获取手表数据 mViewModel.getHomeWatchData(DateUtil.nowStringDateShort) } } } } - lifecycleScope.launch{ - repeatOnLifecycle(Lifecycle.State.CREATED){ + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { mViewModel.watchAllData.collectLatest { bean -> mBinding.watchView.setWatchAllData(bean) } } } + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + mViewModel.watchBindStatus.collectLatest { + showToast(it) + watchBindDialog?.cancel() + mViewModel.getHomeWatchInfo(DataStoreManager.getUserId()) + } + } + } // lifecycleScope.launch{ // repeatOnLifecycle(Lifecycle.State.CREATED){ // mViewModel.enCryptInfoUrl.collectLatest { url -> diff --git a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt index c0e65e2..ea81455 100644 --- a/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/xjjk/healthyclients/ui/viewmodel/HomeViewModel.kt @@ -28,6 +28,7 @@ class HomeViewModel : BaseViewModel() { //手表 var watchInfo = MutableSharedFlow() var watchAllData = MutableSharedFlow?>() + var watchBindStatus = MutableSharedFlow() var isRefreshing = MutableStateFlow(false) @@ -177,6 +178,29 @@ class HomeViewModel : BaseViewModel() { } ) } + fun getBindDevice(str: String?) { + launch( + { + handleRequest( + HomeRepository.getBindDevice(str), + successBlock = { + watchBindStatus.emit(it.result) + }) + } + ) + } + fun getUnbundleDevice(str: String?) { + launch( + { + handleRequest( + HomeRepository.getUnbundleDevice(str), + successBlock = { + watchBindStatus.emit(it.result) + + }) + } + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/xjjk/healthyclients/view/WatchBindDialog.kt b/app/src/main/java/com/xjjk/healthyclients/view/WatchBindDialog.kt index dca5279..d7163c3 100644 --- a/app/src/main/java/com/xjjk/healthyclients/view/WatchBindDialog.kt +++ b/app/src/main/java/com/xjjk/healthyclients/view/WatchBindDialog.kt @@ -4,39 +4,33 @@ import android.app.AlertDialog import android.content.Context import android.graphics.Color import android.graphics.drawable.ColorDrawable -import android.os.Build import android.os.Bundle +import android.text.TextUtils import android.view.Gravity import android.view.LayoutInflater -import android.view.View import android.view.WindowManager import android.widget.LinearLayout -import android.widget.RatingBar import android.widget.Toast import androidx.databinding.DataBindingUtil +import com.sw.healthyclients.data.local.DataStoreManager import com.sw.healthyclients.view.CustomToast import com.xjjk.healthyclients.R -import com.xjjk.healthyclients.databinding.DialogAppraiseBinding +import com.xjjk.healthyclients.databinding.DialogBindWatchBinding +import com.xjjk.healthyclients.superfuntion.orEmptyDefault -class AppraiseDialog constructor( - context: Context -) : AlertDialog(context) { - lateinit var mOnSubmitClickListener: OnSubmitClickListener - lateinit var binding: DialogAppraiseBinding +class WatchBindDialog(context: Context, var listener: (String,Int) -> Unit) : AlertDialog(context) { + lateinit var binding: DialogBindWatchBinding + private var type = 0 // 0 绑定 1 解绑 init { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - create() - } else { - onCreate(null) - } + create() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.inflate( LayoutInflater.from(context), - R.layout.dialog_appraise, null, false + R.layout.dialog_bind_watch, null, false ) setContentView(binding.root) window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))//设置dialog背景透明 @@ -46,73 +40,37 @@ class AppraiseDialog constructor( LinearLayout.LayoutParams.WRAP_CONTENT );//设置对话框大小 window?.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) - binding.btnSubmit.setOnClickListener { - if (getRating()==0F) { - CustomToast.makeText(context, "您还没有选择星级评分", Toast.LENGTH_SHORT).show() - return@setOnClickListener + setCanceledOnTouchOutside(true) + binding.confirm.setOnClickListener { + if (binding.etWatchid.text.toString().isEmpty()) { + CustomToast.makeText(context, "请输入序列号", Toast.LENGTH_SHORT).show() + } else { + listener.invoke(binding.etWatchid.text.toString(),type) } - if (this::mOnSubmitClickListener.isInitialized) { - mOnSubmitClickListener?.onSubmitClick(this@AppraiseDialog) - } - this.cancel() } binding.btnClose.setOnClickListener { - if (this::mOnSubmitClickListener.isInitialized) { - mOnSubmitClickListener?.onCancelClick(this@AppraiseDialog) - } this.cancel() } } - fun setOnSubmitClickListener(onSubmitClickListener: OnSubmitClickListener): AppraiseDialog { - this.mOnSubmitClickListener = onSubmitClickListener - return this + fun showWatchInfo(watchId: String? = null) { + show() + binding.etUserid.setText(DataStoreManager.getUserInfo().workNo) + binding.etUsername.setText(DataStoreManager.getUserInfo().realname) + binding.etWatchid.setText(watchId.orEmptyDefault("")) + if (TextUtils.isEmpty(watchId)) { + binding.etWatchid.isEnabled = true + binding.confirm.setText("绑定") + type = 0 + } else { + binding.etWatchid.isEnabled = false + binding.confirm.setText("解绑") + type = 1 + + } + } - interface OnSubmitClickListener { - fun onSubmitClick(viewDialog: AppraiseDialog) - fun onCancelClick(viewDialog: AppraiseDialog){} - } - fun setDialogTitle(title: String, titleSize: Float = 18f): AppraiseDialog { - binding.tvTitle.visibility = View.VISIBLE - binding.tvTitle.text = title - binding.tvTitle.textSize = titleSize - return this - } - - fun setContentHint(text: String, textSize: Float = 13f): AppraiseDialog { - binding.etAppraise.hint = text - binding.etAppraise.textSize = textSize - return this - } - - fun setBtnText(text: String, btnTextSize: Float = 18f): AppraiseDialog { - binding.btnSubmit.text = text - binding.btnSubmit.textSize = btnTextSize - return this - } - - fun setDialogCancelable(flag: Boolean): AppraiseDialog { - setCancelable(flag) - return this - } - - fun getAppraiseContext(): String { - return binding.etAppraise.text.trim().toString() - } - - fun getRatingBar(): RatingBar { - return binding.ratingBar - } - fun getRating(): Float { - return getRatingBar().rating - } - /** - * 获取匿名状态 - */ - fun getAnonymityStatus(): Boolean { - return binding.cbAnonymity.isChecked - } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_bind_watch.xml b/app/src/main/res/layout/dialog_bind_watch.xml index ccab95e..198df12 100644 --- a/app/src/main/res/layout/dialog_bind_watch.xml +++ b/app/src/main/res/layout/dialog_bind_watch.xml @@ -10,73 +10,164 @@ + android:background="@drawable/rectangle_round_top_corner8_white"> + - + + - + + + + + + + + + + + - -