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.
154 lines
6.5 KiB
154 lines
6.5 KiB
// |
|
// SedentaryViewControllers.swift |
|
// FireBoltt |
|
// |
|
// 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 { |
|
|
|
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)) |
|
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 } |
|
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 |
|
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 |
|
.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) |
|
repeatVM.updateCycle |
|
.subscribe(onNext: { (cycleStr) in |
|
guard let viewModel = self.viewModel as? SedentaryViewModels else { return } |
|
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) |
|
return |
|
} |
|
SVProgressHUD.show() |
|
if BluetoothService.shared.checkBleCmdEnable(isShow: true) { |
|
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 } |
|
let isSuccess = notification.name.rawValue == CmdSuccess |
|
switch cmd { |
|
case .setSedentary: |
|
if isSuccess { |
|
GlobalDeviceProfileModel.shareInstance.sedentaryModel = self.sedentaryModel |
|
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setSuccessFB.localized) |
|
self.navigationController?.popViewController(animated: true) |
|
return |
|
} |
|
SVProgressHUD.showSuccess(withStatus: MultiLanguageKey_FB.setFailFB.localized) |
|
default: break |
|
} |
|
}) |
|
.disposed(by: rx.disposeBag) |
|
} |
|
|
|
} |
|
|
|
extension SedentaryViewControllers: UITableViewDelegate { |
|
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) |
|
} |
|
} |
|
}
|
|
|