You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
6.5 KiB

2 years ago
//
// SedentaryViewControllers.swift
// FireBoltt
2 years ago
//
// Created by lemo. on 2020/3/30.
// Copyright © 2020 Sheldon. All rights reserved.
//
import UIKit
// MARK:-
private enum Resuable {
static let tableViewCell = ReusableCell<CommonTableViewCell>(nibName: "CommonTableViewCell")
static let doubleTimePickerCell = ReusableCell<DoubleTimePickerCell>(identifier: "DoubleTimePickerCell", nib: nil)
}
fileprivate struct Metric {
static let descTextColor = kHexColor(0x96A3B3)
}
class SedentaryViewControllers: TableViewController {
2 years ago
var sedentaryModel = SedentaryModel()
override func viewDidLoad() {
super.viewDidLoad()
monitor()
}
override func makeUI() {
super.makeUI()
let rightItem = UIBarButtonItem.baseBarButtonItem(normalImg: "", highImg: nil, title: MultiLanguageKey_FB.saveFB.localized, target: self, action: #selector(clickSave))
2 years ago
navigationItem.rightBarButtonItem = rightItem
tableViewStyle = .grouped
tableView.rx.setDelegate(self).disposed(by: rx.disposeBag)
tableView.register(Resuable.doubleTimePickerCell)
tableView.register(Resuable.tableViewCell)
tableView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
}
override func bindViewModel() {
guard let viewModel = viewModel as? SedentaryViewModels else { return }
2 years ago
sedentaryModel = viewModel.sedentaryModel
let dataSource = RxTableViewSectionedReloadDataSource<MultipleSectionModel>.init(configureCell: { [weak self] (ds, tv, indexPath, _) -> UITableViewCell in
switch ds[indexPath] {
case .SinglePicker(_, _):
return UITableViewCell()
case .TableViewCellModel(let cellModel):
let cell: CommonTableViewCell = tv.dequeue(Resuable.tableViewCell, for: indexPath)
cell.bindViewModel(model: cellModel)
cell.rightSwitch.rx.isOn
.skip(1)
.subscribe(onNext: { (isOn) in
self?.sedentaryModel.IsOpen = isOn
})
.disposed(by: cell.cellDisposeBag)
return cell
case .DoubleTimePicker(let leftTitle, let rightTitle, let selectedItems):
let cell: DoubleTimePickerCell = tv.dequeue(Resuable.doubleTimePickerCell, for: indexPath)
cell.selectionStyle = .none
cell.fbbegintimeLabel.text = leftTitle
cell.fbendtimeLabel.text = rightTitle
2 years ago
if indexPath.section == 2 {
cell.type = 1
}else {
cell.type = 0
}
cell.pickerColsure = { (items) in
if indexPath.section == 2 {
if let sittingTime = items.first {
self?.sedentaryModel.SittingTime = sittingTime
}
if let sittingThreshold = items.last {
self?.sedentaryModel.SittingThreshold = sittingThreshold
}
}else {
self?.sedentaryModel.StartHour = items.first?.components(separatedBy: ":").first ?? "00"
self?.sedentaryModel.EndHour = items.last?.components(separatedBy: ":").first ?? "00"
}
}
cell.selectedItems = selectedItems
return cell
}
})
viewModel.fbdataVariable
2 years ago
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: rx.disposeBag)
tableView.rx.itemSelected
.filter { $0.section == 3 }
.subscribe(onNext: { [weak self] _ in
guard let `self` = self else { return }
let repeatVM = RepeatViewModels(cycle: self.sedentaryModel.Cycle)
2 years ago
repeatVM.updateCycle
.subscribe(onNext: { (cycleStr) in
guard let viewModel = self.viewModel as? SedentaryViewModels else { return }
2 years ago
self.sedentaryModel.Cycle = cycleStr
viewModel.loadData(model: self.sedentaryModel)
})
.disposed(by: repeatVM.rx.disposeBag)
self.navigator.show(segue: .repeatSet(viewModel: repeatVM), sender: self)
})
.disposed(by: rx.disposeBag)
}
@objc func clickSave() {
let startHour = (sedentaryModel.StartHour as NSString).integerValue
let endHour = (sedentaryModel.EndHour as NSString).integerValue
if startHour >= endHour {
SVProgressHUD.showError(withStatus: MultiLanguageKey_FB.timeTipFB.localized)
2 years ago
return
}
SVProgressHUD.show()
if BluetoothService.shared.checkBleCmdEnable(isShow: true) {
2 years ago
BluetoothService.shared.setSedentaryWithBleCmdType(model: sedentaryModel)
}
}
func monitor() {
///
Observable.of(kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdSuccess)),
kNotificationCenter.rx.notification(Notification.Name(rawValue: CmdTimeout)))
.merge()
.subscribe(onNext: { [weak self] notification in
guard let `self` = self, let cmd = notification.object as? BleCMD_FireBoltt else { return }
2 years ago
let isSuccess = notification.name.rawValue == CmdSuccess
switch cmd {
case .setSedentary:
if isSuccess {
GlobalDeviceProfileModel.shareInstance.sedentaryModel = self.sedentaryModel
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setSuccessFB.localized)
2 years ago
self.navigationController?.popViewController(animated: true)
return
}
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setFailFB.localized)
2 years ago
default: break
}
})
.disposed(by: rx.disposeBag)
}
}
extension SedentaryViewControllers: UITableViewDelegate {
2 years ago
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.section {
case 0: return kScaleHeight(50)
case 1: return kScaleHeight(178)
case 2: return kScaleHeight(184)
default: return kScaleHeight(50)
}
}
}