From 9fa6a62eab100749310d0e8308de9c9fdc887bbf Mon Sep 17 00:00:00 2001 From: jakob <jakob.bode@fu-berlin.de> Date: Wed, 9 Jan 2019 02:54:58 +0100 Subject: [PATCH] add some first steps in Travelmode intro --- enzevalos_iphone.xcodeproj/project.pbxproj | 72 +++++++- .../Assets.xcassets/Travel/Contents.json | 6 + .../Contents.json | 12 ++ .../iconfinder_plane_1608794.svg | 1 + .../Travel/plane.imageset/Contents.json | 23 +++ .../iconfinder_plane_1608794-1.png | Bin 0 -> 9589 bytes .../iconfinder_plane_1608794-2.png | Bin 0 -> 9589 bytes .../iconfinder_plane_1608794.png | Bin 0 -> 9589 bytes enzevalos_iphone/ContactViewController.swift | 7 + enzevalos_iphone/Intro.storyboard | 172 ++++++++++++++++++ .../IntroButtonViewController.swift | 52 ++++++ enzevalos_iphone/IntroContactCell.swift | 32 ++++ enzevalos_iphone/IntroContactCell.xib | 88 +++++++++ .../IntroContactTableViewController.swift | 32 ++++ enzevalos_iphone/IntroContactView.xib | 55 ++++++ .../IntroDescriptionViewController.swift | 45 +++++ .../IntroPageViewController.swift | 85 +++++++++ enzevalos_iphone/SendViewController.swift | 4 + enzevalos_iphone/TravelIntroCoordinator.swift | 26 +++ 19 files changed, 710 insertions(+), 2 deletions(-) create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/Contents.json create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/Contents.json create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/iconfinder_plane_1608794.svg create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/Contents.json create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-1.png create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-2.png create mode 100644 enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794.png create mode 100644 enzevalos_iphone/Intro.storyboard create mode 100644 enzevalos_iphone/IntroButtonViewController.swift create mode 100644 enzevalos_iphone/IntroContactCell.swift create mode 100644 enzevalos_iphone/IntroContactCell.xib create mode 100644 enzevalos_iphone/IntroContactTableViewController.swift create mode 100644 enzevalos_iphone/IntroContactView.xib create mode 100644 enzevalos_iphone/IntroDescriptionViewController.swift create mode 100644 enzevalos_iphone/IntroPageViewController.swift create mode 100644 enzevalos_iphone/TravelIntroCoordinator.swift diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj index b6bf75ae..52cb487a 100644 --- a/enzevalos_iphone.xcodeproj/project.pbxproj +++ b/enzevalos_iphone.xcodeproj/project.pbxproj @@ -190,9 +190,18 @@ A135269C1D955BE000D3BFE1 /* enzevalos_iphoneUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A135269B1D955BE000D3BFE1 /* enzevalos_iphoneUITests.swift */; }; A16BA2121E0439B6005E29E3 /* providers.json in Resources */ = {isa = PBXBuildFile; fileRef = A16BA2111E0439B6005E29E3 /* providers.json */; }; A1735DFA205AB88500B336DB /* SendViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1735DF9205AB88500B336DB /* SendViewState.swift */; }; + A182182721E5012300918A29 /* Intro.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A182182621E5012300918A29 /* Intro.storyboard */; }; + A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */; }; + A182182E21E50D8D00918A29 /* IntroButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */; }; + A182183221E518A400918A29 /* IntroContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = A182183121E518A400918A29 /* IntroContactCell.xib */; }; + A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A182183321E51DD200918A29 /* IntroContactCell.swift */; }; A18E7D771FBDE5D9002F7CC9 /* LoggingEventType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A18E7D761FBDE5D9002F7CC9 /* LoggingEventType.swift */; }; A198D2292056B384004CC838 /* SendViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A198D2282056B384004CC838 /* SendViewDelegate.swift */; }; A1A9DE731F864B0500B808AA /* ExportCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1A9DE721F864B0500B808AA /* ExportCells.swift */; }; + A1B49E5D21E54CBF00ED86FC /* IntroContactTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */; }; + A1B49E5F21E54EE700ED86FC /* IntroContactView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */; }; + A1B49E6221E55D3F00ED86FC /* TravelIntroCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B49E6121E55D3F00ED86FC /* TravelIntroCoordinator.swift */; }; + A1B49E6421E55ECD00ED86FC /* IntroPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */; }; A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1BE3FF81E9664660040114B /* InfoPlist.strings */; }; A1C3270E1DB907D900CE2ED5 /* TextFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C3270D1DB907D900CE2ED5 /* TextFormatter.swift */; }; A1C62E9A2018F716000E5273 /* OnboardingValueState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C62E992018F716000E5273 /* OnboardingValueState.swift */; }; @@ -226,7 +235,7 @@ F12041FD1DA409A5002E4940 /* ListViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12041FC1DA409A5002E4940 /* ListViewCell.swift */; }; F12060801DA540FE00F6EF37 /* RefreshControlExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F120607F1DA540FE00F6EF37 /* RefreshControlExtension.swift */; }; F12060821DA552FC00F6EF37 /* MailHandlerDelegator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12060811DA552FC00F6EF37 /* MailHandlerDelegator.swift */; }; - F120A7D31F7937BB006D5BF1 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; + F120A7D31F7937BB006D5BF1 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; F12D8DBB2069422A0068788E /* About.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F12D8DBD2069422A0068788E /* About.storyboard */; }; F14239C11F30A99C00998A83 /* QRCodeGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F14239C01F30A99C00998A83 /* QRCodeGenerator.swift */; }; F1737ACB2031D7D70000312B /* StudySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A17FDFF2202C685800F7BA89 /* StudySettings.swift */; }; @@ -375,10 +384,19 @@ A16BA2111E0439B6005E29E3 /* providers.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; lineEnding = 0; path = providers.json; sourceTree = "<group>"; }; A1735DF9205AB88500B336DB /* SendViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendViewState.swift; sourceTree = "<group>"; }; A17FDFF2202C685800F7BA89 /* StudySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudySettings.swift; sourceTree = "<group>"; }; + A182182621E5012300918A29 /* Intro.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Intro.storyboard; sourceTree = "<group>"; }; + A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroDescriptionViewController.swift; sourceTree = "<group>"; }; + A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroButtonViewController.swift; sourceTree = "<group>"; }; + A182183121E518A400918A29 /* IntroContactCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroContactCell.xib; sourceTree = "<group>"; }; + A182183321E51DD200918A29 /* IntroContactCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroContactCell.swift; sourceTree = "<group>"; }; A18E7D761FBDE5D9002F7CC9 /* LoggingEventType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggingEventType.swift; sourceTree = "<group>"; }; A198270D1D9A8ABC0027F65C /* enzevalos_iphone-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "enzevalos_iphone-Bridging-Header.h"; sourceTree = "<group>"; }; A198D2282056B384004CC838 /* SendViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendViewDelegate.swift; sourceTree = "<group>"; }; A1A9DE721F864B0500B808AA /* ExportCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportCells.swift; sourceTree = "<group>"; }; + A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroContactTableViewController.swift; sourceTree = "<group>"; }; + A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroContactView.xib; sourceTree = "<group>"; }; + A1B49E6121E55D3F00ED86FC /* TravelIntroCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TravelIntroCoordinator.swift; sourceTree = "<group>"; }; + A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroPageViewController.swift; sourceTree = "<group>"; }; A1BE3FF71E9664660040114B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; A1BE3FF91E96646A0040114B /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; }; A1C3270D1DB907D900CE2ED5 /* TextFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFormatter.swift; sourceTree = "<group>"; }; @@ -462,7 +480,7 @@ 47F867E42052B49800AA832F /* libbz2.tbd in Frameworks */, 47F867E22052B48E00AA832F /* libz.tbd in Frameworks */, 47F867E02052B47C00AA832F /* Security.framework in Frameworks */, - F120A7D31F7937BB006D5BF1 /* BuildFile in Frameworks */, + F120A7D31F7937BB006D5BF1 /* (null) in Frameworks */, 472F396E1E14F384009260FB /* CoreData.framework in Frameworks */, 9935BC866A86C4A4B9819F35 /* Pods_enzevalos_iphone.framework in Frameworks */, ); @@ -776,6 +794,38 @@ name = "debug and study"; sourceTree = "<group>"; }; + A182182521E500BC00918A29 /* Intro */ = { + isa = PBXGroup; + children = ( + A182182A21E5060F00918A29 /* templates */, + A182182921E505F200918A29 /* controller */, + A1B49E6021E55D0D00ED86FC /* coordinator */, + ); + name = Intro; + sourceTree = "<group>"; + }; + A182182921E505F200918A29 /* controller */ = { + isa = PBXGroup; + children = ( + A182182B21E5072200918A29 /* IntroDescriptionViewController.swift */, + A182182D21E50D8D00918A29 /* IntroButtonViewController.swift */, + A182183321E51DD200918A29 /* IntroContactCell.swift */, + A1B49E5C21E54CBF00ED86FC /* IntroContactTableViewController.swift */, + A1B49E6321E55ECD00ED86FC /* IntroPageViewController.swift */, + ); + name = controller; + sourceTree = "<group>"; + }; + A182182A21E5060F00918A29 /* templates */ = { + isa = PBXGroup; + children = ( + A182182621E5012300918A29 /* Intro.storyboard */, + A182183121E518A400918A29 /* IntroContactCell.xib */, + A1B49E5E21E54EE700ED86FC /* IntroContactView.xib */, + ); + name = templates; + sourceTree = "<group>"; + }; A18C76851E8185ED00B21414 /* onboarding */ = { isa = PBXGroup; children = ( @@ -796,9 +846,18 @@ name = exportKey; sourceTree = "<group>"; }; + A1B49E6021E55D0D00ED86FC /* coordinator */ = { + isa = PBXGroup; + children = ( + A1B49E6121E55D3F00ED86FC /* TravelIntroCoordinator.swift */, + ); + name = coordinator; + sourceTree = "<group>"; + }; A1B9999D21DE7CD2002563F6 /* Travel */ = { isa = PBXGroup; children = ( + A182182521E500BC00918A29 /* Intro */, A1FA44A621E10E1400DB02AC /* Travel.swift */, ); name = Travel; @@ -1106,15 +1165,18 @@ A1F992291DA7C9100073BF1B /* Main.storyboard in Resources */, F18C5E561FE025D300C3B86D /* BadgeCase.storyboard in Resources */, 3EB4FAA12012007C001D0625 /* Dialog.storyboard in Resources */, + A1B49E5F21E54EE700ED86FC /* IntroContactView.xib in Resources */, A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */, 3E6B07DE2011246500E49609 /* invitationText.html in Resources */, 8428A8531F4369C0007649A5 /* Gamification.storyboard in Resources */, 8428A8551F4369CF007649A5 /* GamificationElements.xcassets in Resources */, + A182183221E518A400918A29 /* IntroContactCell.xib in Resources */, A13526861D955BDF00D3BFE1 /* LaunchScreen.storyboard in Resources */, 47CD5AAA2012368D00E771A1 /* logging_pk.asc in Resources */, A1EB05A41D956E32008659C1 /* Assets.xcassets in Resources */, 4756DE0E20402F8E00452288 /* invitationTextCensor.html in Resources */, A1EB058C1D9568AB008659C1 /* FrequentCell.xib in Resources */, + A182182721E5012300918A29 /* Intro.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1437,6 +1499,7 @@ F119D2901E364B59001D732A /* AnimatedSendIcon.swift in Sources */, 4707096D1F8F9F4900657F41 /* ExportViewController.swift in Sources */, F12060801DA540FE00F6EF37 /* RefreshControlExtension.swift in Sources */, + A1B49E6221E55D3F00ED86FC /* TravelIntroCoordinator.swift in Sources */, A13526811D955BDF00D3BFE1 /* enzevalos_iphone.xcdatamodeld in Sources */, 472F39821E1E5347009260FB /* Mail_Address+CoreDataProperties.swift in Sources */, 476373C21E09BA88004D5EFE /* UserData.swift in Sources */, @@ -1444,13 +1507,16 @@ F18B44621E73286C0080C041 /* ReadVENDelegate.swift in Sources */, 475B00421F7BB6D6006CDD41 /* PersistentKey+CoreDataClass.swift in Sources */, 3EC35F2420037651008BDF95 /* InvitationHelper.swift in Sources */, + A1B49E6421E55ECD00ED86FC /* IntroPageViewController.swift in Sources */, A1D5076F1E80257A00B68B38 /* KeyViewController.swift in Sources */, A1A9DE731F864B0500B808AA /* ExportCells.swift in Sources */, 472F39901E252470009260FB /* CNMailAddressesExtension.swift in Sources */, F113C38B1F3344C200E7F1D6 /* ViewControllerPannable.swift in Sources */, A1EB05841D956867008659C1 /* TableViewDataDelegate.swift in Sources */, 8428A85E1F436A05007649A5 /* CircleView.swift in Sources */, + A182182C21E5072200918A29 /* IntroDescriptionViewController.swift in Sources */, F1C7AC821FED6473007629DB /* AboutViewController.swift in Sources */, + A182183421E51DD200918A29 /* IntroContactCell.swift in Sources */, 472F397C1E1D0B0B009260FB /* PersistentMail +CoreDataProperties.swift in Sources */, 8428A85C1F436A05007649A5 /* ArrowView.swift in Sources */, A1EB05961D956939008659C1 /* InboxTableViewCell.swift in Sources */, @@ -1465,6 +1531,7 @@ 3EC35F2D200376A1008BDF95 /* SendViewController+Invitation.swift in Sources */, 475B00341F7B9565006CDD41 /* Cryptography.swift in Sources */, A1EB057C1D956838008659C1 /* MailHandler.swift in Sources */, + A182182E21E50D8D00918A29 /* IntroButtonViewController.swift in Sources */, A1EB05881D956879008659C1 /* AddressHandler.swift in Sources */, 472F39701E14F75C009260FB /* DataHandler.swift in Sources */, A1C62E9A2018F716000E5273 /* OnboardingValueState.swift in Sources */, @@ -1481,6 +1548,7 @@ F18B445E1E7044B70080C041 /* FlipTransition.swift in Sources */, 472F397E1E1D0B0B009260FB /* EnzevalosContact+CoreDataProperties.swift in Sources */, 8428A86E1F436A1E007649A5 /* BadgeCase.swift in Sources */, + A1B49E5D21E54CBF00ED86FC /* IntroContactTableViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/enzevalos_iphone/Assets.xcassets/Travel/Contents.json b/enzevalos_iphone/Assets.xcassets/Travel/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/enzevalos_iphone/Assets.xcassets/Travel/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/Contents.json b/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/Contents.json new file mode 100644 index 00000000..05c0871c --- /dev/null +++ b/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/Contents.json @@ -0,0 +1,12 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "data" : [ + { + "idiom" : "universal", + "filename" : "iconfinder_plane_1608794.svg" + } + ] +} \ No newline at end of file diff --git a/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/iconfinder_plane_1608794.svg b/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/iconfinder_plane_1608794.svg new file mode 100644 index 00000000..6db40ca3 --- /dev/null +++ b/enzevalos_iphone/Assets.xcassets/Travel/iconfinder_plane_1608794.dataset/iconfinder_plane_1608794.svg @@ -0,0 +1 @@ +<?xml version="1.0" ?><svg height="1792" viewBox="0 0 1792 1792" width="1792" xmlns="http://www.w3.org/2000/svg"><path d="M1568 160q44 52 12 148t-108 172l-161 161 160 696q5 19-12 33l-128 96q-7 6-19 6-4 0-7-1-15-3-21-16l-279-508-259 259 53 194q5 17-8 31l-96 96q-9 9-23 9h-2q-15-2-24-13l-189-252-252-189q-11-7-13-23-1-13 9-25l96-97q9-9 23-9 6 0 8 1l194 53 259-259-508-279q-14-8-17-24-2-16 9-27l128-128q14-13 30-8l665 159 160-160q76-76 172-108t148 12z"/></svg> \ No newline at end of file diff --git a/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/Contents.json b/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/Contents.json new file mode 100644 index 00000000..5457689b --- /dev/null +++ b/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "iconfinder_plane_1608794-2.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "iconfinder_plane_1608794-1.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "iconfinder_plane_1608794.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-1.png b/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-1.png new file mode 100644 index 0000000000000000000000000000000000000000..27223b457f8494c4ed319cdcba6aab8a2e7d7cd1 GIT binary patch literal 9589 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 literal 0 HcmV?d00001 diff --git a/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-2.png b/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794-2.png new file mode 100644 index 0000000000000000000000000000000000000000..27223b457f8494c4ed319cdcba6aab8a2e7d7cd1 GIT binary patch literal 9589 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 literal 0 HcmV?d00001 diff --git a/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794.png b/enzevalos_iphone/Assets.xcassets/Travel/plane.imageset/iconfinder_plane_1608794.png new file mode 100644 index 0000000000000000000000000000000000000000..27223b457f8494c4ed319cdcba6aab8a2e7d7cd1 GIT binary patch literal 9589 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 literal 0 HcmV?d00001 diff --git a/enzevalos_iphone/ContactViewController.swift b/enzevalos_iphone/ContactViewController.swift index 4b1e65d7..521e7f6a 100644 --- a/enzevalos_iphone/ContactViewController.swift +++ b/enzevalos_iphone/ContactViewController.swift @@ -207,6 +207,8 @@ class ContactViewController: UIViewController { } else if sender.titleLabel?.text == NSLocalizedString("ReadOnOtherDevices", comment: "ReadOnOtherDevices") && keyRecord!.keyID != nil { //AppUtility.lockOrientation(.portrait, andRotateTo: .portrait) performSegue(withIdentifier: "exportKeyFromKeyRecord", sender: nil) + } else if sender.titleLabel?.text == NSLocalizedString("IWantToTravel", comment: "start with travel mode intro") && keyRecord!.keyID != nil { + navigationController?.pushViewController(TravelIntroCoordinator.getTravelIntro(current: self), animated: true) } } @@ -404,6 +406,10 @@ extension ContactViewController: UITableViewDataSource { let badgeCell = tableView.dequeueReusableCell(withIdentifier: "BadgeCaseCell", for: indexPath) badgeCell.detailTextLabel?.text = NSLocalizedString("YourBadges", comment: "") return badgeCell + case 6 where isUser: + let actionCell = tableView.dequeueReusableCell(withIdentifier: "ActionCell", for: indexPath) as! ActionCell + actionCell.Button.setTitle(NSLocalizedString("IWantToTravel", comment: "start with travel mode intro"), for: UIControlState()) + return actionCell default: break } @@ -420,6 +426,7 @@ extension ContactViewController: UITableViewDataSource { sections += 1 if isUser { sections += 1 + sections += 1 } } return sections diff --git a/enzevalos_iphone/Intro.storyboard b/enzevalos_iphone/Intro.storyboard new file mode 100644 index 00000000..c30b4df5 --- /dev/null +++ b/enzevalos_iphone/Intro.storyboard @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait"> + <adaptation id="fullscreen"/> + </device> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> + <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--Intro Page View Controller--> + <scene sceneID="WmG-qK-U7X"> + <objects> + <pageViewController storyboardIdentifier="pageViewController" autoresizesArchivedViewToFullSize="NO" useStoryboardIdentifierAsRestorationIdentifier="YES" transitionStyle="scroll" navigationOrientation="horizontal" spineLocation="max" id="RhY-cj-qs2" customClass="IntroPageViewController" customModule="enzevalos_iphone" customModuleProvider="target" sceneMemberID="viewController"/> + <placeholder placeholderIdentifier="IBFirstResponder" id="aMo-h5-2n5" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="-98" y="-224"/> + </scene> + <!--Intro Description View Controller--> + <scene sceneID="10I-aY-Cyq"> + <objects> + <viewController storyboardIdentifier="descriptionViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="wOD-s1-IJ4" customClass="IntroDescriptionViewController" customModule="enzevalos_iphone" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="k4f-8h-7kZ"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" bounces="NO" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" editable="NO" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lr2-gv-nYg"> + <rect key="frame" x="18.5" y="75.5" width="337.5" height="467"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <string key="text">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> + </textView> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xg2-Io-1am"> + <rect key="frame" x="249" y="586" width="107" height="30"/> + <state key="normal" title="Überspringen >"/> + <connections> + <action selector="skipTapped:" destination="wOD-s1-IJ4" eventType="primaryActionTriggered" id="rb0-PN-qlJ"/> + </connections> + </button> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstItem="xg2-Io-1am" firstAttribute="trailing" secondItem="Lr2-gv-nYg" secondAttribute="trailing" id="55n-iX-qiD"/> + <constraint firstItem="Lr2-gv-nYg" firstAttribute="centerY" secondItem="yyZ-M9-ySc" secondAttribute="centerY" multiplier="0.9" id="GPb-gX-oAl"/> + <constraint firstItem="xg2-Io-1am" firstAttribute="centerY" secondItem="yyZ-M9-ySc" secondAttribute="centerY" multiplier="1.75" id="Udc-pP-Un0"/> + <constraint firstItem="Lr2-gv-nYg" firstAttribute="centerX" secondItem="yyZ-M9-ySc" secondAttribute="centerX" id="WwF-Zk-wVc"/> + <constraint firstItem="Lr2-gv-nYg" firstAttribute="width" secondItem="k4f-8h-7kZ" secondAttribute="width" multiplier="90:100" id="krc-s0-OdQ"/> + <constraint firstItem="Lr2-gv-nYg" firstAttribute="height" secondItem="k4f-8h-7kZ" secondAttribute="height" multiplier="0.7" id="mJK-OO-ikJ"/> + </constraints> + <viewLayoutGuide key="safeArea" id="yyZ-M9-ySc"/> + </view> + <connections> + <outlet property="descriptionView" destination="Lr2-gv-nYg" id="dPK-wM-Vo3"/> + <outlet property="skipButton" destination="xg2-Io-1am" id="oDB-PV-d19"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="nCy-NS-EH6" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="636" y="-224"/> + </scene> + <!--Intro Button View Controller--> + <scene sceneID="jcn-Av-SWb"> + <objects> + <viewController storyboardIdentifier="buttonViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="ldI-jh-vSY" customClass="IntroButtonViewController" customModule="enzevalos_iphone" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="e5q-Mf-NS9"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" bounces="NO" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" editable="NO" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9OY-LO-b3e"> + <rect key="frame" x="18.5" y="73.5" width="337.5" height="333.5"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <string key="text">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/> + </textView> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LGm-0F-G08"> + <rect key="frame" x="108.5" y="496" width="158" height="39"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <state key="normal" title="Backup erstellen"/> + <connections> + <action selector="buttonTapped:" destination="ldI-jh-vSY" eventType="primaryActionTriggered" id="ZWA-oa-s0k"/> + </connections> + </button> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="descriptionText" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="R9g-V1-19q" userLabel="Description Label"> + <rect key="frame" x="18" y="73.5" width="337.5" height="333.5"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstItem="R9g-V1-19q" firstAttribute="centerY" secondItem="2jy-ud-DWF" secondAttribute="centerY" multiplier="0.7" id="62P-AB-uAA"/> + <constraint firstItem="LGm-0F-G08" firstAttribute="top" relation="greaterThanOrEqual" secondItem="9OY-LO-b3e" secondAttribute="bottom" constant="30" id="8HI-dH-oyh"/> + <constraint firstItem="9OY-LO-b3e" firstAttribute="centerY" secondItem="2jy-ud-DWF" secondAttribute="centerY" multiplier="0.7" id="Dt0-WA-IW3"/> + <constraint firstItem="R9g-V1-19q" firstAttribute="width" secondItem="9OY-LO-b3e" secondAttribute="width" id="HBa-DL-UCs"/> + <constraint firstItem="LGm-0F-G08" firstAttribute="centerX" secondItem="2jy-ud-DWF" secondAttribute="centerX" id="IrW-KS-xLk"/> + <constraint firstItem="LGm-0F-G08" firstAttribute="centerY" secondItem="2jy-ud-DWF" secondAttribute="centerY" multiplier="1.5" id="UDS-Mn-j4G"/> + <constraint firstItem="R9g-V1-19q" firstAttribute="height" secondItem="9OY-LO-b3e" secondAttribute="height" id="Uyy-JH-M0h"/> + <constraint firstItem="9OY-LO-b3e" firstAttribute="centerX" secondItem="2jy-ud-DWF" secondAttribute="centerX" id="aA7-G3-WfY"/> + <constraint firstItem="9OY-LO-b3e" firstAttribute="width" secondItem="e5q-Mf-NS9" secondAttribute="width" multiplier="90:100" id="mIO-ew-rS6"/> + <constraint firstItem="9OY-LO-b3e" firstAttribute="height" secondItem="e5q-Mf-NS9" secondAttribute="height" multiplier="0.5" id="re8-Hc-PzC"/> + <constraint firstItem="R9g-V1-19q" firstAttribute="centerX" secondItem="2jy-ud-DWF" secondAttribute="centerX" id="yEP-lP-Fl7"/> + </constraints> + <viewLayoutGuide key="safeArea" id="2jy-ud-DWF"/> + </view> + <connections> + <outlet property="button" destination="LGm-0F-G08" id="6pU-zr-Eih"/> + <outlet property="descriptionLabel" destination="R9g-V1-19q" id="q9K-yL-K8h"/> + <outlet property="descriptionView" destination="9OY-LO-b3e" id="bF9-Iu-0Sd"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="NhD-s9-TYI" userLabel="First Responder" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="1342" y="-224"/> + </scene> + <!--Table View Controller--> + <scene sceneID="frP-4c-Od9"> + <objects> + <tableViewController id="QVX-gn-Y6B" sceneMemberID="viewController"> + <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="Xa1-zU-SNj"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <color key="sectionIndexColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <searchBar key="tableHeaderView" contentMode="redraw" id="RFq-qW-4EB"> + <rect key="frame" x="0.0" y="0.0" width="375" height="44"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/> + <textInputTraits key="textInputTraits"/> + <connections> + <outlet property="delegate" destination="QVX-gn-Y6B" id="S7x-fj-FvH"/> + </connections> + </searchBar> + <prototypes> + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="introContactCell" id="897-2G-qEv" customClass="IntroContactCell" customModule="enzevalos_iphone" customModuleProvider="target"> + <rect key="frame" x="0.0" y="72" width="375" height="44"/> + <autoresizingMask key="autoresizingMask"/> + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="897-2G-qEv" id="eCR-Ww-Y6H"> + <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/> + <autoresizingMask key="autoresizingMask"/> + </tableViewCellContentView> + </tableViewCell> + </prototypes> + <sections/> + <connections> + <outlet property="dataSource" destination="QVX-gn-Y6B" id="ZLT-dJ-b5I"/> + <outlet property="delegate" destination="QVX-gn-Y6B" id="lUj-OS-CPc"/> + </connections> + </tableView> + <connections> + <outlet property="searchDisplayController" destination="4nE-2z-WCK" id="5h5-F5-Bb1"/> + </connections> + </tableViewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="8GW-9X-WHB" userLabel="First Responder" sceneMemberID="firstResponder"/> + <searchDisplayController id="4nE-2z-WCK"> + <connections> + <outlet property="delegate" destination="QVX-gn-Y6B" id="QjF-ZT-TKE"/> + <outlet property="searchBar" destination="RFq-qW-4EB" id="DXh-Ev-6em"/> + <outlet property="searchContentsController" destination="QVX-gn-Y6B" id="71u-c4-t6p"/> + <outlet property="searchResultsDataSource" destination="QVX-gn-Y6B" id="ErX-rV-9x6"/> + <outlet property="searchResultsDelegate" destination="QVX-gn-Y6B" id="rih-iX-dEg"/> + </connections> + </searchDisplayController> + </objects> + <point key="canvasLocation" x="2111" y="-224"/> + </scene> + </scenes> +</document> diff --git a/enzevalos_iphone/IntroButtonViewController.swift b/enzevalos_iphone/IntroButtonViewController.swift new file mode 100644 index 00000000..5c06d865 --- /dev/null +++ b/enzevalos_iphone/IntroButtonViewController.swift @@ -0,0 +1,52 @@ +// +// IntroButtonViewController.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation +import UIKit + +class IntroButtonViewController: UIViewController { + + @IBOutlet weak var descriptionView: UITextView! + @IBOutlet weak var button: UIButton! + @IBOutlet weak var descriptionLabel: UILabel! + + var text: String = "" + var buttonAction: ((_ sender: Any) -> ())? = nil + var useTextView = false + static let storyboardID = "buttonViewController" + + static func storyboardInstance(description: String, buttonAction: ((_ sender: Any) -> ())? = nil, useTextView: Bool = false) -> IntroButtonViewController? { + let storyboard = UIStoryboard(name: + "Intro", bundle: nil) + if let controller = storyboard.instantiateViewController(withIdentifier: storyboardID) as? IntroButtonViewController { + controller.text = description + controller.buttonAction = buttonAction + controller.useTextView = useTextView + return controller + } + return nil + } + + @IBAction func buttonTapped(_ sender: Any) { + if let action = buttonAction { + action(sender) + } + } + + override func viewDidLoad() { + super.viewDidLoad() + if useTextView { + descriptionView.text = text + descriptionLabel.isHidden = true + } else { + descriptionLabel.text = text + descriptionView.isHidden = true + } + + } +} diff --git a/enzevalos_iphone/IntroContactCell.swift b/enzevalos_iphone/IntroContactCell.swift new file mode 100644 index 00000000..3084aca9 --- /dev/null +++ b/enzevalos_iphone/IntroContactCell.swift @@ -0,0 +1,32 @@ +// +// IntroContactCell.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation + +class IntroContactCell: UITableViewCell { + @IBOutlet weak var contactImage: UIImageView! + @IBOutlet weak var nameLabel: UILabel! + @IBOutlet weak var planeImage: UIImageView! + + var enzContact: KeyRecord? { + didSet { + if let con = enzContact { + var cont: Contact + if let contact = con.cnContact { + cont = contact + } else { + cont = con.ezContact + } + nameLabel.text = cont.name + contactImage.image = cont.getImageOrDefault() + contactImage.layer.cornerRadius = contactImage.frame.height / 2 + contactImage.clipsToBounds = true + } + } + } +} diff --git a/enzevalos_iphone/IntroContactCell.xib b/enzevalos_iphone/IntroContactCell.xib new file mode 100644 index 00000000..c1a4beba --- /dev/null +++ b/enzevalos_iphone/IntroContactCell.xib @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait"> + <adaptation id="fullscreen"/> + </device> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> + <capability name="Aspect ratio constraints" minToolsVersion="5.1"/> + <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="introContactCell" rowHeight="63" id="oVz-9n-10C" customClass="IntroContactCell" customModule="enzevalos_iphone" customModuleProvider="target"> + <rect key="frame" x="0.0" y="0.0" width="329" height="63"/> + <autoresizingMask key="autoresizingMask"/> + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="oVz-9n-10C" id="ZGb-xC-czX"> + <rect key="frame" x="0.0" y="0.0" width="329" height="62.5"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b80-o2-POc" userLabel="seperator1"> + <rect key="frame" x="0.0" y="30" width="6.5" height="1"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstAttribute="height" constant="1" id="eyy-YM-FiX"/> + </constraints> + </view> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Ldq-6Z-akT"> + <rect key="frame" x="6.5" y="3" width="56" height="56"/> + <constraints> + <constraint firstAttribute="width" secondItem="Ldq-6Z-akT" secondAttribute="height" multiplier="1:1" id="YAW-Gn-LjT"/> + </constraints> + </imageView> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NXt-pv-S05" userLabel="seperator2"> + <rect key="frame" x="62.5" y="31" width="19.5" height="1"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </view> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="smt-kd-GRg"> + <rect key="frame" x="82" y="19.5" width="51.5" height="24"/> + <fontDescription key="fontDescription" type="system" pointSize="20"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="plane" translatesAutoresizingMaskIntoConstraints="NO" id="UMj-eG-5W1" userLabel="plane Image"> + <rect key="frame" x="266" y="3.5" width="56" height="56"/> + </imageView> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QcO-bH-nZt" userLabel="seperator3"> + <rect key="frame" x="322" y="30.5" width="6.5" height="1"/> + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </view> + </subviews> + <constraints> + <constraint firstItem="QcO-bH-nZt" firstAttribute="trailing" secondItem="ZGb-xC-czX" secondAttribute="trailing" id="7ZJ-Q0-ivi"/> + <constraint firstItem="smt-kd-GRg" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="8Gt-Rg-dnN"/> + <constraint firstItem="Ldq-6Z-akT" firstAttribute="height" secondItem="ZGb-xC-czX" secondAttribute="height" multiplier="90:100" id="8Kf-nC-tuf"/> + <constraint firstItem="NXt-pv-S05" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="9dg-CW-xdq"/> + <constraint firstAttribute="leading" secondItem="b80-o2-POc" secondAttribute="leading" id="9mg-GV-UT7"/> + <constraint firstItem="QcO-bH-nZt" firstAttribute="leading" secondItem="UMj-eG-5W1" secondAttribute="trailing" id="BG5-ha-zyH"/> + <constraint firstItem="QcO-bH-nZt" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="Dcb-Yz-Emr"/> + <constraint firstItem="b80-o2-POc" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="FUn-ja-EIN"/> + <constraint firstItem="b80-o2-POc" firstAttribute="width" secondItem="ZGb-xC-czX" secondAttribute="height" multiplier="1:10" id="KDR-QL-LDY"/> + <constraint firstItem="NXt-pv-S05" firstAttribute="height" secondItem="b80-o2-POc" secondAttribute="height" id="RjL-9E-of3"/> + <constraint firstItem="NXt-pv-S05" firstAttribute="width" secondItem="b80-o2-POc" secondAttribute="width" multiplier="3" id="S2U-mP-JoH"/> + <constraint firstItem="UMj-eG-5W1" firstAttribute="width" secondItem="Ldq-6Z-akT" secondAttribute="width" id="SXh-TJ-myV"/> + <constraint firstItem="Ldq-6Z-akT" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="Tic-GR-fXb"/> + <constraint firstItem="QcO-bH-nZt" firstAttribute="height" secondItem="b80-o2-POc" secondAttribute="height" id="bge-IY-X40"/> + <constraint firstItem="Ldq-6Z-akT" firstAttribute="leading" secondItem="b80-o2-POc" secondAttribute="trailing" id="hpr-Bk-qdb"/> + <constraint firstItem="UMj-eG-5W1" firstAttribute="centerY" secondItem="ZGb-xC-czX" secondAttribute="centerY" id="i6W-Kq-yDl"/> + <constraint firstItem="NXt-pv-S05" firstAttribute="leading" secondItem="Ldq-6Z-akT" secondAttribute="trailing" id="mex-fI-Jkc"/> + <constraint firstItem="UMj-eG-5W1" firstAttribute="height" secondItem="Ldq-6Z-akT" secondAttribute="height" id="qy8-hD-c5p"/> + <constraint firstItem="QcO-bH-nZt" firstAttribute="width" secondItem="b80-o2-POc" secondAttribute="width" id="uXa-j7-4FF"/> + <constraint firstItem="smt-kd-GRg" firstAttribute="leading" secondItem="NXt-pv-S05" secondAttribute="trailing" id="uk9-iN-MMY"/> + </constraints> + </tableViewCellContentView> + <connections> + <outlet property="contactImage" destination="Ldq-6Z-akT" id="OtD-VW-6U1"/> + <outlet property="nameLabel" destination="smt-kd-GRg" id="XdG-zR-ngC"/> + <outlet property="planeImage" destination="UMj-eG-5W1" id="kHm-EC-wmL"/> + </connections> + <point key="canvasLocation" x="-169.5" y="-199.5"/> + </tableViewCell> + </objects> + <resources> + <image name="plane" width="256" height="256"/> + </resources> +</document> diff --git a/enzevalos_iphone/IntroContactTableViewController.swift b/enzevalos_iphone/IntroContactTableViewController.swift new file mode 100644 index 00000000..017d7ad0 --- /dev/null +++ b/enzevalos_iphone/IntroContactTableViewController.swift @@ -0,0 +1,32 @@ +// +// IntroContactTableViewController.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation + +class IntroContactTableViewController: UITableViewController { + +} + +//extension IntroContactTableViewController: UIViewControllerPreviewingDelegate { +// +// func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { +// guard let indexPath = tableView.indexPathForRow(at: location) else { +// return nil +// } +// +// let detailViewController = createDetailViewControllerIndexPath(indexPath: indexPath) +// +// return detailViewController +// } +// +// func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { +// +// } +// +// +//} diff --git a/enzevalos_iphone/IntroContactView.xib b/enzevalos_iphone/IntroContactView.xib new file mode 100644 index 00000000..3e8b6e58 --- /dev/null +++ b/enzevalos_iphone/IntroContactView.xib @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina4_7" orientation="portrait"> + <adaptation id="fullscreen"/> + </device> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/> + <capability name="Alignment constraints to the first baseline" minToolsVersion="6.0"/> + <capability name="Aspect ratio constraints" minToolsVersion="5.1"/> + <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <view contentMode="scaleToFill" id="iN0-l3-epB"> + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="YEu-IX-Mr5"> + <rect key="frame" x="154" y="35" width="66.5" height="66.5"/> + <constraints> + <constraint firstAttribute="width" secondItem="YEu-IX-Mr5" secondAttribute="height" multiplier="1:1" id="put-Dd-qe6"/> + </constraints> + </imageView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Za4-zO-9pp"> + <rect key="frame" x="161.5" y="120.5" width="52.5" height="26.5"/> + <fontDescription key="fontDescription" type="system" pointSize="22"/> + <nil key="textColor"/> + <nil key="highlightedColor"/> + </label> + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" keyboardDismissMode="onDrag" style="grouped" allowsSelection="NO" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" sectionFooterHeight="18" translatesAutoresizingMaskIntoConstraints="NO" id="7x8-si-MjZ"> + <rect key="frame" x="0.0" y="181.5" width="375" height="485.5"/> + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> + </tableView> + </subviews> + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + <constraints> + <constraint firstItem="YEu-IX-Mr5" firstAttribute="height" secondItem="iN0-l3-epB" secondAttribute="height" multiplier="0.1" id="9Qt-eF-R23"/> + <constraint firstItem="YEu-IX-Mr5" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="15" id="A2O-N1-rnS"/> + <constraint firstItem="YEu-IX-Mr5" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="Ghk-n3-Erd"/> + <constraint firstItem="7x8-si-MjZ" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="JjV-Ww-5Ex"/> + <constraint firstItem="vUN-kp-3ea" firstAttribute="bottom" secondItem="7x8-si-MjZ" secondAttribute="bottom" id="PMa-1u-ER0"/> + <constraint firstItem="Za4-zO-9pp" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="hO1-cU-uuc"/> + <constraint firstItem="7x8-si-MjZ" firstAttribute="firstBaseline" secondItem="Za4-zO-9pp" secondAttribute="baseline" constant="40" id="lgo-ze-LeJ"/> + <constraint firstItem="7x8-si-MjZ" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="mEw-gp-biS"/> + <constraint firstItem="Za4-zO-9pp" firstAttribute="firstBaseline" secondItem="YEu-IX-Mr5" secondAttribute="baseline" constant="40" id="vyl-QF-OAA"/> + </constraints> + <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> + <point key="canvasLocation" x="24.5" y="51.5"/> + </view> + </objects> +</document> diff --git a/enzevalos_iphone/IntroDescriptionViewController.swift b/enzevalos_iphone/IntroDescriptionViewController.swift new file mode 100644 index 00000000..b90cd681 --- /dev/null +++ b/enzevalos_iphone/IntroDescriptionViewController.swift @@ -0,0 +1,45 @@ +// +// IntroDescriptionViewController.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation +import UIKit + +class IntroDescriptionViewController: UIViewController { + + @IBOutlet weak var descriptionView: UITextView! + @IBOutlet weak var skipButton: UIButton! + + var text: String = "" + var skipAction: ((_ sender: Any) -> ())? = nil + static let storyboardID = "descriptionViewController" + + static func storyboardInstance(description: String, skipButtonAction: ((_ sender: Any) -> ())? = nil) -> IntroDescriptionViewController? { + let storyboard = UIStoryboard(name: + "Intro", bundle: nil) + if let controller = storyboard.instantiateViewController(withIdentifier: storyboardID) as? IntroDescriptionViewController { + controller.text = description + controller.skipAction = skipButtonAction + return controller + } + return nil + } + + @IBAction func skipTapped(_ sender: Any) { + if let action = skipAction { + action(sender) + } + } + + override func viewDidLoad() { + super.viewDidLoad() + descriptionView.text = text + if skipAction == nil { + skipButton.isHidden = true + } + } +} diff --git a/enzevalos_iphone/IntroPageViewController.swift b/enzevalos_iphone/IntroPageViewController.swift new file mode 100644 index 00000000..a7826d14 --- /dev/null +++ b/enzevalos_iphone/IntroPageViewController.swift @@ -0,0 +1,85 @@ +// +// IntroPageViewController.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation + +class IntroPageViewController: UIPageViewController { + + static let storyboardID = "pageViewController" + + static func storyboardInstance(orderedViewControllers: [UIViewController]) -> IntroPageViewController? { + let storyboard = UIStoryboard(name: + "Intro", bundle: nil) + if let controller = storyboard.instantiateViewController(withIdentifier: storyboardID) as? IntroPageViewController { + controller.orderedViewControllers = orderedViewControllers + return controller + } + return nil + } + + var orderedViewControllers: [UIViewController] = [] + var pageControl = UIPageControl() + var pendingIndex: Int? = 0 + + override func viewDidLoad() { + super.viewDidLoad() + dataSource = self + delegate = self + + if let firstViewController = orderedViewControllers.first { + setViewControllers([firstViewController], + direction: .forward, + animated: false, + completion: nil) + } + pageControl = UIPageControl(frame: CGRect(x: 0, y: UIScreen.main.bounds.maxY - 50, width: UIScreen.main.bounds.width, height: 50)) + pageControl.numberOfPages = orderedViewControllers.count + pageControl.currentPage = 0 + pageControl.tintColor = UIColor.darkGray + pageControl.pageIndicatorTintColor = UIColor.darkGray.withAlphaComponent(0.4) + pageControl.currentPageIndicatorTintColor = UIColor.darkGray + pageControl.isUserInteractionEnabled = false + self.view.backgroundColor = .white + view.addSubview(pageControl) + } +} + +extension IntroPageViewController: UIPageViewControllerDataSource { + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { + if let index = orderedViewControllers.index(of: viewController), index > 0 { + return orderedViewControllers[index-1] + } + return nil + } + + func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { + if let index = orderedViewControllers.index(of: viewController), index < orderedViewControllers.count-1 { + return orderedViewControllers[index+1] + } + return nil + } + + +} + +extension IntroPageViewController: UIPageViewControllerDelegate { + + func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) { + pendingIndex = orderedViewControllers.index(of: pendingViewControllers.first!) + } + + func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { + if completed { + if let index = pendingIndex { + self.pageControl.currentPage = index + } + } + } +} + diff --git a/enzevalos_iphone/SendViewController.swift b/enzevalos_iphone/SendViewController.swift index ae5b0b0c..0aa182aa 100644 --- a/enzevalos_iphone/SendViewController.swift +++ b/enzevalos_iphone/SendViewController.swift @@ -775,6 +775,10 @@ class SendViewController: UIViewController { let (hmtlmessage, counterTextparts, plaintext) = self.htmlMessage() let message: String = (plaintext ?? self.textView.text) let inviteMail = invite || mailSecurityState == .extendedPostcard(.censored) || mailSecurityState == .extendedPostcard(.partiallyEncrypted) +// for i in 0...99 { +// mailHandler.sendTravelCallForUse(to: "test-"+String(i)+"@spamless.me", sharedSecret: "abcdefghi", pubKey: "1", keyID: "123456789", callback: self.mailSend) +// } + //mailHandler.sendTravelRepeal(to: "jakob.bode@fu-berlin.de", keyID: "abc", sharedSecret: "Hallo, das ist ein Test", callback: self.mailSend) mailHandler.send(toEntrys as NSArray as! [String], ccEntrys: ccEntrys as NSArray as! [String], bccEntrys: [], subject: subject, message: message, sendEncryptedIfPossible: !enforcePostcard, callback: self.mailSend, htmlContent: hmtlmessage, inviteMail: inviteMail, textparts: counterTextparts) } diff --git a/enzevalos_iphone/TravelIntroCoordinator.swift b/enzevalos_iphone/TravelIntroCoordinator.swift new file mode 100644 index 00000000..cbb58e21 --- /dev/null +++ b/enzevalos_iphone/TravelIntroCoordinator.swift @@ -0,0 +1,26 @@ +// +// TravelIntroCoordinator.swift +// enzevalos_iphone +// +// Created by jakobsbode on 08.01.19. +// Copyright © 2019 fu-berlin. All rights reserved. +// + +import Foundation +class TravelIntroCoordinator { + + static func getTravelIntro(current viewController: UIViewController) -> UIViewController { + var controllers: [UIViewController] = [] + let descriptionViewController = IntroDescriptionViewController.storyboardInstance(description: "hallo", skipButtonAction: {_ in })! + controllers.append(descriptionViewController) + let descriptionViewController2 = IntroDescriptionViewController.storyboardInstance(description: "hallo2")! + controllers.append(descriptionViewController2) + let backupController = IntroButtonViewController.storyboardInstance(description: "Um alle vorangangenen Nachrichten nach deiner Reise wieder lesen zu können, solltest du vor deiner Reise ein Backup erstellen. Wenn du noch keines erstellt hast, solltest du es jetzt tun.\n\nBeachte, dass wir zum Schutz deiner Geheimnisse während der Reise alle Backup-Codes löschen. Du solltest bestehende Codes jetzt notieren und zuhause lassen.", buttonAction: {_ in viewController.navigationController?.pushViewController(ExportInfoViewController.storyboardInstance(travelCall: true)!, animated: true)})! + + controllers.append(backupController) + + let pageViewController = IntroPageViewController.storyboardInstance(orderedViewControllers: controllers) + + return pageViewController! + } +} -- GitLab