Browse Source

Merge pull request #1010 from Infomaniak/ui-fix

Fixed intro view #1001
Marino Faggiana 5 years ago
parent
commit
209c079360

+ 0 - 1
Cartfile

@@ -4,7 +4,6 @@ github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "danielsaidi/Sheeeeeeeeet" "2.0.2"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
-github "ealeksandrov/EAIntroView" "2.12.0"
 github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "ChangbaDevs/KTVHTTPCache" "2.0.1"
 github "jdg/MBProgressHUD" "1.1.0"

+ 0 - 2
Cartfile.resolved

@@ -10,8 +10,6 @@ github "WenchaoD/FSCalendar" "2.8.0"
 github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "danielsaidi/Sheeeeeeeeet" "2.0.2"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
-github "ealeksandrov/EAIntroView" "2.12.0"
-github "ealeksandrov/EARestrictedScrollView" "1.1.0"
 github "jdg/MBProgressHUD" "1.1.0"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "krzyzanowskim/OpenSSL" "1.0.218"

+ 16 - 12
Nextcloud.xcodeproj/project.pbxproj

@@ -7,6 +7,10 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		375CF03E238282B8000F2B53 /* IntroCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375CF03C238282B7000F2B53 /* IntroCollectionViewCell.swift */; };
+		375CF03F238282B8000F2B53 /* IntroCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 375CF03D238282B7000F2B53 /* IntroCollectionViewCell.xib */; };
+		379DC949237EF4DD008EC025 /* IntroView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC948237EF4DD008EC025 /* IntroView.swift */; };
+		379DC94B237EF4EB008EC025 /* IntroView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 379DC94A237EF4EB008EC025 /* IntroView.xib */; };
 		F700222C1EC479840080073F /* Custom.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F700222B1EC479840080073F /* Custom.xcassets */; };
 		F700222D1EC479840080073F /* Custom.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F700222B1EC479840080073F /* Custom.xcassets */; };
 		F70022B31EC4C9100080073F /* OCActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = F70022671EC4C9100080073F /* OCActivity.m */; };
@@ -62,7 +66,6 @@
 		F70BFC7520E0FA7D00C67599 /* NCUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70BFC7320E0FA7C00C67599 /* NCUtility.swift */; };
 		F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; };
 		F70F2BA5225F2D8900EBB73E /* ZIPFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F70F2BA4225F2D8900EBB73E /* ZIPFoundation.framework */; };
-		F710E8101EF95C9C00DC2427 /* CCIntro.m in Sources */ = {isa = PBXBuildFile; fileRef = F710E80E1EF95C9C00DC2427 /* CCIntro.m */; };
 		F710E8111EF95C9C00DC2427 /* ImagesIntro.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */; };
 		F71459B81D12E3B700CAFEEC /* CCError.m in Sources */ = {isa = PBXBuildFile; fileRef = F76C3B881C638A4C00DC4301 /* CCError.m */; };
 		F71459BA1D12E3B700CAFEEC /* NSString+TruncateToWidth.m in Sources */ = {isa = PBXBuildFile; fileRef = F73049B91CB567F000C7C320 /* NSString+TruncateToWidth.m */; };
@@ -445,8 +448,6 @@
 		F7BF1B431D51E893000854F6 /* CCLogin.m in Sources */ = {isa = PBXBuildFile; fileRef = F7BF1B401D51E893000854F6 /* CCLogin.m */; };
 		F7C40BE521998D5B0004137E /* MGSwipeTableCell.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BE421998D5A0004137E /* MGSwipeTableCell.framework */; };
 		F7C40BE721998F410004137E /* DZNEmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BE621998F410004137E /* DZNEmptyDataSet.framework */; };
-		F7C40BE9219991A60004137E /* EAIntroView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BE8219991A60004137E /* EAIntroView.framework */; };
-		F7C40BEB219991AC0004137E /* EARestrictedScrollView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BEA219991AC0004137E /* EARestrictedScrollView.framework */; };
 		F7C40BED219993330004137E /* JDStatusBarNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BEC219993330004137E /* JDStatusBarNotification.framework */; };
 		F7C40BEF219994ED0004137E /* KTVCocoaHTTPServer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BEE219994ED0004137E /* KTVCocoaHTTPServer.framework */; };
 		F7C40BF1219994F20004137E /* KTVHTTPCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BF0219994F20004137E /* KTVHTTPCache.framework */; };
