From a21063efc114975725492e13f15a81486d163599 Mon Sep 17 00:00:00 2001 From: Ben Scheirman Date: Thu, 12 Mar 2015 13:02:14 -0500 Subject: [PATCH] Episode 160 --- 160-road-trip-dj-part-5/RoadTripDJ/.gitignore | 18 + .../RoadTripDJ.xcodeproj/project.pbxproj | 475 ++++++++++++++++++ .../RoadTripDJ/RoadTripDJ/AppDelegate.h | 17 + .../RoadTripDJ/RoadTripDJ/AppDelegate.m | 46 ++ .../RoadTripDJ/Base.lproj/LaunchScreen.xib | 44 ++ .../RoadTripDJ/Base.lproj/Main.storyboard | 160 ++++++ .../1241-play-toolbar-selected.png | Bin 0 -> 257 bytes .../1241-play-toolbar-selected@2x.png | Bin 0 -> 472 bytes .../1241-play-toolbar-selected@3x.png | Bin 0 -> 666 bytes .../Contents.json | 23 + .../1241-play-toolbar.png | Bin 0 -> 282 bytes .../1241-play-toolbar@2x.png | Bin 0 -> 631 bytes .../1241-play-toolbar@3x.png | Bin 0 -> 997 bytes .../1241-play-toolbar.imageset/Contents.json | 23 + .../1242-pause-toolbar-selected.png | Bin 0 -> 222 bytes .../1242-pause-toolbar-selected@2x.png | Bin 0 -> 383 bytes .../1242-pause-toolbar-selected@3x.png | Bin 0 -> 539 bytes .../Contents.json | 23 + .../1242-pause-toolbar.png | Bin 0 -> 252 bytes .../1242-pause-toolbar@2x.png | Bin 0 -> 554 bytes .../1242-pause-toolbar@3x.png | Bin 0 -> 882 bytes .../1242-pause-toolbar.imageset/Contents.json | 23 + .../1247-skip-back-toolbar-selected.png | Bin 0 -> 247 bytes .../1247-skip-back-toolbar-selected@2x.png | Bin 0 -> 432 bytes .../1247-skip-back-toolbar-selected@3x.png | Bin 0 -> 614 bytes .../Contents.json | 23 + .../1247-skip-back-toolbar.png | Bin 0 -> 280 bytes .../1247-skip-back-toolbar@2x.png | Bin 0 -> 599 bytes .../1247-skip-back-toolbar@3x.png | Bin 0 -> 952 bytes .../Contents.json | 23 + .../1248-skip-ahead-toolbar-selected.png | Bin 0 -> 246 bytes .../1248-skip-ahead-toolbar-selected@2x.png | Bin 0 -> 436 bytes .../1248-skip-ahead-toolbar-selected@3x.png | Bin 0 -> 619 bytes .../Contents.json | 23 + .../1248-skip-ahead-toolbar.png | Bin 0 -> 279 bytes .../1248-skip-ahead-toolbar@2x.png | Bin 0 -> 599 bytes .../1248-skip-ahead-toolbar@3x.png | Bin 0 -> 961 bytes .../Contents.json | 23 + .../AppIcon.appiconset/Contents.json | 38 ++ .../RoadTripDJ/RoadTripDJ/Info.plist | 42 ++ .../RoadTripDJ/RoadTripDJ/PlayerBar.h | 16 + .../RoadTripDJ/RoadTripDJ/PlayerBar.m | 117 +++++ .../RoadTripDJ/PlaylistDataSource.h | 18 + .../RoadTripDJ/PlaylistDataSource.m | 35 ++ .../RoadTripDJ/RoadTripDJ/PlaylistItem.h | 17 + .../PlaylistItemCollectionViewCell.h | 17 + .../PlaylistItemCollectionViewCell.m | 13 + .../aenima.imageset/Contents.json | 21 + .../aenima.imageset/aenima.jpg | Bin 0 -> 8369 bytes .../andjustice.imageset/Contents.json | 21 + .../andjustice.imageset/andjustice.jpg | Bin 0 -> 9996 bytes .../bloodsugar.imageset/Contents.json | 21 + .../bloodsugar.imageset/bloodsugar.jpg | Bin 0 -> 14660 bytes .../darkside.imageset/Contents.json | 21 + .../darkside.imageset/darkside.jpg | Bin 0 -> 2908 bytes .../dummy.imageset/Contents.json | 21 + .../dummy.imageset/dummy.jpg | Bin 0 -> 4166 bytes .../housesoftheholy.imageset/Contents.json | 21 + .../housesoftheholy.jpg | Bin 0 -> 12374 bytes .../inrainbows.imageset/Contents.json | 21 + .../inrainbows.imageset/inrainbows.jpg | Bin 0 -> 15957 bytes .../inutero.imageset/Contents.json | 21 + .../inutero.imageset/inutero.jpg | Bin 0 -> 7501 bytes .../kindofblue.imageset/Contents.json | 21 + .../kindofblue.imageset/kindofblue.jpg | Bin 0 -> 8223 bytes .../meddle.imageset/Contents.json | 21 + .../meddle.imageset/meddle.jpg | Bin 0 -> 6545 bytes .../suburbs.imageset/Contents.json | 21 + .../suburbs.imageset/suburbs.jpg | Bin 0 -> 10904 bytes .../ten.imageset/Contents.json | 21 + .../ten.imageset/ten.jpg | Bin 0 -> 10737 bytes .../RoadTripDJ/SamplePlaylistItem.h | 20 + .../RoadTripDJ/SamplePlaylistItem.m | 24 + .../RoadTripDJ/RoadTripDJ/ViewController.h | 16 + .../RoadTripDJ/RoadTripDJ/ViewController.m | 135 +++++ .../RoadTripDJ/RoadTripDJ/main.m | 16 + .../RoadTripDJ/RoadTripDJTests/Info.plist | 24 + .../RoadTripDJTests/RoadTripDJTests.m | 40 ++ 78 files changed, 1784 insertions(+) create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/.gitignore create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ.xcodeproj/project.pbxproj create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/LaunchScreen.xib create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/Main.storyboard create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/1242-pause-toolbar-selected.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/1242-pause-toolbar-selected@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/1242-pause-toolbar-selected@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/1247-skip-back-toolbar-selected.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/1247-skip-back-toolbar-selected@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/1247-skip-back-toolbar-selected@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/1247-skip-back-toolbar.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/1247-skip-back-toolbar@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/1247-skip-back-toolbar@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@2x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@3x.png create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Info.plist create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItem.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/aenima.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/andjustice.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/bloodsugar.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/bloodsugar.imageset/bloodsugar.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/darkside.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/darkside.imageset/darkside.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/dummy.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/housesoftheholy.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/inrainbows.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/inutero.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/kindofblue.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/meddle.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/meddle.imageset/meddle.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/suburbs.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/ten.imageset/Contents.json create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/ten.imageset/ten.jpg create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SamplePlaylistItem.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SamplePlaylistItem.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.h create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/main.m create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/Info.plist create mode 100644 160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/RoadTripDJTests.m diff --git a/160-road-trip-dj-part-5/RoadTripDJ/.gitignore b/160-road-trip-dj-part-5/RoadTripDJ/.gitignore new file mode 100644 index 0000000..81bf6c8 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/.gitignore @@ -0,0 +1,18 @@ +# Created by https://www.gitignore.io + +### Xcode ### +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.xcuserstate + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ.xcodeproj/project.pbxproj b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3d79166 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ.xcodeproj/project.pbxproj @@ -0,0 +1,475 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + B5699F7E1AB07F9300578048 /* PlaylistDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B5699F7D1AB07F9300578048 /* PlaylistDataSource.m */; }; + B5699F831AB084DF00578048 /* SamplePlaylistItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B5699F821AB084DF00578048 /* SamplePlaylistItem.m */; }; + B5699F851AB0857800578048 /* SampleImages.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B5699F841AB0857800578048 /* SampleImages.xcassets */; }; + B5699F891AB0880E00578048 /* PlaylistItemCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B5699F881AB0880E00578048 /* PlaylistItemCollectionViewCell.m */; }; + B5D620BA1A911862002DDDA9 /* PlayerBar.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D620B91A911862002DDDA9 /* PlayerBar.m */; }; + B5D953631A81188200687D2D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D953621A81188200687D2D /* main.m */; }; + B5D953661A81188200687D2D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D953651A81188200687D2D /* AppDelegate.m */; }; + B5D953691A81188200687D2D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D953681A81188200687D2D /* ViewController.m */; }; + B5D9536C1A81188200687D2D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B5D9536A1A81188200687D2D /* Main.storyboard */; }; + B5D9536E1A81188200687D2D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B5D9536D1A81188200687D2D /* Images.xcassets */; }; + B5D953711A81188200687D2D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5D9536F1A81188200687D2D /* LaunchScreen.xib */; }; + B5D9537D1A81188200687D2D /* RoadTripDJTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B5D9537C1A81188200687D2D /* RoadTripDJTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B5D953771A81188200687D2D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B5D953551A81188100687D2D /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5D9535C1A81188100687D2D; + remoteInfo = RoadTripDJ; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + B5699F7C1AB07F9300578048 /* PlaylistDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlaylistDataSource.h; sourceTree = ""; }; + B5699F7D1AB07F9300578048 /* PlaylistDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlaylistDataSource.m; sourceTree = ""; }; + B5699F801AB084A900578048 /* PlaylistItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlaylistItem.h; sourceTree = ""; }; + B5699F811AB084DF00578048 /* SamplePlaylistItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SamplePlaylistItem.h; sourceTree = ""; }; + B5699F821AB084DF00578048 /* SamplePlaylistItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SamplePlaylistItem.m; sourceTree = ""; }; + B5699F841AB0857800578048 /* SampleImages.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SampleImages.xcassets; sourceTree = ""; }; + B5699F871AB0880E00578048 /* PlaylistItemCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlaylistItemCollectionViewCell.h; sourceTree = ""; }; + B5699F881AB0880E00578048 /* PlaylistItemCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlaylistItemCollectionViewCell.m; sourceTree = ""; }; + B5D620B81A911862002DDDA9 /* PlayerBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayerBar.h; sourceTree = ""; }; + B5D620B91A911862002DDDA9 /* PlayerBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayerBar.m; sourceTree = ""; }; + B5D9535D1A81188100687D2D /* RoadTripDJ.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RoadTripDJ.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B5D953611A81188200687D2D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B5D953621A81188200687D2D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + B5D953641A81188200687D2D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + B5D953651A81188200687D2D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + B5D953671A81188200687D2D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + B5D953681A81188200687D2D /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + B5D9536B1A81188200687D2D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + B5D9536D1A81188200687D2D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + B5D953701A81188200687D2D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + B5D953761A81188200687D2D /* RoadTripDJTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RoadTripDJTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + B5D9537B1A81188200687D2D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B5D9537C1A81188200687D2D /* RoadTripDJTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoadTripDJTests.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B5D9535A1A81188100687D2D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B5D953731A81188200687D2D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + B5699F7F1AB0849A00578048 /* Models */ = { + isa = PBXGroup; + children = ( + B5699F801AB084A900578048 /* PlaylistItem.h */, + B5699F811AB084DF00578048 /* SamplePlaylistItem.h */, + B5699F821AB084DF00578048 /* SamplePlaylistItem.m */, + ); + name = Models; + sourceTree = ""; + }; + B5699F861AB087F400578048 /* Views */ = { + isa = PBXGroup; + children = ( + B5699F871AB0880E00578048 /* PlaylistItemCollectionViewCell.h */, + B5699F881AB0880E00578048 /* PlaylistItemCollectionViewCell.m */, + ); + name = Views; + sourceTree = ""; + }; + B5D953541A81188100687D2D = { + isa = PBXGroup; + children = ( + B5D9535F1A81188100687D2D /* RoadTripDJ */, + B5D953791A81188200687D2D /* RoadTripDJTests */, + B5D9535E1A81188100687D2D /* Products */, + ); + sourceTree = ""; + }; + B5D9535E1A81188100687D2D /* Products */ = { + isa = PBXGroup; + children = ( + B5D9535D1A81188100687D2D /* RoadTripDJ.app */, + B5D953761A81188200687D2D /* RoadTripDJTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + B5D9535F1A81188100687D2D /* RoadTripDJ */ = { + isa = PBXGroup; + children = ( + B5699F861AB087F400578048 /* Views */, + B5699F7F1AB0849A00578048 /* Models */, + B5D953641A81188200687D2D /* AppDelegate.h */, + B5D953651A81188200687D2D /* AppDelegate.m */, + B5D953671A81188200687D2D /* ViewController.h */, + B5D953681A81188200687D2D /* ViewController.m */, + B5D620B81A911862002DDDA9 /* PlayerBar.h */, + B5D620B91A911862002DDDA9 /* PlayerBar.m */, + B5D9536A1A81188200687D2D /* Main.storyboard */, + B5D9536D1A81188200687D2D /* Images.xcassets */, + B5699F841AB0857800578048 /* SampleImages.xcassets */, + B5D9536F1A81188200687D2D /* LaunchScreen.xib */, + B5D953601A81188200687D2D /* Supporting Files */, + B5699F7C1AB07F9300578048 /* PlaylistDataSource.h */, + B5699F7D1AB07F9300578048 /* PlaylistDataSource.m */, + ); + path = RoadTripDJ; + sourceTree = ""; + }; + B5D953601A81188200687D2D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + B5D953611A81188200687D2D /* Info.plist */, + B5D953621A81188200687D2D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + B5D953791A81188200687D2D /* RoadTripDJTests */ = { + isa = PBXGroup; + children = ( + B5D9537C1A81188200687D2D /* RoadTripDJTests.m */, + B5D9537A1A81188200687D2D /* Supporting Files */, + ); + path = RoadTripDJTests; + sourceTree = ""; + }; + B5D9537A1A81188200687D2D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + B5D9537B1A81188200687D2D /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + B5D9535C1A81188100687D2D /* RoadTripDJ */ = { + isa = PBXNativeTarget; + buildConfigurationList = B5D953801A81188200687D2D /* Build configuration list for PBXNativeTarget "RoadTripDJ" */; + buildPhases = ( + B5D953591A81188100687D2D /* Sources */, + B5D9535A1A81188100687D2D /* Frameworks */, + B5D9535B1A81188100687D2D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RoadTripDJ; + productName = RoadTripDJ; + productReference = B5D9535D1A81188100687D2D /* RoadTripDJ.app */; + productType = "com.apple.product-type.application"; + }; + B5D953751A81188200687D2D /* RoadTripDJTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B5D953831A81188200687D2D /* Build configuration list for PBXNativeTarget "RoadTripDJTests" */; + buildPhases = ( + B5D953721A81188200687D2D /* Sources */, + B5D953731A81188200687D2D /* Frameworks */, + B5D953741A81188200687D2D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B5D953781A81188200687D2D /* PBXTargetDependency */, + ); + name = RoadTripDJTests; + productName = RoadTripDJTests; + productReference = B5D953761A81188200687D2D /* RoadTripDJTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + B5D953551A81188100687D2D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = "Fickle Bits, LLC"; + TargetAttributes = { + B5D9535C1A81188100687D2D = { + CreatedOnToolsVersion = 6.1.1; + }; + B5D953751A81188200687D2D = { + CreatedOnToolsVersion = 6.1.1; + TestTargetID = B5D9535C1A81188100687D2D; + }; + }; + }; + buildConfigurationList = B5D953581A81188100687D2D /* Build configuration list for PBXProject "RoadTripDJ" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = B5D953541A81188100687D2D; + productRefGroup = B5D9535E1A81188100687D2D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B5D9535C1A81188100687D2D /* RoadTripDJ */, + B5D953751A81188200687D2D /* RoadTripDJTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + B5D9535B1A81188100687D2D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B5D9536C1A81188200687D2D /* Main.storyboard in Resources */, + B5699F851AB0857800578048 /* SampleImages.xcassets in Resources */, + B5D953711A81188200687D2D /* LaunchScreen.xib in Resources */, + B5D9536E1A81188200687D2D /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B5D953741A81188200687D2D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + B5D953591A81188100687D2D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B5D620BA1A911862002DDDA9 /* PlayerBar.m in Sources */, + B5699F7E1AB07F9300578048 /* PlaylistDataSource.m in Sources */, + B5699F831AB084DF00578048 /* SamplePlaylistItem.m in Sources */, + B5D953691A81188200687D2D /* ViewController.m in Sources */, + B5699F891AB0880E00578048 /* PlaylistItemCollectionViewCell.m in Sources */, + B5D953661A81188200687D2D /* AppDelegate.m in Sources */, + B5D953631A81188200687D2D /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B5D953721A81188200687D2D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B5D9537D1A81188200687D2D /* RoadTripDJTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + B5D953781A81188200687D2D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = B5D9535C1A81188100687D2D /* RoadTripDJ */; + targetProxy = B5D953771A81188200687D2D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + B5D9536A1A81188200687D2D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + B5D9536B1A81188200687D2D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + B5D9536F1A81188200687D2D /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + B5D953701A81188200687D2D /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + B5D9537E1A81188200687D2D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + B5D9537F1A81188200687D2D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B5D953811A81188200687D2D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RoadTripDJ/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + B5D953821A81188200687D2D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = RoadTripDJ/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + B5D953841A81188200687D2D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = RoadTripDJTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RoadTripDJ.app/RoadTripDJ"; + }; + name = Debug; + }; + B5D953851A81188200687D2D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = RoadTripDJTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RoadTripDJ.app/RoadTripDJ"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B5D953581A81188100687D2D /* Build configuration list for PBXProject "RoadTripDJ" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B5D9537E1A81188200687D2D /* Debug */, + B5D9537F1A81188200687D2D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B5D953801A81188200687D2D /* Build configuration list for PBXNativeTarget "RoadTripDJ" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B5D953811A81188200687D2D /* Debug */, + B5D953821A81188200687D2D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B5D953831A81188200687D2D /* Build configuration list for PBXNativeTarget "RoadTripDJTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B5D953841A81188200687D2D /* Debug */, + B5D953851A81188200687D2D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = B5D953551A81188100687D2D /* Project object */; +} diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.h new file mode 100644 index 0000000..881db3d --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// RoadTripDJ +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.m new file mode 100644 index 0000000..f686194 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/AppDelegate.m @@ -0,0 +1,46 @@ +// +// AppDelegate.m +// RoadTripDJ +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + sleep(2); + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/LaunchScreen.xib b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..8e531fa --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/LaunchScreen.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/Main.storyboard b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/Main.storyboard new file mode 100644 index 0000000..3d0578b --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Base.lproj/Main.storyboard @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..ca2462331abf615d1f1ad99076fc576805878a15 GIT binary patch literal 257 zcmV+c0sj7pP)4S^OyB~9cLFKo#R5yhW;cZI-|c)MGdqhN zK_i+h7Ne*UWT|v!Ym!-~l5o*m3+dH+^=ehl)n#j-w;rTd0iE?YIta;FPd@!+00000NkvXX Hu0mjf-~?-M literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected@2x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/1241-play-toolbar-selected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..455aa42706e37bc5c0f929f781a257242b517a9e GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl7j}{B7|Gh(2__LBo9S*{yyuzx#*6$ zJ^&;$aZb!60EXfm83Ls2l-+g92T_iX5-<=M;F3qai(&@AWM=%2$!cm}z4%Jum$d8KxYz5W{~yiCT_0ZYk!9Cr-suPB?2V zhIO%&v##RX_2TwNaoOYCQ5>`suV;U}19n^e-Cp=9GVHb)kbAxq3`oO~zUEcgNH;5? z`{gCnq&DA{*X9KmeX=iVx#MQT)wCyF&@#Q4_5WU4!G#4zLU%@%WJ`2pYsJ@ClBXTM zHpynx>ZveV#p7o6&oLkwm{?>QY+@j3nV!lsQ%6qx_``_I20!tVP*mM+EF2E8>8tBsPw(ek4nG(bsKu6;Sw4`&BC71^Y;t}8tP_iv# zJ1zb7rKYF*b4J*qKWqTsm{?$i!HqDm^0y zPQ@*rIxx~xoPh@xBEf|R28uCs=t@ZU%Auib?wDGM3|FS^$Y9U8DB!vK)}n7F3Odu5 zNaI8l_CzCrZF5nOHt9KZMV>vi^|S5ZlLc(sPBos7cvtYa^?lx z7aMf%zYFxa*r4aOT*p*w*r{s_t;B|18TuE8qNQJW-KYK#1^m`?3=;Z<9(cLn9$O^%$zRK8J2f%4&2zcMm zVl7Xh5d}iVq+keM@=0^8{NE? z|6!Syzx%^a_s76>55%t(JrH+48u%X$N!aRQT-5#GtospS_rugj`fi}{L{#>P#x3l) z5EZ?!qXoMzDn{7Vk{$C(A7V!WjYk!hW7G9T+;{q2UrFxCV5`XG?3QeXW@}$l&kPk~ zU_bf7e&3+d(}fmekH@J`7jhqQJQKpRyhj}W0F@QGX+ta9WB>pF07*qoM6N<$g5X^| A?f?J) literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/Contents.json new file mode 100644 index 0000000..cc8b147 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar-selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "1241-play-toolbar-selected.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "1241-play-toolbar-selected@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "1241-play-toolbar-selected@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..75ea7e602d5da4d5059a6d0d961de3df2dea989d GIT binary patch literal 282 zcmV+#0pdzR~2dq3S2fXp=Zd%Gs>n7+o52+Ub^34;?i5~T<$KT7Z`>iIG;G)Dq gYjmD7XdNU(|G$cEqTg;$ivR!s07*qoM6N<$f+muHC;$Ke literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@2x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..610342f1c0571d93755ba30ac10e063583edbc19 GIT binary patch literal 631 zcmV--0*L*IP)KOfaFLdG{M_Bg2o+w0iM7HQ&}!I?vny)R}iGJNJ+780CGCg1UgfI@HS)x z64@=0!ZyT}WxNTt4vibM8GB}|@ZJ6^?z!ij`?rBzO{ojd-FW4d8^8Njs_88yNwf^j zMaKEtP)kx&+I1;}rLlpIhJ8DB>}%*47+VVAnQnf0-AD*8^&QCKK;KItjMU}e&{UW> zR6pr1`kAC%myc`R^NPw2` zXJ$Kuu=JI;<)PwQXaQ$JUly@CfA~-y`obCPnp>)E6o>G2jyfDzn%ko(jL9Vqe|c;Z zPlYC_Fvu+q;XChIM=GRT2%SRWF!hNyWYG~WcrG*wibMF>`|hV9yx>OIFCh-MKC|O> z-Vr9;3YAjg$S8Y7xZPI#G+SK$D(-x~?kcWI7H_<^cvqa4dTyV3bM13GFVi63doM?W z6m01mhxuB%*bw?A#}KNmhERdA+0H*UA9&Cwo@K8lKl!cTYPyvCcbQggOLetOA7uUi zAbI!?3+M?8ZDncuN9ehSQ(;z8{gIh)`ageTNqkZI<9#ZzmR_l-&?^#duJzSqQPX#w z5pHtEv2+#3Dk`fumS)7U+yU||J3yK{(~>C3o~D5dFHGFIGjZiys%g(!{sofFyJL6s R&b9ym002ovPDHLkV1o6;B^3Yw literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1241-play-toolbar.imageset/1241-play-toolbar@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a866231bb1f86b646251a903f0934ab2e5eb6ae GIT binary patch literal 997 zcmVmO4@l}!cJ;C)Y4^t=))k2>MtFP~hQZCuoA;jiyvq!I@8#R~(J9V}mqoa4(pnLl#YZ`Z9P(gE`VNM}wiv)W=7I%RH8WcgSH%jyp2j zV=j}BRi4S&-oh4Ja=)IjnrIb7gb@{Na+Q&Y5xW|`Y{XMmu+0ijWmEj=H=-}A@HQ@3 zk=5u=yD1$x3l&^Zk+ad^6)!!xIwkB?phoY)p&+&AHko9|$G4HJ2_fx-chIFQ0RrI5?q<>pA-Dc3UPFhBm@^;h>fsnngpl@&rs+FY zqw3I74?CtpNc)HHG!)sk8qFH65KD^7D5zRiD?v6uiugG*cL+CBc`z+y&Mbia}pukZpQ=ONVXlW4(4xslJsD@ zx}rboTv0d5>O(zcWnXQ7PeEU8e`L{s{mRue2F#u*|C_JVn{qo&%}-`djScti3q16> zE$*EKNB045k%oE1(KUAYMIoi({gBHa3VymX3VtGC;FbR^3@k^(z;Hku&rSZY9}v$X zHE=zW8i*uGhU9R~rB@|MAV2$b(d-jvvr8dPPo}OoO{SiZWePs0&eO`L_{6Zxb0-P* zimbwOmPx>>h%x3U5Juszb(6v;$Z|Y52Pg7T-~x!8U}=)dn8ti#300KW^-wWA1oD;hB6b1qnh=#>6~Rvgg3}$pc$f d{A9}7U9bQE002ovPDHLkV1k@EsY3t& literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/1242-pause-toolbar-selected@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/1242-pause-toolbar-selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..963e9a8f46ce2a279f538bddef2cc4f4448e7887 GIT binary patch literal 539 zcmV+$0_6RPP) zM9e}6LjahYhL{7u#x%qRz#*m~1P5dD5MwCJLlm$y53z)md59Hk%|mSAWFF!Vhk5wd}?HBtWSRB7{`=TbI^3J}{wJ-T2+WeSq1N}F|30D#(+N$bX zgsp)nnk3M*Zx`7&&g@%=7R}UmQXb&=L<0MXL!r+R3FwhN=nOapj4Q?{& literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/Contents.json new file mode 100644 index 0000000..ce685e6 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar-selected.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "1242-pause-toolbar-selected.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "1242-pause-toolbar-selected@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "1242-pause-toolbar-selected@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..5772e2296e64041f3ae6c6109f0726c1e3e4e1e7 GIT binary patch literal 252 zcmVlrPf*XT3Mx%wR*ogwKuZS;N+c?!Ke|)ZmvFYb(15&_(2VQR0EyCHwGOfYh-oz zbdOhLw@RG#f~VJrSJ1mqw7cY1VUc&q*}|sUC08B?<#~6E`QQg0`gMnva%kPurmsbs zqSejUiZ%p4rjO;HH2cnKeLt%pxhNKo*UXBGB=85A5q%S<>)d$&0000Kd-B(Fp8W1dnU=2)f%}c472;m3GVeJQDW8k$6Y=jSo)R)4_w~ElQ5-!>2J7H5$3mqG=f7cC5 zVc--7!cs$y#9Wv-m5DHy0MHW_-Z_$-gf=i0MwB9EBuwG0wXJ$-;tN}AXS9SHN)z*|&>|DYrHV5lV_Q>o?4wEXq|lcf3w3+M|Q9YyK*N9fzfm9Q$P{>DnU z`k$Y%B)%{F@V=5bO21H5=)b1iJQ%4vMBT_kUT%uiv20hzQt7UaWyR`PULdDO3gp^U sTcRLmTE=GXE&TnQg*(?WEoYAMFIdd=6!Fw)2mk;807*qoM6N<$f_y0oVgLXD literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/1242-pause-toolbar@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..69a0da1bc32af097f91114da8807000a3ee85ed6 GIT binary patch literal 882 zcmV-&1C9KNP)_QF`+Pm^@do`NXZoh4{f-D;*LZsP6}zP?*0f0G@gZohQ#CBnvmFIC;kIq zubl>e7sRtc3oe>cA z36iD84FiYkh8kId%$z7kJTsW!dgh2IGb6?+{h{G|TyRK{4Gfk6SjJ$3B8Obi8f*l^s!LG*L zIo2$Q3OzE+l3(bF8jiDJ$cuO(!K_K}A}__T-w_>|g`e<(gv>_AZl}~`EoAVD41L+K z->@xfcpoqMQ=YQ({~PI1Hl^2`%PAV+KUAeDjMs$a_^L8OOw3dPKPZT4i(%nZY=qqb zU8Zj_(`AQN8^osk%@9!;U<*4wN8FZAhgLf_Mb#)Ke~GcSXE1s>wA#~BGRFu(aolpg zDv=X6DTpGgem)WORf(W@Us)72^`ip5DghNGRRchr__Xgzq$NNA3^7>&-<1f6IWr)y zZkph`63|p~c_^uyLoG@iD7g|e)J;)~5=AA~fVR3xX;C7jl=-wgr0mq{91!bF4eVM|1EWcj2f}#G z%6CZ;h-gh0=}(;LPa)bQQxl#hQ?ChOgTcM$Y2|wi9EkJgNrF8iv+zcoF-VFUeg2r? za_ox=Nya2@7G2I+!7VGC%V_t+nE-=pv;4G+8+Og|(=~>>LR^|@NDmd_eh_kBl5CM< zk#Sk%S6V|Q$sJq}u@q;YsPMC6adv}~k>YFw*Tkrgl&PB>ut$nDR#{?+Rn|zc#{tce zGIgC8Gb76J#0C3fqF#NvaO?Q^TTeb+u=$ANLp}Dx-A5e%0)+2ny>sZ~vj6}907*qo IM6N<$g4+F@O8@`> literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/Contents.json new file mode 100644 index 0000000..6818a53 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1242-pause-toolbar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "1242-pause-toolbar.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "1242-pause-toolbar@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "1242-pause-toolbar@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/1247-skip-back-toolbar-selected.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar-selected.imageset/1247-skip-back-toolbar-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..089e5973dd7998969cf1da051e226e40123734b3 GIT binary patch literal 247 zcmVZt~5Juszb&4%qrrJ>EQjt=^IXK52!bgD%Aoc_y1yrPoV#TtS<^9b_^MpJeLx!l8 z%vP&O(u%4Cy~SQ+(F+Q$275gQ&42Z7e~`N?Krq-3G6+C#KaL(^9?J!nEVz07tG`6r z+ys8>Zy%7mI#N|0y;I1Exgy`ZP|9Z3QuYZIc{?djPak7CIpC?Qdv+;{cyiqYu15_6Uy8Ic2|rHwn%xHTsrDI${GA*qZop;^*c3SzzX z+MfT*kzQ6mp4lC0G{7e&Wy_xLllOe^N{r71Eu{#UQ=lvS#hd`;3JqDJ8+b+79PW{! z9h~9OKx1;WqjSb}5lql6{fw%{&d?n^t3prE9X-LIdvtgI&)OsJ1)SskO*cdLr!5L1irffW#U6$%FMr6MzAQBY4dvSiuED z@X-$7G6FkT<3n5zHb!6v$B@>8jS<+vDQxS(#t7`-9qjAD#t7`-0~{NGZ@>|J6abCM~x-!<5D7nj2;QD_<2|rj$MZJI{ z44QVvPNko*2J~Zx(<-crTCEC^{Bk3|j@cH-#IisZBm^j0YKYGhDLW4QoP1!zf*7A6 aR{a8zbkvN3Gb3aG0000JHUh(}ILY2(3=ErNfx+);}bITA2AEgUhdkic1CaG*

