|
|
|
//
|
|
|
|
// HealthHomeViewControllers.swift
|
|
|
|
// FireBoltt
|
|
|
|
//
|
|
|
|
// Created by Sheldon on 2021/9/19.
|
|
|
|
// Copyright © 2021 Sheldon. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import UIKit
|
|
|
|
|
|
|
|
fileprivate enum Resuable {
|
|
|
|
static let stepCell = ReusableCell<HealthStepItemCell>()
|
|
|
|
static let helathCell = ReusableCell<HelathItemCell>()
|
|
|
|
static let blankCell = ReusableCell<CollectionViewCell>()
|
|
|
|
}
|
|
|
|
|
|
|
|
// MARK: - 常量
|
|
|
|
private struct Metric {
|
|
|
|
static let stepItemSize = CGSize(width: kScreenW, height: kScaleWidth(215))
|
|
|
|
static let healthItemSize = CGSize(width: kScreenW / 2.0 - 13, height: kScaleWidth(224))
|
|
|
|
static let blankItemSize = CGSize(width: 13, height: kScaleWidth(224))
|
|
|
|
}
|
|
|
|
|
|
|
|
class HealthHomeViewControllers: CollectionController {
|
|
|
|
|
|
|
|
lazy var navigationBar: HealthNavigationBar = {
|
|
|
|
let navbar = HealthNavigationBar()
|
|
|
|
navbar.gradient(colors: [kHexColor(0xFFF0DE), kHexColor(0xFFFFFF)], locations: nil, autoLaoutFrame: CGRect(x: 0, y: 0, width: kScreenW, height: kScaleWidth(90)))
|
|
|
|
return navbar
|
|
|
|
}()
|
|
|
|
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
|
|
super.viewWillDisappear(animated)
|
|
|
|
}
|
|
|
|
|
|
|
|
override func viewDidLoad() {
|
|
|
|
super.viewDidLoad()
|
|
|
|
// view.backgroundColor = kRGBA(233, 247, 255, 0.5)
|
|
|
|
// 未设置用户信息
|
|
|
|
guard let _ = UserDefaultsManagerFrieBoltt.getUserInfo() else {
|
|
|
|
// 未设置用户信息
|
|
|
|
navigator.show(segue: .guideUserInfo, sender: self, transition: .modal)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override func makeUI() {
|
|
|
|
super.makeUI()
|
|
|
|
// 设置布局
|
|
|
|
let flowLayout = UICollectionViewFlowLayout()
|
|
|
|
flowLayout.itemSize = Metric.stepItemSize
|
|
|
|
flowLayout.minimumInteritemSpacing = 0
|
|
|
|
flowLayout.minimumLineSpacing = 0
|
|
|
|
collectionViewFlowLayout = flowLayout
|
|
|
|
// 设置视图
|
|
|
|
collectionView.backgroundColor = kRGBA(233, 247, 255, 0.5)
|
|
|
|
collectionView.register(Resuable.stepCell)
|
|
|
|
collectionView.register(Resuable.helathCell)
|
|
|
|
collectionView.register(Resuable.blankCell)
|
|
|
|
collectionView.rx.setDelegate(self).disposed(by: rx.disposeBag)
|
|
|
|
view.addSubview(navigationBar)
|
|
|
|
layout()
|
|
|
|
}
|
|
|
|
|
|
|
|
func layout() {
|
|
|
|
navigationBar.snp.makeConstraints { (make) in
|
|
|
|
make.top.equalToSuperview()
|
|
|
|
make.width.equalTo(kScreenW)
|
|
|
|
make.height.equalTo(kBatteryH + 70)
|
|
|
|
}
|
|
|
|
collectionView.snp.makeConstraints { (make) in
|
|
|
|
make.top.equalTo(navigationBar.snp.bottom)
|
|
|
|
make.left.right.bottom.equalToSuperview()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override func bindViewModel() {
|
|
|
|
guard let viewModel = viewModel as? HealthHomeViewModels else { return }
|
|
|
|
let rxDataSource = RxCollectionViewSectionedReloadDataSource
|
|
|
|
<HealthSection>(
|
|
|
|
configureCell: { (_ , cv, indexPath, model) -> UICollectionViewCell in
|
|
|
|
switch model {
|
|
|
|
case .stepItem(let viewModel):
|
|
|
|
let cell = cv.dequeue(Resuable.stepCell, for: indexPath)
|
|
|
|
cell.bind(model: viewModel)
|
|
|
|
return cell
|
|
|
|
case .healthItem(let viewModel):
|
|
|
|
let cell = cv.dequeue(Resuable.helathCell, for: indexPath)
|
|
|
|
cell.bind(model: viewModel)
|
|
|
|
return cell
|
|
|
|
case .blankItem:
|
|
|
|
let cell = cv.dequeue(Resuable.blankCell, for: indexPath)
|
|
|
|
return cell
|
|
|
|
default: return UICollectionViewCell()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
viewModel.userIcon
|
|
|
|
.bind(to: navigationBar.fb_headImg.rx.image)
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
viewModel.userNickname
|
|
|
|
.bind(to: navigationBar.fb_nicknameLabel.rx.text)
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
BluetoothService.shared.deviceConnectState
|
|
|
|
.bind(to: navigationBar.fb_statusBtn.rx.isSelected)
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
BluetoothService.shared.powerState
|
|
|
|
.bind(to: navigationBar.fb_powerBtn.rx.image())
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
viewModel.relay
|
|
|
|
.bind(to: collectionView.rx.items(dataSource: rxDataSource))
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
// DFU设备升级
|
|
|
|
viewModel.dfuDeviceUpgrate
|
|
|
|
.subscribe(onNext: { [weak self] viewModel in
|
|
|
|
guard let `self` = self else { return }
|
|
|
|
if let currenVC = currentViewController(), currenVC.isKind(of: FirmwareUpdateViewControllers.self) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
currentTabbarController()?.selectedIndex = 0
|
|
|
|
self.navigator.show(segue: .firmwareUpdate(viewModel: viewModel), sender: self)
|
|
|
|
})
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
}
|
|
|
|
|
|
|
|
override func handleEvent() {
|
|
|
|
navigationBar.rx.tap
|
|
|
|
.subscribe(onNext: { [weak self] _ in
|
|
|
|
let viewModel = UserInfoViewModel()
|
|
|
|
self?.navigator.show(segue: .userInfo(viewModel: viewModel), sender: self)
|
|
|
|
})
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
collectionView.rx.modelSelected(HealthSectionItem.self)
|
|
|
|
.subscribe(onNext: { [weak self] (item) in
|
|
|
|
guard let `self` = self else { return }
|
|
|
|
switch item {
|
|
|
|
case .stepItem(_):
|
|
|
|
let viewModel = StepViewModels()
|
|
|
|
self.navigator.show(segue: .step(viewModel: viewModel), sender: self)
|
|
|
|
case .healthItem(let viewModel):
|
|
|
|
switch viewModel.type {
|
|
|
|
case .sleep:
|
|
|
|
self.navigator.show(segue: .sleep(viewModel: SleepViewModels()), sender: self)
|
|
|
|
case .heartRate:
|
|
|
|
self.navigator.show(segue: .heartRate(viewModel: HRViewModels()), sender: self)
|
|
|
|
case .temperature:
|
|
|
|
self.navigator.show(segue: .temperature(viewModel: TemperatureViewModels()), sender: self)
|
|
|
|
case .bloodPressure:
|
|
|
|
self.navigator.show(segue: .bloodPressure(viewModel: BloodPressureViewModels()), sender: self)
|
|
|
|
case .bloodOxygen:
|
|
|
|
self.navigator.show(segue: .bloodOxygen(viewModel: BloodOxygenViewModels()), sender: self)
|
|
|
|
default: break
|
|
|
|
}
|
|
|
|
default: break
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.disposed(by: rx.disposeBag)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
extension HealthHomeViewControllers: UICollectionViewDelegateFlowLayout {
|
|
|
|
|
|
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
|
|
|
guard let viewModel = viewModel as? HealthHomeViewModels else { return Metric.healthItemSize }
|
|
|
|
let item = viewModel.relay.value[indexPath.section].items[indexPath.row]
|
|
|
|
switch item {
|
|
|
|
case .stepItem(_): return Metric.stepItemSize
|
|
|
|
case .healthItem(_): return Metric.healthItemSize
|
|
|
|
case .blankItem: return Metric.blankItemSize
|
|
|
|
default: return Metric.healthItemSize
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|