@@ -664,6 +665,10 @@
 		08EA97451E6554FC004C83FA /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCore.framework; sourceTree = "<group>"; };
 		08EA97461E6554FC004C83FA /* FirebaseInstanceID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseInstanceID.framework; sourceTree = "<group>"; };
 		08EA97471E6554FC004C83FA /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleToolboxForMac.framework; sourceTree = "<group>"; };
+		375CF03C238282B7000F2B53 /* IntroCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroCollectionViewCell.swift; sourceTree = "<group>"; };
+		375CF03D238282B7000F2B53 /* IntroCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroCollectionViewCell.xib; sourceTree = "<group>"; };
+		379DC948237EF4DD008EC025 /* IntroView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroView.swift; sourceTree = "<group>"; };
+		379DC94A237EF4EB008EC025 /* IntroView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IntroView.xib; sourceTree = "<group>"; };
 		F700222B1EC479840080073F /* Custom.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Custom.xcassets; sourceTree = "<group>"; };
 		F70022661EC4C9100080073F /* OCActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCActivity.h; sourceTree = "<group>"; };
 		F70022671EC4C9100080073F /* OCActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OCActivity.m; sourceTree = "<group>"; };
@@ -737,8 +742,6 @@
 		F70F05571C889184008DAB36 /* UIImage+animatedGIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+animatedGIF.h"; sourceTree = "<group>"; };
 		F70F05581C889184008DAB36 /* UIImage+animatedGIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+animatedGIF.m"; sourceTree = "<group>"; };
 		F70F2BA4225F2D8900EBB73E /* ZIPFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZIPFoundation.framework; path = Carthage/Build/iOS/ZIPFoundation.framework; sourceTree = "<group>"; };
-		F710E80D1EF95C9C00DC2427 /* CCIntro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCIntro.h; sourceTree = "<group>"; };
-		F710E80E1EF95C9C00DC2427 /* CCIntro.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCIntro.m; sourceTree = "<group>"; };
 		F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ImagesIntro.xcassets; sourceTree = "<group>"; };
 		F7151A811D477A4B00E6AF45 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
 		F7169A171EE590930086BD69 /* NCShares.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCShares.h; sourceTree = "<group>"; };
@@ -1463,10 +1466,8 @@
 				F733B65221997CC2001C1FFA /* TLPhotoPicker.framework in Frameworks */,
 				F7D4B6872295663D000C2C86 /* FirebaseAnalytics.framework in Frameworks */,
 				F7FC7D561DC1F93800BB2C6A /* libz.tbd in Frameworks */,
-				F7C40BE9219991A60004137E /* EAIntroView.framework in Frameworks */,
 				F7C40BE521998D5B0004137E /* MGSwipeTableCell.framework in Frameworks */,
 				F7D4B68B2295663D000C2C86 /* FirebaseInstanceID.framework in Frameworks */,
-				F7C40BEB219991AC0004137E /* EARestrictedScrollView.framework in Frameworks */,
 				F745B251222D871800346520 /* QRCodeReader.framework in Frameworks */,
 				F7A3771A1EB2364A002856D3 /* Fabric.framework in Frameworks */,
 				F72382C32295856A005B8A07 /* GoogleToolboxForMac.framework in Frameworks */,
