├── .basset.yml ├── .gitignore ├── .swiftlint.yml ├── APPDESIGN.md ├── Brewer.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ ├── Brewer AppStore.xcscheme │ ├── Brewer DE.xcscheme │ ├── Brewer EN.xcscheme │ ├── Brewer ES.xcscheme │ ├── Brewer PL.xcscheme │ ├── Brewer TestFlight.xcscheme │ ├── Specs.xcscheme │ └── UITests.xcscheme ├── Brewer.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── Brewer.xcscmblueprint ├── Brewer ├── Brewer-Bridging-Header.h ├── Classes │ ├── AppDelegate+Utilities.swift │ ├── AppDelegate.swift │ ├── BrewDetails │ │ ├── BrewDetailsAssembly.swift │ │ ├── View │ │ │ ├── BrewAttributeCell.swift │ │ │ ├── BrewDetails.storyboard │ │ │ ├── BrewDetailsRemoveCell.swift │ │ │ ├── BrewDetailsViewController.swift │ │ │ ├── BrewNotesCell.swift │ │ │ └── FinalScoreCell.swift │ │ └── ViewModel │ │ │ └── BrewDetailsViewModel.swift │ ├── BrewScoreDetails │ │ ├── BrewScoreDetailsAssembly.swift │ │ ├── View │ │ │ ├── BrewScoreDetailCell.swift │ │ │ ├── BrewScoreDetails.storyboard │ │ │ ├── BrewScoreDetailsHeaderView.swift │ │ │ └── BrewScoreDetailsViewController.swift │ │ └── ViewModel │ │ │ └── BrewScoreDetailsViewModel.swift │ ├── Brewings │ │ ├── BrewingsAssembly.swift │ │ ├── Model │ │ │ ├── BrewingSortingOption+SortDescriptor.swift │ │ │ └── BrewingsModelController.swift │ │ ├── Types │ │ │ ├── BrewAttributeType.swift │ │ │ ├── BrewMethod.swift │ │ │ ├── CuppingAttribute.swift │ │ │ └── GrindSize.swift │ │ ├── View │ │ │ ├── BrewCell.swift │ │ │ ├── BrewCellScoreView.swift │ │ │ ├── Brewings.storyboard │ │ │ └── BrewingsViewController.swift │ │ └── ViewModel │ │ │ ├── BrewCellViewModel.swift │ │ │ └── BrewsViewModel.swift │ ├── BrewingsSorting │ │ ├── BrewingsSortingAssembly.swift │ │ ├── Model │ │ │ └── BrewingSortingOption.swift │ │ ├── View │ │ │ ├── BrewingsSorting.storyboard │ │ │ ├── BrewingsSortingOptionCell.swift │ │ │ └── BrewingsSortingViewController.swift │ │ └── ViewModel │ │ │ └── BrewingsSortingViewModel.swift │ ├── MethodPicker │ │ ├── View │ │ │ ├── MethodPicker.storyboard │ │ │ ├── MethodPickerCell.swift │ │ │ └── MethodPickerViewController.swift │ │ └── ViewModel │ │ │ └── MethodPickerViewModel.swift │ ├── NewBrew │ │ ├── Coffee │ │ │ └── Model │ │ │ │ └── CoffeeSelectableSearchModelController.swift │ │ ├── CoffeeMachine │ │ │ └── Model │ │ │ │ └── CoffeeMachineSelectableSearchModelController.swift │ │ ├── Common │ │ │ ├── NumericalInput │ │ │ │ ├── View │ │ │ │ │ ├── NumericalInput.storyboard │ │ │ │ │ ├── NumericalInputTextField.swift │ │ │ │ │ └── NumericalInputViewController.swift │ │ │ │ └── ViewModel │ │ │ │ │ ├── NumericalInputTransformer.swift │ │ │ │ │ └── NumericalInputViewModel.swift │ │ │ └── SelectableSearch │ │ │ │ ├── Model │ │ │ │ └── SelectableSearchModelController.swift │ │ │ │ ├── SelectableSearchIdentifier.swift │ │ │ │ ├── View │ │ │ │ ├── SelectableSearch.storyboard │ │ │ │ └── SelectableSearchViewController.swift │ │ │ │ └── ViewModel │ │ │ │ └── SelectableSearchViewModel.swift │ │ ├── General │ │ │ ├── Model │ │ │ │ └── BrewModelController.swift │ │ │ ├── View │ │ │ │ ├── NewBrew.storyboard │ │ │ │ ├── NewBrewCollectionViewCell.swift │ │ │ │ ├── NewBrewNavigationBar.swift │ │ │ │ ├── NewBrewProgressView.swift │ │ │ │ ├── NewBrewUnwindSegue.swift │ │ │ │ └── NewBrewViewController.swift │ │ │ └── ViewModel │ │ │ │ ├── NewBrewDataSource.swift │ │ │ │ └── NewBrewViewModel.swift │ │ ├── GrindSize │ │ │ ├── View │ │ │ │ ├── GrindSize.storyboard │ │ │ │ ├── GrindSizeSliderContainerView.swift │ │ │ │ └── GrindSizeViewController.swift │ │ │ └── ViewModel │ │ │ │ └── GrindSizeViewModel.swift │ │ ├── NewBrewAssembly.swift │ │ ├── Notes │ │ │ ├── View │ │ │ │ ├── Notes.storyboard │ │ │ │ └── NotesViewController.swift │ │ │ └── ViewModel │ │ │ │ └── NotesViewModel.swift │ │ ├── PreInfusionTime │ │ │ └── ViewModel │ │ │ │ └── PreInfusionTimeInputViewModel.swift │ │ ├── Tamping │ │ │ ├── View │ │ │ │ ├── Tamping.storyboard │ │ │ │ ├── TampingView.swift │ │ │ │ └── TampingViewController.swift │ │ │ └── ViewModel │ │ │ │ └── TampingViewModel.swift │ │ ├── Temperature │ │ │ └── ViewModel │ │ │ │ └── TemperatureInputViewModel.swift │ │ ├── Time │ │ │ └── ViewModel │ │ │ │ └── TimeInputViewModel.swift │ │ ├── Water │ │ │ └── ViewModel │ │ │ │ └── WaterInputViewModel.swift │ │ └── Weight │ │ │ └── ViewModel │ │ │ └── WeightInputViewModel.swift │ ├── Settings │ │ ├── About │ │ │ └── View │ │ │ │ ├── AboutViewController.swift │ │ │ │ ├── AboutViewPhotoCell.swift │ │ │ │ └── AboutViewThanksCell.swift │ │ ├── General │ │ │ ├── Model │ │ │ │ └── KeyValueStoreType.swift │ │ │ ├── View │ │ │ │ ├── Settings.storyboard │ │ │ │ ├── SettingsCell.swift │ │ │ │ └── SettingsViewController.swift │ │ │ └── ViewModel │ │ │ │ └── SettingsViewModel.swift │ │ ├── Sequence │ │ │ ├── Model │ │ │ │ ├── BrewAttributeType+DefaultSequenceSettings.swift │ │ │ │ └── SequenceSettingsModelController.swift │ │ │ ├── View │ │ │ │ ├── SequenceSettings.storyboard │ │ │ │ ├── SequenceSettingsCell.swift │ │ │ │ └── SequenceSettingsViewController.swift │ │ │ └── ViewModel │ │ │ │ └── SequenceSettingsViewModel.swift │ │ ├── SettingsAssembly.swift │ │ └── Units │ │ │ ├── Model │ │ │ ├── UnitCategory+DefaultSettings.swift │ │ │ └── UnitsModelController.swift │ │ │ ├── UnitTypes.swift │ │ │ ├── View │ │ │ ├── Units.storyboard │ │ │ └── UnitsViewController.swift │ │ │ └── ViewModel │ │ │ ├── Temperature │ │ │ └── TemperatureUnitsDataSource.swift │ │ │ ├── UnitsDataSourceType.swift │ │ │ ├── UnitsDataSourcesFactory.swift │ │ │ ├── UnitsViewModel.swift │ │ │ ├── Water │ │ │ └── WaterUnitsDataSource.swift │ │ │ └── Weight │ │ │ └── WeightUnitsDataSource.swift │ └── Shared │ │ ├── Analytics │ │ ├── Analytics.swift │ │ └── AppScreen.swift │ │ ├── CoreComponents.swift │ │ ├── Model │ │ ├── Entities │ │ │ ├── Brew.swift │ │ │ ├── BrewAttribute.swift │ │ │ ├── Coffee.swift │ │ │ ├── CoffeeMachine.swift │ │ │ ├── Cupping.swift │ │ │ └── Machine │ │ │ │ ├── Brew+CoreDataProperties.swift │ │ │ │ ├── BrewAttribute+CoreDataProperties.swift │ │ │ │ ├── Coffee+CoreDataProperties.swift │ │ │ │ ├── CoffeeMachine+CoreDataProperties.swift │ │ │ │ └── Cupping+CoreDataProperties.swift │ │ └── Stack │ │ │ ├── CoreDataExtensions.swift │ │ │ └── CoreDataStack.swift │ │ ├── ResolvableContainer.swift │ │ ├── Seque │ │ ├── SegueHandler.swift │ │ └── SegueIdentifier.swift │ │ ├── SpotlightSearch │ │ └── SpotlightSearchService.swift │ │ ├── Themes │ │ ├── MainThemeConfiguration.swift │ │ ├── ThemeConfigurable+UILabel.swift │ │ ├── ThemeConfigurable+UISearchBar.swift │ │ ├── ThemeConfigurable+UISegmentedControl.swift │ │ ├── ThemeConfigurable+UISlider.swift │ │ ├── ThemeConfigurable+UITextField.swift │ │ ├── ThemeConfigurable+UITextView.swift │ │ └── ThemeConfiguration.swift │ │ └── Utilities │ │ ├── Assets.swift │ │ ├── FetchedResultsControllerDelegateHandler │ │ └── TableViewFetchedResultsControllerDynamicChangesHandler.swift │ │ ├── FoundationUtilities.swift │ │ ├── Functions.swift │ │ ├── KeyboardManager.swift │ │ ├── Localizable.swift │ │ ├── SwinjectUtilities.swift │ │ ├── UI │ │ ├── ActivableProtocol.swift │ │ ├── Highlightable.swift │ │ ├── InformativeLabel.swift │ │ ├── List.swift │ │ ├── PresentableProtocols.swift │ │ ├── RootViewController.swift │ │ ├── ScrollViewPageMetrics.swift │ │ ├── TabBarConfigurable.swift │ │ ├── ThemeConfigurable+UIViewController.swift │ │ ├── UIKitUtilities.swift │ │ └── UIViewController+Extensions.swift │ │ └── UIColor+Custom.swift ├── Dropnote.entitlements ├── GoogleService-Info.plist ├── Info.plist └── Resources │ ├── AppIcon60x60.png │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── DropnoteIcon-120.png │ │ ├── DropnoteIcon-152.png │ │ ├── DropnoteIcon-167.png │ │ ├── DropnoteIcon-180.png │ │ └── DropnoteIcon-76.png │ ├── Contents.json │ ├── IconDropnote.imageset │ │ ├── Contents.json │ │ ├── IconDropnote@2x.png │ │ └── IconDropnote@3x.png │ ├── Team.imageset │ │ ├── Contents.json │ │ └── Team@2x.png │ ├── ic_add.imageset │ │ ├── Contents.json │ │ ├── ic_add.png │ │ ├── ic_add@2x.png │ │ └── ic_add@3x.png │ ├── ic_aeropress.imageset │ │ ├── Contents.json │ │ ├── ic_aeropress.png │ │ ├── ic_aeropress@2x.png │ │ └── ic_aeropress@3x.png │ ├── ic_aeropress_quick.imageset │ │ ├── Contents.json │ │ └── ic_aeropress_quick.png │ ├── ic_arrow.imageset │ │ ├── Contents.json │ │ ├── ic_arrow.png │ │ ├── ic_arrow@2x.png │ │ └── ic_arrow@3x.png │ ├── ic_back.imageset │ │ ├── Contents.json │ │ ├── ic_back.png │ │ ├── ic_back@2x.png │ │ └── ic_back@3x.png │ ├── ic_best.imageset │ │ ├── Contents.json │ │ ├── ic_best.png │ │ ├── ic_best@2x.png │ │ └── ic_best@3x.png │ ├── ic_chemex.imageset │ │ ├── Contents.json │ │ ├── ic_chemex.png │ │ ├── ic_chemex@2x.png │ │ └── ic_chemex@3x.png │ ├── ic_chemex_bw.imageset │ │ ├── Contents.json │ │ ├── ic_chemex_bw.png │ │ ├── ic_chemex_bw@2x.png │ │ └── ic_chemex_bw@3x.png │ ├── ic_close.imageset │ │ ├── Contents.json │ │ ├── ic_close.png │ │ ├── ic_close@2x.png │ │ └── ic_close@3x.png │ ├── ic_coffee.imageset │ │ ├── Contents.json │ │ ├── ic_coffee.png │ │ ├── ic_coffee@2x.png │ │ └── ic_coffee@3x.png │ ├── ic_coffee_machine.imageset │ │ ├── Contents.json │ │ ├── ic_coffee_machine.png │ │ ├── ic_coffee_machine@2x.png │ │ └── ic_coffee_machine@3x.png │ ├── ic_coffee_machine_bw.imageset │ │ ├── Contents.json │ │ ├── ic_coffee_machine_bw.png │ │ ├── ic_coffee_machine_bw@2x.png │ │ └── ic_coffee_machine_bw@3x.png │ ├── ic_done.imageset │ │ ├── Contents.json │ │ ├── ic_done.png │ │ ├── ic_done@2x.png │ │ └── ic_done@3x.png │ ├── ic_drip.imageset │ │ ├── Contents.json │ │ ├── ic_drip.png │ │ ├── ic_drip@2x.png │ │ └── ic_drip@3x.png │ ├── ic_drip_bw.imageset │ │ ├── Contents.json │ │ ├── ic_drip_bw.png │ │ ├── ic_drip_bw@2x.png │ │ └── ic_drip_bw@3x.png │ ├── ic_empty_history.imageset │ │ ├── Contents.json │ │ ├── ic_empty_history.png │ │ ├── ic_empty_history@2x.png │ │ └── ic_empty_history@3x.png │ ├── ic_grind.imageset │ │ ├── Contents.json │ │ ├── ic_grind.png │ │ ├── ic_grind@2x.png │ │ └── ic_grind@3x.png │ ├── ic_inverted.imageset │ │ ├── Contents.json │ │ ├── ic_inverted.png │ │ ├── ic_inverted@2x.png │ │ └── ic_inverted@3x.png │ ├── ic_inverted_bw.imageset │ │ ├── Contents.json │ │ ├── ic_inverted_bw.png │ │ ├── ic_inverted_bw@2x.png │ │ └── ic_inverted_bw@3x.png │ ├── ic_kalita.imageset │ │ ├── Contents.json │ │ ├── ic_kalita.png │ │ ├── ic_kalita@2x.png │ │ └── ic_kalita@3x.png │ ├── ic_kone.imageset │ │ ├── Contents.json │ │ ├── ic_kone.png │ │ ├── ic_kone@2x.png │ │ └── ic_kone@3x.png │ ├── ic_machine.imageset │ │ ├── Contents.json │ │ ├── ic_machine.png │ │ ├── ic_machine@2x.png │ │ └── ic_machine@3x.png │ ├── ic_newest.imageset │ │ ├── Contents.json │ │ ├── ic_newest.png │ │ ├── ic_newest@2x.png │ │ └── ic_newest@3x.png │ ├── ic_next.imageset │ │ ├── Contents.json │ │ ├── ic_next.png │ │ ├── ic_next@2x.png │ │ └── ic_next@3x.png │ ├── ic_notes.imageset │ │ ├── Contents.json │ │ ├── ic_notes.png │ │ ├── ic_notes@2x.png │ │ └── ic_notes@3x.png │ ├── ic_oldest.imageset │ │ ├── Contents.json │ │ ├── ic_oldest.png │ │ ├── ic_oldest@2x.png │ │ └── ic_oldest@3x.png │ ├── ic_previous.imageset │ │ ├── Contents.json │ │ ├── ic_previous.png │ │ ├── ic_previous@2x.png │ │ └── ic_previous@3x.png │ ├── ic_tab_history.imageset │ │ ├── Contents.json │ │ ├── ic_tab_history.png │ │ ├── ic_tab_history@2x.png │ │ └── ic_tab_history@3x.png │ ├── ic_tab_history_pressed.imageset │ │ ├── Contents.json │ │ ├── ic_tab_history_pressed.png │ │ ├── ic_tab_history_pressed@2x.png │ │ └── ic_tab_history_pressed@3x.png │ ├── ic_tab_settings.imageset │ │ ├── Contents.json │ │ ├── ic_tab_settings.png │ │ ├── ic_tab_settings@2x.png │ │ └── ic_tab_settings@3x.png │ ├── ic_tab_settings_pressed.imageset │ │ ├── Contents.json │ │ ├── ic_tab_settings_pressed.png │ │ ├── ic_tab_settings_pressed@2x.png │ │ └── ic_tab_settings_pressed@3x.png │ ├── ic_tab_start.imageset │ │ ├── Contents.json │ │ ├── ic_tab_start.png │ │ ├── ic_tab_start@2x.png │ │ └── ic_tab_start@3x.png │ ├── ic_tab_start_pressed.imageset │ │ ├── Contents.json │ │ ├── ic_tab_start_pressed.png │ │ ├── ic_tab_start_pressed@2x.png │ │ └── ic_tab_start_pressed@3x.png │ ├── ic_tamp.imageset │ │ ├── Contents.json │ │ ├── ic_tamp.png │ │ ├── ic_tamp@2x.png │ │ └── ic_tamp@3x.png │ ├── ic_temp.imageset │ │ ├── Contents.json │ │ ├── ic_temp.png │ │ ├── ic_temp@2x.png │ │ └── ic_temp@3x.png │ ├── ic_time.imageset │ │ ├── Contents.json │ │ ├── ic_time.png │ │ ├── ic_time@2x.png │ │ └── ic_time@3x.png │ ├── ic_water.imageset │ │ ├── Contents.json │ │ ├── ic_water.png │ │ ├── ic_water@2x.png │ │ └── ic_water@3x.png │ ├── ic_weight.imageset │ │ ├── Contents.json │ │ ├── ic_weight.png │ │ ├── ic_weight@2x.png │ │ └── ic_weight@3x.png │ └── ic_worst.imageset │ │ ├── Contents.json │ │ ├── ic_worst.png │ │ ├── ic_worst@2x.png │ │ └── ic_worst@3x.png │ ├── Brewer.xcdatamodel │ └── contents │ ├── Launch.storyboard │ ├── Main.storyboard │ ├── de.lproj │ └── Localizable.strings │ ├── en.lproj │ └── Localizable.strings │ ├── es.lproj │ └── Localizable.strings │ ├── fr.lproj │ └── Localizable.strings │ └── pl.lproj │ └── Localizable.strings ├── BrewerTests └── Info.plist ├── BrewerUITests ├── BrewerUITests.swift └── Info.plist ├── CHANGELOG.md ├── External └── Box │ ├── Box.swift │ ├── BoxType.swift │ └── MutableBox.swift ├── GeneratedAssets ├── .basset_temp ├── ic_add.png ├── ic_add@2x.png ├── ic_add@3x.png ├── ic_aeropress.png ├── ic_aeropress@2x.png ├── ic_aeropress@3x.png ├── ic_arrow.png ├── ic_arrow@2x.png ├── ic_arrow@3x.png ├── ic_back.png ├── ic_back@2x.png ├── ic_back@3x.png ├── ic_best.png ├── ic_best@2x.png ├── ic_best@3x.png ├── ic_chemex.png ├── ic_chemex@2x.png ├── ic_chemex@3x.png ├── ic_close.png ├── ic_close@2x.png ├── ic_close@3x.png ├── ic_coffee.png ├── ic_coffee@2x.png ├── ic_coffee@3x.png ├── ic_coffee_machine.png ├── ic_coffee_machine@2x.png ├── ic_coffee_machine@3x.png ├── ic_done.png ├── ic_done@2x.png ├── ic_done@3x.png ├── ic_drip.png ├── ic_drip@2x.png ├── ic_drip@3x.png ├── ic_empty_history.png ├── ic_empty_history@2x.png ├── ic_empty_history@3x.png ├── ic_filter.png ├── ic_filter@2x.png ├── ic_filter@3x.png ├── ic_grind.png ├── ic_grind@2x.png ├── ic_grind@3x.png ├── ic_inverted.png ├── ic_inverted@2x.png ├── ic_inverted@3x.png ├── ic_machine.png ├── ic_machine@2x.png ├── ic_machine@3x.png ├── ic_newest.png ├── ic_newest@2x.png ├── ic_newest@3x.png ├── ic_next.png ├── ic_next@2x.png ├── ic_next@3x.png ├── ic_notes.png ├── ic_notes@2x.png ├── ic_notes@3x.png ├── ic_oldest.png ├── ic_oldest@2x.png ├── ic_oldest@3x.png ├── ic_previous.png ├── ic_previous@2x.png ├── ic_previous@3x.png ├── ic_tab_history.png ├── ic_tab_history@2x.png ├── ic_tab_history@3x.png ├── ic_tab_history_pressed.png ├── ic_tab_history_pressed@2x.png ├── ic_tab_history_pressed@3x.png ├── ic_tab_settings.png ├── ic_tab_settings@2x.png ├── ic_tab_settings@3x.png ├── ic_tab_settings_pressed.png ├── ic_tab_settings_pressed@2x.png ├── ic_tab_settings_pressed@3x.png ├── ic_tab_start.png ├── ic_tab_start@2x.png ├── ic_tab_start@3x.png ├── ic_tab_start_pressed.png ├── ic_tab_start_pressed@2x.png ├── ic_tab_start_pressed@3x.png ├── ic_tamp.png ├── ic_tamp@2x.png ├── ic_tamp@3x.png ├── ic_temp.png ├── ic_temp@2x.png ├── ic_temp@3x.png ├── ic_time.png ├── ic_time@2x.png ├── ic_time@3x.png ├── ic_water.png ├── ic_water@2x.png ├── ic_water@3x.png ├── ic_weight.png ├── ic_weight@2x.png ├── ic_weight@3x.png ├── ic_worst.png ├── ic_worst@2x.png └── ic_worst@3x.png ├── Podfile ├── Podfile.lock ├── README.md ├── VectorAssets ├── ic_add.svg ├── ic_aeropress.svg ├── ic_arrow.svg ├── ic_back.svg ├── ic_best.svg ├── ic_chemex.svg ├── ic_close.svg ├── ic_coffee.svg ├── ic_coffee_machine.svg ├── ic_done.svg ├── ic_drip.svg ├── ic_empty_history.svg ├── ic_filter.svg ├── ic_grind.svg ├── ic_inverted.svg ├── ic_machine.svg ├── ic_newest.svg ├── ic_next.svg ├── ic_notes.svg ├── ic_oldest.svg ├── ic_previous.svg ├── ic_tab_history.svg ├── ic_tab_history_pressed.svg ├── ic_tab_settings.svg ├── ic_tab_settings_pressed.svg ├── ic_tab_start.svg ├── ic_tab_start_pressed.svg ├── ic_tamp.svg ├── ic_temp.svg ├── ic_time.svg ├── ic_water.svg ├── ic_weight.svg └── ic_worst.svg ├── fastlane ├── Appfile ├── Deliverfile ├── Fastfile ├── README.md ├── Snapfile └── SnapshotHelper.swift ├── swiftgen-images └── swiftgen-strings /.basset.yml: -------------------------------------------------------------------------------- 1 | # Default xcasset dir 2 | xcassets_dir: Assets.xcassets 3 | 4 | # Where vector images are kept 5 | raw_assets: VectorAssets 6 | 7 | # Where generated PNG(s) will be kept 8 | generated_assets_dir: GeneratedAssets 9 | 10 | # Should generated PNG(s) be merged to xcassets folder 11 | merge_with_xcassets: True 12 | 13 | # Should convert all assets every time 14 | force_convert: False 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | screenshots 4 | fastlane/metadata 5 | *.xml 6 | *.html 7 | Matchfile 8 | build/ 9 | *.pbxuser 10 | !default.pbxuser 11 | *.mode1v3 12 | !default.mode1v3 13 | *.mode2v3 14 | !default.mode2v3 15 | *.perspectivev3 16 | !default.perspectivev3 17 | xcuserdata 18 | *.xccheckout 19 | *.moved-aside 20 | DerivedData 21 | *.hmap 22 | *.ipa 23 | *.xcuserstate 24 | 25 | # CocoaPods 26 | # 27 | # We recommend against adding the Pods directory to your .gitignore. However 28 | # you should judge for yourself, the pros and cons are mentioned at: 29 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 30 | # 31 | Pods/ 32 | 33 | # Carthage 34 | # 35 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 36 | # Carthage/Checkouts 37 | 38 | Carthage/Build 39 | -------------------------------------------------------------------------------- /.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: # rule identifiers to exclude from running 2 | - comma 3 | - control_statement 4 | - trailing_whitespace 5 | - force_cast 6 | - statement_position 7 | - closure_parameter_position 8 | - vertical_parameter_alignment 9 | opt_in_rules: # some rules are only opt-in 10 | - empty_count 11 | # Find all the available rules by running: 12 | # swiftlint rules 13 | included: # paths to include during linting. `--path` is ignored if present. 14 | - Brewer 15 | excluded: # paths to ignore during linting. Takes precedence over `included`. 16 | - Carthage 17 | - Pods 18 | 19 | # configurable rules can be customized from this configuration file 20 | # binary rules can set their severity level 21 | force_cast: warning # implicitly 22 | force_try: 23 | severity: warning # explicitly 24 | # rules that have both warning and error levels, can set just the warning level 25 | # implicitly 26 | line_length: 158 27 | # they can set both implicitly with an array 28 | type_body_length: 29 | - 300 # warning 30 | - 400 # error 31 | # or they can set both explicitly 32 | file_length: 33 | warning: 400 34 | error: 600 35 | # naming rules can set warnings/errors for min_length and max_length 36 | # additionally they can set excluded names 37 | type_name: 38 | min_length: 3 # only warning 39 | max_length: # warning and error 40 | warning: 45 41 | error: 55 42 | variable_name: 43 | min_length: # only min_length 44 | warning: 3 # only error 45 | reporter: "xcode" # reporter type (xcode, json, csv, checkstyle) 46 | -------------------------------------------------------------------------------- /Brewer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Brewer.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Brewer.xcworkspace/xcshareddata/Brewer.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "C0FEE9A187F8749FF723658958B648253672B2CB", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "C0FEE9A187F8749FF723658958B648253672B2CB" : 9223372036854775807, 8 | "57C931977B7D2307CC013C2BD93F90CF7C676790" : 9223372036854775807 9 | }, 10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "E8BB8FCA-57CB-4D5F-9505-DD9438E18700", 11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 12 | "C0FEE9A187F8749FF723658958B648253672B2CB" : "dropnote-official\/", 13 | "57C931977B7D2307CC013C2BD93F90CF7C676790" : "dropnote-official\/External\/Box\/" 14 | }, 15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "Brewer", 16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Brewer.xcworkspace", 18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 19 | { 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/robrix\/Box.git", 21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "57C931977B7D2307CC013C2BD93F90CF7C676790" 23 | }, 24 | { 25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:Dropnote\/Dropnote-iOS.git", 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C0FEE9A187F8749FF723658958B648253672B2CB" 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /Brewer/Brewer-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import -------------------------------------------------------------------------------- /Brewer/Classes/BrewDetails/BrewDetailsAssembly.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewDetailsAssembly.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 28.04.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Swinject 11 | 12 | final class BrewDetailsAssembly: AssemblyType { 13 | func assemble(container: Container) { 14 | 15 | container.registerForStoryboard(BrewDetailsViewController.self) { 16 | r, c in 17 | c.themeConfiguration = r.resolve(ThemeConfiguration.self) 18 | c.resolver = r 19 | } 20 | 21 | container.register(BrewDetailsViewModelType.self) { 22 | (r, brew: Brew) in 23 | BrewDetailsViewModel(brewModelController: r.resolve(BrewModelControllerType.self, argument: brew)!, 24 | spotlightSearchService: r.resolve(SpotlightSearchService.self)!) 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewDetails/View/BrewAttributeCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewAttributeCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 09.04.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class BrewAttributeCell: UITableViewCell, Highlightable { 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var valueLabel: UILabel! 15 | 16 | var normalColor: UIColor? 17 | var highlightColor: UIColor? 18 | 19 | override var isHighlighted: Bool { 20 | didSet { 21 | highlightViews([self, titleLabel, valueLabel], highlighted: isHighlighted) 22 | } 23 | } 24 | } 25 | 26 | extension BrewAttributeCell: PresentableConfigurable { 27 | 28 | func configureWithPresentable(_ presentable: TitleValuePresentable) { 29 | accessibilityHint = "Represents \(presentable.title) attribute with value \(presentable.value)" 30 | titleLabel.text = presentable.title 31 | valueLabel.text = presentable.value 32 | } 33 | } 34 | 35 | extension BrewAttributeCell { 36 | 37 | func configureWithTheme(_ theme: ThemeConfiguration?) { 38 | super.configureWithTheme(theme) 39 | [titleLabel, valueLabel].forEach { 40 | $0!.configureWithTheme(theme) 41 | } 42 | normalColor = theme?.lightColor 43 | highlightColor = highlightColorForTheme(theme) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewDetails/View/BrewDetailsRemoveCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewDetailsRemoveCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 18.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class BrewDetailsRemoveCell: UITableViewCell, Highlightable { 13 | var normalColor: UIColor? 14 | var highlightColor: UIColor? 15 | 16 | override var isHighlighted: Bool { 17 | didSet { 18 | highlightViews([self], highlighted: isHighlighted) 19 | } 20 | } 21 | } 22 | 23 | extension BrewDetailsRemoveCell { 24 | 25 | func configureWithPresentable(_ presentable: TitleValuePresentable) { 26 | accessibilityHint = "Removes current brew from history" 27 | textLabel?.text = presentable.title 28 | } 29 | } 30 | 31 | extension BrewDetailsRemoveCell { 32 | 33 | func configureWithTheme(_ theme: ThemeConfiguration?) { 34 | super.configureWithTheme(theme) 35 | textLabel?.font = theme?.defaultFontWithSize(17) 36 | textLabel?.textColor = UIColor.deepBlush() 37 | normalColor = theme?.lightColor 38 | highlightColor = highlightColorForTheme(theme) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewDetails/View/BrewNotesCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewNotesCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 28.04.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class BrewNotesCell: UITableViewCell, Highlightable { 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var valueLabel: UILabel! 15 | 16 | var normalColor: UIColor? 17 | var highlightColor: UIColor? 18 | 19 | override var isHighlighted: Bool { 20 | didSet { 21 | highlightViews([self, titleLabel, valueLabel], highlighted: isHighlighted) 22 | } 23 | } 24 | } 25 | 26 | extension BrewNotesCell: PresentableConfigurable { 27 | 28 | func configureWithPresentable(_ presentable: TitleValuePresentable) { 29 | accessibilityHint = "Represents notes taken during brew session" 30 | titleLabel.text = presentable.title 31 | valueLabel.text = presentable.value 32 | } 33 | } 34 | 35 | extension BrewNotesCell { 36 | 37 | func configureWithTheme(_ theme: ThemeConfiguration?) { 38 | super.configureWithTheme(theme) 39 | [titleLabel, valueLabel].forEach { 40 | $0!.configureWithTheme(theme) 41 | } 42 | normalColor = theme?.lightColor 43 | highlightColor = highlightColorForTheme(theme) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewDetails/View/FinalScoreCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FinalScoreCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 09.04.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class FinalScoreCell: UITableViewCell, Highlightable { 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var valueLabel: UILabel! 15 | 16 | var normalColor: UIColor? 17 | var highlightColor: UIColor? 18 | 19 | override var isHighlighted: Bool { 20 | didSet { 21 | highlightViews([self, titleLabel, valueLabel], highlighted: isHighlighted) 22 | } 23 | } 24 | } 25 | 26 | extension FinalScoreCell: PresentableConfigurable { 27 | 28 | func configureWithPresentable(_ presentable: TitleValuePresentable) { 29 | accessibilityHint = "Represents brew score that equals \(presentable.value)" 30 | titleLabel.text = presentable.title 31 | valueLabel.text = presentable.value 32 | } 33 | } 34 | 35 | extension FinalScoreCell { 36 | 37 | func configureWithTheme(_ theme: ThemeConfiguration?) { 38 | super.configureWithTheme(theme) 39 | [titleLabel, valueLabel].forEach { 40 | $0!.configureWithTheme(theme) 41 | } 42 | normalColor = theme?.lightColor 43 | highlightColor = highlightColorForTheme(theme) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewScoreDetails/BrewScoreDetailsAssembly.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewScoreDetailsAssembly.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 01.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Swinject 11 | 12 | final class BrewScoreDetailsAssembly: AssemblyType { 13 | func assemble(container: Container) { 14 | container.registerForStoryboard(BrewScoreDetailsViewController.self) { 15 | r, c in c.themeConfiguration = r.resolve(ThemeConfiguration.self) 16 | } 17 | 18 | container.register(BrewScoreDetailsViewModelType.self) { 19 | (_, brew: Brew) in BrewScoreDetailsViewModel(brew: brew) 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewScoreDetails/View/BrewScoreDetailCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewScoreDetailCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 01.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import RxSwift 12 | import RxCocoa 13 | 14 | final class BrewScoreDetailCell: UITableViewCell { 15 | fileprivate let disposeBag = DisposeBag() 16 | @IBOutlet weak var titleLabel: UILabel! 17 | @IBOutlet weak var valueLabel: UILabel! 18 | @IBOutlet weak var slider: UISlider! 19 | } 20 | 21 | extension BrewScoreDetailCell: PresentableConfigurable { 22 | 23 | func configureWithPresentable(_ presentable: ScoreCellPresentable) { 24 | accessibilityHint = "Slider for \(presentable.title) value, current is \(presentable.value)" 25 | titleLabel.text = presentable.title 26 | valueLabel.text = presentable.value 27 | slider.value = presentable.sliderValue.value 28 | slider.rx.value.bindTo(presentable.sliderValue).addDisposableTo(disposeBag) 29 | slider.rx.value.map { $0.format(".1") }.bindTo(valueLabel.rx.text).addDisposableTo(disposeBag) 30 | } 31 | } 32 | 33 | extension BrewScoreDetailCell { 34 | 35 | func configureWithTheme(_ theme: ThemeConfiguration?) { 36 | backgroundColor = theme?.lightColor 37 | slider.configureWithTheme(theme) 38 | [titleLabel, valueLabel].forEach { 39 | $0!.configureWithTheme(theme) 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewScoreDetails/View/BrewScoreDetailsHeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewScoreDetailsHeaderView.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 03.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class BrewScoreDetailsHeaderView: UIView { 13 | @IBOutlet weak var titleLabel: UILabel! 14 | @IBOutlet weak var valueLabel: UILabel! 15 | } 16 | 17 | extension BrewScoreDetailsHeaderView { 18 | 19 | func configureWithTheme(_ theme: ThemeConfiguration?) { 20 | backgroundColor = theme?.darkColor 21 | [titleLabel, valueLabel].forEach { 22 | $0?.configureWithTheme(theme) 23 | $0?.backgroundColor = theme?.darkColor 24 | $0?.textColor = theme?.lightColor 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Brewer/Classes/Brewings/BrewingsAssembly.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 20.03.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import Swinject 8 | 9 | final class BrewingsAssembly: AssemblyType { 10 | func assemble(container: Container) { 11 | 12 | container.registerForStoryboard(BrewingsViewController.self) { 13 | r, c in 14 | c.viewModel = r.resolve(BrewingsViewModelType.self)! 15 | c.themeConfiguration = r.resolve(ThemeConfiguration.self) 16 | c.resolver = r 17 | } 18 | 19 | container.register(BrewingsViewModelType.self) { 20 | r in BrewingsViewModel(brewsModelController: r.resolve(BrewingsModelControllerType.self)!, 21 | spotlightSearchService: r.resolve(SpotlightSearchService.self)!) 22 | } 23 | 24 | container.register(BrewingsModelControllerType.self) { 25 | r in BrewingsModelController(stack: r.resolve(StackType.self)!) 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Brewer/Classes/Brewings/Model/BrewingSortingOption+SortDescriptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewingSortingOption+SortDescriptor.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 20.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | extension BrewingSortingOption { 13 | var sortDescriptor: NSSortDescriptor { 14 | switch self { 15 | case .dateDescending: return NSSortDescriptor(key: "created", ascending: false) 16 | case .dateAscending: return NSSortDescriptor(key: "created", ascending: true) 17 | case .scoreDescending: return NSSortDescriptor(key: "score", ascending: false) 18 | case .scoreAscending: return NSSortDescriptor(key: "score", ascending: true) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/Brewings/Types/CuppingAttribute.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CuppingAttribute.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 06.08.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum CuppingAttribute: Int32 { 12 | case aroma 13 | case acidity 14 | case aftertaste 15 | case balance 16 | case body 17 | case sweetness 18 | case overall 19 | 20 | static let allValues = [aroma, acidity, aftertaste, balance, body, sweetness, overall] 21 | } 22 | 23 | extension CuppingAttribute: CustomStringConvertible { 24 | 25 | var description: String { 26 | switch self { 27 | case .aroma: return tr(.cuppingAttributeAroma) 28 | case .acidity: return tr(.cuppingAttributeAcidity) 29 | case .aftertaste: return tr(.cuppingAttributeAftertaste) 30 | case .balance: return tr(.cuppingAttributeBalance) 31 | case .body: return tr(.cuppingAttributeBody) 32 | case .sweetness: return tr(.cuppingAttributeSweetness) 33 | case .overall: return tr(.cuppingAttributeOverall) 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Brewer/Classes/Brewings/Types/GrindSize.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GrindSize.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 06.08.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum GrindSize { 12 | case extraFine 13 | case fine 14 | case medium 15 | case coarse 16 | 17 | static let allValues = [extraFine, fine, medium, coarse] 18 | } 19 | -------------------------------------------------------------------------------- /Brewer/Classes/Brewings/View/BrewCellScoreView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewCellScoreView.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 08.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class BrewCellScoreView: UIView { 13 | @IBOutlet weak var scoreLabel: UILabel! 14 | 15 | fileprivate let fillingView = UIView() 16 | var fillingFactor: Double = 0 17 | var borderColor: UIColor = .white { 18 | didSet { 19 | layer.borderColor = borderColor.cgColor 20 | } 21 | } 22 | 23 | var fillingColor: UIColor = .white { 24 | didSet { 25 | fillingView.backgroundColor = fillingColor 26 | } 27 | } 28 | 29 | required init?(coder aDecoder: NSCoder) { 30 | super.init(coder: aDecoder) 31 | clipsToBounds = true 32 | layer.borderWidth = 3 33 | insertSubview(fillingView, at: 0) 34 | } 35 | 36 | override func layoutSubviews() { 37 | super.layoutSubviews() 38 | layer.cornerRadius = frame.width * 0.5 39 | fillingView.frame = CGRect( 40 | x: 0, 41 | y: frame.height * CGFloat(1 - fillingFactor), 42 | width: frame.width, 43 | height: frame.height * CGFloat(fillingFactor) 44 | ) 45 | } 46 | } 47 | 48 | extension BrewCellScoreView { 49 | 50 | func configureWithTheme(_ theme: ThemeConfiguration?) { 51 | super.configureWithTheme(theme) 52 | scoreLabel.configureWithTheme(theme) 53 | scoreLabel.backgroundColor = UIColor.clear 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewingsSorting/BrewingsSortingAssembly.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 19.06.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import Swinject 8 | 9 | final class BrewingsSortingAssembly: AssemblyType { 10 | func assemble(container: Container) { 11 | container.registerForStoryboard(BrewingsSortingViewController.self) { 12 | r, c in 13 | c.themeConfiguration = r.resolve(ThemeConfiguration.self) 14 | c.viewModel = r.resolve(BrewingsSortingViewModelType.self)! 15 | } 16 | 17 | container.register(BrewingsSortingViewModelType.self) { 18 | _ in return BrewingsSortingViewModel() 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewingsSorting/Model/BrewingSortingOption.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 19.06.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | enum BrewingSortingOption { 9 | case dateAscending 10 | case dateDescending 11 | case scoreAscending 12 | case scoreDescending 13 | 14 | static let allValues: [BrewingSortingOption] = [.dateAscending, .dateDescending, .scoreAscending, .scoreDescending] 15 | } 16 | -------------------------------------------------------------------------------- /Brewer/Classes/BrewingsSorting/View/BrewingsSortingOptionCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 19.06.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | final class BrewingsSortingOptionCell: UITableViewCell { 10 | fileprivate var normalColor: UIColor? 11 | fileprivate var selectedColor: UIColor? 12 | 13 | override var accessoryType: UITableViewCellAccessoryType { 14 | didSet { 15 | adjustImageTintColorDependingOnSelection() 16 | } 17 | } 18 | 19 | fileprivate func adjustImageTintColorDependingOnSelection() { 20 | if case .checkmark = accessoryType { 21 | imageView?.tintColor = selectedColor 22 | } else { 23 | imageView?.tintColor = normalColor 24 | } 25 | } 26 | } 27 | 28 | extension BrewingsSortingOptionCell: PresentableConfigurable { 29 | 30 | func configureWithPresentable(_ presentable: TitleImagePresentable) { 31 | accessibilityHint = "Represents sorting \(presentable.title)" 32 | textLabel?.text = presentable.title 33 | imageView?.image = presentable.image.withRenderingMode(.alwaysTemplate) 34 | } 35 | } 36 | 37 | extension BrewingsSortingOptionCell { 38 | 39 | func configureWithTheme(_ theme: ThemeConfiguration?) { 40 | super.configureWithTheme(theme) 41 | normalColor = theme?.darkColor 42 | selectedColor = theme?.lightTintColor 43 | textLabel?.configureWithTheme(theme) 44 | imageView?.configureWithTheme(theme) 45 | 46 | adjustImageTintColorDependingOnSelection() 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Brewer/Classes/MethodPicker/View/MethodPickerCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MethodPickerCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 12.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class MethodPickerCell: UITableViewCell, Highlightable { 13 | @IBOutlet weak var iconImageView: UIImageView! 14 | @IBOutlet weak var titleLabel: UILabel! 15 | 16 | var normalColor: UIColor? 17 | var highlightColor: UIColor? 18 | 19 | required init?(coder aDecoder: NSCoder) { 20 | super.init(coder: aDecoder) 21 | accessoryView = UIImageView(image: UIImage(asset: .Ic_arrow)) 22 | } 23 | 24 | override var isHighlighted: Bool { 25 | didSet { 26 | highlightViews([self], highlighted: isHighlighted) 27 | } 28 | } 29 | } 30 | 31 | extension MethodPickerCell: PresentableConfigurable { 32 | 33 | func configureWithPresentable(_ presentable: TitleImagePresentable) { 34 | accessibilityHint = "Selects \(presentable.title) method" 35 | titleLabel.text = presentable.title 36 | iconImageView.image = presentable.image 37 | } 38 | } 39 | 40 | extension MethodPickerCell { 41 | 42 | func configureWithTheme(_ theme: ThemeConfiguration?) { 43 | super.configureWithTheme(theme) 44 | titleLabel.configureWithTheme(theme) 45 | titleLabel.backgroundColor = UIColor.clear 46 | normalColor = theme?.lightColor 47 | highlightColor = highlightColorForTheme(theme) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Brewer/Classes/MethodPicker/ViewModel/MethodPickerViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 25.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | protocol MethodPickerViewModelType: TableViewConfigurable { 10 | func methodForIndexPath(_ indexPath: IndexPath) -> BrewMethod 11 | } 12 | 13 | final class MethodPickerViewModel: MethodPickerViewModelType { 14 | var listItems = [ 15 | BrewMethod.allValues.map { $0 as TitleImagePresentable } 16 | ] 17 | 18 | lazy var dataSource: TableViewSourceWrapper = { 19 | return TableViewSourceWrapper(tableDataSource: self) 20 | }() 21 | 22 | func methodForIndexPath(_ indexPath: IndexPath) -> BrewMethod { 23 | return objectAtIndexPath(indexPath) as! BrewMethod 24 | } 25 | } 26 | 27 | extension MethodPickerViewModel: TableViewConfigurable { 28 | 29 | func configureWithTableView(_ tableView: UITableView) { 30 | tableView.dataSource = dataSource 31 | } 32 | } 33 | 34 | extension MethodPickerViewModel: TableListDataSource { 35 | 36 | func cellIdentifierForIndexPath(_ indexPath: IndexPath) -> String { 37 | return "MethodPickerCell" 38 | } 39 | 40 | func listView(_ listView: UITableView, configureCell cell: MethodPickerCell, withObject object: TitleImagePresentable, atIndexPath indexPath: IndexPath) { 41 | cell.configureWithPresentable(object) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Common/NumericalInput/View/NumericalInputTextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NumericalInputTextField.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 02.08.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class NumericalInputTextField: UITextField { 13 | 14 | override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 15 | if action == #selector(cut) 16 | || action == #selector(paste) 17 | || action == #selector(delete) 18 | || action == #selector(makeTextWritingDirectionLeftToRight) 19 | || action == #selector(makeTextWritingDirectionRightToLeft) 20 | || action == #selector(toggleBoldface) 21 | || action == #selector(toggleItalics) 22 | || action == #selector(toggleUnderline) { return false } 23 | return true 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Common/NumericalInput/ViewModel/NumericalInputViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 18.03.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | protocol NumericalInputViewModelType { 9 | var unit: String { get } 10 | var informativeText: String { get } 11 | var inputTransformer: NumericalInputTransformerType { get } 12 | var currentValue: String? { get } 13 | 14 | func setInputValue(_ value: String) 15 | } 16 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Common/SelectableSearch/SelectableSearchIdentifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SelectableSearchIdentifier.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum SelectableSearchIdentifier: String { 12 | case Coffee 13 | case CoffeeMachine 14 | } 15 | 16 | extension SelectableSearchIdentifier: CustomStringConvertible { 17 | var description: String { 18 | switch self { 19 | case .Coffee: return tr(.selectableSearchCoffeeItemTitle) 20 | case .CoffeeMachine: return tr(.selectableSearchCoffeeMachineItemTitle) 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/General/View/NewBrewCollectionViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | final class NewBrewCollectionViewCell: UICollectionViewCell { 10 | var topInset: CGFloat = 0 11 | 12 | weak var stepView: UIView? { 13 | didSet { 14 | if let stepView = stepView { 15 | contentView.addSubview(stepView) 16 | } 17 | } 18 | } 19 | 20 | override func layoutSubviews() { 21 | contentView.frame = bounds 22 | stepView?.frame = CGRect(x: 0, y: 0 + topInset, width: bounds.width, height: bounds.height - topInset) 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/General/View/NewBrewUnwindSegue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NewBrewUnwindSegue.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 18.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class NewBrewUnwindSegue: UIStoryboardSegue { 13 | var shouldSwitchToHistory: Bool = false 14 | } 15 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/GrindSize/View/GrindSizeSliderContainerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GrindSizeSliderContainerView.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 08.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class GrindSizeSliderContainerView: UIView { 13 | @IBOutlet weak var extraFineImageView: UIImageView! 14 | @IBOutlet weak var extraFineLabel: UILabel! { 15 | didSet { 16 | extraFineLabel.text = tr(.grindSizeLevelExtraFine) 17 | } 18 | } 19 | @IBOutlet weak var coarseImageView: UIImageView! 20 | @IBOutlet weak var coarseLabel: UILabel! { 21 | didSet { 22 | coarseLabel.text = tr(.grindSizeLevelCoarse) 23 | } 24 | } 25 | @IBOutlet weak var slider: UISlider! 26 | } 27 | 28 | extension GrindSizeSliderContainerView { 29 | 30 | func configureWithTheme(_ theme: ThemeConfiguration?) { 31 | backgroundColor = theme?.lightColor 32 | slider.configureWithTheme(theme) 33 | [extraFineLabel, coarseLabel].forEach { 34 | $0!.configureWithTheme(theme) 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Notes/View/NotesViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | import RxSwift 9 | import RxCocoa 10 | 11 | extension NotesViewController: Activable { } 12 | extension NotesViewController: ThemeConfigurationContainer { } 13 | 14 | final class NotesViewController: UIViewController { 15 | fileprivate let disposeBag = DisposeBag() 16 | @IBOutlet weak var notesTextView: UITextView! 17 | 18 | var active: Bool = false { 19 | didSet { 20 | if var responder = notesTextView { 21 | responder.active = active 22 | } 23 | } 24 | } 25 | 26 | var viewModel: NotesViewModelType! 27 | var themeConfiguration: ThemeConfiguration? 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | title = BrewAttributeType.Notes.description 32 | notesTextView.text = viewModel.notes.value 33 | 34 | notesTextView.rx.text.bindTo(viewModel.notes).addDisposableTo(disposeBag) 35 | } 36 | 37 | override func viewWillAppear(_ animated: Bool) { 38 | super.viewWillAppear(animated) 39 | view.configureWithTheme(themeConfiguration) 40 | notesTextView.configureWithTheme(themeConfiguration) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Notes/ViewModel/NotesViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotesViewModel.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 19.03.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RxSwift 11 | import RxCocoa 12 | 13 | protocol NotesViewModelType { 14 | var notes: Variable { get } 15 | } 16 | 17 | final class NotesViewModel: NotesViewModelType { 18 | fileprivate let disposeBag = DisposeBag() 19 | let brewModelController: BrewModelControllerType 20 | 21 | fileprivate(set) var notes: Variable = Variable("") 22 | 23 | init(brewModelController: BrewModelControllerType) { 24 | self.brewModelController = brewModelController 25 | notes.value = brewModelController.currentBrew()?.notes ?? "" 26 | notes.asDriver().map { $0 ?? "" }.drive(onNext: setNotesToBrew).addDisposableTo(disposeBag) 27 | } 28 | 29 | fileprivate func setNotesToBrew(_ notes: String) { 30 | brewModelController.currentBrew()?.notes = notes 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Tamping/View/TampingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TampingView.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 08.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class TampingView: UIView { 13 | @IBOutlet weak var lightImageView: UIImageView! 14 | @IBOutlet weak var lightLabel: UILabel! 15 | @IBOutlet weak var strongLabel: UILabel! 16 | @IBOutlet weak var strongImageView: UIImageView! 17 | @IBOutlet weak var slider: UISlider! 18 | @IBOutlet weak var informativeLabel: InformativeLabel! 19 | } 20 | 21 | extension TampingView { 22 | 23 | func configureWithTheme(_ theme: ThemeConfiguration?) { 24 | super.configureWithTheme(theme) 25 | slider.configureWithTheme(theme) 26 | [lightLabel, strongLabel].forEach { 27 | $0!.configureWithTheme(theme) 28 | } 29 | informativeLabel.configureWithTheme(theme) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Brewer/Classes/NewBrew/Tamping/View/TampingViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | import RxSwift 9 | import RxCocoa 10 | 11 | extension TampingViewController: Activable { } 12 | extension TampingViewController: ThemeConfigurationContainer { } 13 | 14 | final class TampingViewController: UIViewController { 15 | fileprivate let disposeBag = DisposeBag() 16 | 17 | @IBOutlet var tampingView: TampingView! 18 | 19 | var active: Bool = false 20 | var themeConfiguration: ThemeConfiguration? 21 | var viewModel: TampingViewModelType! 22 | 23 | override func viewDidLoad() { 24 | super.viewDidLoad() 25 | title = BrewAttributeType.TampStrength.description 26 | tampingView.slider.rx.value.bindTo(viewModel.tampingValue).addDisposableTo(disposeBag) 27 | tampingView.informativeLabel.text = viewModel.informativeText 28 | } 29 | 30 | override func viewWillAppear(_ animated: Bool) { 31 | super.viewWillAppear(animated) 32 | view.configureWithTheme(themeConfiguration) 33 | tampingView.configureWithTheme(themeConfiguration) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/About/View/AboutViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 27.07.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | extension AboutViewController: ThemeConfigurable { } 10 | extension AboutViewController: ThemeConfigurationContainer { } 11 | 12 | final class AboutViewController: UITableViewController { 13 | 14 | var themeConfiguration: ThemeConfiguration? 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | title = tr(.settingsAboutMenuItemTitle) 19 | configureWithTheme(themeConfiguration) 20 | } 21 | 22 | override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 23 | cell.configureWithTheme(themeConfiguration) 24 | (cell as? AboutViewPhotoCell)?.configureWithTheme(themeConfiguration) 25 | 26 | cell.contentView.subviews.forEach { 27 | ($0 as? UILabel)?.configureWithTheme(themeConfiguration) 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/About/View/AboutViewPhotoCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 27.07.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | final class AboutViewPhotoCell: UITableViewCell { 10 | @IBOutlet weak var authorsLabel: UILabel! 11 | 12 | func configureWithTheme(_ theme: ThemeConfiguration?) { 13 | super.configureWithTheme(theme) 14 | authorsLabel.configureWithTheme(theme) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/About/View/AboutViewThanksCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AboutViewThanksCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 29.07.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class AboutViewThanksCell: UITableViewCell { 13 | @IBOutlet weak var thanksTitleLabel: UILabel! { 14 | didSet { 15 | thanksTitleLabel.text = tr(.settingsAboutThanksForTransaltion) + ":" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/General/Model/KeyValueStoreType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 25.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | protocol KeyValueStoreType { 9 | func object(forKey defaultName: String) -> Any? 10 | func set(_ value: Any?, forKey defaultName: String) 11 | func removeObject(forKey defaultName: String) 12 | func synchronize() -> Bool 13 | } 14 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/General/View/SettingsCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 28.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class SettingsCell: UITableViewCell, Highlightable { 13 | var normalColor: UIColor? 14 | var highlightColor: UIColor? 15 | 16 | override var isHighlighted: Bool { 17 | didSet { 18 | highlightViews([self, textLabel!], highlighted: isHighlighted) 19 | } 20 | } 21 | } 22 | 23 | extension SettingsCell: PresentableConfigurable { 24 | 25 | func configureWithPresentable(_ presentable: TitlePresentable) { 26 | accessibilityHint = "Opens \(presentable.title)" 27 | textLabel?.text = presentable.title 28 | } 29 | } 30 | 31 | extension SettingsCell { 32 | 33 | func configureWithTheme(_ theme: ThemeConfiguration?) { 34 | super.configureWithTheme(theme) 35 | [textLabel!, detailTextLabel!].forEach { 36 | $0.configureWithTheme(theme) 37 | } 38 | normalColor = theme?.lightColor 39 | highlightColor = highlightColorForTheme(theme) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/General/ViewModel/SettingsViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 21.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | struct SettingsItem: TitlePresentable { 10 | let title: String 11 | } 12 | 13 | final class SettingsViewModel { 14 | 15 | var listItems = [[ 16 | SettingsItem(title: tr(.settingsBrewingSequenceMenuItemTitle)), 17 | SettingsItem(title: tr(.settingsUnitsMenuItemTitle)), 18 | SettingsItem(title: tr(.settingsAboutMenuItemTitle)), 19 | SettingsItem(title: tr(.settingsFeedbackMenuItemTitle)), 20 | SettingsItem(title: tr(.settingsRateMenuItemTitle)), 21 | ]] 22 | 23 | lazy var dataSource: TableViewSourceWrapper = TableViewSourceWrapper(tableDataSource: self) 24 | } 25 | 26 | extension SettingsViewModel: TableViewConfigurable { 27 | 28 | func configureWithTableView(_ tableView: UITableView) { 29 | tableView.dataSource = dataSource 30 | } 31 | } 32 | 33 | extension SettingsViewModel: TableListDataSource { 34 | 35 | func cellIdentifierForIndexPath(_ indexPath: IndexPath) -> String { 36 | return "SettingsCell" 37 | } 38 | 39 | func listView(_ listView: UITableView, configureCell cell: SettingsCell, withObject object: SettingsItem, atIndexPath indexPath: IndexPath) { 40 | cell.configureWithPresentable(object) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Sequence/Model/BrewAttributeType+DefaultSequenceSettings.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 25.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | extension BrewAttributeType { 9 | func defaultPosition(forMethod method: BrewMethod) -> Int { 10 | switch self { 11 | case .CoffeeWeight: return 0 12 | case .GrindSize: return 1 13 | case .TampStrength: return 2 14 | case .WaterTemperature: return 3 15 | case .WaterWeight: return 4 16 | case .PreInfusionTime: return 5 17 | case .Time: return 6 18 | case .Notes: return 7 19 | } 20 | } 21 | 22 | func defaultEnabled(forMethod method: BrewMethod) -> Bool { 23 | switch self { 24 | case .CoffeeWeight, .GrindSize, .WaterTemperature, .WaterWeight, .Time, .Notes: 25 | return true 26 | case .PreInfusionTime: 27 | return false 28 | case .TampStrength: 29 | switch method { 30 | case .CoffeeMachine: return true 31 | default: return false 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Sequence/View/SequenceSettingsCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SequenceSettingsCell.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class SequenceSettingsCell: UITableViewCell { 13 | var themeBackgroundColor: UIColor? 14 | var themeSelectedBackgroundColor: UIColor? { 15 | didSet { 16 | selectedBackgroundView = .viewWithBackgroundColor(themeSelectedBackgroundColor) 17 | } 18 | } 19 | 20 | override var isSelected: Bool { 21 | set(newValue) { 22 | super.isSelected = newValue 23 | backgroundColor = themeBackgroundColor 24 | } 25 | get { 26 | return super.isSelected 27 | } 28 | } 29 | } 30 | 31 | extension SequenceSettingsCell { 32 | 33 | func configureWithTheme(_ theme: ThemeConfiguration?) { 34 | themeBackgroundColor = theme?.lightColor 35 | themeSelectedBackgroundColor = theme?.lightTintColor.withAlphaComponent(0.3) 36 | textLabel?.configureWithTheme(theme) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/Model/UnitCategory+DefaultSettings.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 18.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | extension UnitCategory { 9 | func defaultSetting() -> Int { 10 | switch self { 11 | case .weight: return UnitCategory.WeightUnit.g.rawValue 12 | case .water: return UnitCategory.WaterUnit.g.rawValue 13 | case .temperature: return UnitCategory.TemperatureUnit.celsius.rawValue 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/ViewModel/Temperature/TemperatureUnitsDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 10.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | final class TemperatureUnitsDataSource: UnitsDataSourceType { 9 | var items: [UnitsDataSourceItem] { 10 | return UnitCategory.TemperatureUnit.allValues.map { 11 | UnitsDataSourceItem(key: $0.rawValue, title: $0.description) 12 | } 13 | } 14 | 15 | var title: String { 16 | return tr(.unitCategoryTemperature) 17 | } 18 | 19 | var category: Int { 20 | return UnitCategory.temperature.rawValue 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/ViewModel/UnitsDataSourceType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 20.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | struct UnitsDataSourceItem { 9 | let key: Int 10 | let title: String 11 | } 12 | 13 | protocol UnitsDataSourceType: class { 14 | var title: String { get } 15 | var items: [UnitsDataSourceItem] { get } 16 | var category: Int { get } 17 | } 18 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/ViewModel/UnitsDataSourcesFactory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 20.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | protocol UnitsDataSourcesFactoryType { 9 | var dataSources: [UnitsDataSourceType] { get } 10 | } 11 | 12 | final class UnitsDataSourcesFactory: UnitsDataSourcesFactoryType { 13 | var dataSources: [UnitsDataSourceType] { 14 | return [ 15 | WaterUnitsDataSource(), 16 | WeightUnitsDataSource(), 17 | TemperatureUnitsDataSource() 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/ViewModel/Water/WaterUnitsDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 10.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | final class WaterUnitsDataSource: UnitsDataSourceType { 9 | var items: [UnitsDataSourceItem] { 10 | return UnitCategory.WaterUnit.allValues.map { 11 | UnitsDataSourceItem(key: $0.rawValue, title: $0.description) 12 | } 13 | } 14 | 15 | var title: String { 16 | return tr(.unitCategoryWater) 17 | } 18 | 19 | var category: Int { 20 | return UnitCategory.water.rawValue 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Brewer/Classes/Settings/Units/ViewModel/Weight/WeightUnitsDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 10.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | final class WeightUnitsDataSource: UnitsDataSourceType { 9 | var items: [UnitsDataSourceItem] { 10 | return UnitCategory.WeightUnit.allValues.map { 11 | UnitsDataSourceItem(key: $0.rawValue, title: $0.description) 12 | } 13 | } 14 | 15 | var title: String { 16 | return tr(.unitCategoryCoffee) 17 | } 18 | 19 | var category: Int { 20 | return UnitCategory.weight.rawValue 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Analytics/Analytics.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 24.07.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | final class Analytics { 9 | 10 | static let sharedInstance = Analytics() 11 | 12 | fileprivate var tracker: GAITracker? 13 | 14 | fileprivate init() { 15 | #if !DEBUG 16 | setup() 17 | tracker = GAI.sharedInstance().defaultTracker 18 | #endif 19 | } 20 | 21 | // MARK: Setup 22 | 23 | fileprivate func setup() { 24 | var error: NSError? 25 | GGLContext.sharedInstance().configureWithError(&error) 26 | if let error = error { 27 | print("Error configuring Google services: \(error.localizedDescription)") 28 | } 29 | 30 | let gai = GAI.sharedInstance() 31 | gai?.trackUncaughtExceptions = true 32 | gai?.logger.logLevel = GAILogLevel.warning 33 | } 34 | 35 | // MARK: Events 36 | 37 | func trackScreen(withTitle title: String) { 38 | tracker?.set(kGAIScreenName, value: title) 39 | tracker?.send(GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]) 40 | } 41 | 42 | func trackMethodPickEvent(onScreen screen: String, method: BrewMethod) { 43 | tracker?.send( 44 | GAIDictionaryBuilder.createEvent( 45 | withCategory: screen, 46 | action: "Selected", 47 | label: method.rawValue, 48 | value: 1) 49 | .build() as [NSObject : AnyObject] 50 | ) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Analytics/AppScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Analytics+Screens.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 24.07.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct AppScreen { 12 | static let brewings = "Brewings" 13 | static let newBrew = "NewBrew" 14 | static let settings = "Settings" 15 | static let brewDetails = "BrewDetails" 16 | static let scoreDetails = "ScoreDetails" 17 | static let brewingSort = "BrewingsSort" 18 | static let settingsUnits = "SettingsUnits" 19 | static let settingsSequence = "SettingsSequence" 20 | } 21 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/CoreComponents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 06.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import CoreData 8 | import Swinject 9 | import CoreSpotlight 10 | 11 | final class CoreComponentsAssembly: AssemblyType { 12 | func assemble(container: Container) { 13 | 14 | container.register(StackType.self) { 15 | _ in CoreDataStack(storeType: isRunningTests() ? NSInMemoryStoreType : NSSQLiteStoreType) 16 | }.inObjectScope(.container) 17 | 18 | container.register(KeyValueStoreType.self) { 19 | _ in UserDefaults.standard 20 | } 21 | 22 | container.register(ThemeConfiguration.self) { 23 | _ in MainThemeConfiguration() 24 | } 25 | 26 | container.registerForStoryboard(RootViewController.self) { 27 | r, c in 28 | c.resolver = r 29 | c.themeConfiguration = r.resolve(ThemeConfiguration.self) 30 | } 31 | 32 | container.register(SpotlightSearchService.self) { 33 | _ in SpotlightSearchService(searchableIndex: CSSearchableIndex.default()) 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Brew.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Brew.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 16.01.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | class Brew: NSManagedObject { 13 | 14 | func brewAttributesArray() -> [BrewAttribute] { 15 | guard let attributes = brewAttributes else { 16 | return [] 17 | } 18 | return attributes.allObjects as! [BrewAttribute] 19 | } 20 | 21 | func brewAttributeForType(_ type: BrewAttributeType) -> BrewAttribute? { 22 | guard let attributes = brewAttributes , !attributes.isEmpty else { 23 | return nil 24 | } 25 | return attributes 26 | .filter { ($0 as! BrewAttribute).type == type.intValue } 27 | .last as? BrewAttribute 28 | } 29 | 30 | func cuppingAttributeForType(_ type: CuppingAttribute) -> Cupping? { 31 | guard let attributes = cuppingAttributes , !attributes.isEmpty else { 32 | return nil 33 | } 34 | return attributes 35 | .filter { ($0 as! Cupping).type == type.rawValue } 36 | .last as? Cupping 37 | } 38 | } 39 | 40 | extension Brew: Entity { 41 | static func entityName() -> String { 42 | return "Brew" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/BrewAttribute.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewAttribute.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 16.01.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | class BrewAttribute: NSManagedObject { 13 | 14 | } 15 | 16 | extension BrewAttributeType { 17 | var intValue: Int32 { 18 | switch self { 19 | case .Time: return 1 20 | case .GrindSize: return 2 21 | case .CoffeeWeight: return 3 22 | case .WaterWeight: return 4 23 | case .WaterTemperature: return 5 24 | case .TampStrength: return 6 25 | case .Notes: return 7 26 | case .PreInfusionTime: return 8 27 | } 28 | } 29 | 30 | static func fromIntValue(_ intValue: Int32) -> BrewAttributeType { 31 | switch intValue { 32 | case 1: return .Time 33 | case 2: return .GrindSize 34 | case 3: return .CoffeeWeight 35 | case 4: return .WaterWeight 36 | case 5: return .WaterTemperature 37 | case 6: return .TampStrength 38 | case 7: return .Notes 39 | case 8: return .PreInfusionTime 40 | default: fatalError("Wrong brew attribute int code.") 41 | } 42 | } 43 | } 44 | 45 | extension BrewAttribute: Entity { 46 | static func entityName() -> String { 47 | return "BrewAttribute" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Coffee.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Coffee.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 16.01.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | class Coffee: NSManagedObject { 13 | 14 | } 15 | 16 | extension Coffee: SelectableSearchModelItem { 17 | 18 | } 19 | 20 | extension Coffee: Entity { 21 | static func entityName() -> String { 22 | return "Coffee" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/CoffeeMachine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoffeeMachine.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 16.01.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | class CoffeeMachine: NSManagedObject { 13 | 14 | } 15 | 16 | extension CoffeeMachine: SelectableSearchModelItem { 17 | 18 | } 19 | 20 | extension CoffeeMachine: Entity { 21 | static func entityName() -> String { 22 | return "CoffeeMachine" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Cupping.swift: -------------------------------------------------------------------------------- 1 | // Cupping.swift 2 | // Brewer 3 | // 4 | // Created by Maciej Oczko on 16.01.2016. 5 | // Copyright © 2016 Maciej Oczko. All rights reserved. 6 | // 7 | 8 | import Foundation 9 | import CoreData 10 | 11 | class Cupping: NSManagedObject { 12 | 13 | } 14 | 15 | extension Cupping: Entity { 16 | static func entityName() -> String { 17 | return "CuppingAttribute" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Machine/Brew+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Brew+CoreDataProperties.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 05.03.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension Brew { 16 | 17 | @NSManaged var created: TimeInterval 18 | @NSManaged var method: Int32 19 | @NSManaged var notes: String? 20 | @NSManaged var score: Double 21 | @NSManaged var isFinished: Bool 22 | @NSManaged var brewAttributes: NSSet? 23 | @NSManaged var coffee: Coffee? 24 | @NSManaged var coffeeMachine: CoffeeMachine? 25 | @NSManaged var cuppingAttributes: NSSet? 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Machine/BrewAttribute+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewAttribute+CoreDataProperties.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 18.03.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension BrewAttribute { 16 | 17 | @NSManaged var type: Int32 18 | @NSManaged var value: Double 19 | @NSManaged var unit: Int32 20 | @NSManaged var brew: Brew? 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Machine/Coffee+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Coffee+CoreDataProperties.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 18.03.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension Coffee { 16 | 17 | @NSManaged var name: String? 18 | @NSManaged var process: String? 19 | @NSManaged var variety: String? 20 | @NSManaged var updatedAt: TimeInterval 21 | @NSManaged var brews: NSSet? 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Machine/CoffeeMachine+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoffeeMachine+CoreDataProperties.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 18.03.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension CoffeeMachine { 16 | 17 | @NSManaged var name: String? 18 | @NSManaged var updatedAt: TimeInterval 19 | @NSManaged var brews: NSSet? 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Entities/Machine/Cupping+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Cupping+CoreDataProperties.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 16.01.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension Cupping { 16 | 17 | @NSManaged var type: Int32 18 | @NSManaged var value: Double 19 | @NSManaged var brew: Brew? 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Model/Stack/CoreDataExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 16.03.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import CoreData 8 | 9 | protocol Entity { 10 | static func entityName() -> String 11 | } 12 | 13 | struct CoreDataOperations where T: NSManagedObject, T: Entity { 14 | let context: NSManagedObjectContext 15 | 16 | init(managedObjectContext context: NSManagedObjectContext) { 17 | self.context = context 18 | } 19 | 20 | func create() -> T { 21 | return NSEntityDescription.insertNewObject(forEntityName: T.entityName(), into: context) as! T 22 | } 23 | 24 | func fetch(withPredicate predicate: NSPredicate? = nil, sortDescriptors: [NSSortDescriptor]? = nil) throws -> [T] { 25 | let fetchRequest = NSFetchRequest(entityName: T.entityName()) 26 | fetchRequest.predicate = predicate 27 | fetchRequest.sortDescriptors = sortDescriptors 28 | return try context.fetch(fetchRequest) 29 | } 30 | 31 | func save() throws { 32 | try context.save() 33 | } 34 | 35 | func objectForID(_ objectID: NSManagedObjectID) -> T? { 36 | return context.registeredObject(for: objectID) as? T 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/ResolvableContainer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import Swinject 8 | 9 | protocol ResolvableContainer { 10 | var resolver: ResolverType? { get set } 11 | } 12 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Seque/SegueHandler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | extension UIViewController { 10 | 11 | func segueIdentifierForSegue(_ segue: UIStoryboardSegue) -> SegueIdentifier { 12 | guard let identifier = segue.identifier else { 13 | fatalError("Segue identifier doesn't exist") 14 | } 15 | guard let segueIdentifier = SegueIdentifier(rawValue: identifier) else { 16 | fatalError("Unknown segue: \(segue))") 17 | } 18 | return segueIdentifier 19 | } 20 | 21 | func performSegue(_ segueIdentifier: SegueIdentifier) { 22 | self.performSegue(withIdentifier: segueIdentifier.rawValue, sender: nil) 23 | } 24 | 25 | func performSegue(_ segueIdentifier: SegueIdentifier, sender: AnyObject?) { 26 | self.performSegue(withIdentifier: segueIdentifier.rawValue, sender: sender) 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Seque/SegueIdentifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 30.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | enum SegueIdentifier: String { 10 | case StartNewBrew 11 | case BrewingsSorting 12 | case SequenceSettings 13 | case NewBrew 14 | case NewBrewUnwind 15 | case MethodPicker 16 | case MethodPickerUnwind 17 | case Units 18 | case UnitsUnwind 19 | case BrewScoreDetails 20 | case BrewDetails 21 | case About 22 | 23 | case GrindSize 24 | case NumericalInput 25 | case Tamping 26 | case Notes 27 | case SelectableSearch 28 | } 29 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UILabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UILabel.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UILabel { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | font = theme.defaultFontWithSize(font.pointSize) 17 | textColor = theme.darkColor 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UISearchBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UISearchBar.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UISearchBar { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | barTintColor = theme.darkColor 17 | (self as UISearchBar).tintColor = theme.darkColor 18 | isTranslucent = theme.tabBarConfiguration.translucent 19 | searchBarStyle = .minimal 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UISegmentedControl.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UISegmentedControl.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UISegmentedControl { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | (self as UISegmentedControl).tintColor = theme.lightTintColor 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UISlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UISlider.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 08.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UISlider { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | tintColor = theme.lightTintColor 17 | minimumTrackTintColor = theme.darkTintColor 18 | maximumTrackTintColor = theme.darkColor 19 | thumbTintColor = theme.lightTintColor 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UITextField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UITextField.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 07.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UITextField { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | font = theme.defaultFontWithSize(font?.pointSize ?? 0) 17 | textColor = theme.darkColor 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Themes/ThemeConfigurable+UITextView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ThemeConfigurable+UITextView.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 08.05.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension ThemeConfigurable where Self: UITextView { 13 | func configureWithTheme(_ theme: ThemeConfiguration?) { 14 | guard let theme = theme else { return } 15 | backgroundColor = theme.lightColor 16 | font = theme.defaultFontWithSize(font?.pointSize ?? 0) 17 | textColor = theme.darkColor 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/FoundationUtilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 07.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | // swiftlint:disable empty_count 9 | extension NSSet { 10 | var isEmpty: Bool { 11 | return count == 0 12 | } 13 | } 14 | // swiftlint:enalbe empty_count 15 | 16 | extension NSPredicate { 17 | class func falsePredicate() -> NSPredicate { 18 | return NSPredicate(format: "FALSEPREDICATE") 19 | } 20 | 21 | class func truePredicate() -> NSPredicate { 22 | return NSPredicate(format: "TRUEPREDICATE") 23 | } 24 | } 25 | 26 | extension Float { 27 | func format(_ format: String) -> String { 28 | return String(format: "%\(format)f", self) 29 | } 30 | } 31 | 32 | extension Double { 33 | func format(_ format: String) -> String { 34 | return String(format: "%\(format)f", self) 35 | } 36 | } 37 | 38 | extension Collection { 39 | func elements(ofType type: T.Type) -> [T] { 40 | return self.filter { $0 is T }.map { $0 as! T } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/Functions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 26.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | func isRunningTests() -> Bool { 9 | return ProcessInfo.processInfo.environment["XCInjectBundle"] != nil 10 | } 11 | 12 | struct Dispatcher { 13 | static func delay(_ delay: Double, closure: @escaping () -> Void) { 14 | DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure) 15 | } 16 | } 17 | 18 | func abstractMethod() -> Never { 19 | fatalError("Override this method") 20 | } 21 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/SwinjectUtilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 07.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | import Swinject 9 | import SwinjectStoryboard 10 | 11 | extension ResolverType { 12 | 13 | func viewControllerForIdentifier(_ identifier: String) -> T where T: UIViewController { 14 | let sb = SwinjectStoryboard.create(name: identifier, bundle: nil, container: self) 15 | return sb.instantiateViewController(withIdentifier: identifier) as! T 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/ActivableProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 07.02.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | protocol Activable { 10 | var active: Bool { get set } 11 | 12 | func deactivate() 13 | } 14 | 15 | extension Activable { 16 | 17 | func deactivate() { 18 | var mutableSelf = self 19 | mutableSelf.active = false 20 | } 21 | } 22 | 23 | extension Activable { 24 | 25 | func handleActiveValue(_ active: Bool) { 26 | if let responder = self as? UIResponder { 27 | if active { 28 | responder.becomeFirstResponder() 29 | } else { 30 | responder.resignFirstResponder() 31 | } 32 | } 33 | } 34 | } 35 | 36 | extension UITextField: Activable { } 37 | extension Activable where Self: UITextField { 38 | var active: Bool { 39 | get { 40 | return isFirstResponder 41 | } 42 | set(activeValue) { 43 | handleActiveValue(activeValue) 44 | } 45 | } 46 | } 47 | 48 | extension UISearchBar: Activable { } 49 | extension Activable where Self: UISearchBar { 50 | var active: Bool { 51 | get { 52 | return isFirstResponder 53 | } 54 | set(activeValue) { 55 | handleActiveValue(activeValue) 56 | } 57 | } 58 | } 59 | 60 | extension UITextView: Activable { } 61 | extension Activable where Self: UITextView { 62 | var active: Bool { 63 | get { 64 | return isFirstResponder 65 | } 66 | set(activeValue) { 67 | handleActiveValue(activeValue) 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/Highlightable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Highlightable.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 28.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | protocol Highlightable { 13 | var normalColor: UIColor? { get set } 14 | var highlightColor: UIColor? { get set } 15 | 16 | func highlightColorForTheme(_ theme: ThemeConfiguration?) -> UIColor? 17 | func highlightViews(_ views: [UIView], highlighted: Bool) 18 | } 19 | 20 | extension Highlightable { 21 | 22 | func highlightColorForTheme(_ theme: ThemeConfiguration?) -> UIColor? { 23 | return theme?.lightTintColor.withAlphaComponent(0.2) 24 | } 25 | 26 | func highlightViews(_ views: [UIView], highlighted: Bool) { 27 | for view in views { 28 | var highlightColor = self.highlightColor 29 | if view is UILabel { 30 | highlightColor = UIColor.clear 31 | } 32 | view.backgroundColor = highlighted ? highlightColor : normalColor 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/InformativeLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InformativeLabel.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 21.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | final class InformativeLabel: UILabel { 13 | 14 | } 15 | 16 | extension InformativeLabel { 17 | 18 | func configureWithTheme(_ theme: ThemeConfiguration?) { 19 | super.configureWithTheme(theme) 20 | textColor = UIColor.lightGray 21 | font = theme?.defaultFontWithSize(12) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/PresentableProtocols.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TitlePresentable.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 17.04.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import RxSwift 11 | import RxCocoa 12 | 13 | protocol TitlePresentable { 14 | var title: String { get } 15 | } 16 | 17 | protocol ValuePresentable { 18 | var value: String { get } 19 | } 20 | 21 | protocol SliderPresentable { 22 | var sliderValue: Variable { get } 23 | } 24 | 25 | protocol ImagePresentable { 26 | var image: UIImage { get } 27 | } 28 | 29 | protocol PresentableConfigurable { 30 | associatedtype Presentable 31 | func configureWithPresentable(_ presentable: Presentable) 32 | } 33 | 34 | // MARK: Title Value 35 | 36 | typealias TitleValuePresentable = TitlePresentable & ValuePresentable 37 | 38 | // MARK: Title Image 39 | 40 | typealias TitleImagePresentable = TitlePresentable & ImagePresentable 41 | 42 | // MARK: Title Value Slider 43 | 44 | typealias ScoreCellPresentable = TitlePresentable & ValuePresentable & SliderPresentable 45 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/ScrollViewPageMetrics.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 31.01.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | import UIKit 8 | 9 | protocol ScrollViewPageMetricsType { 10 | func isFirstPageOfScrollView(_ scrollView: UIScrollView) -> Bool 11 | func isLastPageOfScrollView(_ scrollView: UIScrollView) -> Bool 12 | func currentPageIndexForScrollView(_ scrollView: UIScrollView) -> Int 13 | } 14 | 15 | final class ScrollViewPageMetrics: ScrollViewPageMetricsType { 16 | 17 | func isFirstPageOfScrollView(_ scrollView: UIScrollView) -> Bool { 18 | return scrollView.contentOffset.x < scrollView.frame.size.width 19 | } 20 | 21 | func isLastPageOfScrollView(_ scrollView: UIScrollView) -> Bool { 22 | return scrollView.contentOffset.x >= (scrollView.contentSize.width - scrollView.frame.size.width) 23 | } 24 | 25 | func currentPageIndexForScrollView(_ scrollView: UIScrollView) -> Int { 26 | return Int(scrollView.contentOffset.x / scrollView.frame.size.width) 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/TabBarConfigurable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Maciej Oczko on 24.07.2016. 3 | // Copyright (c) 2016 Maciej Oczko. All rights reserved. 4 | // 5 | 6 | import Foundation 7 | 8 | protocol TabBarConfigurable { 9 | func setupTabBar() 10 | } 11 | -------------------------------------------------------------------------------- /Brewer/Classes/Shared/Utilities/UI/UIViewController+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewControllerExtensions.swift 3 | // Brewer 4 | // 5 | // Created by Maciej Oczko on 20.06.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIViewController { 13 | func pop() { 14 | _ = navigationController?.popViewController(animated: true) 15 | } 16 | } 17 | 18 | extension UIViewController: UIGestureRecognizerDelegate { 19 | 20 | func enableSwipeToBack() { 21 | if let navigationController = navigationController { 22 | navigationController.interactivePopGestureRecognizer?.isEnabled = true 23 | navigationController.interactivePopGestureRecognizer?.delegate = self 24 | } 25 | } 26 | 27 | public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 28 | return true 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Brewer/Dropnote.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /Brewer/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TRACKING_ID 6 | UA-81260126-1 7 | PLIST_VERSION 8 | 1 9 | BUNDLE_ID 10 | pl.maciejoczko.Dropnote 11 | PROJECT_ID 12 | dropnote-eb0b8 13 | IS_ADS_ENABLED 14 | 15 | IS_ANALYTICS_ENABLED 16 | 17 | IS_APPINVITE_ENABLED 18 | 19 | IS_GCM_ENABLED 20 | 21 | IS_SIGNIN_ENABLED 22 | 23 | GOOGLE_APP_ID 24 | 1:91660750429:ios:5d163452e3d8e475 25 | 26 | -------------------------------------------------------------------------------- /Brewer/Resources/AppIcon60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/AppIcon60x60.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-120.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-152.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-167.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-180.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/AppIcon.appiconset/DropnoteIcon-76.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/IconDropnote.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "IconDropnote@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "IconDropnote@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/IconDropnote.imageset/IconDropnote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/IconDropnote.imageset/IconDropnote@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/IconDropnote.imageset/IconDropnote@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/IconDropnote.imageset/IconDropnote@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/Team.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "Team@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/Team.imageset/Team@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/Team.imageset/Team@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_add.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_add.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_add@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_add@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_add.imageset/ic_add@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_aeropress.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_aeropress@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_aeropress@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_aeropress.imageset/ic_aeropress@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress_quick.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_aeropress_quick.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_aeropress_quick.imageset/ic_aeropress_quick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_aeropress_quick.imageset/ic_aeropress_quick.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_arrow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "scale": "1x", 6 | "filename": "ic_arrow.png" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "scale": "2x", 11 | "filename": "ic_arrow@2x.png" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "scale": "3x", 16 | "filename": "ic_arrow@3x.png" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_arrow.imageset/ic_arrow@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_back.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_back@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_back@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_back.imageset/ic_back@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_best.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_best.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_best@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_best@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_best.imageset/ic_best@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_chemex.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_chemex@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_chemex@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex.imageset/ic_chemex@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_chemex_bw.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_chemex_bw@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_chemex_bw@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_chemex_bw.imageset/ic_chemex_bw@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_close.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_close@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_close@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_close.imageset/ic_close@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_coffee.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_coffee@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_coffee@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee.imageset/ic_coffee@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_coffee_machine.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_coffee_machine@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_coffee_machine@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine.imageset/ic_coffee_machine@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_coffee_machine_bw.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_coffee_machine_bw@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_coffee_machine_bw@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_coffee_machine_bw.imageset/ic_coffee_machine_bw@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_done.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_done.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_done@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_done@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_done.imageset/ic_done@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_drip.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_drip@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_drip@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip.imageset/ic_drip@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_drip_bw.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_drip_bw@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_drip_bw@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_drip_bw.imageset/ic_drip_bw@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_empty_history.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_empty_history@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_empty_history@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_empty_history.imageset/ic_empty_history@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_grind.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_grind.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_grind@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_grind@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_grind.imageset/ic_grind@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_inverted.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_inverted@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_inverted@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted.imageset/ic_inverted@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_inverted_bw.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_inverted_bw@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_inverted_bw@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_inverted_bw.imageset/ic_inverted_bw@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kalita.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_kalita.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_kalita@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_kalita@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kalita.imageset/ic_kalita@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kone.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_kone.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_kone@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_kone@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_kone.imageset/ic_kone@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_machine.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_machine.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_machine@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_machine@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_machine.imageset/ic_machine@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_newest.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_newest.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_newest@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_newest@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_newest.imageset/ic_newest@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_next.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_next.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_next@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_next@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_next.imageset/ic_next@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_notes.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_notes.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_notes@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_notes@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_notes.imageset/ic_notes@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_oldest.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_oldest.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_oldest@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_oldest@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_oldest.imageset/ic_oldest@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_previous.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_previous.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_previous@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_previous@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_previous.imageset/ic_previous@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_history.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_history@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_history@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history.imageset/ic_tab_history@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_history_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_history_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_history_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_history_pressed.imageset/ic_tab_history_pressed@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_settings.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_settings@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_settings@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings.imageset/ic_tab_settings@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_settings_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_settings_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_settings_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_settings_pressed.imageset/ic_tab_settings_pressed@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_start.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_start@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_start@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start.imageset/ic_tab_start@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tab_start_pressed.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tab_start_pressed@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tab_start_pressed@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tab_start_pressed.imageset/ic_tab_start_pressed@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tamp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_tamp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_tamp@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_tamp@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_tamp.imageset/ic_tamp@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_temp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_temp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_temp@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_temp@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_temp.imageset/ic_temp@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_time.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_time.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_time@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_time@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_time.imageset/ic_time@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_water.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_water.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_water@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_water@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_water.imageset/ic_water@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_weight.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_weight.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_weight@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_weight@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_weight.imageset/ic_weight@3x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_worst.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "ic_worst.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "ic_worst@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "ic_worst@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst@2x.png -------------------------------------------------------------------------------- /Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/Brewer/Resources/Assets.xcassets/ic_worst.imageset/ic_worst@3x.png -------------------------------------------------------------------------------- /BrewerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.1.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 61 23 | 24 | 25 | -------------------------------------------------------------------------------- /BrewerUITests/BrewerUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrewerUITests.swift 3 | // BrewerUITests 4 | // 5 | // Created by Maciej Oczko on 31.07.2016. 6 | // Copyright © 2016 Maciej Oczko. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class BrewerUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | continueAfterFailure = false 16 | 17 | let app = XCUIApplication() 18 | app.launchArguments = ["use_mock_data"] 19 | setupSnapshot(app) 20 | app.launch() 21 | } 22 | 23 | override func tearDown() { 24 | super.tearDown() 25 | } 26 | 27 | // It's used for fastlane snapshot purposes 28 | func testExample() { 29 | let app = XCUIApplication() 30 | let tabBarsQuery = app.tabBars 31 | snapshot("01MethodPicker") 32 | tabBarsQuery.buttons["Select Second"].tap() 33 | snapshot("02History") 34 | tabBarsQuery.buttons["Select Third"].tap() 35 | snapshot("03Settings") 36 | XCTAssert(true) 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /BrewerUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.1.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 61 23 | 24 | 25 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 1.0.1 (August 11th, 2016) 2 | 3 | - Fixed adding coffee in new brew process 4 | 5 | # 1.0.0 (August, 2016) 6 | 7 | - Added starting new brew 8 | - Added new brew process 9 | - Added history of brews 10 | - Added brew details 11 | - Added brewing steps sequence settings 12 | - Added units settings 13 | -------------------------------------------------------------------------------- /External/Box/Box.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2014 Rob Rix. All rights reserved. 2 | 3 | /// Wraps a type `T` in a reference type. 4 | /// 5 | /// Typically this is used to work around limitations of value types (for example, the lack of codegen for recursive value types and type-parameterized enums with >1 case). It is also useful for sharing a single (presumably large) value without copying it. 6 | public final class Box: BoxType, CustomStringConvertible { 7 | /// Initializes a `Box` with the given value. 8 | public init(_ value: T) { 9 | self.value = value 10 | } 11 | 12 | 13 | /// Constructs a `Box` with the given `value`. 14 | public class func unit(_ value: T) -> Box { 15 | return Box(value) 16 | } 17 | 18 | 19 | /// The (immutable) value wrapped by the receiver. 20 | public let value: T 21 | 22 | /// Constructs a new Box by transforming `value` by `f`. 23 | public func map(_ f: (T) -> U) -> Box { 24 | return Box(f(value)) 25 | } 26 | 27 | 28 | // MARK: Printable 29 | 30 | public var description: String { 31 | return String(describing: value) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /External/Box/BoxType.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2014 Rob Rix. All rights reserved. 2 | 3 | // MARK: BoxType 4 | 5 | /// The type conformed to by all boxes. 6 | public protocol BoxType { 7 | /// The type of the wrapped value. 8 | associatedtype Value 9 | 10 | /// Initializes an intance of the type with a value. 11 | init(_ value: Value) 12 | 13 | /// The wrapped value. 14 | var value: Value { get } 15 | } 16 | 17 | /// The type conformed to by mutable boxes. 18 | public protocol MutableBoxType: BoxType { 19 | /// The (mutable) wrapped value. 20 | var value: Value { get set } 21 | } 22 | 23 | 24 | // MARK: Equality 25 | 26 | /// Equality of `BoxType`s of `Equatable` types. 27 | /// 28 | /// We cannot declare that e.g. `Box` conforms to `Equatable`, so this is a relatively ad hoc definition. 29 | public func == (lhs: B, rhs: B) -> Bool where B.Value: Equatable { 30 | return lhs.value == rhs.value 31 | } 32 | 33 | /// Inequality of `BoxType`s of `Equatable` types. 34 | /// 35 | /// We cannot declare that e.g. `Box` conforms to `Equatable`, so this is a relatively ad hoc definition. 36 | public func != (lhs: B, rhs: B) -> Bool where B.Value: Equatable { 37 | return lhs.value != rhs.value 38 | } 39 | 40 | 41 | // MARK: Map 42 | 43 | /// Maps the value of a box into a new box. 44 | public func map(_ v: B, f: (B.Value) -> C.Value) -> C { 45 | return C(f(v.value)) 46 | } 47 | -------------------------------------------------------------------------------- /External/Box/MutableBox.swift: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2014 Rob Rix. All rights reserved. 2 | 3 | /// Wraps a type `T` in a mutable reference type. 4 | /// 5 | /// While this, like `Box` could be used to work around limitations of value types, it is much more useful for sharing a single mutable value such that mutations are shared. 6 | /// 7 | /// As with all mutable state, this should be used carefully, for example as an optimization, rather than a default design choice. Most of the time, `Box` will suffice where any `BoxType` is needed. 8 | public final class MutableBox: MutableBoxType, CustomStringConvertible { 9 | /// Initializes a `MutableBox` with the given value. 10 | public init(_ value: T) { 11 | self.value = value 12 | } 13 | 14 | /// The (mutable) value wrapped by the receiver. 15 | public var value: T 16 | 17 | /// Constructs a new MutableBox by transforming `value` by `f`. 18 | public func map(_ f: (T) -> U) -> MutableBox { 19 | return MutableBox(f(value)) 20 | } 21 | 22 | // MARK: Printable 23 | 24 | public var description: String { 25 | return String(describing: value) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /GeneratedAssets/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_add.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_add@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_add@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_add@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_add@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_aeropress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_aeropress.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_aeropress@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_aeropress@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_aeropress@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_aeropress@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_arrow.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_arrow@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_arrow@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_back.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_back@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_back@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_best.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_best.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_best@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_best@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_best@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_best@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_chemex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_chemex.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_chemex@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_chemex@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_chemex@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_chemex@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_close.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_close@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_close@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee_machine.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee_machine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee_machine@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_coffee_machine@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_coffee_machine@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_done.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_done@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_done@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_done@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_done@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_drip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_drip.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_drip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_drip@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_drip@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_drip@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_empty_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_empty_history.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_empty_history@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_empty_history@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_empty_history@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_empty_history@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_filter.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_filter@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_filter@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_filter@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_grind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_grind.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_grind@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_grind@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_grind@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_grind@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_inverted.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_inverted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_inverted@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_inverted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_inverted@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_machine.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_machine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_machine@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_machine@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_machine@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_newest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_newest.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_newest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_newest@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_newest@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_newest@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_next.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_next@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_next@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_next@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_notes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_notes.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_notes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_notes@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_notes@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_notes@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_oldest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_oldest.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_oldest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_oldest@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_oldest@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_oldest@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_previous.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_previous@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_previous@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_previous@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_previous@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history_pressed.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history_pressed@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_history_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_history_pressed@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings_pressed.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings_pressed@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_settings_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_settings_pressed@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start_pressed.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start_pressed@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tab_start_pressed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tab_start_pressed@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tamp.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tamp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tamp@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_tamp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_tamp@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_temp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_temp.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_temp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_temp@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_temp@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_temp@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_time.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_time@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_time@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_time@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_water.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_water@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_water@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_water@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_water@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_weight.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_weight@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_weight@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_weight@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_weight@3x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_worst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_worst.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_worst@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_worst@2x.png -------------------------------------------------------------------------------- /GeneratedAssets/ic_worst@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dropnote/Dropnote-iOS/ae40452930c0082782e137a364585a3ec7197717/GeneratedAssets/ic_worst@3x.png -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | 3 | platform :ios, '9.0' 4 | 5 | inhibit_all_warnings! 6 | use_frameworks! 7 | 8 | target :Brewer do 9 | pod 'Swinject', '~> 2.0.0-beta.2' 10 | pod 'SwinjectStoryboard', '~> 1.0.0-beta.2' 11 | 12 | pod 'RxSwift', '~> 3.0.1' 13 | pod 'RxCocoa', '~> 3.0.1' 14 | 15 | pod 'ObjectMapper' 16 | pod 'XCGLogger', '~> 4.0.0' 17 | pod 'FormatterKit' 18 | pod 'DZNEmptyDataSet' 19 | 20 | pod 'Google/Analytics' 21 | pod 'Fabric' 22 | pod 'Crashlytics' 23 | 24 | target :BrewerTests do 25 | 26 | pod 'Quick' 27 | pod 'Nimble', '~> 5.0.0' 28 | pod 'RxTest', '~> 3.0.1' 29 | pod 'RxBlocking', '~> 3.0.1' 30 | end 31 | 32 | end 33 | 34 | post_install do |installer| 35 | installer.pods_project.targets.each do |target| 36 | target.build_configurations.each do |config| 37 | config.build_settings['SWIFT_VERSION'] = '3.0' 38 | config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.10' 39 | end 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dropnote 2 | 3 | ## Introduction 4 | 5 | [Dropnote](http://dropnote.today) - your personal coffee brewings diary. 6 | 7 | Download on the [App Store](https://itunes.apple.com/us/app/dropnote-coffee-brewing-notebook/id1112293581). 8 | 9 | ## Why is it public repo? 10 | 11 | There are a few reasons. The main one is sharing knowledge and opinions. 12 | 13 | I'd like to learn throught discussions, open issues and code/design changes. 14 | I hope that it may also be a learning opportunity or interesting experience for others. 15 | 16 | If you want to know more about code base, its design and used patterns (or made mistakes) take a look at [app design page](APPDESIGN.md). 17 | 18 | ## Installation 19 | 20 | - Clone the repo to working directory 21 | - Dependencies are managed with [CocoaPods](https://cocoapods.org), so you have to run: 22 | ``` 23 | pod install 24 | ``` 25 | If you don't have CocoaPods installed, run: 26 | ``` 27 | [sudo] gem install cocoapods 28 | ``` 29 | - Open the `Brewer.xcworkspace` in Xcode: 30 | ``` 31 | open Brewer.xcworkspace 32 | ``` 33 | 34 | ### What does _Brewer_ name refer to? 35 | 36 | _Brewer_ is the initial name (current code name) of the project. _Dropnote_ was made up much later. 37 | 38 | ## Planned features 39 | 40 | Look [here](https://github.com/Dropnote/Dropnote-iOS/issues/2). 41 | 42 | ## Contributing 43 | 44 | Honestly, I don't expect much contribution in this personal project, but if you find a bug I'd appreciate an issue or pull request. 45 | 46 | Primarily, I'd love to hear feedback about code design or used solutions. 47 | 48 | ## Acknowledgements 49 | 50 | Dropnote is desinged by [Gosia](https://www.linkedin.com/in/gosiafiedorow). 51 | 52 | Thanks to translators: 53 | 54 | - [Magda Zadara](https://www.linkedin.com/in/magdalena-zadara-a8a97153) - German 55 | - [Rafał Tulwin](https://www.linkedin.com/in/rtulwin) - Spanish 56 | - Adrien Julé - French 57 | -------------------------------------------------------------------------------- /VectorAssets/ic_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_add 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /VectorAssets/ic_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_arrow 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /VectorAssets/ic_back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_back 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /VectorAssets/ic_best.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_best 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /VectorAssets/ic_close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_close 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /VectorAssets/ic_coffee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_coffee 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_done.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_done 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /VectorAssets/ic_empty_history.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_empty_history 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_filter 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_grind.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_grind 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_newest.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_newest 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /VectorAssets/ic_next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_next 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_notes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_notes 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_previous.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_previous 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_tamp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_tamp 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_temp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_temp 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_time.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_time 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_water.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_water 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_weight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_weight 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /VectorAssets/ic_worst.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ic_worst 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier "pl.maciejoczko.Dropnote" # The bundle identifier of your app 2 | apple_id "maciejoczko@gmail.com" # Your Apple email address 3 | 4 | team_id "N7LF5KBDPY" # Developer Portal Team ID 5 | 6 | # you can even provide different app identifiers, Apple IDs and team names per lane: 7 | # More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md 8 | -------------------------------------------------------------------------------- /fastlane/Deliverfile: -------------------------------------------------------------------------------- 1 | ###################### More Options ###################### 2 | # If you want to have even more control, check out the documentation 3 | # https://github.com/fastlane/fastlane/blob/master/deliver/Deliverfile.md 4 | 5 | 6 | ###################### Automatically generated ###################### 7 | # Feel free to remove the following line if you use fastlane (which you should) 8 | 9 | app_identifier "pl.maciejoczko.Dropnote" # The bundle identifier of your app 10 | username "maciejoczko@gmail.com" # your Apple ID user 11 | -------------------------------------------------------------------------------- /fastlane/Snapfile: -------------------------------------------------------------------------------- 1 | devices([ 2 | "iPhone 7 Plus", 3 | "iPhone 7", 4 | "iPhone SE", 5 | "iPad Pro (9.7 inch)", 6 | "iPad Pro (12.9 inch)" 7 | ]) 8 | 9 | languages([ 10 | "en-US", 11 | "pl-PL", 12 | "de-DE", 13 | "es-ES", 14 | "fr-FR" 15 | ]) 16 | 17 | workspace "./Brewer.xcworkspace" 18 | scheme "UITests" 19 | 20 | reinstall_app 21 | stop_after_first_error true 22 | clear_previous_screenshots true 23 | launch_arguments(["use_mock_data"]) 24 | -------------------------------------------------------------------------------- /swiftgen-images: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | swiftgen images -t swift3 Brewer/Resources/Assets.xcassets --output Brewer/Classes/Shared/Utilities/Assets.swift 3 | -------------------------------------------------------------------------------- /swiftgen-strings: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | swiftgen strings -t swift3 Brewer/Resources/en.lproj/Localizable.strings --output Brewer/Classes/Shared/Utilities/Localizable.swift 3 | --------------------------------------------------------------------------------