mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-27 16:33:38 +00:00
1. add an new screen (layout) 2. add TR icon for the bottom tabbar 3. share current location from the TR PP 4. refactor TR manager to properly handle state updates and pass them to the LiveActivityManager and PlacePage 5. add init/update with TrackInfo/EleInfo methods to the PlacePageData and PlacePagePreviewData to update the PP state Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
477 lines
16 KiB
Swift
477 lines
16 KiB
Swift
enum GlobalStyleSheet: String, CaseIterable {
|
|
case tableView = "TableView"
|
|
case tableCell = "TableCell"
|
|
case tableViewCell = "MWMTableViewCell"
|
|
case defaultTableViewCell
|
|
case tableViewHeaderFooterView = "TableViewHeaderFooterView"
|
|
case defaultSearchBar
|
|
case searchBar = "SearchBar"
|
|
case navigationBar = "NavigationBar"
|
|
case navigationBarItem = "NavigationBarItem"
|
|
case checkmark = "Checkmark"
|
|
case `switch` = "Switch"
|
|
case pageControl = "PageControl"
|
|
case starRatingView = "StarRatingView"
|
|
case difficultyView = "DifficultyView"
|
|
case divider = "Divider"
|
|
case solidDivider = "SolidDivider"
|
|
case background = "Background"
|
|
case pressBackground = "PressBackground"
|
|
case primaryBackground = "PrimaryBackground"
|
|
case secondaryBackground = "SecondaryBackground"
|
|
case menuBackground = "MenuBackground"
|
|
case bottomTabBarButton = "BottomTabBarButton"
|
|
case trackRecordingWidgetButton = "TrackRecordingWidgetButton"
|
|
case blackOpaqueBackground = "BlackOpaqueBackground"
|
|
case blueBackground = "BlueBackground"
|
|
case fadeBackground = "FadeBackground"
|
|
case errorBackground = "ErrorBackground"
|
|
case blackStatusBarBackground = "BlackStatusBarBackground"
|
|
case presentationBackground = "PresentationBackground"
|
|
case clearBackground = "ClearBackground"
|
|
case border = "Border"
|
|
case tabView = "TabView"
|
|
case dialogView = "DialogView"
|
|
case alertView = "AlertView"
|
|
case alertViewTextFieldContainer = "AlertViewTextFieldContainer"
|
|
case alertViewTextField = "AlertViewTextField"
|
|
case searchStatusBarView = "SearchStatusBarView"
|
|
case flatNormalButton = "FlatNormalButton"
|
|
case flatNormalButtonBig = "FlatNormalButtonBig"
|
|
case flatNormalTransButton = "FlatNormalTransButton"
|
|
case flatNormalTransButtonBig = "FlatNormalTransButtonBig"
|
|
case flatGrayTransButton = "FlatGrayTransButton"
|
|
case flatPrimaryTransButton = "FlatPrimaryTransButton"
|
|
case flatRedTransButton = "FlatRedTransButton"
|
|
case flatRedTransButtonBig = "FlatRedTransButtonBig"
|
|
case flatRedButton = "FlatRedButton"
|
|
case moreButton = "MoreButton"
|
|
case editButton = "EditButton"
|
|
case rateAppButton = "RateAppButton"
|
|
case termsOfUseLinkText = "TermsOfUseLinkText"
|
|
case termsOfUseGrayButton = "TermsOfUseGrayButton"
|
|
case badge = "Badge"
|
|
case blue = "MWMBlue"
|
|
case black = "MWMBlack"
|
|
case other = "MWMOther"
|
|
case gray = "MWMGray"
|
|
case separator = "MWMSeparator"
|
|
case white = "MWMWhite"
|
|
case datePickerView = "DatePickerView"
|
|
case valueStepperView = "ValueStepperView"
|
|
case grabber
|
|
case modalSheetBackground
|
|
case modalSheetContent
|
|
case toastBackground
|
|
case toastLabel
|
|
}
|
|
|
|
extension GlobalStyleSheet: IStyleSheet {
|
|
func styleResolverFor(colors: IColors, fonts: IFonts) -> Theme.StyleResolver {
|
|
switch self {
|
|
case .tableView:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.separatorColor = colors.blackDividers
|
|
s.exclusions = [String(describing: UIDatePicker.self)]
|
|
}
|
|
case .tableCell:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.tintColor = colors.linkBlue
|
|
s.fontColorDetailed = colors.blackSecondaryText
|
|
s.backgroundColorSelected = colors.pressBackground
|
|
s.exclusions = [String(describing: UIDatePicker.self), "_UIActivityUserDefaultsActivityCell"]
|
|
}
|
|
case .tableViewCell:
|
|
return .addFrom(Self.tableCell) { s in
|
|
}
|
|
case .defaultTableViewCell:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
}
|
|
case .tableViewHeaderFooterView:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.fontColor = colors.blackSecondaryText
|
|
}
|
|
case .defaultSearchBar:
|
|
return .add { s in
|
|
s.backgroundColor = colors.pressBackground
|
|
s.barTintColor = colors.clear
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.fontColorDetailed = UIColor.white
|
|
s.tintColor = colors.blackSecondaryText
|
|
}
|
|
case .searchBar:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.barTintColor = colors.primary
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.fontColorDetailed = UIColor.white
|
|
s.tintColor = colors.blackSecondaryText
|
|
}
|
|
case .navigationBar:
|
|
return .add { s in
|
|
s.barTintColor = colors.primary
|
|
s.tintColor = colors.whitePrimaryText
|
|
s.backgroundImage = UIImage()
|
|
s.shadowImage = UIImage()
|
|
s.font = fonts.header
|
|
s.fontColor = colors.whitePrimaryText
|
|
}
|
|
case .navigationBarItem:
|
|
return .add { s in
|
|
s.font = fonts.regular18
|
|
s.fontColor = colors.whitePrimaryText
|
|
s.fontColorDisabled = UIColor.lightGray
|
|
s.fontColorHighlighted = colors.whitePrimaryTextHighlighted
|
|
s.tintColor = colors.whitePrimaryText
|
|
}
|
|
case .checkmark:
|
|
return .add { s in
|
|
s.onTintColor = colors.linkBlue
|
|
s.offTintColor = colors.blackHintText
|
|
}
|
|
case .switch:
|
|
return .add { s in
|
|
s.onTintColor = colors.linkBlue
|
|
}
|
|
case .pageControl:
|
|
return .add { s in
|
|
s.pageIndicatorTintColor = colors.blackHintText
|
|
s.currentPageIndicatorTintColor = colors.blackSecondaryText
|
|
s.backgroundColor = colors.white
|
|
}
|
|
case .starRatingView:
|
|
return .add { s in
|
|
s.onTintColor = colors.ratingYellow
|
|
s.offTintColor = colors.blackDividers
|
|
}
|
|
case .difficultyView:
|
|
return .add { s in
|
|
s.colors = [colors.blackSecondaryText, colors.ratingGreen, colors.ratingYellow, colors.ratingRed]
|
|
s.offTintColor = colors.blackSecondaryText
|
|
s.backgroundColor = colors.clear
|
|
}
|
|
case .divider:
|
|
return .add { s in
|
|
s.backgroundColor = colors.blackDividers
|
|
}
|
|
case .solidDivider:
|
|
return .add { s in
|
|
s.backgroundColor = colors.solidDividers
|
|
}
|
|
case .background:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.backgroundColorSelected = colors.pressBackground
|
|
}
|
|
case .pressBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.pressBackground
|
|
}
|
|
case .primaryBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.primary
|
|
}
|
|
case .secondaryBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.secondary
|
|
}
|
|
case .menuBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.menuBackground
|
|
}
|
|
case .bottomTabBarButton:
|
|
return .add { s in
|
|
s.backgroundColor = colors.tabBarButtonBackground
|
|
s.tintColor = colors.blackSecondaryText
|
|
s.coloring = MWMButtonColoring.black
|
|
s.cornerRadius = .buttonDefault
|
|
s.shadowColor = UIColor(0,0,0,alpha20)
|
|
s.shadowOpacity = 1
|
|
s.shadowOffset = CGSize(width: 0, height: 1)
|
|
s.onTintColor = .red
|
|
}
|
|
case .trackRecordingWidgetButton:
|
|
return .addFrom(Self.bottomTabBarButton) { s in
|
|
s.cornerRadius = .custom(23)
|
|
s.coloring = .red
|
|
}
|
|
case .blackOpaqueBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.blackOpaque
|
|
}
|
|
case .blueBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.linkBlue
|
|
}
|
|
case .fadeBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.fadeBackground
|
|
}
|
|
case .errorBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.errorPink
|
|
}
|
|
case .blackStatusBarBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.blackStatusBarBackground
|
|
}
|
|
case .presentationBackground:
|
|
return .add { s in
|
|
s.backgroundColor = UIColor.black.withAlphaComponent(alpha40)
|
|
}
|
|
case .clearBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.clear
|
|
}
|
|
case .border:
|
|
return .add { s in
|
|
s.backgroundColor = colors.border
|
|
}
|
|
case .tabView:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.barTintColor = colors.white
|
|
s.tintColor = colors.linkBlue
|
|
s.fontColor = colors.blackSecondaryText
|
|
s.fontColorHighlighted = colors.linkBlue
|
|
s.font = fonts.medium14
|
|
}
|
|
case .dialogView:
|
|
return .add { s in
|
|
s.cornerRadius = .buttonDefault
|
|
s.shadowRadius = 2
|
|
s.shadowColor = UIColor(0,0,0,alpha26)
|
|
s.shadowOpacity = 1
|
|
s.shadowOffset = CGSize(width: 0, height: 1)
|
|
s.backgroundColor = colors.white
|
|
s.clip = true
|
|
}
|
|
case .alertView:
|
|
return .add { s in
|
|
s.cornerRadius = .modalSheet
|
|
s.shadowRadius = 6
|
|
s.shadowColor = UIColor(0,0,0,alpha20)
|
|
s.shadowOpacity = 1
|
|
s.shadowOffset = CGSize(width: 0, height: 3)
|
|
s.backgroundColor = colors.alertBackground
|
|
s.clip = true
|
|
}
|
|
case .alertViewTextFieldContainer:
|
|
return .add { s in
|
|
s.borderColor = colors.blackDividers
|
|
s.borderWidth = 0.5
|
|
s.backgroundColor = colors.white
|
|
}
|
|
case .alertViewTextField:
|
|
return .add { s in
|
|
s.font = fonts.regular14
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.tintColor = colors.blackSecondaryText
|
|
}
|
|
case .searchStatusBarView:
|
|
return .add { s in
|
|
s.backgroundColor = colors.primary
|
|
s.shadowRadius = 2
|
|
s.shadowColor = colors.blackDividers
|
|
s.shadowOpacity = 1
|
|
s.shadowOffset = CGSize(width: 0, height: 0)
|
|
}
|
|
case .flatNormalButton:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.cornerRadius = .buttonDefault
|
|
s.clip = true
|
|
s.fontColor = colors.whitePrimaryText
|
|
s.backgroundColor = colors.linkBlue
|
|
s.fontColorHighlighted = colors.whitePrimaryTextHighlighted
|
|
s.fontColorDisabled = colors.whitePrimaryTextHighlighted
|
|
s.backgroundColorHighlighted = colors.linkBlueHighlighted
|
|
}
|
|
case .flatNormalButtonBig:
|
|
return .addFrom(Self.flatNormalButton) { s in
|
|
s.font = fonts.regular17
|
|
}
|
|
case .flatNormalTransButton:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.cornerRadius = .buttonDefault
|
|
s.clip = true
|
|
s.fontColor = colors.linkBlue
|
|
s.backgroundColor = colors.clear
|
|
s.fontColorHighlighted = colors.linkBlueHighlighted
|
|
s.fontColorDisabled = colors.blackHintText
|
|
s.backgroundColorHighlighted = colors.clear
|
|
}
|
|
case .flatNormalTransButtonBig:
|
|
return .addFrom(Self.flatNormalTransButton) { s in
|
|
s.font = fonts.regular17
|
|
}
|
|
case .flatGrayTransButton:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.fontColor = colors.blackSecondaryText
|
|
s.backgroundColor = colors.clear
|
|
s.fontColorHighlighted = colors.linkBlueHighlighted
|
|
}
|
|
case .flatPrimaryTransButton:
|
|
return .add { s in
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.backgroundColor = colors.clear
|
|
s.fontColorHighlighted = colors.linkBlueHighlighted
|
|
}
|
|
case .flatRedTransButton:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.fontColor = colors.red
|
|
s.backgroundColor = colors.clear
|
|
s.fontColorHighlighted = colors.red
|
|
}
|
|
case .flatRedTransButtonBig:
|
|
return .add { s in
|
|
s.font = fonts.regular17
|
|
s.fontColor = colors.red
|
|
s.backgroundColor = colors.clear
|
|
s.fontColorHighlighted = colors.red
|
|
}
|
|
case .flatRedButton:
|
|
return .add { s in
|
|
s.font = fonts.medium14
|
|
s.cornerRadius = .buttonDefault
|
|
s.fontColor = colors.whitePrimaryText
|
|
s.backgroundColor = colors.buttonRed
|
|
s.fontColorHighlighted = colors.buttonRedHighlighted
|
|
}
|
|
case .moreButton:
|
|
return .add { s in
|
|
s.fontColor = colors.linkBlue
|
|
s.fontColorHighlighted = colors.linkBlueHighlighted
|
|
s.backgroundColor = colors.clear
|
|
s.font = fonts.regular16
|
|
}
|
|
case .editButton:
|
|
return .add { s in
|
|
s.font = fonts.regular14
|
|
s.fontColor = colors.linkBlue
|
|
s.cornerRadius = .buttonDefault
|
|
s.borderColor = colors.linkBlue
|
|
s.borderWidth = 1
|
|
s.fontColorHighlighted = colors.linkBlueHighlighted
|
|
s.backgroundColor = colors.clear
|
|
}
|
|
case .rateAppButton:
|
|
return .add { s in
|
|
s.font = fonts.medium17
|
|
s.fontColor = colors.linkBlue
|
|
s.fontColorHighlighted = colors.white
|
|
s.borderColor = colors.linkBlue
|
|
s.cornerRadius = .buttonDefault
|
|
s.borderWidth = 1
|
|
s.backgroundColor = colors.clear
|
|
s.backgroundColorHighlighted = colors.linkBlue
|
|
}
|
|
case .termsOfUseLinkText:
|
|
return .add { s in
|
|
s.font = fonts.regular16
|
|
s.fontColor = colors.blackPrimaryText
|
|
|
|
s.linkAttributes = [NSAttributedString.Key.font: fonts.regular16,
|
|
NSAttributedString.Key.foregroundColor: colors.linkBlue,
|
|
NSAttributedString.Key.underlineColor: UIColor.clear]
|
|
s.textContainerInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
|
|
}
|
|
case .termsOfUseGrayButton:
|
|
return .add { s in
|
|
s.font = fonts.medium10
|
|
s.fontColor = colors.blackSecondaryText
|
|
s.fontColorHighlighted = colors.blackHintText
|
|
}
|
|
case .badge:
|
|
return .add { s in
|
|
s.round = true
|
|
s.backgroundColor = colors.downloadBadgeBackground
|
|
}
|
|
case .blue:
|
|
return .add { s in
|
|
s.tintColor = colors.linkBlue
|
|
s.coloring = MWMButtonColoring.blue
|
|
}
|
|
case .black:
|
|
return .add { s in
|
|
s.tintColor = colors.blackSecondaryText
|
|
s.coloring = MWMButtonColoring.black
|
|
}
|
|
case .other:
|
|
return .add { s in
|
|
s.tintColor = colors.white
|
|
s.coloring = MWMButtonColoring.other
|
|
}
|
|
case .gray:
|
|
return .add { s in
|
|
s.tintColor = colors.blackHintText
|
|
s.coloring = MWMButtonColoring.gray
|
|
}
|
|
case .separator:
|
|
return .add { s in
|
|
s.tintColor = colors.blackDividers
|
|
s.coloring = MWMButtonColoring.black
|
|
}
|
|
case .white:
|
|
return .add { s in
|
|
s.tintColor = colors.white
|
|
s.coloring = MWMButtonColoring.white
|
|
}
|
|
case .datePickerView:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.fontColorSelected = colors.whitePrimaryText
|
|
s.backgroundColorSelected = colors.linkBlue
|
|
s.backgroundColorHighlighted = colors.linkBlueHighlighted
|
|
s.fontColorDisabled = colors.blackSecondaryText
|
|
}
|
|
case .valueStepperView:
|
|
return .add { s in
|
|
s.font = fonts.regular16
|
|
s.fontColor = colors.blackPrimaryText
|
|
s.coloring = MWMButtonColoring.blue
|
|
}
|
|
case .grabber:
|
|
return .addFrom(Self.background) { s in
|
|
s.cornerRadius = .grabber
|
|
}
|
|
case .modalSheetBackground:
|
|
return .add { s in
|
|
s.backgroundColor = colors.white
|
|
s.shadowColor = UIColor.black
|
|
s.shadowOffset = CGSize(width: 0, height: 1)
|
|
s.shadowOpacity = 0.3
|
|
s.shadowRadius = 6
|
|
s.cornerRadius = .modalSheet
|
|
s.clip = false
|
|
s.maskedCorners = isiPad ? [] : [.layerMinXMinYCorner, .layerMaxXMinYCorner]
|
|
}
|
|
case .modalSheetContent:
|
|
return .addFrom(Self.modalSheetBackground) { s in
|
|
s.backgroundColor = colors.clear
|
|
s.clip = true
|
|
}
|
|
case .toastBackground:
|
|
return .add { s in
|
|
s.cornerRadius = .modalSheet
|
|
s.clip = true
|
|
}
|
|
case .toastLabel:
|
|
return .add { s in
|
|
s.font = fonts.regular16
|
|
s.fontColor = colors.whitePrimaryText
|
|
s.textAlignment = .center
|
|
}
|
|
}
|
|
}
|
|
}
|