@@ -1678,9 +1679,11 @@
 		F710E80C1EF95C9C00DC2427 /* Intro */ = {
 			isa = PBXGroup;
 			children = (
-				F710E80D1EF95C9C00DC2427 /* CCIntro.h */,
-				F710E80E1EF95C9C00DC2427 /* CCIntro.m */,
 				F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */,
+				379DC948237EF4DD008EC025 /* IntroView.swift */,
+				375CF03C238282B7000F2B53 /* IntroCollectionViewCell.swift */,
+				375CF03D238282B7000F2B53 /* IntroCollectionViewCell.xib */,
+				379DC94A237EF4EB008EC025 /* IntroView.xib */,
 			);
 			path = Intro;
 			sourceTree = "<group>";
@@ -3124,6 +3127,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				F79728D422F96F2E003CACA7 /* NCShareLinkFolderMenuView.xib in Resources */,
+				375CF03F238282B8000F2B53 /* IntroCollectionViewCell.xib in Resources */,
 				F760F78421F21F61006B1A73 /* ColorCollectionViewCell.xib in Resources */,
 				F7362A1F220C853A005101B5 /* LaunchScreen.storyboard in Resources */,
 				F75ADF451DC75FFE008A7347 /* CCLogin.storyboard in Resources */,
@@ -3134,6 +3138,7 @@
 				F7F54CF51E5B14C700E19C62 /* PlayButtonOverlayLarge@2x.png in Resources */,
 				F77D49A91DC238E500CDC568 /* loading.gif in Resources */,
 				F77444F622281649000D5EB0 /* NCGridMediaCell.xib in Resources */,
+				379DC94B237EF4EB008EC025 /* IntroView.xib in Resources */,
 				F78ACD4421903CF20088454D /* NCListCell.xib in Resources */,
 				F78ACD4621903D010088454D /* NCGridCell.xib in Resources */,
 				F7F54CF91E5B14C700E19C62 /* PlayButtonOverlayLargeTap@3x.png in Resources */,
@@ -3293,8 +3298,6 @@
 				"$(SRCROOT)/Carthage/Build/iOS/UICKeyChainStore.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/MGSwipeTableCell.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/DZNEmptyDataSet.framework",
-				"$(SRCROOT)/Carthage/Build/iOS/EAIntroView.framework",
-				"$(SRCROOT)/Carthage/Build/iOS/EARestrictedScrollView.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/JDStatusBarNotification.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/KTVHTTPCache.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/KTVCocoaHTTPServer.framework",
@@ -3482,6 +3485,7 @@
 				F73B4F0D1F470D9100BBEE4B /* nsLatin1Prober.cpp in Sources */,
 				F77B0DF51D118A16002130FE /* CCUtility.m in Sources */,
 				F762CB071EACB66200B38484 /* XLFormOptionsObject.m in Sources */,
+				375CF03E238282B8000F2B53 /* IntroCollectionViewCell.swift in Sources */,
 				F7C525A01E3B48B700FFE02C /* CCNotification.swift in Sources */,
 				F7F54D0E1E5B14C800E19C62 /* UIImage+MWPhotoBrowser.m in Sources */,
 				F7F54D091E5B14C800E19C62 /* MWPhoto.m in Sources */,
@@ -3588,7 +3592,6 @@
 				F760F78D21F21F61006B1A73 /* Protocols.swift in Sources */,
 				F762CAFF1EACB66200B38484 /* XLFormPickerCell.m in Sources */,
 				F7A321AD1E9E6AD50069AD1B /* CCAdvanced.m in Sources */,
-				F710E8101EF95C9C00DC2427 /* CCIntro.m in Sources */,
 				F77B0E411D118A16002130FE /* CCSplit.m in Sources */,
 				F73CC0781E813DFF006E3047 /* BKShiftingView.m in Sources */,
 				F7A3218C1E9E42B30069AD1B /* CCMenuAccount.m in Sources */,
@@ -3690,6 +3693,7 @@
 				F7E0E1DC22327885006B0911 /* NCAudioRecorderViewController.swift in Sources */,
 				F70CAE3A1F8CF31A008125FD /* NCEndToEndEncryption.m in Sources */,
 				F7AE00F5230D5F9E007ACF8A /* NCLoginWeb.swift in Sources */,
+				379DC949237EF4DD008EC025 /* IntroView.swift in Sources */,
 				F73B4F0C1F470D9100BBEE4B /* nsHebrewProber.cpp in Sources */,
 				F762CAFB1EACB66200B38484 /* XLFormDatePickerCell.m in Sources */,
 				F762CB0F1EACB66200B38484 /* NSObject+XLFormAdditions.m in Sources */,

+ 0 - 47
iOSClient/Brand/Intro/CCIntro.h

@@ -1,47 +0,0 @@
-//
-//  CCIntro.h
-//  Nextcloud
-//
-//  Created by Marino Faggiana on 05/11/15.
-//  Copyright (c) 2017 Marino Faggiana. All rights reserved.
-//
-//  Author Marino Faggiana <marino.faggiana@nextcloud.com>
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#import <UIKit/UIKit.h>
-#import <EAIntroView/EAIntroView.h>
-
-#import "CCUtility.h"
-
-@protocol CCIntroDelegate;
-
-@interface CCIntro : UIView <EAIntroDelegate>
-
-- (id)initWithDelegate:(id <CCIntroDelegate>)delegate delegateView:(UIView *)delegateView;
-
-@property (nonatomic, strong) EAIntroView *intro;
-@property (nonatomic, weak) id <CCIntroDelegate> delegate;
-@property (nonatomic, strong) UIView *rootView;
-
-- (void)show;
-
-@end
-
-@protocol CCIntroDelegate <NSObject>
-
-- (void)introFinishSelector:(NSInteger)selector;
-
-@end

+ 0 - 265
iOSClient/Brand/Intro/CCIntro.m

@@ -1,265 +0,0 @@
-//
-//  CCIntro.m
-//  Nextcloud
-//
-//  Created by Marino Faggiana on 05/11/15.
-//  Copyright (c) 2017 Marino Faggiana. All rights reserved.
-//
-//  Author Marino Faggiana <marino.faggiana@nextcloud.com>
-//
-//  This program is free software: you can redistribute it and/or modify
-//  it under the terms of the GNU General Public License as published by
-//  the Free Software Foundation, either version 3 of the License, or
-//  (at your option) any later version.
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU General Public License
-//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-
-#import "CCIntro.h"
-#import "AppDelegate.h"
-#import "NCBridgeSwift.h"
-
-@class NCBrowserWeb;
-
-@interface CCIntro ()
-{
-    int titlePositionY;
-    int titleIconPositionY;
-    int buttonPosition;
-    int safeAreaBottom;
-    
-    int selector;
-}
-@end
-
-@implementation CCIntro
-
-- (id)initWithDelegate:(id <CCIntroDelegate>)delegate delegateView:(UIView *)delegateView
-{
-    self = [super init];
-    
-    if (self) {
-        self.delegate = delegate;
-        self.rootView = delegateView;
-    }
-
-    return self;
-}
-
-- (UIStatusBarStyle)preferredStatusBarStyle
-{
-    return UIStatusBarStyleLightContent;
-}
-
-- (void)introWillFinish:(EAIntroView *)introView wasSkipped:(BOOL)wasSkipped
-{
-    [self.delegate introFinishSelector:selector];
-}
-
-- (void)introDidFinish:(EAIntroView *)introView wasSkipped:(BOOL)wasSkipped
-{
-}
-
-- (void)show
-{
-    [self showIntro];
-}
-
-- (void)showIntro
-{
-    //NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
-    CGFloat height = self.rootView.bounds.size.height;
-    CGFloat width = self.rootView.bounds.size.width;
-    
-    if (height <= 568) { // iPhone 5
-        titleIconPositionY = 20;
-        titlePositionY = height / 2 + 40.0;
-        buttonPosition = height / 2 + 70.0;
-    } else {
-        titleIconPositionY = 40;
-        titlePositionY = height / 2 + 40.0;
-        buttonPosition = height / 2 + 120.0;
-    }
-    
-    // SafeArea
-    if (@available(iOS 11, *)) {
-        UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
-        if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
-            safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.right;
-        } else {
-            safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom;
-        }
-    }
-    
-    // Button
-    
-    UIView *buttonView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.rootView.bounds.size.width, height - buttonPosition)];
-    buttonView.userInteractionEnabled = YES ;
-    
-    UIButton *buttonLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect];
-    buttonLogin.frame = CGRectMake(50.0, 0.0, width - 100.0, 40.0);
-    buttonLogin.layer.cornerRadius = 20;
-    buttonLogin.clipsToBounds = YES;
-    [buttonLogin setTitle:NSLocalizedString(@"_log_in_", nil) forState:UIControlStateNormal];
-    buttonLogin.titleLabel.font = [UIFont systemFontOfSize:14];
-    [buttonLogin setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
-    buttonLogin.backgroundColor = NCBrandColor.sharedInstance.customerText;
-    [buttonLogin addTarget:self action:@selector(login:) forControlEvents:UIControlEventTouchDown];
-    
-    [buttonView addSubview:buttonLogin];
-    
-    UIButton *buttonSignUp = [UIButton buttonWithType:UIButtonTypeRoundedRect];
-    buttonSignUp.frame = CGRectMake(50.0, 60.0, width - 100.0, 40.0);
-    buttonSignUp.layer.cornerRadius = 20;
-    buttonSignUp.clipsToBounds = YES;
-    [buttonSignUp setTitle:NSLocalizedString(@"_sign_up_", nil) forState:UIControlStateNormal];
-    buttonSignUp.titleLabel.font = [UIFont systemFontOfSize:14];
-    [buttonSignUp setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
-    buttonSignUp.backgroundColor = [UIColor colorWithRed:25.0/255.0 green:89.0/255.0 blue:141.0/255.0 alpha:1.000];
-    [buttonSignUp addTarget:self action:@selector(signUp:) forControlEvents:UIControlEventTouchDown];
-        
-    [buttonView addSubview:buttonSignUp];
-    
-    UIButton *buttonHost = [UIButton buttonWithType:UIButtonTypeRoundedRect];
-    buttonHost.frame = CGRectMake(50.0, height - buttonPosition - 30.0 - safeAreaBottom, width - 100.0, 20.0);
-    buttonHost.layer.cornerRadius = 20;
-    buttonHost.clipsToBounds = YES;
-    [buttonHost setTitle:NSLocalizedString(@"_host_your_own_server", nil) forState:UIControlStateNormal];
-    buttonHost.titleLabel.font = [UIFont systemFontOfSize:14];
-    [buttonHost setTitleColor:[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:0.7] forState:UIControlStateNormal];
-    buttonHost.backgroundColor = [UIColor clearColor];
-    [buttonHost addTarget:self action:@selector(host:) forControlEvents:UIControlEventTouchDown];
-    
-    [buttonView addSubview:buttonHost];
-    
-    // Pages
-    
-    /*
-    EAIntroPage *page1 = [EAIntroPage pageWithCustomViewFromNibNamed:@"NCIntroPage1"];
-    page1.customView.backgroundColor = [NCBrandColor.sharedInstance customer];
-    UILabel *titlePage1 = (UILabel *)[page1.customView viewWithTag:1];
-    titlePage1.text = NSLocalizedString(@"_intro_1_title_", nil);
-    */
-    
-    EAIntroPage *page1 = [EAIntroPage page];
-
-    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"intro1"]];
-    page1.titleIconPositionY = titleIconPositionY;
-
-    page1.title = NSLocalizedString(@"_intro_1_title_", nil);
-    page1.titlePositionY = titlePositionY;
-    page1.titleColor = NCBrandColor.sharedInstance.customerText;
-    page1.titleFont = [UIFont systemFontOfSize:23];
-
-    page1.bgColor = NCBrandColor.sharedInstance.customer;
-    page1.showTitleView = YES;
-
-    EAIntroPage *page2 = [EAIntroPage page];
-
-    page2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"intro2"]];
-    page2.titleIconPositionY = titleIconPositionY;
-
-    page2.title = NSLocalizedString(@"_intro_2_title_", nil);
-    page2.titlePositionY = titlePositionY;
-    page2.titleColor = NCBrandColor.sharedInstance.customerText;
-    page2.titleFont = [UIFont systemFontOfSize:23];
-    
-    page2.bgColor = NCBrandColor.sharedInstance.customer;
-    page2.showTitleView = YES;
-
-    EAIntroPage *page3 = [EAIntroPage page];
-    
-    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"intro3"]];
-    page3.titleIconPositionY = titleIconPositionY;
-
-    page3.title = NSLocalizedString(@"_intro_3_title_", nil);
-    page3.titlePositionY = titlePositionY;
-    page3.titleColor = NCBrandColor.sharedInstance.customerText;
-    page3.titleFont = [UIFont systemFontOfSize:23];
-    
-    page3.bgColor = NCBrandColor.sharedInstance.customer;
-    page3.showTitleView = YES;
-
-    EAIntroPage *page4 = [EAIntroPage page];
-    
-    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"intro4"]];
-    page4.titleIconPositionY = titleIconPositionY;
-    
-    page4.title = NSLocalizedString(@"_intro_4_title_", nil);
-    page4.titlePositionY = titlePositionY;
-    page4.titleColor = NCBrandColor.sharedInstance.customerText;
-    page4.titleFont = [UIFont systemFontOfSize:23];
-    
-    page4.bgColor = NCBrandColor.sharedInstance.customer;
-    page4.showTitleView = YES;
-    
-    // INTRO
-    
-    self.intro = [[EAIntroView alloc] initWithFrame:self.rootView.bounds andPages:@[page1,page2,page3,page4]];
-
-    self.intro.tapToNext = NO;
-    self.intro.pageControlY = height - buttonPosition + 50;
-    self.intro.pageControl.pageIndicatorTintColor = NCBrandColor.sharedInstance.nextcloudSoft;
-    self.intro.pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
-    self.intro.pageControl.backgroundColor = NCBrandColor.sharedInstance.customer;
-//    [intro.skipButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
-//    intro.skipButton.enabled = NO;
-    self.intro.swipeToExit = NO ;
-    self.intro.skipButton = nil ;
-    self.intro.titleView = buttonView;
-    self.intro.titleViewY = buttonPosition;
-    self.intro.swipeToExit = NO;
-    
-    /*
-    page1.onPageDidAppear = ^{
-        intro.skipButton.enabled = YES;
-        [UIView animateWithDuration:0.3f animations:^{
-            intro.skipButton.alpha = 1.f;
-        }];
-    };
-    page2.onPageDidDisappear = ^{
-        intro.skipButton.enabled = NO;
-        [UIView animateWithDuration:0.3f animations:^{
-            intro.skipButton.alpha = 0.f;
-        }];
-    };
-    */
-    
-    [self.intro setDelegate:self];
-    [self.intro showInView:self.rootView animateDuration:0];
-}
-
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== Action =====
-#pragma --------------------------------------------------------------------------------------------
-
-- (void)login:(id)sender
-{
-    selector = k_intro_login;
-    [self.intro hideWithFadeOutDuration:0.7];
-}
-
-- (void)signUp:(id)sender
-{
-    selector = k_intro_signup;
-    [self.intro hideWithFadeOutDuration:0.7];
-}
-
-- (void)host:(id)sender
-{
-    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
-
-    NCBrowserWeb *browserWebVC = [[UIStoryboard storyboardWithName:@"NCBrowserWeb" bundle:nil] instantiateInitialViewController];
-    
-    browserWebVC.urlBase = [NCBrandOptions sharedInstance].linkLoginHost;
-    
-    [appDelegate.window.rootViewController presentViewController:browserWebVC animated:YES completion:nil];
-}
-
-@end