?LCE}+C4UmSFIBmgi#!bp@gI7kQs0GPQ;*lKW)m;u1rUBXs_ zgTxxZApR0%4K*YL10#QlvWA)xBN+Qhlr?xrjA7v+QP$umv4EwAL|KEM#1b|&CCVE7 zB{p!VCGneE2qf_bq?SYm!6Zb5go-*;JeVq8Q57F6C7LV>GFg!ZrE5QX8dLLwzK#fCE1;Q;P!UxQmjN<&442dFkHS`m3QJ}m#JdhV>2cvdNeliuv^ eZqhp`i2MT3K8FIv$`-Kz00008(vTF0?Dk=+ zxC+KBI69Lf_OvB<4?3 zeZ{8Ip=%*Lx^!%yYtLs-v!`p|*ri7y+!%hmyyHR$?@jDWv2WtN5H57c^U8xTGgit` z8k-3ZUgaV<62er=$I>zt!gq?a_O-BdXj2X?h1V(dkudj_Z8$I&j;Qmsu$0#3)k{&& zy5m7O^c)U_2c7kFFNCS*G8HZq01Snh7oN)tGhql&xE99N`AMwiO+xe1b!|5meo+8@ z;diBV;y+V|Z~Rf;DcuQu;8d8ffq2LF$=yUag&hlz+8c;p`Zc*@-=l?Hdcq|+aV>(B zm@A=2B^>9)wFuJUN~ky&26=HUg0y%boby)bX2tag(&Dc0j(cG*BVLanC;md1@j)mv z;w!O%xD-A#C~ho@+eUu8Th1E!yPY-mfi(6>fBHkHy*h-NIW`+U=nFUXtH~R&nxB(b z(@kwR7OoZRmubs$X{|2PMy~%K70o|bz(`m+uq_Av5k~4b5$0Q}zcd$4{^w^bg>Sch zc%S6D$Y`soFxsTt+?i-g(Kd0HDL0uqR;}t-sa(~uDqF`g1@bgqAT6BgD{RTGo@3|U lnfd!^W^SFS^z2H5e*sA=9Qy(m+l&AJ002ovPDHLkV1lWI8cF~F literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/1247-skip-back-toolbar@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1247-skip-back-toolbar.imageset/1247-skip-back-toolbar@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..91c59b8080f4967a0f8ba0f917367e1cb4501f29 GIT binary patch literal 952 zcmV;p14sOcP)Y_o{j$CsV=cIM429xy0VqfL(ikBk}f z$bcSgYLqbulqf}-d}M5Me56T{D87^A4R?%P9Cy4SiEpGhV>B`RkarwYWe0kL|828`?!_s_;uX=CyYLf1kdeF5U$jzM zG8YO2MS+nl*g3qCIeb8n{3*Y(H+v!7$f69Ib9ss;ct%6MiW4+(d3-gPA|+v}!uOye zp)G}lGl>x^%;J!dB|slKiakvp=UGZj`I`xn@+0%Y)YDYL@`N2f^6x^+UHLmnO#YH! zJ&*CTV==$;#n!T`zCA&RO5#@179lBsBg>McNl_F<_3@UdrU-F^L(8aSUquv6^`Q=0 zBE$_Y?pa-Z-vmIC_`IeFaf1sHdD$QUhJ>t$h6r(kOA!$XX9kqjNe47Uh#OprfR3^# zLrt9=dln&X@Fe0$S=6AdPO2V7h#NeLs49y#^wdetg9vehhKQW9=)piHhg%Wi1}za= z%3^?Q?$=$4_(9yDCt_1sd;u|aDdH1jA4IH)O&COk#2ulSn4wsrp?Fw@;<5c(2m)9b zLU{<1n&qZw>o(B3A)d{lMaGlk z4e@{W8{*}a2KHx{2B0DJ+c-h9F|SAhi4c^FLQpshO9|0hOw9yZOuZn+0t~JKFDqYR zU_+YEffU#aau+_6#sOK8G2#y&r{hQ@WN}E^Y`UDYfi4@IGZsgrae={w*?!tbhkdjC zbb+DQh|A-J{6r(}A7c6~$u1>Uamp&c(4A;W?x8`#(wx1e&I{Y-><*_>&DjLnq-agG zsXH9;njBkfvc?*lY?0$NM|7sz)Gbo@Mv@cP4f_+4LA|Zt~5QX8dbqWfXsWz0kRHQB89Gqhh;iD`UK-0gL{Yvrhi{fQqg0HNqw?;e1`eryB8Y^-;;EN;;JRo^0A z7Q>gHtdgZYset)3R^h~4!gzD5z%y$FhHDAiPQug6$CyqIcik4 wd-z0KnLeI$AGQDgR)DCN%r=`z(u*?v0^EBw0Ep{=8UO$Q07*qoM6N<$g0mcFCjbBd literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@2x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..017cc37d434853741c7c37a8fa70dc8c290c6875 GIT binary patch literal 436 zcmV;l0ZaagP)V{c5Nre_QSQY)E7E&BP;vXW$=Rg0ywIq41Qo;07sRS!5bcXf_YU2d#nbo zSjDQ!$6GP4@^_n8+aT4pbhSgM(y>|jpigdt@XU*S1wppg>ma?6DqW^^uKzDm{Raz} zo&-D<=<;anW$kBdfPR0(YLiY)4;mGw^@p3v<5*#UoOKM4J2PX+ff{Oju<&5x*ONC^ e=30%RPW=Y@Ow^3<%SdDZ0000|} literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar-selected.imageset/1248-skip-ahead-toolbar-selected@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8108658d402090a92e5d8c4f0d38ff873772a137 GIT binary patch literal 619 zcmV-x0+juUP)#bKVe(yfG)onHE!yh(nG{Y2mDHaU|!AIZ}}kpZLZrV$6sePTVj;D)NI9WQKVm0pOP3Mu~)T62rWa zq2W7H8O=w2A(gpADl<9R?rQw>S6)3z>_`BhkJOORwfK<``T#JiBcW^YCNTqmbzKQv zix-JCfI=)JbS>@@f`Xx?gs#P1VhCe<30;e$#26Ni61o<9i3Kd3C3G#e5=+>)OXylG zB{p#IBmuYlv6A=;;!Of_D+%!{@!3`)iaMhBV@C0aM)9(W;(<8|Iakw*N&e5T?OYc1oUM|a z;&UdiTo%gR%Qd=1AGqk(EjpBi$IV*%bVzMlb@p_knS^)k!|}JW*RIttzgCH0uhzSa d>D2augg?KphXFd#)2sjh002ovPDHLkV1h*|e3bwI literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@2x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4cf43605b869a1e43ba9c5ae18abcbae2ce813 GIT binary patch literal 599 zcmV-d0;v6oP)09UuA;n$Elg#(B%!w7z-5poA`h@Ft<#YvZ74PoLRs)c0R}_MCe^3AS_R9iP0+jza^dZafR&*6`!y9alnlZ(?5^`zGEC;Yx=zM;?XJST03w ztP~y{r6M>H!ql#hW!F>)-^l8PQ9S_1zN?eU3A^uD#`5@$L zh{I0_aV~slQQTS-cdh(*cU-jcce`lu18M1#{_mI2-f{`Gw>Dc`^qJcgSJSmy2Uc?} zmh;1kt7#^yUZ%S?WmhQ-+qwR~mudgO0>{EaUsL-27LKjpOqe%Re{L?E{m;)>GG8}- zc%P-Z$Z?~paJ){rxi_(=jy)6iiE@*uW5u$L}6E0T3AQ6SIN7sw~)dNK{!)^+OA lJEgx~rgY~*p=%rJ`3K-c9Q*q#nmGUf002ovPDHLkV1o0h8{z-} literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@3x.png b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/1248-skip-ahead-toolbar@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a18400592cd5a7e8556925351ed619baaa2d18 GIT binary patch literal 961 zcmV;y13vtTP)NR5Q?D!vO9?KW!ZI;5PT?Z4bW{$GbZ)4UKf;AUgaXTrCE~OvS)%uK z`2GPKDOCg=$Op$!ScDYj3MU#pt=2yO*xlL1`8ZB=Zt}6_&)DBqQo`^YXGca zuuX|0-qW}A9B@V)Z6eh8V)=DdGK82#hzwQk&1b$)BZ3Bd+?j)YAn(A=Ve))1pS|M^ zu2`jE4syXRZrJ6*9HYT14l(G;!yhTKgj<#<@=-?WV&H%+ZsfstM9?L|I~nbUEo_qF zv#jj{yy8Ii*Jo0;WJqH&=(nVXTuOfJdng|l01k}jM+P)E3@z&evp*e=+4?H z4Ot6W{36RhHtZDM$QnMtPkxjCvNw4n-N~l(n{#=KM)``G+=}2g5qW*p7$Yujs>o|l z6xSAKgfsCGOH87|6Lnkf{>q5cA5dW;;#2;>LQEc==B8fM-M{#j*+@@Idtov=A~J@_ z@8YbdAw%*Hzc8EOS8WfFUj`HCqm5fjYAO|GLO;~JrUBb9g0|yKAwvB+pUN|m?HoSGay?u5HG7h zytaQ1f&&YHD-S?Wv)J(NRKmLj2D-~gpu5PB|0g8mA3glE7kBuv9s_q??HHIrj)9X7 z#FMG;uk8czi&cVy1M#b;2KFbX2B0SS+X#NMJ}pTC(Ey~20+2WhP72YQOilWlOud}F z(+qBXPb=SIFoy(>z9iVQG7FC+ut7>>4EWW<~Vc#r2U1I1J;xf1)V=2V_$*O)yvQ3_4?6S;{v@IpcJv4}p6ld?L^8MW6>^7%k z#n~v@#A%F`saqWKmNc7eu=0P~V3Ra&IixjKrfv|&Gh&=LF4&(C^Xt=vYa3Y#{ZAJh jeZ=vs{_V5gM;!kF$p^m6w70Gi00000NkvXXu0mjf?e)DI literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/Contents.json new file mode 100644 index 0000000..093c8da --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/1248-skip-ahead-toolbar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "1248-skip-ahead-toolbar.png" + }, + { + "idiom" : "universal", + "scale" : "2x", + "filename" : "1248-skip-ahead-toolbar@2x.png" + }, + { + "idiom" : "universal", + "scale" : "3x", + "filename" : "1248-skip-ahead-toolbar@3x.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/AppIcon.appiconset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Info.plist b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Info.plist new file mode 100644 index 0000000..3719b17 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.ficklebits.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarStyle + UIStatusBarStyleLightContent + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.h new file mode 100644 index 0000000..caa9097 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.h @@ -0,0 +1,16 @@ +// +// PlayerBar.h +// RoadTripDJ +// +// Created by Ben Scheirman on 2/15/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import + +IB_DESIGNABLE +@interface PlayerBar : UIToolbar + +@property (nonatomic, assign) IBInspectable CGFloat spacing; + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.m new file mode 100644 index 0000000..7e5a1d7 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlayerBar.m @@ -0,0 +1,117 @@ +// +// PlayerBar.m +// RoadTripDJ +// +// Created by Ben Scheirman on 2/15/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "PlayerBar.h" + +@implementation PlayerBar + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + [self initializePlayerBar]; + } + return self; +} + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initializePlayerBar]; + } + return self; +} + +- (void)initializePlayerBar { + self.spacing = 30; + [self setupToolbar]; +} + +- (void)prepareForInterfaceBuilder { + UIView *prev = [[self skipBackButton] customView]; + UIView *play = [[self playButton] customView]; + UIView *next = [[self skipForwardButton] customView]; + + CGFloat w = self.frame.size.width; + CGFloat h = self.frame.size.height; + CGFloat buttonWidth = prev.frame.size.width; + CGFloat buttonHeight = prev.frame.size.height; + + CGFloat y = (h - buttonHeight) / 2.0; + CGFloat x = (w - (3 * buttonWidth) - (2 * self.spacing)) / 2.0f; + + NSArray *views = @[ prev, play, next]; + for (UIView *view in views) { + CGRect rect = CGRectMake(x, y, buttonWidth, buttonHeight); + view.frame = rect; + [self addSubview:view]; + x += buttonWidth + self.spacing; + } +} + +- (void)setupToolbar { + UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace + target:nil + action:nil]; + + UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace + target:nil + action:nil]; + [fixedSpace setWidth:self.spacing]; + + UIBarButtonItem *prevButton = [self skipBackButton]; + UIBarButtonItem *playButton = [self playButton]; + UIBarButtonItem *nextButton = [self skipForwardButton]; + + self.items = @[ + flexibleSpace, + prevButton, + fixedSpace, + playButton, + fixedSpace, + nextButton, + flexibleSpace + ]; +} + +- (UIBarButtonItem *)buttonWithImage:(NSString *)imageName selectedImage:(NSString *)selectedImageName target:(id)target action:(SEL)action { + NSBundle *bundle = [NSBundle bundleForClass:self.class]; + UIImage *image = [UIImage imageNamed:imageName + inBundle:bundle + compatibleWithTraitCollection:self.traitCollection]; + UIImage *selectedImage = [UIImage imageNamed:selectedImageName + inBundle:bundle + compatibleWithTraitCollection:self.traitCollection]; + + UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; + [button setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] + forState:UIControlStateNormal]; + [button setImage:[selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] + forState:UIControlStateHighlighted]; + button.frame = CGRectMake(0, 0, image.size.width * 2, image.size.height * 2); + return [[UIBarButtonItem alloc] initWithCustomView:button]; +} + +- (UIBarButtonItem *)skipBackButton { + return [self buttonWithImage:@"1247-skip-back-toolbar" + selectedImage:@"1247-skip-back-toolbar-selected" + target:nil action:nil]; +} + +- (UIBarButtonItem *)playButton { + return [self buttonWithImage:@"1241-play-toolbar" + selectedImage:@"1241-play-toolbar-selected" + target:nil action:nil]; +} + +- (UIBarButtonItem *)skipForwardButton { + return [self buttonWithImage:@"1248-skip-ahead-toolbar" + selectedImage:@"1248-skip-ahead-toolbar-selected" + target:nil action:nil]; +} + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.h new file mode 100644 index 0000000..0320665 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.h @@ -0,0 +1,18 @@ +// +// PlaylistDataSource.h +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import +#import "PlaylistItem.h" + +@interface PlaylistDataSource : NSObject + +@property (nonatomic, weak) IBOutlet UICollectionView* collectionView; + +@property (nonatomic, strong) NSArray *items; + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.m new file mode 100644 index 0000000..2e1d4b0 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistDataSource.m @@ -0,0 +1,35 @@ +// +// PlaylistDataSource.m +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "PlaylistDataSource.h" +#import "PlaylistItemCollectionViewCell.h" + +@implementation PlaylistDataSource + +- (void)setItems:(NSArray *)items { + _items = items; + [self.collectionView reloadData]; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ + return self.items.count; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + PlaylistItemCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" + forIndexPath:indexPath]; + + id playlistItem = self.items[indexPath.row]; + cell.imageView.image = playlistItem.image; + cell.artistLabel.text = playlistItem.artist; + cell.songLabel.text = playlistItem.song; + + return cell; +} + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItem.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItem.h new file mode 100644 index 0000000..d47f9ab --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItem.h @@ -0,0 +1,17 @@ +// +// PlaylistItem.h +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import + +@protocol PlaylistItem + +@property (nonatomic, readonly) UIImage *image; +@property (nonatomic, readonly) NSString *artist; +@property (nonatomic, readonly) NSString *song; + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.h new file mode 100644 index 0000000..0ba60a7 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.h @@ -0,0 +1,17 @@ +// +// PlaylistItemCollectionViewCell.h +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import + +@interface PlaylistItemCollectionViewCell : UICollectionViewCell + +@property (nonatomic, weak) IBOutlet UIImageView* imageView; +@property (nonatomic, weak) IBOutlet UILabel* artistLabel; +@property (nonatomic, weak) IBOutlet UILabel* songLabel; + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.m new file mode 100644 index 0000000..8c7f8c8 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/PlaylistItemCollectionViewCell.m @@ -0,0 +1,13 @@ +// +// PlaylistItemCollectionViewCell.m +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "PlaylistItemCollectionViewCell.h" + +@implementation PlaylistItemCollectionViewCell + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/Contents.json new file mode 100644 index 0000000..05408f4 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "aenima.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/aenima.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/aenima.imageset/aenima.jpg new file mode 100644 index 0000000000000000000000000000000000000000..672c0d404296f05863670365328e7e8b7c329b39 GIT binary patch literal 8369 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 literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/Contents.json new file mode 100644 index 0000000..a0706d6 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "andjustice.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/andjustice.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/andjustice.imageset/andjustice.jpg new file mode 100644 index 0000000000000000000000000000000000000000..545daffc5956b779c945081290fbdd161cd93a9e GIT binary patch literal 9996 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

} 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 S1+ZC&KleJ=@Bb?hYwS0hQ6F;v literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/Contents.json new file mode 100644 index 0000000..a41b085 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "dummy.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/dummy.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/dummy.imageset/dummy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74752d45058ea7df3ca85c6abd68cb2e7a6e7c3a GIT binary patch literal 4166 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 L^xtu`XybnaYcaDL literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/Contents.json new file mode 100644 index 0000000..bc11142 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "housesoftheholy.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/housesoftheholy.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/housesoftheholy.imageset/housesoftheholy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87a2d0c35bfd831c59aeffe2edaaf9cd4da8df4e GIT binary patch literal 12374 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 MwosBN=w<1D0CrJtyZ`_I literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/Contents.json new file mode 100644 index 0000000..a517888 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "inrainbows.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/inrainbows.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inrainbows.imageset/inrainbows.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cf000abc67dade0c7fd1350fba5324765b6bb24 GIT binary patch literal 15957 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 LY`&Xm-7fqOg%#(D literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/Contents.json new file mode 100644 index 0000000..121d943 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "inutero.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/inutero.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/inutero.imageset/inutero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05a4ae334ae14dc621e7ddac0307b25f4c4be4d9 GIT binary patch literal 7501 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 literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/Contents.json new file mode 100644 index 0000000..9bfb3a3 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "kindofblue.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/kindofblue.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/kindofblue.imageset/kindofblue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a79d8812ac1fddcd8b53ab7db84dbb6cef404d1e GIT binary patch literal 8223 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 VH`*fvbXrf<3K`T&3*~Qr{|7p9Tju}( literal 0 HcmV?d00001 diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/Contents.json b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/Contents.json new file mode 100644 index 0000000..298d0a3 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x", + "filename" : "suburbs.jpg" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/suburbs.jpg b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SampleImages.xcassets/suburbs.imageset/suburbs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba62679091733c936816d5bb5b52d2f4a03512b9 GIT binary patch literal 10904 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 +#import "PlaylistItem.h" + +@interface SamplePlaylistItem : NSObject + +@property (nonatomic, readonly) UIImage *image; +@property (nonatomic, readonly) NSString *artist; +@property (nonatomic, readonly) NSString *song; + +- (instancetype)initWithImage:(UIImage *)image artist:(NSString *)artist song:(NSString *)song; + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SamplePlaylistItem.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SamplePlaylistItem.m new file mode 100644 index 0000000..667c25b --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/SamplePlaylistItem.m @@ -0,0 +1,24 @@ +// +// SamplePlaylistItem.m +// RoadTripDJ +// +// Created by Ben Scheirman on 3/11/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "SamplePlaylistItem.h" + + +@implementation SamplePlaylistItem + +- (instancetype)initWithImage:(UIImage *)image artist:(NSString *)artist song:(NSString *)song { + self = [super init]; + if (self) { + _image = image; + _artist = artist; + _song = song; + } + return self; +} + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.h b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.h new file mode 100644 index 0000000..4baa764 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.h @@ -0,0 +1,16 @@ +// +// ViewController.h +// RoadTripDJ +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + + +@end + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.m new file mode 100644 index 0000000..db13d1c --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/ViewController.m @@ -0,0 +1,135 @@ +// +// ViewController.m +// RoadTripDJ +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import "ViewController.h" +#import "PlaylistDataSource.h" +#import "SamplePlaylistItem.h" +@import MediaPlayer; + +@interface ViewController () + +@property (nonatomic, strong) MPMediaItemCollection *playlist; +@property (nonatomic, strong) MPMusicPlayerController *player; +@property (nonatomic, weak) IBOutlet UIToolbar *playerBar; +@property (nonatomic, strong) UIBarButtonItem *playButton; +@property (nonatomic, strong) IBOutlet PlaylistDataSource *playlistDataSource; + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.player = [[MPMusicPlayerController alloc] init]; + +#if TARGET_IPHONE_SIMULATOR + NSArray *items = @[ + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"inutero.jpg"] artist:@"Nirvana" song:@"Heart-Shaped Box"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"inrainbows.jpg"] artist:@"Radiohead" song:@"House of Cards"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"aenima.jpg"] artist:@"Tool" song:@"Forty-six and Two"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"meddle.jpg"] artist:@"Pink Floyd" song:@"Echoes"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"andjustice.jpg"] artist:@"Metallica" song:@"One"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"bloodsugar.jpg"] artist:@"Red Hot Chili Peppers" song:@"Give it Away"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"inrainbows.jpg"] artist:@"Radiohead" song:@"House of Cards"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"ten.jpg"] artist:@"Pearl Jam" song:@"Ten"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"darkside.jpg"] artist:@"Pink Floyd" song:@"The Great Gig in the Sky"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"dummy.jpg"] artist:@"Portishead" song:@"Strangers"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"suburbs.jpg"] artist:@"Arcade Fire" song:@"Modern Man"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"housesoftheholy.jpg"] artist:@"Led Zeppelin" song:@"No Quarter"], + [[SamplePlaylistItem alloc] initWithImage:[UIImage imageNamed:@"kindofblue.jpg"] artist:@"Miles Davis" song:@"Freddie Freeloader"] + ]; + self.playlistDataSource.items = items; +#endif +} + +- (UIBarButtonItem *)playButtonItemForPlaybackState:(MPMusicPlaybackState)state { + UIBarButtonSystemItem systemItem; + if (state == MPMusicPlaybackStatePlaying) { + systemItem = UIBarButtonSystemItemPause; + } else { + systemItem = UIBarButtonSystemItemPlay; + } + + UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:systemItem + target:self + action:@selector(playPause:)]; + return buttonItem; +} + +- (void)setPlayButtonForPlaybackState:(MPMusicPlaybackState)state { + NSMutableArray *barButtonItems = [self.playerBar.items mutableCopy]; + NSUInteger index = [barButtonItems indexOfObjectIdenticalTo:self.playButton]; + [barButtonItems removeObjectAtIndex:index]; + [barButtonItems insertObject:[self playButtonItemForPlaybackState:state] + atIndex:index]; + [self.playerBar setItems:barButtonItems]; +} + +- (void)togglePlayPause { + if (self.player.playbackState == MPMusicPlaybackStatePlaying) { + NSLog(@"pausing"); + [self.player pause]; + } else { + NSLog(@"playing"); + [self.player play]; + } + + [self setPlayButtonForPlaybackState:self.player.playbackState]; +} + +#pragma mark - Actions + +- (IBAction)playPause:(id)sender { + self.playButton = sender; // smelly + [self togglePlayPause]; +} + +- (IBAction)addMusic:(id)sender { + MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; + mediaPicker.prompt = @"Add music to your playlist"; + mediaPicker.showsCloudItems = YES; + mediaPicker.delegate = self; + mediaPicker.allowsPickingMultipleItems = YES; + [self presentViewController:mediaPicker animated:YES completion:nil]; +} + +#pragma mark - MPMediaPickerControllerDelegate + +- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { + NSLog(@"%@", NSStringFromSelector(_cmd)); + + if (!self.playlist) { + self.playlist = mediaItemCollection; + } else { + NSMutableArray *items = [NSMutableArray arrayWithCapacity:self.playlist.count + mediaItemCollection.count]; + [items addObjectsFromArray:self.playlist.items]; + [items addObjectsFromArray:mediaItemCollection.items]; + MPMediaItemCollection *collection = [MPMediaItemCollection collectionWithItems:items]; + self.playlist = collection; + } + + int index = 1; + for (MPMediaItem *item in self.playlist.items) { + NSLog(@"%d) %@ - %@", index++, item.artist, item.title); + } + + [self.player setQueueWithItemCollection:self.playlist]; + if (self.player.playbackState != MPMusicPlaybackStatePlaying) { + [self togglePlayPause]; + } + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { + NSLog(@"%@", NSStringFromSelector(_cmd)); + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/main.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/main.m new file mode 100644 index 0000000..427e86e --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJ/main.m @@ -0,0 +1,16 @@ +// +// main.m +// RoadTripDJ +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/Info.plist b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/Info.plist new file mode 100644 index 0000000..818ee86 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.ficklebits.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/RoadTripDJTests.m b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/RoadTripDJTests.m new file mode 100644 index 0000000..5eaa814 --- /dev/null +++ b/160-road-trip-dj-part-5/RoadTripDJ/RoadTripDJTests/RoadTripDJTests.m @@ -0,0 +1,40 @@ +// +// RoadTripDJTests.m +// RoadTripDJTests +// +// Created by Ben Scheirman on 2/3/15. +// Copyright (c) 2015 Fickle Bits, LLC. All rights reserved. +// + +#import +#import + +@interface RoadTripDJTests : XCTestCase + +@end + +@implementation RoadTripDJTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end