+ 20 - 0
iOSClient/Brand/Intro/IntroCollectionViewCell.swift

@@ -0,0 +1,20 @@
+//
+//  IntroCollectionViewCell.swift
+//  Nextcloud
+//
+//  Created by Philippe Weidmann on 18.11.19.
+//  Copyright © 2019 TWS. All rights reserved.
+//
+
+import UIKit
+
+class IntroCollectionViewCell: UICollectionViewCell {
+
+    @IBOutlet weak var titleLabel: UILabel!
+    @IBOutlet weak var imageView: UIImageView!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+    }
+
+}

+ 60 - 0
iOSClient/Brand/Intro/IntroCollectionViewCell.xib

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <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"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="introCell" id="gTV-IL-0wX" customClass="IntroCollectionViewCell" customModule="Nextcloud" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="337" height="462"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="337" height="462"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bZc-Ai-h3y">
+                        <rect key="frame" x="8" y="426" width="321" height="28"/>
+                        <constraints>
+                            <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="28" id="bXT-nO-EeQ"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="23"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" image="intro1" translatesAutoresizingMaskIntoConstraints="NO" id="f3T-nC-cwA">
+                        <rect key="frame" x="93.5" y="8" width="150" height="410"/>
+                        <constraints>
+                            <constraint firstAttribute="width" relation="lessThanOrEqual" constant="150" id="jne-Xj-IAh"/>
+                        </constraints>
+                    </imageView>
+                </subviews>
+            </view>
+            <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="f3T-nC-cwA" firstAttribute="centerX" secondItem="gTV-IL-0wX" secondAttribute="centerX" id="4le-ih-K34"/>
+                <constraint firstItem="bZc-Ai-h3y" firstAttribute="top" secondItem="f3T-nC-cwA" secondAttribute="bottom" constant="8" id="AWt-Zg-Blt"/>
+                <constraint firstItem="f3T-nC-cwA" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="8" id="Eh0-Bq-FKp"/>
+                <constraint firstAttribute="bottom" secondItem="bZc-Ai-h3y" secondAttribute="bottom" constant="8" id="YBJ-eg-EmZ"/>
+                <constraint firstItem="bZc-Ai-h3y" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="8" id="eNj-fx-een"/>
+                <constraint firstAttribute="trailing" secondItem="bZc-Ai-h3y" secondAttribute="trailing" constant="8" id="uif-cW-sAI"/>
+            </constraints>
+            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
+            <size key="customSize" width="337" height="428"/>
+            <connections>
+                <outlet property="imageView" destination="f3T-nC-cwA" id="aRR-4x-Dwk"/>
+                <outlet property="titleLabel" destination="bZc-Ai-h3y" id="WAd-FO-VtY"/>
+            </connections>
+            <point key="canvasLocation" x="339.85507246376812" y="223.66071428571428"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <image name="intro1" width="200" height="200"/>
+    </resources>
+</document>

+ 124 - 0
iOSClient/Brand/Intro/IntroView.swift

@@ -0,0 +1,124 @@
+//
+//  IntroView.swift
+//  Nextcloud
+//
+//  Created by Philippe Weidmann on 15.11.19.
+//  Copyright © 2019 TWS. All rights reserved.
+//
+
+import UIKit
+
+class IntroView: UIView, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
+
+    @IBOutlet weak var backgroundView: UIView!
+    @IBOutlet weak var buttonLogin: UIButton!
+    @IBOutlet weak var buttonSignUp: UIButton!
+    @IBOutlet weak var buttonHost: UIButton!
+    @IBOutlet weak var introCollectionView: UICollectionView!
+    @IBOutlet weak var pageControl: UIPageControl!
+    
+    @objc var delegate: CCSplit?
+    private let titles = [NSLocalizedString("_intro_1_title_", comment: ""), NSLocalizedString("_intro_2_title_", comment: ""), NSLocalizedString("_intro_3_title_", comment: ""), NSLocalizedString("_intro_4_title_", comment: "")]
+    private let images = [UIImage(named: "intro1"), UIImage(named: "intro2"), UIImage(named: "intro3"), UIImage(named: "intro4")]
+    private var timerAutoScroll: Timer?
+
+    @objc func autoScroll() {
+        if(pageControl.currentPage + 1 >= titles.count) {
+            pageControl.currentPage = 0
+        }
+        else {
+            pageControl.currentPage += 1
+        }
+        introCollectionView.scrollToItem(at: IndexPath(row: pageControl.currentPage, section: 0), at: .centeredHorizontally, animated: true)
+    }
+
+    override func layoutSubviews() {
+        pageControl.currentPage = 0
+        introCollectionView.collectionViewLayout.invalidateLayout()
+    }
+
+    func collectionView(_ collectionView: UICollectionView, targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint {
+        return CGPoint.zero
+    }
+
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return titles.count
+    }
+
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "introCell", for: indexPath) as! IntroCollectionViewCell
+        cell.backgroundColor = NCBrandColor.sharedInstance.customer
+
+        cell.titleLabel.textColor = NCBrandColor.sharedInstance.customerText
+        cell.titleLabel.text = titles[indexPath.row]
+        cell.imageView.image = images[indexPath.row]
+        return cell
+    }
+
+    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
+        return collectionView.bounds.size
+    }
+
+    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+        timerAutoScroll = Timer.scheduledTimer(timeInterval: 5, target: self, selector: (#selector(IntroView.autoScroll)), userInfo: nil, repeats: true)
+        pageControl.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width)
+    }
+    
+    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
+        timerAutoScroll?.invalidate()
+    }
+
+    override func removeFromSuperview() {
+        super.removeFromSuperview()
+        timerAutoScroll?.invalidate()
+    }
+
+    @objc class func instanceFromNib() -> IntroView {
+        let view = UINib(nibName: "IntroView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! IntroView
+
+        view.buttonLogin.layer.cornerRadius = 20
+        view.buttonLogin.setTitleColor(.black, for: .normal)
+        view.buttonLogin.backgroundColor = NCBrandColor.sharedInstance.customerText
+        view.buttonLogin.setTitle(NSLocalizedString("_log_in_", comment: ""), for: .normal)
+
+        view.buttonSignUp.layer.cornerRadius = 20
+        view.buttonSignUp.setTitleColor(.white, for: .normal)
+        view.buttonSignUp.backgroundColor = UIColor(red: 25.0 / 255.0, green: 89.0 / 255.0, blue: 141.0 / 255.0, alpha: 1)
+        view.buttonSignUp.setTitle(NSLocalizedString("_sign_up_", comment: ""), for: .normal)
+
+        view.buttonHost.layer.cornerRadius = 20
+        view.buttonHost.setTitle(NSLocalizedString("_host_your_own_server", comment: ""), for: .normal)
+        view.buttonHost.setTitleColor(UIColor(red: 1, green: 1, blue: 1, alpha: 0.7), for: .normal)
+
+        view.introCollectionView.register(UINib(nibName: "IntroCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "introCell")
+        view.introCollectionView.dataSource = view
+        view.introCollectionView.delegate = view
+        view.introCollectionView.backgroundColor = NCBrandColor.sharedInstance.customer
+        view.pageControl.numberOfPages = view.titles.count
+        view.backgroundView.backgroundColor = NCBrandColor.sharedInstance.customer
+        view.timerAutoScroll = Timer.scheduledTimer(timeInterval: 5, target: view, selector: (#selector(IntroView.autoScroll)), userInfo: nil, repeats: true)
+
+        return view
+    }
+    
+    @IBAction func login(_ sender: Any) {
+        delegate?.introFinishSelector(0)
+    }
+    
+    @IBAction func signup(_ sender: Any) {
+        delegate?.introFinishSelector(1)
+    }
+    
+    @IBAction func host(_ sender: Any) {
+        let appDelegate = UIApplication.shared.delegate as? AppDelegate
+        
+        let browserWebVC = UIStoryboard(name: "NCBrowserWeb", bundle: nil).instantiateInitialViewController() as? NCBrowserWeb
+        
+        browserWebVC?.urlBase = NCBrandOptions.sharedInstance.linkLoginHost
+        
+        if let browserWebVC = browserWebVC {
+            appDelegate?.window.rootViewController?.present(browserWebVC, animated: true)
+        }
+    }
+
+}

+ 118 - 0
iOSClient/Brand/Intro/IntroView.xib

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina5_9" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <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" customClass="IntroView" customModule="Nextcloud" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eXx-EZ-qlO">
+                    <rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
+                    <subviews>
+                        <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="twJ-n3-mgv">
+                            <rect key="frame" x="52.666666666666657" y="501" width="270" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="270" id="fg7-vj-OWg"/>
+                                <constraint firstAttribute="height" constant="40" id="nuu-SU-mRi"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <state key="normal" title="Login"/>
+                            <connections>
+                                <action selector="login:" destination="iN0-l3-epB" eventType="touchUpInside" id="neB-f8-gWJ"/>
+                            </connections>
+                        </button>
+                        <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FfA-1J-1vc">
+                            <rect key="frame" x="52.666666666666657" y="557" width="270" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="270" id="XMy-Bo-AbU"/>
+                                <constraint firstAttribute="height" constant="40" id="pbU-Yz-Qz5"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <state key="normal" title="Signup"/>
+                            <connections>
+                                <action selector="signup:" destination="iN0-l3-epB" eventType="touchUpInside" id="hQK-vz-uRg"/>
+                            </connections>
+                        </button>
+                        <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="NgB-S6-3Cp">
+                            <rect key="frame" x="8" y="60" width="359" height="359"/>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstAttribute="width" secondItem="NgB-S6-3Cp" secondAttribute="height" multiplier="1:1" priority="750" id="2Vf-FT-E9n"/>
+                            </constraints>
+                            <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="Yfp-WG-gMy">
+                                <size key="itemSize" width="0.0" height="0.0"/>
+                                <size key="headerReferenceSize" width="0.0" height="0.0"/>
+                                <size key="footerReferenceSize" width="0.0" height="0.0"/>
+                                <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
+                            </collectionViewFlowLayout>
+                        </collectionView>
+                        <pageControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="Zxj-8i-ZOp">
+                            <rect key="frame" x="168" y="427" width="39" height="10"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="10" id="raN-SI-1Y0"/>
+                            </constraints>
+                        </pageControl>
+                        <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Om8-k2-tHk">
+                            <rect key="frame" x="52.666666666666657" y="740" width="270" height="30"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="30" id="GNx-pk-SxY"/>
+                                <constraint firstAttribute="width" constant="270" id="edq-KT-xx7"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <state key="normal" title="Host"/>
+                            <connections>
+                                <action selector="host:" destination="iN0-l3-epB" eventType="touchUpInside" id="g4o-hg-ifv"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="twJ-n3-mgv" firstAttribute="top" secondItem="Zxj-8i-ZOp" secondAttribute="bottom" priority="250" constant="64" id="21a-6U-WrX"/>
+                        <constraint firstItem="twJ-n3-mgv" firstAttribute="centerX" secondItem="eXx-EZ-qlO" secondAttribute="centerX" id="664-10-bMf"/>
+                        <constraint firstItem="NgB-S6-3Cp" firstAttribute="leading" secondItem="eXx-EZ-qlO" secondAttribute="leading" constant="8" id="AUg-aI-b8x"/>
+                        <constraint firstItem="twJ-n3-mgv" firstAttribute="top" relation="greaterThanOrEqual" secondItem="Zxj-8i-ZOp" secondAttribute="bottom" constant="8" id="CiK-vp-QWa"/>
+                        <constraint firstItem="Om8-k2-tHk" firstAttribute="bottom" secondItem="eXx-EZ-qlO" secondAttribute="bottomMargin" id="MI4-7x-BGg"/>
+                        <constraint firstItem="FfA-1J-1vc" firstAttribute="centerX" secondItem="eXx-EZ-qlO" secondAttribute="centerX" id="MV1-pv-egh"/>
+                        <constraint firstItem="Zxj-8i-ZOp" firstAttribute="centerX" secondItem="eXx-EZ-qlO" secondAttribute="centerX" id="Ps1-ur-W19"/>
+                        <constraint firstItem="NgB-S6-3Cp" firstAttribute="top" secondItem="eXx-EZ-qlO" secondAttribute="top" constant="60" id="Qvd-7E-KJI">
+                            <variation key="heightClass=compact" constant="8"/>
+                        </constraint>
+                        <constraint firstItem="Zxj-8i-ZOp" firstAttribute="top" secondItem="NgB-S6-3Cp" secondAttribute="bottom" constant="8" id="Ryu-kt-AaI"/>
+                        <constraint firstItem="Om8-k2-tHk" firstAttribute="centerX" secondItem="eXx-EZ-qlO" secondAttribute="centerX" id="Trv-Pp-F65"/>
+                        <constraint firstItem="NgB-S6-3Cp" firstAttribute="centerX" secondItem="eXx-EZ-qlO" secondAttribute="centerX" id="gUz-Nd-Ogo"/>
+                        <constraint firstItem="FfA-1J-1vc" firstAttribute="top" secondItem="twJ-n3-mgv" secondAttribute="bottom" constant="16" id="lwW-jL-d54"/>
+                        <constraint firstItem="Om8-k2-tHk" firstAttribute="top" relation="greaterThanOrEqual" secondItem="FfA-1J-1vc" secondAttribute="bottom" constant="8" id="qhI-hY-G2p"/>
+                        <constraint firstAttribute="trailing" secondItem="NgB-S6-3Cp" secondAttribute="trailing" constant="8" id="ruS-K1-w3R"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="eXx-EZ-qlO" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="IDH-xX-Qnw"/>
+                <constraint firstItem="eXx-EZ-qlO" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Z86-yt-xah"/>
+                <constraint firstItem="eXx-EZ-qlO" firstAttribute="trailing" secondItem="iN0-l3-epB" secondAttribute="trailing" id="aA6-fr-CsP"/>
+                <constraint firstAttribute="bottom" secondItem="eXx-EZ-qlO" secondAttribute="bottom" id="gvf-hq-bop"/>
+            </constraints>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <connections>
+                <outlet property="backgroundView" destination="eXx-EZ-qlO" id="IFL-aL-yiu"/>
+                <outlet property="buttonHost" destination="Om8-k2-tHk" id="Cg2-s2-qFe"/>
+                <outlet property="buttonLogin" destination="twJ-n3-mgv" id="SH1-qa-92p"/>
+                <outlet property="buttonSignUp" destination="FfA-1J-1vc" id="nfS-MO-U6Z"/>
+                <outlet property="introCollectionView" destination="NgB-S6-3Cp" id="x8f-W0-LmU"/>
+                <outlet property="pageControl" destination="Zxj-8i-ZOp" id="D4w-Yb-Rm3"/>
+            </connections>
+            <point key="canvasLocation" x="34.782608695652179" y="34.821428571428569"/>
+        </view>
+    </objects>
+</document>

+ 2 - 3
iOSClient/Main/CCSplit.h

@@ -25,13 +25,12 @@
 
 #import "CCLogin.h"
 #import "CCDetail.h"
-#import "CCIntro.h"
 
-@interface CCSplit : UISplitViewController <UISplitViewControllerDelegate, CCIntroDelegate>
+@interface CCSplit : UISplitViewController <UISplitViewControllerDelegate>
 
 @property (nonatomic, strong) NSString *version;
 @property (nonatomic, strong) NSString *build;
 
-@property (nonatomic, strong) CCIntro *intro;
+- (void)introFinishSelector:(NSInteger)selector;
 
 @end

+ 4 - 4
iOSClient/Main/CCSplit.m

@@ -136,10 +136,10 @@
     } else {
     
         if ([CCUtility getIntro] == NO) {
-        
-            _intro = [[CCIntro alloc] initWithDelegate:self delegateView:self.view];
-            [_intro show];
-        
+            IntroView *intro = [IntroView instanceFromNib];
+            intro.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
+            intro.delegate = self;
+            [self.view addSubview:intro];
         } else {
             
             if (appDelegate.activeAccount.length == 0) {

+ 1 - 0
iOSClient/Nextcloud-Bridging-Header.h

@@ -27,3 +27,4 @@
 #import "NCRichDocumentTemplate.h"
 #import "HCFeatures.h"
 #import "NCComments.h"
+#import "CCSplit.h"