marinofaggiana 5 жил өмнө
parent
commit
6ba862e2ba
100 өөрчлөгдсөн 420 нэмэгдсэн , 3053 устгасан
  1. 2 2
      Cartfile
  2. 4 3
      Cartfile.resolved
  3. 0 20
      Carthage/Checkouts/JDStatusBarNotification/.gitignore
  4. 0 101
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Contents.json
  5. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon60x60@2x.png
  6. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon76x76.png
  7. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon76x76@2x.png
  8. 0 52
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/Contents.json
  9. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/default6+.png
  10. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/default6.png
  11. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/defaultRetina4.png
  12. BIN
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/x.png
  13. 0 44
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/JDStatusBarNotificationExample-Info.plist
  14. 0 16
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/JDStatusBarNotificationExample-Prefix.pch
  15. 0 15
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBAppDelegate.h
  16. 0 26
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBAppDelegate.m
  17. 0 39
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.h
  18. 0 321
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.m
  19. 0 281
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.xib
  20. 0 13
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBExampleViewController.h
  21. 0 235
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBExampleViewController.m
  22. 0 20
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBSelectPropertyViewController.h
  23. 0 70
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBSelectPropertyViewController.m
  24. 0 18
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/main.m
  25. 0 9
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/Podfile
  26. 0 20
      Carthage/Checkouts/JDStatusBarNotification/ExampleProject/Podfile.lock
  27. 0 20
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification.podspec
  28. 0 10
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.h
  29. 0 19
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m
  30. 0 178
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.h
  31. 0 643
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m
  32. 0 106
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h
  33. 0 108
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.m
  34. 0 21
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarView.h
  35. 0 111
      Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarView.m
  36. 0 25
      Carthage/Checkouts/JDStatusBarNotification/LICENSE
  37. 0 24
      Carthage/Checkouts/JDStatusBarNotification/Miscellaneous/Info.plist
  38. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/activity.gif
  39. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/animation.gif
  40. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/iphoneX.png
  41. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/progress.gif
  42. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/screenshots.png
  43. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/styles.png
  44. BIN
      Carthage/Checkouts/JDStatusBarNotification/gfx/tweetbutton.png
  45. 6 3
      File Provider Extension/FileProviderData.swift
  46. 1 1
      File Provider Extension/FileProviderEnumerator.swift
  47. 2 2
      File Provider Extension/FileProviderExtension+Actions.swift
  48. 101 110
      Nextcloud.xcodeproj/project.pbxproj
  49. 2 1
      Share/CCCellShareExt.h
  50. 0 14
      Share/CCCellShareExt.m
  51. 31 20
      Share/CCCellShareExt.xib
  52. 45 28
      Share/CCloadItemData.swift
  53. 10 13
      Share/MainInterface.storyboard
  54. 1 2
      Share/NCSelectDestination.h
  55. 2 42
      Share/NCSelectDestination.m
  56. 1 1
      Share/ShareViewController.h
  57. 65 20
      Share/ShareViewController.m
  58. 9 14
      iOSClient/Activity/NCActivity.swift
  59. 3 4
      iOSClient/AppDelegate.h
  60. 106 179
      iOSClient/AppDelegate.m
  61. 4 4
      iOSClient/AutoUpload/NCAutoUpload.m
  62. 25 25
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Contents.json
  63. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
  64. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
  65. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
  66. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
  67. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
  68. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
  69. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
  70. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
  71. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
  72. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
  73. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
  74. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
  75. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
  76. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
  77. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
  78. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
  79. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
  80. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
  81. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png
  82. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png
  83. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
  84. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon100@2x.png
  85. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon1024@1x.png
  86. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon114@2x.png
  87. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon120@2x.png
  88. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon120@3x.png
  89. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon144@2x.png
  90. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon152@2x.png
  91. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon167@2x.png
  92. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon180@3x.png
  93. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon20@1x.png
  94. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon29@1x-1.png
  95. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon29@1x.png
  96. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@1x-1.png
  97. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@1x.png
  98. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@2x.png
  99. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon50@1x.png
  100. BIN
      iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon57@1x.png

+ 2 - 2
Cartfile

@@ -1,10 +1,9 @@
-github "nextcloud/ios-communication-library" "v0.3"
+github "nextcloud/ios-communication-library" "develop"
 github "tilltue/TLPhotoPicker" "2.0.7"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "danielsaidi/Sheeeeeeeeet" "3.0.9"
 github "MortimerGoro/MGSwipeTableCell" "1.6.8"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
-github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "ChangbaDevs/KTVHTTPCache" "2.0.1"
 github "jdg/MBProgressHUD" "1.1.0"
 github "realm/realm-cocoa" "v4.1.1"
@@ -17,6 +16,7 @@ github "rechsteiner/Parchment" "v1.7.0"
 github "WenchaoD/FSCalendar" "2.8.0"
 github "AssistoLab/DropDown" "v2.3.13"
 github "krzyzanowskim/OpenSSL" "1.0.218"
+github "huri000/SwiftEntryKit" "1.2.3"
 
 github "https://github.com/marinofaggiana/FastScroll" "master"
 github "https://github.com/marinofaggiana/AFNetworking" "master"

+ 4 - 3
Cartfile.resolved

@@ -7,16 +7,17 @@ github "SVGKit/SVGKit" "8560ef56bd61e34d5cd8d9739954f9765e3ac794"
 github "SwiftyJSON/SwiftyJSON" "5.0.0"
 github "WeTransfer/WeScan" "1.2.0"
 github "WenchaoD/FSCalendar" "2.8.0"
-github "calimarkus/JDStatusBarNotification" "1.6.0"
 github "danielsaidi/Sheeeeeeeeet" "3.0.9"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
+github "huri000/QuickLayout" "3.0.0"
+github "huri000/SwiftEntryKit" "1.2.3"
 github "jdg/MBProgressHUD" "1.1.0"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "krzyzanowskim/OpenSSL" "1.0.218"
-github "malcommac/SwiftRichString" "3.0.4"
+github "malcommac/SwiftRichString" "3.6.0"
 github "marinofaggiana/AFNetworking" "2967678c3e0e98c9b8d7e06222ad12d1f49c26f2"
 github "marinofaggiana/FastScroll" "81967c2309d29bc2c330d422da612160a30bade8"
-github "nextcloud/ios-communication-library" "v0.3"
+github "nextcloud/ios-communication-library" "da0bdaee5e3b6b3a8ab0ed64dee83fe082a56cef"
 github "realm/realm-cocoa" "v4.1.1"
 github "rechsteiner/Parchment" "v1.7.0"
 github "tilltue/TLPhotoPicker" "2.0.7"

+ 0 - 20
Carthage/Checkouts/JDStatusBarNotification/.gitignore

@@ -1,20 +0,0 @@
-# Xcode
-.DS_Store
-build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-*.xcworkspace
-!default.xcworkspace
-xcuserdata
-xcuserdatad
-profile
-*.moved-aside
-DerivedData
-.xcconfig
-ExampleProject/Pods/

+ 0 - 101
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -1,101 +0,0 @@
-{
-  "images" : [
-    {
-      "idiom" : "iphone",
-      "size" : "20x20",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "20x20",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "29x29",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "29x29",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "40x40",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "40x40",
-      "scale" : "3x"
-    },
-    {
-      "size" : "60x60",
-      "idiom" : "iphone",
-      "filename" : "Icon60x60@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "iphone",
-      "size" : "60x60",
-      "scale" : "3x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "20x20",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "20x20",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "29x29",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "29x29",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "40x40",
-      "scale" : "1x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "40x40",
-      "scale" : "2x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon76x76.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "Icon76x76@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "ipad",
-      "size" : "83.5x83.5",
-      "scale" : "2x"
-    },
-    {
-      "idiom" : "ios-marketing",
-      "size" : "1024x1024",
-      "scale" : "1x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon60x60@2x.png


BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon76x76.png


BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/AppIcon.appiconset/Icon76x76@2x.png


+ 0 - 52
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/Contents.json

@@ -1,52 +0,0 @@
-{
-  "images" : [
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "2436h",
-      "filename" : "x.png",
-      "minimum-system-version" : "11.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "736h",
-      "filename" : "default6+.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "667h",
-      "filename" : "default6.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "defaultRetina4.png",
-      "extent" : "full-screen",
-      "minimum-system-version" : "7.0",
-      "scale" : "2x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "retina4",
-      "filename" : "defaultRetina4.png",
-      "minimum-system-version" : "7.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/default6+.png


BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/default6.png


BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/defaultRetina4.png


BIN
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/Images.xcassets/LaunchImage.launchimage/x.png


+ 0 - 44
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/JDStatusBarNotificationExample-Info.plist

@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleDisplayName</key>
-	<string>Notifications</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>UIRequiredDeviceCapabilities</key>
-	<array>
-		<string>armv7</string>
-	</array>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>

+ 0 - 16
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/JDStatusBarNotificationExample-Prefix.pch

@@ -1,16 +0,0 @@
-//
-//  Prefix header
-//
-//  The contents of this file are implicitly included at the beginning of every source file.
-//
-
-#import <Availability.h>
-
-#ifndef __IPHONE_3_0
-#warning "This project uses features only available in iOS SDK 3.0 and later."
-#endif
-
-#ifdef __OBJC__
-    #import <UIKit/UIKit.h>
-    #import <Foundation/Foundation.h>
-#endif

+ 0 - 15
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBAppDelegate.h

@@ -1,15 +0,0 @@
-//
-//  SBAppDelegate.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 29.10.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface SBAppDelegate : UIResponder <UIApplicationDelegate>
-
-@property (strong, nonatomic) UIWindow *window;
-
-@end

+ 0 - 26
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBAppDelegate.m

@@ -1,26 +0,0 @@
-//
-//  SBAppDelegate.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 29.10.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "SBExampleViewController.h"
-
-#import "SBAppDelegate.h"
-
-@implementation SBAppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
-  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
-  self.window.backgroundColor = [UIColor whiteColor];
-  self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:
-                                    [[SBExampleViewController alloc] initWithStyle:UITableViewStyleGrouped]];
-  [self.window makeKeyAndVisible];
-
-  return YES;
-}
-
-@end

+ 0 - 39
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.h

@@ -1,39 +0,0 @@
-//
-//  SBCustomStyleViewController.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 08.11.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface SBCustomStyleViewController : UIViewController
-
-@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
-@property (weak, nonatomic) IBOutlet UIView *bottomBarView;
-@property (weak, nonatomic) IBOutlet UITextField *textField;
-@property (weak, nonatomic) IBOutlet UIButton *fontButton;
-@property (weak, nonatomic) IBOutlet UIView *textColorPreview;
-@property (weak, nonatomic) IBOutlet UIView *barColorPreview;
-@property (weak, nonatomic) IBOutlet UIButton *animationStyleButton;
-@property (weak, nonatomic) IBOutlet UIButton *heightForIPhoneXButton;
-@property (weak, nonatomic) IBOutlet UIView *progressBarColorPreview;
-@property (weak, nonatomic) IBOutlet UIButton *barPositionButton;
-@property (weak, nonatomic) IBOutlet UILabel *barHeightLabel;
-@property (weak, nonatomic) IBOutlet UIView *lastRow;
-
-- (IBAction)selectFont:(id)sender;
-- (IBAction)selectFontSize:(UIStepper*)sender;
-- (IBAction)selectTextColor:(id)sender;
-- (IBAction)selectBarColor:(id)sender;
-- (IBAction)selectAnimationStyle:(id)sender;
-- (IBAction)selectIPhoneXHeight:(id)sender;
-- (IBAction)selectProgressBarColor:(id)sender;
-- (IBAction)selectProgressBarPosition:(id)sender;
-- (IBAction)setProgressBarHeight:(UIStepper*)sender;
-
-- (IBAction)show:(id)sender;
-- (IBAction)showWithProgress:(id)sender;
-
-@end

+ 0 - 321
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.m

@@ -1,321 +0,0 @@
-//
-//  SBCustomStyleViewController.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 08.11.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <QuartzCore/QuartzCore.h>
-#import "JDStatusBarLayoutMarginHelper.h"
-#import "JDStatusBarNotification.h"
-#import "FTFontSelectorController.h"
-#import "SBSelectPropertyViewController.h"
-#import "InfColorPicker.h"
-
-#import "SBCustomStyleViewController.h"
-
-@interface SBCustomStyleViewController () <UITextFieldDelegate, FTFontSelectorControllerDelegate, InfColorPickerControllerDelegate>
-@property (nonatomic, assign) NSInteger colorMode;
-@property (nonatomic, assign) CGFloat progress;
-@property (nonatomic, weak) NSTimer *timer;
-
-@property (nonatomic, assign) JDStatusBarHeightForIPhoneX heightForIPhoneX;
-@property (nonatomic, assign) JDStatusBarAnimationType animationType;
-@property (nonatomic, assign) JDStatusBarProgressBarPosition progressBarPosition;
-@end
-
-@implementation SBCustomStyleViewController
-
-- (void)viewDidLoad;
-{
-    [super viewDidLoad];
-    
-    self.animationType = JDStatusBarAnimationTypeMove;
-    self.heightForIPhoneX = JDStatusBarHeightForIPhoneXFullNavBar;
-    self.progressBarPosition = JDStatusBarProgressBarPositionBottom;
-    
-    self.textColorPreview.backgroundColor = self.fontButton.titleLabel.textColor;
-    self.barColorPreview.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.000];
-    self.progressBarColorPreview.backgroundColor = [UIColor redColor];
-    
-    self.textColorPreview.layer.cornerRadius = round(CGRectGetHeight(self.textColorPreview.frame)/3.0);
-    self.barColorPreview.layer.cornerRadius = self.textColorPreview.layer.cornerRadius;
-    self.progressBarColorPreview.layer.cornerRadius = self.textColorPreview.layer.cornerRadius;
-    
-    [self updateFontText];
-    [self updateStyle];
-
-    [self adjustForLayoutMargin];
-}
-
-- (void)adjustForLayoutMargin
-{
-    // adjust bottom bar to respect layout margins
-    CGFloat bottomLayoutMargin = JDStatusBarRootVCLayoutMargin().bottom;
-
-    CGRect frame = self.bottomBarView.frame;
-    frame.origin.y -= bottomLayoutMargin;
-    frame.size.height += bottomLayoutMargin;
-    self.bottomBarView.frame = frame;
-
-    CGRect scrollViewFrame = self.scrollView.frame;
-    scrollViewFrame.size.height -= bottomLayoutMargin;
-    self.scrollView.frame = scrollViewFrame;
-}
-
-- (void)viewDidLayoutSubviews;
-{
-    [super viewDidLayoutSubviews];
-    
-    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width,
-                                             self.lastRow.frame.origin.y + self.lastRow.frame.size.height + 10.0);
-}
-
-#pragma mark UI Updates
-
-- (void)updateFontText;
-{
-    NSString *title = [NSString stringWithFormat: @"Change font (%.1f pt)",
-                       self.fontButton.titleLabel.font.pointSize];
-    [self.fontButton setTitle:title forState:UIControlStateNormal];
-    self.textColorPreview.backgroundColor = self.fontButton.titleLabel.textColor;
-}
-
-- (void)updateStyle;
-{
-    [JDStatusBarNotification addStyleNamed:@"style" prepare:^JDStatusBarStyle *(JDStatusBarStyle *style) {
-        style.font = self.fontButton.titleLabel.font;
-        style.textColor = self.textColorPreview.backgroundColor;
-        style.barColor = self.barColorPreview.backgroundColor;
-        style.animationType = self.animationType;
-        style.heightForIPhoneX = self.heightForIPhoneX;
-
-        style.progressBarColor = self.progressBarColorPreview.backgroundColor;
-        style.progressBarPosition = self.progressBarPosition;
-
-        NSString *height = [self.barHeightLabel.text stringByReplacingOccurrencesOfString:@"ProgressBarHeight (" withString:@""];
-        height = [height stringByReplacingOccurrencesOfString:@" pt)" withString:@""];
-        style.progressBarHeight = [height doubleValue];
-
-        return style;
-    }];
-}
-
-#pragma mark UITextFieldDelegate
-
-- (BOOL)textFieldShouldReturn:(UITextField *)textField
-{
-    [textField resignFirstResponder];
-    
-    if (textField.text.length == 0) {
-        textField.text = @"Notification Text";
-    }
-    
-    [self show:nil];
-    
-    return YES;
-}
-
-#pragma mark FTFontSelectorControllerDelegate
-
-- (void)fontSelectorControllerShouldBeDismissed:(FTFontSelectorController *)controller;
-{
-    [self dismissViewControllerAnimated:YES completion:nil];
-}
-
-- (void)fontSelectorController:(FTFontSelectorController *)controller didChangeSelectedFontName:(NSString *)fontName;
-{
-    self.fontButton.titleLabel.font = [UIFont fontWithName:fontName size:self.fontButton.titleLabel.font.pointSize];
-    [self updateFontText];
-    [self updateStyle];
-}
-
-#pragma mark InfColorPicker
-
-- (void)showColorPickerWithColor:(UIColor*)color;
-{
-    InfColorPickerController *colorController = [InfColorPickerController colorPickerViewController];
-    colorController.delegate = self;
-    colorController.sourceColor = color;
-    colorController.resultColor = color;
-    [colorController presentModallyOverViewController:self];
-    
-    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
-        UIView *view = colorController.view;
-        colorController.view = [[UIView alloc] initWithFrame:view.frame];
-        colorController.view.backgroundColor = [UIColor blackColor];
-        view.frame = CGRectMake(0, 64, view.bounds.size.width, view.bounds.size.height-64);
-        [colorController.view addSubview:view];
-    }
-}
-
-#pragma mark InfColorPickerControllerDelegate
-
-- (void)colorPickerControllerDidChangeColor:(InfColorPickerController *)controller;
-{
-    switch (self.colorMode) {
-        case 0: {
-            [self.fontButton setTitleColor:controller.resultColor forState:UIControlStateNormal];
-            self.textColorPreview.backgroundColor = controller.resultColor;
-            [self updateFontText];
-            break;
-        }
-        case 1: {
-            self.barColorPreview.backgroundColor = controller.resultColor;
-            break;
-        }
-        case 2: {
-            self.progressBarColorPreview.backgroundColor = controller.resultColor;
-            break;
-        }
-    }
-    
-    [self updateStyle];
-}
-
-- (void)colorPickerControllerDidFinish:(InfColorPickerController *)controller;
-{
-    [self dismissViewControllerAnimated:YES completion:nil];
-}
-
-#pragma mark Actions
-
-- (IBAction)selectFont:(id)sender;
-{
-    FTFontSelectorController *fontController = [[FTFontSelectorController alloc] initWithSelectedFontName:self.fontButton.titleLabel.font.fontName];
-    [fontController setFontDelegate:self];
-    [self presentViewController:fontController
-                       animated:YES completion:nil];
-}
-
-- (IBAction)selectFontSize:(UIStepper*)sender;
-{
-    self.fontButton.titleLabel.font = [UIFont fontWithName:self.fontButton.titleLabel.font.fontName size:sender.value];
-    [self updateFontText];
-    [self updateStyle];
-}
-
-- (IBAction)selectTextColor:(id)sender;
-{
-    self.colorMode = 0;
-    [self showColorPickerWithColor:self.textColorPreview.backgroundColor];
-}
-
-- (IBAction)selectBarColor:(id)sender;
-{
-    self.colorMode = 1;
-    [self showColorPickerWithColor:self.barColorPreview.backgroundColor];
-}
-
-- (IBAction)selectAnimationStyle:(id)sender;
-{
-  NSArray *data = @[@"JDStatusBarAnimationTypeNone",
-                    @"JDStatusBarAnimationTypeMove",
-                    @"JDStatusBarAnimationTypeBounce",
-                    @"JDStatusBarAnimationTypeFade"];
-  SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
-    self.animationType = selectedRow;
-    [self.animationStyleButton setTitle:data[selectedRow] forState:UIControlStateNormal];
-    [self.navigationController popViewControllerAnimated:YES];
-    [self updateStyle];
-  }];
-  controller.title = @"Animation Type";
-  controller.activeRow = self.animationType;
-  [self.navigationController pushViewController:controller animated:YES];
-}
-
-- (IBAction)selectIPhoneXHeight:(id)sender;
-{
-  NSArray *data = @[@"JDStatusBarHeightForIPhoneXHalf",
-                    @"JDStatusBarHeightForIPhoneXFullNavBar"];
-  SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
-    self.heightForIPhoneX = selectedRow;
-    [self.heightForIPhoneXButton setTitle:data[selectedRow] forState:UIControlStateNormal];
-    [self.navigationController popViewControllerAnimated:YES];
-    [self updateStyle];
-  }];
-  controller.title = @"Height for iPhoneX";
-  controller.activeRow = self.heightForIPhoneX;
-  [self.navigationController pushViewController:controller animated:YES];
-}
-
-- (IBAction)selectProgressBarColor:(id)sender;
-{
-    self.colorMode = 2;
-    [self showColorPickerWithColor:self.progressBarColorPreview.backgroundColor];
-}
-
-- (IBAction)selectProgressBarPosition:(id)sender;
-{
-    NSArray *data = @[@"JDStatusBarProgressBarPositionBottom",
-                      @"JDStatusBarProgressBarPositionCenter",
-                      @"JDStatusBarProgressBarPositionTop",
-                      @"JDStatusBarProgressBarPositionBelow",
-                      @"JDStatusBarProgressBarPositionNavBar"];
-    SBSelectPropertyViewController *controller = [[SBSelectPropertyViewController alloc] initWithData:data resultBlock:^(NSInteger selectedRow) {
-        self.progressBarPosition = selectedRow;
-        [self.barPositionButton setTitle:data[selectedRow] forState:UIControlStateNormal];
-        [self.navigationController popViewControllerAnimated:YES];
-        [self updateStyle];
-    }];
-    controller.title = @"Progress Bar Position";
-    controller.activeRow = self.progressBarPosition;
-    [self.navigationController pushViewController:controller animated:YES];
-}
-
-- (IBAction)setProgressBarHeight:(UIStepper*)sender;
-{
-    if (sender.value < 1) sender.value = 0.5;
-    if (sender.value >= 1) sender.value = round(sender.value);
-    
-    self.barHeightLabel.text = [NSString stringWithFormat: @"ProgressBarHeight (%.1f pt)", sender.value];
-    [self updateStyle];
-}
-
-#pragma mark Presentation
-
-- (IBAction)show:(id)sender;
-{
-    [JDStatusBarNotification showWithStatus:self.textField.text dismissAfter:2.0 styleName:@"style"];
-}
-
-- (IBAction)showWithProgress:(id)sender;
-{
-    double delayInSeconds = [JDStatusBarNotification isVisible] ? 0.0 : 0.25;
-    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
-    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
-        self.progress = 0.0;
-        [self startTimer];
-    });
-    
-    [JDStatusBarNotification showWithStatus:self.textField.text dismissAfter:1.3 styleName:@"style"];
-}
-
-#pragma mark Progress Timer
-
-- (void)startTimer;
-{
-    [JDStatusBarNotification showProgress:self.progress];
-    
-    [self.timer invalidate];
-    self.timer = nil;
-    
-    if (self.progress < 1.0) {
-        CGFloat step = 0.02;
-        self.timer = [NSTimer scheduledTimerWithTimeInterval:step target:self
-                                                    selector:@selector(startTimer)
-                                                    userInfo:nil repeats:NO];
-        self.progress += step;
-    } else {
-        [self performSelector:@selector(hideProgress)
-                   withObject:nil afterDelay:0.5];
-    }
-}
-
-- (void)hideProgress;
-{
-    [JDStatusBarNotification showProgress:0.0];
-}
-
-@end

+ 0 - 281
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBCustomStyleViewController.xib

@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" colorMatched="YES">
-    <device id="retina5_9" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SBCustomStyleViewController">
-            <connections>
-                <outlet property="animationStyleButton" destination="DqG-hy-DfL" id="Pid-pq-zJv"/>
-                <outlet property="barColorPreview" destination="eJj-Ph-CWv" id="38S-zx-JgF"/>
-                <outlet property="barHeightLabel" destination="VCm-BG-2Vb" id="oDI-bo-1BD"/>
-                <outlet property="barPositionButton" destination="xtI-RV-WoB" id="fin-9o-Caa"/>
-                <outlet property="bottomBarView" destination="dQj-wo-lGp" id="eze-Kw-0O5"/>
-                <outlet property="fontButton" destination="kor-Fn-M5R" id="dej-s8-rjl"/>
-                <outlet property="heightForIPhoneXButton" destination="fMb-vm-Wz0" id="1G8-bS-ztG"/>
-                <outlet property="lastRow" destination="o8d-dh-GmA" id="Ktt-yb-DrB"/>
-                <outlet property="progressBarColorPreview" destination="LLJ-gT-L1E" id="uEh-0Q-6ZK"/>
-                <outlet property="scrollView" destination="yUa-6Q-US6" id="zC6-WP-Zxe"/>
-                <outlet property="textColorPreview" destination="6TJ-pl-R0h" id="5Jg-BW-edY"/>
-                <outlet property="textField" destination="Xir-AU-sSX" id="Wu6-7C-tvM"/>
-                <outlet property="view" destination="1" id="3"/>
-            </connections>
-        </placeholder>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" misplaced="YES" id="1">
-            <rect key="frame" x="0.0" y="0.0" width="320" height="536"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <subviews>
-                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="yUa-6Q-US6">
-                    <rect key="frame" x="0.0" y="0.0" width="320" height="473"/>
-                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                    <subviews>
-                        <view contentMode="scaleToFill" id="mxf-Om-xe1">
-                            <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <subviews>
-                                <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Notification Text" placeholder="Notification Text" clearsOnBeginEditing="YES" minimumFontSize="17" clearButtonMode="always" id="Xir-AU-sSX">
-                                    <rect key="frame" x="20" y="7" width="280" height="30"/>
-                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                    <textInputTraits key="textInputTraits" autocorrectionType="no"/>
-                                    <connections>
-                                        <outlet property="delegate" destination="-1" id="ZoT-ed-6ld"/>
-                                    </connections>
-                                </textField>
-                            </subviews>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Notification Bar" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="PGm-sg-PAE">
-                            <rect key="frame" x="10" y="54" width="150" height="21"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
-                            <nil key="highlightedColor"/>
-                        </label>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="kor-Fn-M5R">
-                            <rect key="frame" x="0.0" y="78" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="124" maxY="0.0"/>
-                            <state key="normal" title="Change font: 12pt">
-                                <color key="titleColor" red="0.071822978556156158" green="0.58929067850112915" blue="0.99853438138961792" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectFont:" destination="-1" eventType="touchUpInside" id="qAB-ee-qTd"/>
-                            </connections>
-                        </button>
-                        <stepper opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" continuous="NO" autorepeat="NO" value="12" minimumValue="1" maximumValue="99" id="zcb-h7-7D1">
-                            <rect key="frame" x="206" y="86" width="94" height="29"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
-                            <connections>
-                                <action selector="selectFontSize:" destination="-1" eventType="valueChanged" id="Mu1-DX-hRE"/>
-                            </connections>
-                        </stepper>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="SnD-sq-J0V">
-                            <rect key="frame" x="0.0" y="124" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="124" maxY="0.0"/>
-                            <state key="normal" title="TextColor">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectTextColor:" destination="-1" eventType="touchUpInside" id="4af-G6-XWd"/>
-                            </connections>
-                        </button>
-                        <view userInteractionEnabled="NO" contentMode="scaleToFill" id="6TJ-pl-R0h">
-                            <rect key="frame" x="206" y="131" width="134" height="30"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="Fxv-Cz-Wo2">
-                            <rect key="frame" x="0.0" y="170" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="124" maxY="0.0"/>
-                            <state key="normal" title="BarColor">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectBarColor:" destination="-1" eventType="touchUpInside" id="yEc-my-c8G"/>
-                            </connections>
-                        </button>
-                        <view userInteractionEnabled="NO" contentMode="scaleToFill" id="eJj-Ph-CWv">
-                            <rect key="frame" x="206" y="180" width="134" height="30"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="DqG-hy-DfL">
-                            <rect key="frame" x="0.0" y="216" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="20" maxY="0.0"/>
-                            <state key="normal" title="JDStatusBarAnimationStyleMove">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectAnimationStyle:" destination="-1" eventType="touchUpInside" id="VTo-Wp-ox5"/>
-                            </connections>
-                        </button>
-                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Progress Bar" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="NUQ-T4-zDZ">
-                            <rect key="frame" x="10" y="307" width="300" height="21"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
-                            <nil key="highlightedColor"/>
-                        </label>
-                        <button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="lEu-EP-Jkd">
-                            <rect key="frame" x="0.0" y="332" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="124" maxY="0.0"/>
-                            <state key="normal" title="ProgressBarColor">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectProgressBarColor:" destination="-1" eventType="touchUpInside" id="o9V-O3-TPY"/>
-                            </connections>
-                        </button>
-                        <view userInteractionEnabled="NO" contentMode="scaleToFill" misplaced="YES" id="LLJ-gT-L1E">
-                            <rect key="frame" x="206" y="339" width="134" height="30"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="xtI-RV-WoB">
-                            <rect key="frame" x="0.0" y="377" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="20" maxY="0.0"/>
-                            <state key="normal" title="JDProgressBarPositionBottom">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectProgressBarPosition:" destination="-1" eventType="touchUpInside" id="c0j-gB-NzV"/>
-                            </connections>
-                        </button>
-                        <view contentMode="scaleToFill" misplaced="YES" id="o8d-dh-GmA">
-                            <rect key="frame" x="0.0" y="424" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <subviews>
-                                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ProgressBarHeight (1pt)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VCm-BG-2Vb">
-                                    <rect key="frame" x="20" y="0.0" width="180" height="44"/>
-                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                                    <color key="textColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                                <stepper opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" continuous="NO" autorepeat="NO" value="1" maximumValue="20" id="zQd-eF-2ku">
-                                    <rect key="frame" x="216" y="8" width="94" height="29"/>
-                                    <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
-                                    <connections>
-                                        <action selector="setProgressBarHeight:" destination="-1" eventType="valueChanged" id="ldk-U3-SkC"/>
-                                    </connections>
-                                </stepper>
-                            </subviews>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="fMb-vm-Wz0">
-                            <rect key="frame" x="0.0" y="262" width="320" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                            <inset key="contentEdgeInsets" minX="20" minY="0.0" maxX="20" maxY="0.0"/>
-                            <state key="normal" title="JDStatusBarHeightForIPhoneXFullNavBar">
-                                <color key="titleColor" red="0.07182297856" green="0.58929067850000005" blue="0.99853438139999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.33333333329999998" green="0.33333333329999998" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="selectIPhoneXHeight:" destination="-1" eventType="touchUpInside" id="hjo-3Y-hzu"/>
-                            </connections>
-                        </button>
-                    </subviews>
-                    <color key="backgroundColor" red="0.92584240436553955" green="0.92504066228866577" blue="0.94968438148498535" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                </scrollView>
-                <view contentMode="scaleToFill" misplaced="YES" id="dQj-wo-lGp">
-                    <rect key="frame" x="0.0" y="473" width="320" height="63"/>
-                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                    <subviews>
-                        <view contentMode="scaleToFill" misplaced="YES" id="vmK-8H-mj5">
-                            <rect key="frame" x="0.0" y="0.0" width="320" height="1"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.79923993349075317" green="0.79923993349075317" blue="0.79923993349075317" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        </view>
-                        <button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="YRP-G8-SEf">
-                            <rect key="frame" x="12" y="9" width="145" height="44"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.92161363363265991" green="0.9206281304359436" blue="0.94577103853225708" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
-                            <state key="normal" title="Show">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="show:" destination="-1" eventType="touchUpInside" id="hPW-fw-MfI"/>
-                            </connections>
-                        </button>
-                        <button opaque="NO" contentMode="scaleToFill" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" lineBreakMode="middleTruncation" id="jqn-Mq-S18">
-                            <rect key="frame" x="165" y="9" width="145" height="44"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxY="YES"/>
-                            <color key="backgroundColor" red="0.92161363363265991" green="0.9206281304359436" blue="0.94577103853225708" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
-                            <state key="normal" title="Show with progress">
-                                <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <state key="highlighted">
-                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            </state>
-                            <connections>
-                                <action selector="showWithProgress:" destination="-1" eventType="touchUpInside" id="3re-IS-P29"/>
-                            </connections>
-                        </button>
-                    </subviews>
-                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                </view>
-            </subviews>
-            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
-            <point key="canvasLocation" x="34" y="62"/>
-        </view>
-    </objects>
-</document>

+ 0 - 13
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBExampleViewController.h

@@ -1,13 +0,0 @@
-//
-//  SBExampleViewController.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 29.10.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface SBExampleViewController : UITableViewController
-
-@end

+ 0 - 235
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBExampleViewController.m

@@ -1,235 +0,0 @@
-//
-//  SBExampleViewController.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 29.10.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "JDStatusBarNotification.h"
-#import "SBCustomStyleViewController.h"
-
-#import "SBExampleViewController.h"
-
-static NSString *const JDButtonName = @"JDButtonName";
-static NSString *const JDButtonInfo = @"JDButtonInfo";
-static NSString *const JDNotificationText = @"JDNotificationText";
-
-static NSString *const SBStyle1 = @"SBStyle1";
-static NSString *const SBStyle2 = @"SBStyle2";
-
-@interface SBExampleViewController ()
-@property (nonatomic, strong) NSArray *data;
-
-@property (nonatomic, assign) UIActivityIndicatorViewStyle indicatorStyle;
-@property (nonatomic, assign) CGFloat progress;
-@property (nonatomic, weak) NSTimer *timer;
-@end
-
-@implementation SBExampleViewController
-
-- (id)initWithStyle:(UITableViewStyle)style
-{
-    self = [super initWithStyle:style];
-    if (self) {
-        self.title = @"JDStatusBarNotification";
-        
-        [JDStatusBarNotification addStyleNamed:SBStyle1
-                                       prepare:^JDStatusBarStyle *(JDStatusBarStyle *style) {
-                                           style.barColor = [UIColor colorWithRed:0.797 green:0.000 blue:0.662 alpha:1.000];
-                                           style.textColor = [UIColor whiteColor];
-                                           style.animationType = JDStatusBarAnimationTypeFade;
-                                           style.font = [UIFont fontWithName:@"SnellRoundhand-Bold" size:17.0];
-                                           style.progressBarColor = [UIColor colorWithRed:0.986 green:0.062 blue:0.598 alpha:1.000];
-                                           style.progressBarHeight = 20.0;
-                                           return style;
-                                       }];
-        
-        [JDStatusBarNotification addStyleNamed:SBStyle2
-                                       prepare:^JDStatusBarStyle *(JDStatusBarStyle *style) {
-                                           style.barColor = [UIColor cyanColor];
-                                           style.textColor = [UIColor colorWithRed:0.056 green:0.478 blue:0.998 alpha:1.000];
-                                           style.animationType = JDStatusBarAnimationTypeBounce;
-                                           style.progressBarColor = style.textColor;
-                                           style.progressBarHeight = 5.0;
-                                           style.progressBarPosition = JDStatusBarProgressBarPositionTop;
-                                           if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
-                                               style.font = [UIFont fontWithName:@"DINCondensed-Bold" size:17.0];
-                                               style.textVerticalPositionAdjustment = 2.0;
-                                           } else {
-                                               style.font = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:17.0];
-                                           }
-                                           return style;
-                                       }];
-        
-        self.data = @[@[@{JDButtonName:@"Show Notification", JDButtonInfo:@"JDStatusBarStyleDefault", JDNotificationText:@"Better call Saul!"},
-                        @{JDButtonName:@"Show Progress", JDButtonInfo:@"0-100% in 1s", JDNotificationText:@"Some Progress…"},
-                        @{JDButtonName:@"Show Activity Indicator", JDButtonInfo:@"UIActivityIndicatorViewStyleGray", JDNotificationText:@"Some Activity…"},
-                        @{JDButtonName:@"Update text", JDButtonInfo:@"", JDNotificationText:@"Some Activity…"},
-                        @{JDButtonName:@"Dismiss Notification", JDButtonInfo:@"Animated", JDNotificationText:@""}],
-                      @[@{JDButtonName:@"Show JDStatusBarStyleError", JDButtonInfo:@"Duration: 2s", JDNotificationText:@"No, I don't have the money.."},
-                        @{JDButtonName:@"Show JDStatusBarStyleWarning", JDButtonInfo:@"Duration: 2s", JDNotificationText:@"You know who I am!"},
-                        @{JDButtonName:@"Show JDStatusBarStyleSuccess", JDButtonInfo:@"Duration: 2s", JDNotificationText:@"That's how we roll!"},
-                        @{JDButtonName:@"Show JDStatusBarStyleDark", JDButtonInfo:@"Duration: 2s", JDNotificationText:@"Don't mess with me!"},
-                        @{JDButtonName:@"Show JDStatusBarStyleMatrix", JDButtonInfo:@"Duration: 2s", JDNotificationText:@"Wake up Neo…"}],
-                      @[@{JDButtonName:@"Show custom style 1", JDButtonInfo:@"Duration: 4s, JDStatusBarAnimationTypeFade", JDNotificationText:@"Oh, I love it!"},
-                        @{JDButtonName:@"Show custom style 2", JDButtonInfo:@"Duration: 4s, JDStatusBarAnimationTypeBounce", JDNotificationText:@"Level up!"}],
-                      @[@{JDButtonName:@"Create your own style", JDButtonInfo:@"Test all possibilities", JDNotificationText:@""}]];
-    }
-    return self;
-}
-
-- (void)viewDidLoad;
-{
-    [super viewDidLoad];
-    
-    self.tableView.backgroundColor = [UIColor colorWithRed:0.93 green:0.93 blue:0.95 alpha:1.0];
-    self.tableView.backgroundView = nil;
-    
-    // presenting a notification, before a keyWindow is set
-    self.indicatorStyle = UIActivityIndicatorViewStyleWhite;
-    [JDStatusBarNotification showWithStatus:@"Hello World!" dismissAfter:2.0
-                                  styleName:JDStatusBarStyleMatrix];
-}
-
-- (BOOL)prefersStatusBarHidden
-{
-    return NO;
-}
-
-#pragma mark UITableViewDataSource
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
-{
-    return self.data.count;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
-{
-    return [self.data[section] count];
-}
-
-- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
-{
-    // create / dequeue cell
-    static NSString* identifier = @"identifier";
-    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
-    if (cell == nil) {
-        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
-        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
-        cell.textLabel.font = [UIFont systemFontOfSize:15.0];
-        cell.detailTextLabel.font = [UIFont systemFontOfSize:11.0];
-        cell.detailTextLabel.textColor = [UIColor colorWithWhite:0.5 alpha:1.0];
-
-        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) {
-            cell.textLabel.backgroundColor = [UIColor clearColor];
-            cell.detailTextLabel.backgroundColor = [UIColor clearColor];
-            cell.backgroundView = [[UIView alloc] init];
-            cell.backgroundView.backgroundColor = [UIColor whiteColor];
-            cell.selectedBackgroundView = [[UIView alloc] init];
-            cell.selectedBackgroundView.backgroundColor = [UIColor colorWithWhite:0.8 alpha:1.0];
-        }
-    }
-    
-    NSDictionary *data = self.data[indexPath.section][indexPath.row];
-    cell.textLabel.text = data[JDButtonName];
-    cell.detailTextLabel.text = data[JDButtonInfo];
-    
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
-{
-    NSInteger section = indexPath.section;
-    NSInteger row = indexPath.row;
-    
-    NSDictionary *data = self.data[indexPath.section][indexPath.row];
-    NSString *status = data[JDNotificationText];
-    
-    // reset progress timer
-    self.progress = 0.0;
-    [self.timer invalidate];
-    self.timer = nil;
-    
-    // show notification
-    if (section == 0) {
-        if (row == 0) {
-            self.indicatorStyle = UIActivityIndicatorViewStyleGray;
-            [JDStatusBarNotification showWithStatus:status];
-        } else if (row == 1) {
-            if(![JDStatusBarNotification isVisible]) {
-                self.indicatorStyle = UIActivityIndicatorViewStyleGray;
-                [JDStatusBarNotification showWithStatus:status dismissAfter:1.4];
-            }
-            [self startTimer];
-        } else if (row == 2) {
-            if(![JDStatusBarNotification isVisible]) {
-                self.indicatorStyle = UIActivityIndicatorViewStyleGray;
-                [JDStatusBarNotification showWithStatus:status dismissAfter:2.0];
-            }
-            [JDStatusBarNotification showActivityIndicator:YES
-                                            indicatorStyle:self.indicatorStyle];
-        } else if (row == 3) {
-          [JDStatusBarNotification updateStatus:@"Replaced Text.."];
-        } else if (row == 4) {
-          [JDStatusBarNotification dismiss];
-        }
-    } else if (section == 1) {
-        self.indicatorStyle = UIActivityIndicatorViewStyleWhite;
-        NSString *style = JDStatusBarStyleError;
-        if (row == 1) {
-            style = JDStatusBarStyleWarning;
-            self.indicatorStyle = UIActivityIndicatorViewStyleGray;
-        } else if(row == 2) {
-            style = JDStatusBarStyleSuccess;
-        } else if(row == 3) {
-            style = JDStatusBarStyleDark;
-        } else if(row == 4) {
-            style = JDStatusBarStyleMatrix;
-        }
-        
-        [JDStatusBarNotification showWithStatus:status
-                                   dismissAfter:2.0
-                                      styleName:style];
-    } else if (section == 2) {
-        self.indicatorStyle = (row==0) ? UIActivityIndicatorViewStyleWhite : UIActivityIndicatorViewStyleGray;
-        
-        NSString *style = (row==0) ? SBStyle1 : SBStyle2;
-        [JDStatusBarNotification showWithStatus:status
-                                   dismissAfter:4.0
-                                      styleName:style];
-    } else if (section == 3) {
-        SBCustomStyleViewController* viewController = [[SBCustomStyleViewController alloc] init];
-        viewController.title = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
-        [self.navigationController pushViewController:viewController animated:YES];
-    }
-    
-    [tableView deselectRowAtIndexPath:indexPath animated:YES];
-}
-
-
-- (void)startTimer;
-{
-    [JDStatusBarNotification showProgress:self.progress];
-    
-    [self.timer invalidate];
-    self.timer = nil;
-    
-    if (self.progress < 1.0) {
-        CGFloat step = 0.02;
-        self.timer = [NSTimer scheduledTimerWithTimeInterval:step target:self
-                                                    selector:@selector(startTimer)
-                                                    userInfo:nil repeats:NO];
-        self.progress += step;
-    } else {
-        [self performSelector:@selector(hideProgress)
-                   withObject:nil afterDelay:0.5];
-    }
-}
-
-- (void)hideProgress;
-{
-    [JDStatusBarNotification showProgress:0.0];
-}
-
-@end

+ 0 - 20
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBSelectPropertyViewController.h

@@ -1,20 +0,0 @@
-//
-//  SBSelectPropertyViewController.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus Emrich on 09.11.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-typedef void(^SBSelectPropertyResultBlock)(NSInteger selectedRow);
-
-@interface SBSelectPropertyViewController : UITableViewController
-
-@property (nonatomic, assign) NSInteger activeRow;
-
-- (id)initWithData:(NSArray*)data
-       resultBlock:(SBSelectPropertyResultBlock)resultBlock;
-
-@end

+ 0 - 70
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/SBSelectPropertyViewController.m

@@ -1,70 +0,0 @@
-//
-//  SBSelectPropertyViewController.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus Emrich on 09.11.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "SBSelectPropertyViewController.h"
-
-@interface SBSelectPropertyViewController ()
-@property (nonatomic, strong) NSArray *data;
-@property (nonatomic, copy) SBSelectPropertyResultBlock resultBlock;
-@end
-
-@implementation SBSelectPropertyViewController
-
-- (id)initWithData:(NSArray*)data
-       resultBlock:(SBSelectPropertyResultBlock)resultBlock;
-{
-    self = [super initWithStyle:UITableViewStylePlain];
-    if (self) {
-        self.data = data;
-        self.resultBlock = resultBlock;
-        self.activeRow = -1;
-    }
-    return self;
-}
-
-#pragma mark - Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
-{
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-{
-    return self.data.count;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-{
-    // create / dequeue cell
-    static NSString* identifier = @"identifier";
-    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
-    if (cell == nil) {
-        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
-        cell.textLabel.font = [UIFont systemFontOfSize:14.0];
-    }
-    
-    cell.textLabel.text = self.data[indexPath.row];
-    
-    if (indexPath.row == self.activeRow) {
-        cell.accessoryType = UITableViewCellAccessoryCheckmark;
-    } else {
-        cell.accessoryType = UITableViewCellAccessoryNone;
-    }
-    
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
-{
-    if (self.resultBlock) {
-        self.resultBlock(indexPath.row);
-    }
-}
-
-@end

+ 0 - 18
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/JDStatusBarNotificationExample/main.m

@@ -1,18 +0,0 @@
-//
-//  main.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 29.10.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-#import "SBAppDelegate.h"
-
-int main(int argc, char * argv[])
-{
-    @autoreleasepool {
-        return UIApplicationMain(argc, argv, nil, NSStringFromClass([SBAppDelegate class]));
-    }
-}

+ 0 - 9
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/Podfile

@@ -1,9 +0,0 @@
-platform :ios, "8.0"
-source 'https://github.com/CocoaPods/Specs.git'
-inhibit_all_warnings!
-
-target 'JDStatusBarNotificationExample' do
-  pod 'InfColorPicker'
-  pod 'FTFontSelector'
-end
-

+ 0 - 20
Carthage/Checkouts/JDStatusBarNotification/ExampleProject/Podfile.lock

@@ -1,20 +0,0 @@
-PODS:
-  - FTFontSelector (1.1.3)
-  - InfColorPicker (0.0.1)
-
-DEPENDENCIES:
-  - FTFontSelector
-  - InfColorPicker
-
-SPEC REPOS:
-  https://github.com/cocoapods/specs.git:
-    - FTFontSelector
-    - InfColorPicker
-
-SPEC CHECKSUMS:
-  FTFontSelector: a5f0fc4dfb1606ad76da38570b0816c2e6c0d136
-  InfColorPicker: 8bfb8d8d44c356f0c98587a049783e900d7b5ff9
-
-PODFILE CHECKSUM: 82ca418f297a92c39ba3d6ed8c8457ea4538fa5e
-
-COCOAPODS: 1.5.3

+ 0 - 20
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification.podspec

@@ -1,20 +0,0 @@
-Pod::Spec.new do |s|
-  
-  s.name         = 'JDStatusBarNotification'
-  s.version      = '1.6.0'
-  s.summary      = 'Easy, customizable notifications displayed on top of the statusbar. With progress and activity. iPhone X ready.'
-
-  s.description  = 'Show messages on top of the status bar. Customizable colors, font and animation. Supports progress display and can show an activity indicator. Supports iOS 6+ and iPhone X.'
-  
-  s.homepage     = 'https://github.com/calimarkus/JDStatusBarNotification'
-  s.license      = { :type => 'MIT' }
-  s.author       = { 'Markus Emrich' => 'markus.emrich@gmail.com' }  
-  
-  s.source       = { :git => 'https://github.com/calimarkus/JDStatusBarNotification.git', :tag => "#{s.version}" }
-  s.source_files = 'JDStatusBarNotification/**'
-  s.frameworks   = 'QuartzCore'
-  
-  s.platform     = :ios, '6.0'
-  s.requires_arc = true
-
-end

+ 0 - 10
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.h

@@ -1,10 +0,0 @@
-//
-//  JDStatusBarLayoutMarginHelper.h
-//  JDStatusBarNotificationExample
-//
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-extern UIEdgeInsets JDStatusBarRootVCLayoutMargin(void);

+ 0 - 19
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarLayoutMarginHelper.m

@@ -1,19 +0,0 @@
-//
-//  JDStatusBarView.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 04.12.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "JDStatusBarLayoutMarginHelper.h"
-
-UIEdgeInsets JDStatusBarRootVCLayoutMargin(void)
-{
-    UIEdgeInsets layoutMargins = [[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] layoutMargins];
-    if (layoutMargins.top > 8 && layoutMargins.bottom > 8) {
-        return layoutMargins;
-    } else {
-        return UIEdgeInsetsZero;  // ignore default margins
-    }
-}

+ 0 - 178
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.h

@@ -1,178 +0,0 @@
-//
-//  JDStatusBarNotification.h
-//
-//  Based on KGStatusBar by Kevin Gibbon
-//
-//  Created by Markus Emrich on 10/28/13.
-//  Copyright 2013 Markus Emrich. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-#import "JDStatusBarStyle.h"
-#import "JDStatusBarView.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- *  A block that is used to define the appearance of a notification.
- *  A JDStatusBarStyle instance defines the notification appeareance.
- *
- *  @param style The current default JDStatusBarStyle instance.
- *
- *  @return The modified JDStatusBarStyle instance.
- */
-typedef JDStatusBarStyle*(^JDPrepareStyleBlock)(JDStatusBarStyle *style);
-
-/**
- *  This class is a singletion which is used to present notifications
- *  on top of the status bar. To present a notification, use one of the
- *  given class methods.
- */
-@interface JDStatusBarNotification : NSObject
-
-#pragma mark Presentation
-
-/**
- *  Show a notification. It won't hide automatically,
- *  you have to dimiss it on your own.
- *
- *  @param status The message to display
- *
- *  @return The presented notification view for further customization
- */
-+ (JDStatusBarView*)showWithStatus:(NSString *)status;
-
-/**
- *  Show a notification with a specific style. It won't
- *  hide automatically, you have to dimiss it on your own.
- *
- *  @param status The message to display
- *  @param styleName The name of the style. You can use any JDStatusBarStyle constant
- *  (JDStatusBarStyleDefault, etc.), or a custom style identifier, after you added a
- *  custom style. If this is nil, the default style will be used.
- *
- *  @return The presented notification view for further customization
- */
-+ (JDStatusBarView*)showWithStatus:(NSString *)status
-                         styleName:(NSString*)styleName;
-
-/**
- *  Same as showWithStatus:, but the notification will
- *  automatically dismiss after the given timeInterval.
- *
- *  @param status       The message to display
- *  @param timeInterval The duration, how long the notification
- *  is displayed. (Including the animation duration)
- *
- *  @return The presented notification view for further customization
- */
-+ (JDStatusBarView*)showWithStatus:(NSString *)status
-                      dismissAfter:(NSTimeInterval)timeInterval;
-
-/**
- *  Same as showWithStatus:styleName:, but the notification
- *  will automatically dismiss after the given timeInterval.
- *
- *  @param status       The message to display
- *  @param timeInterval The duration, how long the notification
- *  is displayed. (Including the animation duration)
- *  @param styleName The name of the style. You can use any JDStatusBarStyle constant
- *  (JDStatusBarStyleDefault, etc.), or a custom style identifier, after you added a
- *  custom style. If this is nil, the default style will be used.
- *
- *  @return The presented notification view for further customization
- */
-+ (JDStatusBarView*)showWithStatus:(NSString *)status
-                      dismissAfter:(NSTimeInterval)timeInterval
-                         styleName:(NSString*)styleName;
-
-#pragma mark Dismissal
-
-/**
- *  Calls dismissAnimated: with animated set to YES
- */
-+ (void)dismiss;
-
-/**
- *  Dismisses any currently displayed notification immediately
- *
- *  @param animated If this is YES, the animation style used
- *  for presentation will also be used for the dismissal.
- */
-+ (void)dismissAnimated:(BOOL)animated;
-
-/**
- *  Same as dismissAnimated:, but you can specify a delay,
- *  so the notification wont be dismissed immediately
- *
- *  @param delay The delay, how long the notification should stay visible
- */
-+ (void)dismissAfter:(NSTimeInterval)delay;
-
-#pragma mark Styles
-
-/**
- *  This changes the default style, which is always used
- *  when a method without styleName is used for presentation, or
- *  styleName is nil, or no style is found with this name.
- *
- *  @param prepareBlock A block, which has a JDStatusBarStyle instance as
- *  parameter. This instance can be modified to suit your needs. You need
- *  to return the modified style again.
- */
-+ (void)setDefaultStyle:(JDPrepareStyleBlock)prepareBlock;
-
-/**
- *  Adds a custom style, which than can be used
- *  in the presentation methods.
- *
- *  @param identifier   The identifier, which will
- *  later be used to reference the configured style.
- *  @param prepareBlock A block, which has a JDStatusBarStyle instance as
- *  parameter. This instance can be modified to suit your needs. You need
- *  to return the modified style again.
- *
- *  @return Returns the given identifier, so it can
- *  be directly used as styleName parameter.
- */
-+ (NSString*)addStyleNamed:(NSString*)identifier
-                   prepare:(JDPrepareStyleBlock)prepareBlock;
-
-#pragma mark Modifications
-
-/**
- *  Update the text of the label without presenting a new notification.
- *
- *  @param status The new message to display
- */
-+ (void)updateStatus:(NSString *)status;
-
-/**
- *  Show the progress below the label.
- *
- *  @param progress Relative progress from 0.0 to 1.0
- */
-+ (void)showProgress:(CGFloat)progress;
-
-/**
- *  Shows an activity indicator in front of the notification text
- *
- *  @param show  Use this flag to show or hide the activity indicator
- *  @param style Sets the style of the activity indicator
- */
-+ (void)showActivityIndicator:(BOOL)show
-               indicatorStyle:(UIActivityIndicatorViewStyle)style;
-
-#pragma mark state
-
-/**
- *  This method tests, if a notification is currently displayed.
- *
- *  @return YES, if a notification is currently displayed. Otherwise NO.
- */
-+ (BOOL)isVisible;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 643
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarNotification.m

@@ -1,643 +0,0 @@
-//
-//  JDStatusBarNotification.m
-//
-//  Based on KGStatusBar by Kevin Gibbon
-//
-//  Created by Markus Emrich on 10/28/13.
-//  Copyright 2013 Markus Emrich. All rights reserved.
-//
-
-#import <QuartzCore/QuartzCore.h>
-
-#import "JDStatusBarLayoutMarginHelper.h"
-#import "JDStatusBarNotification.h"
-
-@interface JDStatusBarStyle (Hidden)
-+ (NSArray*)allDefaultStyleIdentifier;
-+ (JDStatusBarStyle*)defaultStyleWithName:(NSString*)styleName;
-@end
-
-@interface JDStatusBarNotificationViewController : UIViewController
-@end
-
-@interface UIApplication (mainWindow)
-- (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow*)ignoringWindow;
-@end
-
-@interface JDStatusBarNotification () <CAAnimationDelegate>
-@property (nonatomic, strong, readonly) UIWindow *overlayWindow;
-@property (nonatomic, strong, readonly) UIView *progressView;
-@property (nonatomic, strong, readonly) JDStatusBarView *topBar;
-
-@property (nonatomic, strong) NSTimer *dismissTimer;
-@property (nonatomic, assign) CGFloat progress;
-
-@property (nonatomic, weak) JDStatusBarStyle *activeStyle;
-@property (nonatomic, strong) JDStatusBarStyle *defaultStyle;
-@property (nonatomic, strong) NSMutableDictionary *userStyles;
-@end
-
-@implementation JDStatusBarNotification
-
-@synthesize overlayWindow = _overlayWindow;
-@synthesize progressView = _progressView;
-@synthesize topBar = _topBar;
-
-#pragma mark Class methods
-
-+ (JDStatusBarNotification*)sharedInstance {
-  static dispatch_once_t once;
-  static JDStatusBarNotification *sharedInstance;
-  dispatch_once(&once, ^ {
-    sharedInstance = [[self alloc] init];
-  });
-  return sharedInstance;
-}
-
-+ (UIView*)showWithStatus:(NSString *)status;
-{
-  return [[self sharedInstance] showWithStatus:status
-                                     styleName:nil];
-}
-
-+ (UIView*)showWithStatus:(NSString *)status
-                styleName:(NSString*)styleName;
-{
-  return [[self sharedInstance] showWithStatus:status
-                                     styleName:styleName];
-}
-
-+ (UIView*)showWithStatus:(NSString *)status
-             dismissAfter:(NSTimeInterval)timeInterval;
-{
-  UIView *view = [[self sharedInstance] showWithStatus:status
-                                             styleName:nil];
-  [self dismissAfter:timeInterval];
-  return view;
-}
-
-+ (UIView*)showWithStatus:(NSString *)status
-             dismissAfter:(NSTimeInterval)timeInterval
-                styleName:(NSString*)styleName;
-{
-  UIView *view = [[self sharedInstance] showWithStatus:status
-                                             styleName:styleName];
-  [self dismissAfter:timeInterval];
-  return view;
-}
-
-+ (void)dismiss;
-{
-  [self dismissAnimated:YES];
-}
-
-+ (void)dismissAnimated:(BOOL)animated;
-{
-  [[self sharedInstance] dismissAnimated:animated];
-}
-
-+ (void)dismissAfter:(NSTimeInterval)delay;
-{
-  [[self sharedInstance] setDismissTimerWithInterval:delay];
-}
-
-+ (void)setDefaultStyle:(JDPrepareStyleBlock)prepareBlock;
-{
-  NSAssert(prepareBlock != nil, @"No prepareBlock provided");
-
-  JDStatusBarStyle *style = [[self sharedInstance].defaultStyle copy];
-  [self sharedInstance].defaultStyle = prepareBlock(style);
-}
-
-+ (NSString*)addStyleNamed:(NSString*)identifier
-                   prepare:(JDPrepareStyleBlock)prepareBlock;
-{
-  return [[self sharedInstance] addStyleNamed:identifier
-                                      prepare:prepareBlock];
-}
-
-+ (void)updateStatus:(NSString *)status;
-{
-  [[self sharedInstance] setStatus:status];
-}
-
-+ (void)showProgress:(CGFloat)progress;
-{
-  [[self sharedInstance] setProgress:progress];
-}
-
-+ (void)showActivityIndicator:(BOOL)show indicatorStyle:(UIActivityIndicatorViewStyle)style;
-{
-  [[self sharedInstance] showActivityIndicator:show indicatorStyle:style];
-}
-
-+ (BOOL)isVisible;
-{
-  return [[self sharedInstance] isVisible];
-}
-
-#pragma mark Implementation
-
-- (id)init
-{
-  if ((self = [super init]))
-  {
-    // set defaults
-    [self setupDefaultStyles];
-
-    // register for orientation changes
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarFrame:)
-                                                 name:UIApplicationWillChangeStatusBarFrameNotification object:nil];
-  }
-  return self;
-}
-
-- (void)dealloc
-{
-  [[NSNotificationCenter defaultCenter] removeObserver:self];
-}
-
-#pragma mark Custom styles
-
-- (void)setupDefaultStyles;
-{
-  self.defaultStyle = [JDStatusBarStyle defaultStyleWithName:JDStatusBarStyleDefault];
-
-  self.userStyles = [NSMutableDictionary dictionary];
-  for (NSString *styleName in [JDStatusBarStyle allDefaultStyleIdentifier]) {
-    [self.userStyles setObject:[JDStatusBarStyle defaultStyleWithName:styleName] forKey:styleName];
-  }
-}
-
-- (NSString*)addStyleNamed:(NSString*)identifier
-                   prepare:(JDPrepareStyleBlock)prepareBlock;
-{
-  NSAssert(identifier != nil, @"No identifier provided");
-  NSAssert(prepareBlock != nil, @"No prepareBlock provided");
-
-  JDStatusBarStyle *style = [self.defaultStyle copy];
-  [self.userStyles setObject:prepareBlock(style) forKey:identifier];
-  return identifier;
-}
-
-#pragma mark Presentation
-
-- (UIView*)showWithStatus:(NSString *)status
-                styleName:(NSString*)styleName;
-{
-  JDStatusBarStyle *style = nil;
-  if (styleName != nil) {
-    style = self.userStyles[styleName];
-  }
-
-  if (style == nil) style = self.defaultStyle;
-  return [self showWithStatus:status style:style];
-}
-
-- (UIView*)showWithStatus:(NSString *)status
-                    style:(JDStatusBarStyle*)style;
-{
-  // first, check if status bar is visible at all
-  if ([UIApplication sharedApplication].statusBarHidden) return nil;
-
-  // prepare for new style
-  if (style != self.activeStyle) {
-      self.activeStyle = style;
-      if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) {
-          self.topBar.alpha = 0.0;
-          self.topBar.transform = CGAffineTransformIdentity;
-      } else {
-          self.topBar.alpha = 1.0;
-          self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
-      }
-  }
-
-  // Force update the TopBar frame if the height is 0
-  if (self.topBar.frame.size.height == 0) {
-    [self updateContentFrame:[[UIApplication sharedApplication] statusBarFrame]];
-  }
-
-  // cancel previous dismissing & remove animations
-  [[NSRunLoop currentRunLoop] cancelPerformSelector:@selector(dismiss) target:self argument:nil];
-  [self.topBar.layer removeAllAnimations];
-
-  // create & show window
-  [self.overlayWindow setHidden:NO];
-
-  // update style
-  self.topBar.backgroundColor = style.barColor;
-  self.topBar.textVerticalPositionAdjustment = style.textVerticalPositionAdjustment;
-  UILabel *textLabel = self.topBar.textLabel;
-  textLabel.textColor = style.textColor;
-  textLabel.font = style.font;
-  textLabel.accessibilityLabel = status;
-  textLabel.text = status;
-
-  if (style.textShadow) {
-    textLabel.shadowColor = style.textShadow.shadowColor;
-    textLabel.shadowOffset = style.textShadow.shadowOffset;
-  } else {
-    textLabel.shadowColor = nil;
-    textLabel.shadowOffset = CGSizeZero;
-  }
-
-  // reset progress & activity
-  self.progress = 0.0;
-  [self showActivityIndicator:NO indicatorStyle:0];
-
-  // animate in
-  BOOL animationsEnabled = (style.animationType != JDStatusBarAnimationTypeNone);
-  if (animationsEnabled && style.animationType == JDStatusBarAnimationTypeBounce) {
-    [self animateInWithBounceAnimation];
-  } else {
-    [UIView animateWithDuration:(animationsEnabled ? 0.4 : 0.0) animations:^{
-      self.topBar.alpha = 1.0;
-      self.topBar.transform = CGAffineTransformIdentity;
-    }];
-  }
-
-  return self.topBar;
-}
-
-#pragma mark Dismissal
-
-- (void)setDismissTimerWithInterval:(NSTimeInterval)interval;
-{
-  [self.dismissTimer invalidate];
-  self.dismissTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:interval]
-                                               interval:0 target:self selector:@selector(dismiss:) userInfo:nil repeats:NO];
-  [[NSRunLoop currentRunLoop] addTimer:self.dismissTimer forMode:NSRunLoopCommonModes];
-}
-
-- (void)dismiss:(NSTimer*)timer;
-{
-  [self dismissAnimated:YES];
-}
-
-- (void)dismissAnimated:(BOOL)animated;
-{
-  [self.dismissTimer invalidate];
-  self.dismissTimer = nil;
-
-  // check animation type
-  BOOL animationsEnabled = (self.activeStyle.animationType != JDStatusBarAnimationTypeNone);
-  animated &= animationsEnabled;
-
-  dispatch_block_t animation = ^{
-    if (self.activeStyle.animationType == JDStatusBarAnimationTypeFade) {
-      self.topBar.alpha = 0.0;
-    } else {
-      self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
-    }
-  };
-
-  void(^complete)(BOOL) = ^(BOOL finished) {
-    [self.overlayWindow removeFromSuperview];
-    [self.overlayWindow setHidden:YES];
-    self.overlayWindow.rootViewController = nil;
-    self->_overlayWindow = nil;
-    self->_progressView = nil;
-    self->_topBar = nil;
-  };
-
-  if (animated) {
-    // animate out
-    [UIView animateWithDuration:0.4 animations:animation completion:complete];
-  } else {
-    animation();
-    complete(YES);
-  }
-}
-
-#pragma mark Bounce Animation
-
-- (void)animateInWithBounceAnimation;
-{
-  //don't animate in, if topBar is already fully visible
-  if (self.topBar.frame.origin.y >= 0) {
-    return;
-  }
-
-  // easing function (based on github.com/robb/RBBAnimation)
-  CGFloat(^RBBEasingFunctionEaseOutBounce)(CGFloat) = ^CGFloat(CGFloat t) {
-    if (t < 4.0 / 11.0) return pow(11.0 / 4.0, 2) * pow(t, 2);
-    if (t < 8.0 / 11.0) return 3.0 / 4.0 + pow(11.0 / 4.0, 2) * pow(t - 6.0 / 11.0, 2);
-    if (t < 10.0 / 11.0) return 15.0 /16.0 + pow(11.0 / 4.0, 2) * pow(t - 9.0 / 11.0, 2);
-    return 63.0 / 64.0 + pow(11.0 / 4.0, 2) * pow(t - 21.0 / 22.0, 2);
-  };
-
-  // create values
-  int fromCenterY=-20, toCenterY=0, animationSteps=100;
-  NSMutableArray *values = [NSMutableArray arrayWithCapacity:animationSteps];
-  for (int t = 1; t<=animationSteps; t++) {
-    float easedTime = RBBEasingFunctionEaseOutBounce((t*1.0)/animationSteps);
-    float easedValue = fromCenterY + easedTime * (toCenterY-fromCenterY);
-    [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, easedValue, 0)]];
-  }
-
-  // build animation
-  CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
-  animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
-  animation.duration = 0.66;
-  animation.values = values;
-  animation.removedOnCompletion = NO;
-  animation.fillMode = kCAFillModeForwards;
-  animation.delegate = self;
-  [self.topBar.layer setValue:@(toCenterY) forKeyPath:animation.keyPath];
-  [self.topBar.layer addAnimation:animation forKey:@"JDBounceAnimation"];
-}
-
-- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
-{
-  self.topBar.transform = CGAffineTransformIdentity;
-  [self.topBar.layer removeAllAnimations];
-}
-
-#pragma mark Modifications
-
-- (void)setStatus:(NSString *)status;
-{
-  if (_topBar == nil) return;
-
-  UILabel *textLabel = self.topBar.textLabel;
-  textLabel.accessibilityLabel = status;
-  textLabel.text = status;
-
-  [self.topBar setNeedsLayout];
-}
-
-- (void)setProgress:(CGFloat)progress;
-{
-  if (_topBar == nil) return;
-
-  // trim progress
-  _progress = MIN(1.0, MAX(0.0,progress));
-
-  if (_progress == 0.0) {
-    _progressView.frame = CGRectZero;
-    return;
-  }
-
-  // update superview
-  if (self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBelow ||
-      self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionNavBar) {
-    [self.topBar.superview addSubview:self.progressView];
-  } else {
-    [self.topBar insertSubview:self.progressView belowSubview:self.topBar.textLabel];
-  }
-
-  // calculate progressView frame
-  CGRect frame = self.topBar.bounds;
-  CGFloat height = MIN(frame.size.height,MAX(0.5, self.activeStyle.progressBarHeight));
-  if (height == 20.0 && frame.size.height > height) height = frame.size.height;
-  frame.size.height = height;
-  frame.size.width = round((frame.size.width - 2 * self.activeStyle.progressBarHorizontalInsets) * progress);
-  frame.origin.x = self.activeStyle.progressBarHorizontalInsets;
-
-  // apply y-position from active style
-  CGFloat barHeight = self.topBar.bounds.size.height;
-  if (self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBottom) {
-    frame.origin.y = barHeight - height;
-  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionCenter) {
-    frame.origin.y = round((barHeight - height)/2.0);
-  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionTop) {
-    frame.origin.y = 0.0;
-  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionBelow) {
-    frame.origin.y = barHeight;
-  } else if(self.activeStyle.progressBarPosition == JDStatusBarProgressBarPositionNavBar) {
-    CGFloat navBarHeight = 44.0;
-    if (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) &&
-        UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
-      navBarHeight = 32.0;
-    }
-    frame.origin.y = barHeight + navBarHeight;
-  }
-
-  // apply color from active style
-  self.progressView.backgroundColor = self.activeStyle.progressBarColor;
-
-  // apply corner radius
-  self.progressView.layer.cornerRadius = self.activeStyle.progressBarCornerRadius;
-
-  // update progressView frame
-  BOOL animated = !CGRectEqualToRect(self.progressView.frame, CGRectZero);
-  [UIView animateWithDuration:animated ? 0.05 : 0.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
-    self.progressView.frame = frame;
-  } completion:nil];
-}
-
-- (void)showActivityIndicator:(BOOL)show
-               indicatorStyle:(UIActivityIndicatorViewStyle)style;
-{
-  if (_topBar == nil) return;
-
-  if (show) {
-    [self.topBar.activityIndicatorView startAnimating];
-    self.topBar.activityIndicatorView.activityIndicatorViewStyle = style;
-  } else {
-    [self.topBar.activityIndicatorView stopAnimating];
-  }
-}
-
-#pragma mark State
-
-- (BOOL)isVisible;
-{
-  return (_topBar != nil);
-}
-
-#pragma mark Lazy views
-
-- (UIWindow *)overlayWindow;
-{
-  if(_overlayWindow == nil) {
-    _overlayWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
-    _overlayWindow.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-    _overlayWindow.backgroundColor = [UIColor clearColor];
-    _overlayWindow.userInteractionEnabled = NO;
-    _overlayWindow.windowLevel = UIWindowLevelStatusBar;
-    _overlayWindow.rootViewController = [[JDStatusBarNotificationViewController alloc] init];
-    _overlayWindow.rootViewController.view.backgroundColor = [UIColor clearColor];
-#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000 // only when deployment target is < ios7
-    _overlayWindow.rootViewController.wantsFullScreenLayout = YES;
-#endif
-    [self updateContentFrame:[[UIApplication sharedApplication] statusBarFrame]];
-  }
-  return _overlayWindow;
-}
-
-- (JDStatusBarView*)topBar;
-{
-  if(_topBar == nil) {
-    _topBar = [[JDStatusBarView alloc] init];
-    [self.overlayWindow.rootViewController.view addSubview:_topBar];
-
-    JDStatusBarStyle *style = self.activeStyle ?: self.defaultStyle;
-    self.topBar.heightForIPhoneX = style.heightForIPhoneX;
-    if (style.animationType != JDStatusBarAnimationTypeFade) {
-      self.topBar.transform = CGAffineTransformMakeTranslation(0, -self.topBar.frame.size.height);
-    } else {
-      self.topBar.alpha = 0.0;
-    }
-  }
-  return _topBar;
-}
-
-- (UIView *)progressView;
-{
-  if (_progressView == nil) {
-    _progressView = [[UIView alloc] initWithFrame:CGRectZero];
-  }
-  return _progressView;
-}
-
-#pragma mark Rotation
-
-- (void)updateContentFrame:(CGRect)rect {
-    [self updateWindowTransform];
-    [self updateTopBarFrameWithStatusBarFrame:rect];
-}
-
-- (void)updateWindowTransform;
-{
-  UIWindow *window = [[UIApplication sharedApplication]
-                      mainApplicationWindowIgnoringWindow:self.overlayWindow];
-  _overlayWindow.transform = window.transform;
-  _overlayWindow.frame = window.frame;
-}
-
-static CGFloat topBarHeightAdjustedForIphoneX(JDStatusBarStyle *style, CGFloat height) {
-  CGFloat topLayoutMargin = JDStatusBarRootVCLayoutMargin().top;
-  if (topLayoutMargin > 0) {
-    switch (style.heightForIPhoneX) {
-      case JDStatusBarHeightForIPhoneXFullNavBar:
-        return height + topLayoutMargin;
-      case JDStatusBarHeightForIPhoneXHalf:
-        return height + 8.0;
-    }
-  } else {
-    return height;
-  }
-}
-
-- (void)updateTopBarFrameWithStatusBarFrame:(CGRect)rect;
-{
-  CGFloat width = MAX(rect.size.width, rect.size.height);
-  CGFloat height = MIN(rect.size.width, rect.size.height);
-
-  // adjust position for iOS 7, if statusBar has double height
-  CGFloat yPos = 0;
-  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && height == 40.0) {
-    yPos = -height/2.0;
-  }
-
-  // adjust height for iPhone X
-  height = topBarHeightAdjustedForIphoneX(self.activeStyle ?: self.defaultStyle, height);
-
-  _topBar.frame = CGRectMake(0, yPos, width, height);
-}
-
-- (void)willChangeStatusBarFrame:(NSNotification*)notification;
-{
-  CGRect newBarFrame = [notification.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue];
-  NSTimeInterval duration = [[UIApplication sharedApplication] statusBarOrientationAnimationDuration];
-
-  // update window & statusbar
-  void(^updateBlock)(void) = ^{
-    [self updateContentFrame:newBarFrame];
-    self.progress = self.progress; // relayout progress bar
-  };
-
-  [UIView animateWithDuration:duration animations:^{
-    updateBlock();
-  } completion:^(BOOL finished) {
-    // this hack fixes a broken frame after the rotation (#35)
-    // but rotation animation is still broken
-    updateBlock();
-  }];
-}
-
-@end
-
-// A custom view controller, so the statusBarStyle & rotation behaviour is correct
-@implementation JDStatusBarNotificationViewController
-
-// rotation
-
-- (UIViewController*)mainController
-{
-  UIWindow *mainAppWindow = [[UIApplication sharedApplication] mainApplicationWindowIgnoringWindow:self.view.window];
-  UIViewController *topController = mainAppWindow.rootViewController;
-
-  while(topController.presentedViewController) {
-    topController = topController.presentedViewController;
-  }
-
-  return topController;
-}
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
-  return [[self mainController] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
-}
-
-- (BOOL)shouldAutorotate {
-  return [[self mainController] shouldAutorotate];
-}
-
-#if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000
-- (NSUInteger)supportedInterfaceOrientations {
-#else
-  - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
-#endif
-    return [[self mainController] supportedInterfaceOrientations];
-  }
-
-  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
-    return [[self mainController] preferredInterfaceOrientationForPresentation];
-  }
-
-  // statusbar
-
-  static BOOL JDUIViewControllerBasedStatusBarAppearanceEnabled() {
-    static BOOL enabled = NO;
-    static dispatch_once_t onceToken;
-
-    dispatch_once(&onceToken, ^{
-      enabled = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIViewControllerBasedStatusBarAppearance"] boolValue];
-    });
-
-    return enabled;
-  }
-
-  - (UIStatusBarStyle)preferredStatusBarStyle {
-    if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) {
-      return [[self mainController] preferredStatusBarStyle];
-    }
-
-    return [[UIApplication sharedApplication] statusBarStyle];
-  }
-
-  - (BOOL)prefersStatusBarHidden {
-    return NO;
-  }
-
-  - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
-    if(JDUIViewControllerBasedStatusBarAppearanceEnabled()) {
-      return [[self mainController] preferredStatusBarUpdateAnimation];
-    }
-    return [super preferredStatusBarUpdateAnimation];
-  }
-
-  @end
-
-  @implementation UIApplication (mainWindow)
-  // we don't want the keyWindow, since it could be our own window
-  - (UIWindow*)mainApplicationWindowIgnoringWindow:(UIWindow *)ignoringWindow {
-    for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
-      if (!window.hidden && window != ignoringWindow) {
-        return window;
-      }
-    }
-    return nil;
-  }
-  @end

+ 0 - 106
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.h

@@ -1,106 +0,0 @@
-//
-//  JDStatusBarStyle.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 04.12.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/// This style has a red background with a white Helvetica label.
-extern NSString *const JDStatusBarStyleError;
-/// This style has a yellow background with a gray Helvetica label.
-extern NSString *const JDStatusBarStyleWarning;
-/// This style has a green background with a white Helvetica label.
-extern NSString *const JDStatusBarStyleSuccess;
-/// This style has a black background with a green bold Courier label.
-extern NSString *const JDStatusBarStyleMatrix;
-/// This style has a white background with a gray Helvetica label.
-extern NSString *const JDStatusBarStyleDefault;
-/// This style has a nearly black background with a nearly white Helvetica label.
-extern NSString *const JDStatusBarStyleDark;
-
-typedef NS_ENUM(NSInteger, JDStatusBarAnimationType) {
-    /// Notification won't animate
-    JDStatusBarAnimationTypeNone,
-    /// Notification will move in from the top, and move out again to the top
-    JDStatusBarAnimationTypeMove,
-    /// Notification will fall down from the top and bounce a little bit
-    JDStatusBarAnimationTypeBounce,
-    /// Notification will fade in and fade out
-    JDStatusBarAnimationTypeFade,
-};
-
-typedef NS_ENUM(NSInteger, JDStatusBarProgressBarPosition) {
-    /// progress bar will be at the bottom of the status bar
-    JDStatusBarProgressBarPositionBottom,
-    /// progress bar will be at the center of the status bar
-    JDStatusBarProgressBarPositionCenter,
-    /// progress bar will be at the top of the status bar
-    JDStatusBarProgressBarPositionTop,
-    /// progress bar will be below the status bar (the progress bar won't move with the status bar in this case)
-    JDStatusBarProgressBarPositionBelow,
-    /// progress bar will be below the navigation bar (the progress bar won't move with the status bar in this case)
-    JDStatusBarProgressBarPositionNavBar,
-};
-
-typedef NS_ENUM(NSInteger, JDStatusBarHeightForIPhoneX) {
-    /// shows parts of the navigation bar
-    JDStatusBarHeightForIPhoneXHalf,
-    /// covers the full navigation bar
-    JDStatusBarHeightForIPhoneXFullNavBar,
-};
-
-/**
- *  A Style defines the appeareance of a notification.
- */
-@interface JDStatusBarStyle : NSObject <NSCopying>
-
-/// The background color of the notification bar
-@property (nonatomic, strong) UIColor *barColor;
-
-/// The text color of the notification label
-@property (nonatomic, strong) UIColor *textColor;
-
-/// The text shadow of the notification label
-@property (nonatomic, strong) NSShadow *textShadow;
-
-/// The font of the notification label
-@property (nonatomic, strong) UIFont *font;
-
-/// A correction of the vertical label position in points. Default is 0.0
-@property (nonatomic, assign) CGFloat textVerticalPositionAdjustment;
-
-#pragma mark Animation
-
-/// The animation, that is used to present the notification
-@property (nonatomic, assign) JDStatusBarAnimationType animationType;
-
-#pragma mark Progress Bar
-
-/// The background color of the progress bar (on top of the notification bar)
-@property (nonatomic, strong) UIColor *progressBarColor;
-
-/// The height of the progress bar. Default is 1.0
-@property (nonatomic, assign) CGFloat progressBarHeight;
-
-/// The position of the progress bar. Default is JDStatusBarProgressBarPositionBottom
-@property (nonatomic, assign) JDStatusBarProgressBarPosition progressBarPosition;
-
-/// The insets of the progress bar. Default is 0.0
-@property (nonatomic, assign) CGFloat progressBarHorizontalInsets;
-
-/// The corner radius of the progress bar. Default is 0.0
-@property (nonatomic, assign) CGFloat progressBarCornerRadius;
-
-#pragma mark iPhone X height
-
-@property (nonatomic, assign) JDStatusBarHeightForIPhoneX heightForIPhoneX;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 108
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarStyle.m

@@ -1,108 +0,0 @@
-//
-//  JDStatusBarStyle.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 04.12.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "JDStatusBarStyle.h"
-
-NSString *const JDStatusBarStyleError   = @"JDStatusBarStyleError";
-NSString *const JDStatusBarStyleWarning = @"JDStatusBarStyleWarning";
-NSString *const JDStatusBarStyleSuccess = @"JDStatusBarStyleSuccess";
-NSString *const JDStatusBarStyleMatrix  = @"JDStatusBarStyleMatrix";
-NSString *const JDStatusBarStyleDefault = @"JDStatusBarStyleDefault";
-NSString *const JDStatusBarStyleDark    = @"JDStatusBarStyleDark";
-
-@implementation JDStatusBarStyle
-
-- (instancetype)copyWithZone:(NSZone*)zone;
-{
-  JDStatusBarStyle *style = [[[self class] allocWithZone:zone] init];
-  style.barColor = self.barColor;
-  style.textColor = self.textColor;
-  style.textShadow = self.textShadow;
-  style.font = self.font;
-  style.textVerticalPositionAdjustment = self.textVerticalPositionAdjustment;
-  style.animationType = self.animationType;
-  style.progressBarColor = self.progressBarColor;
-  style.progressBarHeight = self.progressBarHeight;
-  style.progressBarPosition = self.progressBarPosition;
-  style.heightForIPhoneX = self.heightForIPhoneX;
-  return style;
-}
-
-+ (NSArray*)allDefaultStyleIdentifier;
-{
-  return @[JDStatusBarStyleError, JDStatusBarStyleWarning,
-           JDStatusBarStyleSuccess, JDStatusBarStyleMatrix,
-           JDStatusBarStyleDark];
-}
-
-+ (JDStatusBarStyle*)defaultStyleWithName:(NSString*)styleName;
-{
-  // setup default style
-  JDStatusBarStyle *style = [[JDStatusBarStyle alloc] init];
-  style.barColor = [UIColor whiteColor];
-  style.progressBarColor = [UIColor greenColor];
-  style.progressBarHeight = 1.0;
-  style.progressBarPosition = JDStatusBarProgressBarPositionBottom;
-  style.textColor = [UIColor grayColor];
-  style.font = [UIFont systemFontOfSize:12.0];
-  style.animationType = JDStatusBarAnimationTypeMove;
-  style.heightForIPhoneX = JDStatusBarHeightForIPhoneXFullNavBar;
-
-  // JDStatusBarStyleDefault
-  if ([styleName isEqualToString:JDStatusBarStyleDefault]) {
-    return style;
-  }
-
-  // JDStatusBarStyleError
-  else if ([styleName isEqualToString:JDStatusBarStyleError]) {
-    style.barColor = [UIColor colorWithRed:0.588 green:0.118 blue:0.000 alpha:1.000];
-    style.textColor = [UIColor whiteColor];
-    style.progressBarColor = [UIColor redColor];
-    style.progressBarHeight = 2.0;
-    return style;
-  }
-
-  // JDStatusBarStyleWarning
-  else if ([styleName isEqualToString:JDStatusBarStyleWarning]) {
-    style.barColor = [UIColor colorWithRed:0.900 green:0.734 blue:0.034 alpha:1.000];
-    style.textColor = [UIColor darkGrayColor];
-    style.progressBarColor = style.textColor;
-    return style;
-  }
-
-  // JDStatusBarStyleSuccess
-  else if ([styleName isEqualToString:JDStatusBarStyleSuccess]) {
-    style.barColor = [UIColor colorWithRed:0.588 green:0.797 blue:0.000 alpha:1.000];
-    style.textColor = [UIColor whiteColor];
-    style.progressBarColor = [UIColor colorWithRed:0.106 green:0.594 blue:0.319 alpha:1.000];
-    style.progressBarHeight = 1.0+1.0/[[UIScreen mainScreen] scale];
-    return style;
-  }
-
-  // JDStatusBarStyleDark
-  else if ([styleName isEqualToString:JDStatusBarStyleDark]) {
-    style.barColor = [UIColor colorWithRed:0.050 green:0.078 blue:0.120 alpha:1.000];
-    style.textColor = [UIColor colorWithWhite:0.95 alpha:1.0];
-    style.progressBarHeight = 1.0+1.0/[[UIScreen mainScreen] scale];
-    return style;
-  }
-
-  // JDStatusBarStyleMatrix
-  else if ([styleName isEqualToString:JDStatusBarStyleMatrix]) {
-    style.barColor = [UIColor blackColor];
-    style.textColor = [UIColor greenColor];
-    style.font = [UIFont fontWithName:@"Courier-Bold" size:14.0];
-    style.progressBarColor = [UIColor greenColor];
-    style.progressBarHeight = 2.0;
-    return style;
-  }
-
-  return nil;
-}
-
-@end

+ 0 - 21
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarView.h

@@ -1,21 +0,0 @@
-//
-//  JDStatusBarView.h
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 04.12.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import "JDStatusBarStyle.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface JDStatusBarView : UIView
-@property (nonatomic, strong, readonly) UILabel *textLabel;
-@property (nonatomic, strong, readonly) UIActivityIndicatorView *activityIndicatorView;
-@property (nonatomic, assign) CGFloat textVerticalPositionAdjustment;
-@property (nonatomic, assign) JDStatusBarHeightForIPhoneX heightForIPhoneX;
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 111
Carthage/Checkouts/JDStatusBarNotification/JDStatusBarNotification/JDStatusBarView.m

@@ -1,111 +0,0 @@
-//
-//  JDStatusBarView.m
-//  JDStatusBarNotificationExample
-//
-//  Created by Markus on 04.12.13.
-//  Copyright (c) 2013 Markus. All rights reserved.
-//
-
-#import "JDStatusBarView.h"
-#import "JDStatusBarLayoutMarginHelper.h"
-
-@interface JDStatusBarView ()
-@property (nonatomic, strong) UILabel *textLabel;
-@property (nonatomic, strong) UIActivityIndicatorView *activityIndicatorView;
-@end
-
-@implementation JDStatusBarView
-
-#pragma mark dynamic getter
-
-- (UILabel *)textLabel;
-{
-  if (_textLabel == nil) {
-    _textLabel = [[UILabel alloc] init];
-    _textLabel.backgroundColor = [UIColor clearColor];
-    _textLabel.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
-    _textLabel.textAlignment = NSTextAlignmentCenter;
-    _textLabel.adjustsFontSizeToFitWidth = YES;
-    _textLabel.clipsToBounds = YES;
-    [self addSubview:_textLabel];
-  }
-  return _textLabel;
-}
-
-- (UIActivityIndicatorView *)activityIndicatorView;
-{
-  if (_activityIndicatorView == nil) {
-    _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
-    _activityIndicatorView.transform = CGAffineTransformMakeScale(0.7, 0.7);
-    [self addSubview:_activityIndicatorView];
-  }
-  return _activityIndicatorView;
-}
-
-#pragma mark setter
-
-- (void)setTextVerticalPositionAdjustment:(CGFloat)textVerticalPositionAdjustment;
-{
-  _textVerticalPositionAdjustment = textVerticalPositionAdjustment;
-  [self setNeedsLayout];
-}
-
-#pragma mark layout
-
-- (void)layoutSubviews;
-{
-  [super layoutSubviews];
-
-  // label
-  CGFloat topLayoutMargin = JDStatusBarRootVCLayoutMargin().top;
-  CGFloat labelY = self.textVerticalPositionAdjustment + topLayoutMargin + 1;
-  CGFloat height = self.bounds.size.height - topLayoutMargin - 1;
-
-  // adjust for iPhone X
-  if (topLayoutMargin > 0){
-    switch (_heightForIPhoneX) {
-      case JDStatusBarHeightForIPhoneXHalf:
-        labelY -= 12;
-        height += 9.0;
-        break;
-      case JDStatusBarHeightForIPhoneXFullNavBar:
-        break;
-    }
-  }
-
-  self.textLabel.frame = CGRectMake(0, labelY, self.bounds.size.width, height);
-
-  // activity indicator
-  if (_activityIndicatorView ) {
-    CGSize textSize = [self currentTextSize];
-    CGRect indicatorFrame = _activityIndicatorView.frame;
-    indicatorFrame.origin.x = round((self.bounds.size.width - textSize.width)/2.0) - indicatorFrame.size.width - 8.0;
-    indicatorFrame.origin.y = labelY + 1 + floor((CGRectGetHeight(self.textLabel.bounds) - CGRectGetHeight(indicatorFrame))/2.0);
-    _activityIndicatorView.frame = indicatorFrame;
-  }
-}
-
-- (CGSize)currentTextSize;
-{
-  CGSize textSize = CGSizeZero;
-
-  // use new sizeWithAttributes: if possible
-  SEL selector = NSSelectorFromString(@"sizeWithAttributes:");
-  if ([self.textLabel.text respondsToSelector:selector]) {
-#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
-    NSDictionary *attributes = @{NSFontAttributeName:self.textLabel.font};
-    textSize = [self.textLabel.text sizeWithAttributes:attributes];
-#endif
-  }
-
-  // otherwise use old sizeWithFont:
-  else {
-#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000 // only when deployment target is < ios7
-    textSize = [self.textLabel.text sizeWithFont:self.textLabel.font];
-#endif
-  }
-
-  return textSize;
-}
-
-@end

+ 0 - 25
Carthage/Checkouts/JDStatusBarNotification/LICENSE

@@ -1,25 +0,0 @@
-Copyright © 2013 Markus Emrich
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-(MIT License)

+ 0 - 24
Carthage/Checkouts/JDStatusBarNotification/Miscellaneous/Info.plist

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>$(DEVELOPMENT_LANGUAGE)</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleVersion</key>
-	<string>$(CURRENT_PROJECT_VERSION)</string>
-	<key>NSPrincipalClass</key>
-	<string></string>
-</dict>
-</plist>

BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/activity.gif


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/animation.gif


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/iphoneX.png


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/progress.gif


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/screenshots.png


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/styles.png


BIN
Carthage/Checkouts/JDStatusBarNotification/gfx/tweetbutton.png


+ 6 - 3
File Provider Extension/FileProviderData.swift

@@ -74,6 +74,7 @@ class fileProviderData: NSObject {
         if domain == nil {
             
             guard let tableAccount = NCManageDatabase.sharedInstance.getAccountActive() else { return false }
+            guard let capabilities = NCManageDatabase.sharedInstance.getCapabilites(account: tableAccount.account) else { return false }
             
             account = tableAccount.account
             accountUser = tableAccount.user
@@ -82,7 +83,7 @@ class fileProviderData: NSObject {
             accountUrl = tableAccount.url
             homeServerUrl = CCUtility.getHomeServerUrlActiveUrl(tableAccount.url)
             
-            NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID,  password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, delegate: NCNetworking.sharedInstance)
+            NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID,  password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, nextcloudVersion: capabilities.versionMajor, delegate: NCNetworking.sharedInstance)
             NCNetworking.sharedInstance.setup(account: tableAccount.account, delegate: providerExtension as? NCNetworkingDelegate)
             
             return true
@@ -96,6 +97,7 @@ class fileProviderData: NSObject {
             guard let host = url.host else { continue }
             let accountDomain = tableAccount.userID + " (" + host + ")"
             if accountDomain == domain {
+                guard let capabilities = NCManageDatabase.sharedInstance.getCapabilites(account: tableAccount.account) else { return false }
                 account = tableAccount.account
                 accountUser = tableAccount.user
                 accountUserID = tableAccount.userID
@@ -104,7 +106,7 @@ class fileProviderData: NSObject {
                 accountUrl = tableAccount.url
                 homeServerUrl = CCUtility.getHomeServerUrlActiveUrl(tableAccount.url)
                 
-                NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID, password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, delegate: NCNetworking.sharedInstance)
+                NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID, password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, nextcloudVersion: capabilities.versionMajor, delegate: NCNetworking.sharedInstance)
                 NCNetworking.sharedInstance.setup(account: tableAccount.account, delegate: providerExtension as? NCNetworkingDelegate)
 
                 foundAccount = true
@@ -125,6 +127,7 @@ class fileProviderData: NSObject {
         
         for tableAccount in tableAccounts {
             if accountFromItemIdentifier == tableAccount.account {
+                guard let capabilities = NCManageDatabase.sharedInstance.getCapabilites(account: tableAccount.account) else { return false }
                 account = tableAccount.account
                 accountUser = tableAccount.user
                 accountUserID = tableAccount.userID
@@ -132,7 +135,7 @@ class fileProviderData: NSObject {
                 accountUrl = tableAccount.url
                 homeServerUrl = CCUtility.getHomeServerUrlActiveUrl(tableAccount.url)
                 
-                NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID, password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, delegate: NCNetworking.sharedInstance)
+                NCCommunicationCommon.sharedInstance.setup(username: accountUser, userID: accountUserID, password: accountPassword, userAgent: CCUtility.getUserAgent(), capabilitiesGroup: NCBrandOptions.sharedInstance.capabilitiesGroups, nextcloudVersion: capabilities.versionMajor, delegate: NCNetworking.sharedInstance)
                 NCNetworking.sharedInstance.setup(account: tableAccount.account, delegate: providerExtension as? NCNetworkingDelegate)
                 
                 foundAccount = true

+ 1 - 1
File Provider Extension/FileProviderEnumerator.swift

@@ -244,7 +244,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                         
                         // Update directory etag
                         let directory = files![0]
-                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: directory.etag, ocId: directory.ocId, encrypted: directory.e2eEncrypted, account: account)
+                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: directory.etag, ocId: directory.ocId, encrypted: directory.e2eEncrypted, richWorkspace: nil, account: account)
                                                 
                         // Update DB
                         NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, serverUrl, k_metadataStatusNormal, k_metadataStatusHide))

+ 2 - 2
File Provider Extension/FileProviderExtension+Actions.swift

@@ -55,7 +55,7 @@ extension FileProviderExtension {
                     return
                 }
                 
-                guard let _ = NCManageDatabase.sharedInstance.addDirectory(encrypted: false, favorite: false, ocId: ocId!, permissions: nil, serverUrl: tableDirectory.serverUrl + "/" + directoryName, account: account) else {
+                guard let _ = NCManageDatabase.sharedInstance.addDirectory(encrypted: false, favorite: false, ocId: ocId!, permissions: nil, serverUrl: tableDirectory.serverUrl + "/" + directoryName, richWorkspace: nil, account: account) else {
                     completionHandler(nil, NSFileProviderError(.noSuchItem))
                     return
                 }
@@ -186,7 +186,7 @@ extension FileProviderExtension {
                 
                 if metadata.directory {
                     
-                    NCManageDatabase.sharedInstance.setDirectory(serverUrl: fileNamePathFrom, serverUrlTo: fileNamePathTo, etag: nil, ocId: nil, encrypted: directoryTable.e2eEncrypted, account: account)
+                    NCManageDatabase.sharedInstance.setDirectory(serverUrl: fileNamePathFrom, serverUrlTo: fileNamePathTo, etag: nil, ocId: nil, encrypted: directoryTable.e2eEncrypted, richWorkspace: nil, account: account)
                     
                 } else {
                     

+ 101 - 110
Nextcloud.xcodeproj/project.pbxproj

@@ -7,10 +7,6 @@
 	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 */; };
@@ -87,7 +83,7 @@
 		F716FE7823795E5000FABE50 /* NCCommunication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F716FE7723795E5000FABE50 /* NCCommunication.framework */; settings = {ATTRIBUTES = (Required, ); }; };
 		F716FE7A23795EC500FABE50 /* FileProviderExtension+NetworkingDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F716FE7923795EC500FABE50 /* FileProviderExtension+NetworkingDelegate.swift */; };
 		F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7226EDB1EE4089300EBECB1 /* Main.storyboard */; };
-		F7233CEE23A24F990011D898 /* NCViewerNextcloudText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7233CED23A24F990011D898 /* NCViewerNextcloudText.swift */; };
+		F722814323C8C34500C41898 /* NCRichWorkspace.xib in Resources */ = {isa = PBXBuildFile; fileRef = F722814223C8C34500C41898 /* NCRichWorkspace.xib */; };
 		F72382C02295856A005B8A07 /* FirebaseMLVisionTextModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72382BB22958569005B8A07 /* FirebaseMLVisionTextModel.framework */; };
 		F72382C22295856A005B8A07 /* GoogleMVTextDetectorResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F72382BE22958569005B8A07 /* GoogleMVTextDetectorResources.bundle */; };
 		F72382C32295856A005B8A07 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72382BF22958569005B8A07 /* GoogleToolboxForMac.framework */; };
@@ -100,6 +96,7 @@
 		F72AAECA1E5C60C700BB17E1 /* AHKActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = F72AAEC31E5C60C700BB17E1 /* AHKActionSheet.m */; };
 		F72AAECB1E5C60C700BB17E1 /* AHKActionSheetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F72AAEC51E5C60C700BB17E1 /* AHKActionSheetViewController.m */; };
 		F72D1007210B6882009C96B7 /* NCPushNotificationEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F72D1005210B6882009C96B7 /* NCPushNotificationEncryption.m */; };
+		F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72D404823D2082500A97FD0 /* NCViewerNextcloudText.swift */; };
 		F72E0B9D21AD60BC00898D7B /* WeScan.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F72E0B9C21AD60BC00898D7B /* WeScan.framework */; };
 		F732BA061D76CE1500E9878B /* CCNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F732BA041D76CE1500E9878B /* CCNetworking.m */; };
 		F732BA0B1D76DBA500E9878B /* CCNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F732BA041D76CE1500E9878B /* CCNetworking.m */; };
@@ -210,6 +207,10 @@
 		F745B251222D871800346520 /* QRCodeReader.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F745B250222D871800346520 /* QRCodeReader.framework */; };
 		F745B253222D88AE00346520 /* NCLoginQRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F745B252222D88AE00346520 /* NCLoginQRCode.swift */; };
 		F747BA1F22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F747BA1E22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard */; };
+		F749C10B23C4A5340027D966 /* IntroCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F749C10723C4A5330027D966 /* IntroCollectionViewCell.swift */; };
+		F749C10C23C4A5340027D966 /* IntroViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F749C10823C4A5330027D966 /* IntroViewController.swift */; };
+		F749C10D23C4A5340027D966 /* Intro.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F749C10923C4A5330027D966 /* Intro.storyboard */; };
+		F749C10E23C4A5340027D966 /* IntroCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F749C10A23C4A5340027D966 /* IntroCollectionViewCell.xib */; };
 		F749E4E91DC1FB38009BA2FD /* Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F7CE8AFB1DC1F8D8009CAE48 /* Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		F74AFCE922E8B025003DE61F /* FSCalendar.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F74AFCE822E8B024003DE61F /* FSCalendar.framework */; };
 		F74C4FBB2328C3C200A23E25 /* OpenSSL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F74C4FBA2328C3C100A23E25 /* OpenSSL.framework */; };
@@ -234,6 +235,7 @@
 		F75A9EE823796C6F0044CFCE /* NCNetworking.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75A9EE523796C6F0044CFCE /* NCNetworking.swift */; };
 		F75AC2431F1F62450073EC19 /* NCManageAutoUploadFileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75AC2421F1F62450073EC19 /* NCManageAutoUploadFileName.swift */; };
 		F75ADF451DC75FFE008A7347 /* CCLogin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F75ADF441DC75FFE008A7347 /* CCLogin.storyboard */; };
+		F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75C0C4723D1FAE300163CC8 /* NCRichWorkspaceCommon.swift */; };
 		F75EDFBD1E8C112F00E6F369 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F75EDFBC1E8C112F00E6F369 /* libsqlite3.0.tbd */; };
 		F75EDFBF1E8C116D00E6F369 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F75EDFBE1E8C116D00E6F369 /* libstdc++.tbd */; };
 		F760F77B21F21F61006B1A73 /* icomoon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F760F75721F21F61006B1A73 /* icomoon.ttf */; };
@@ -313,20 +315,19 @@
 		F762CB881EACB81000B38484 /* REMenuContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = F762CB811EACB81000B38484 /* REMenuContainerView.m */; };
 		F762CB891EACB81000B38484 /* REMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = F762CB831EACB81000B38484 /* REMenuItem.m */; };
 		F762CB8A1EACB81000B38484 /* REMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = F762CB851EACB81000B38484 /* REMenuItemView.m */; };
-		F762CB951EACB84400B38484 /* icon-error.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB8D1EACB84400B38484 /* icon-error.png */; };
-		F762CB961EACB84400B38484 /* icon-error@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB8E1EACB84400B38484 /* icon-error@2x.png */; };
-		F762CB971EACB84400B38484 /* icon-info.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB8F1EACB84400B38484 /* icon-info.png */; };
-		F762CB981EACB84400B38484 /* icon-info@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB901EACB84400B38484 /* icon-info@2x.png */; };
-		F762CB991EACB84400B38484 /* icon-success.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB911EACB84400B38484 /* icon-success.png */; };
-		F762CB9A1EACB84400B38484 /* icon-success@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F762CB921EACB84400B38484 /* icon-success@2x.png */; };
-		F762CB9B1EACB84400B38484 /* TWMessageBarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F762CB941EACB84400B38484 /* TWMessageBarManager.m */; };
 		F7632FBF21832F8700721B71 /* NCTrashSectionHeaderMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7632FBE21832F8700721B71 /* NCTrashSectionHeaderMenu.xib */; };
 		F7632FC1218353AA00721B71 /* NCTrashSectionFooter.xib in Resources */ = {isa = PBXBuildFile; fileRef = F7632FC0218353AA00721B71 /* NCTrashSectionFooter.xib */; };
 		F7651A8A23A2A3F2001403D2 /* NCCreateFormUploadDocuments.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7651A8823A2A3F2001403D2 /* NCCreateFormUploadDocuments.storyboard */; };
 		F7651A8B23A2A3F2001403D2 /* NCCreateFormUploadDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7651A8923A2A3F2001403D2 /* NCCreateFormUploadDocuments.swift */; };
+		F765608723BF806D00765969 /* QuickLayout.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F765608623BF806C00765969 /* QuickLayout.framework */; };
+		F765608B23BF80A400765969 /* SwiftEntryKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F765608A23BF80A400765969 /* SwiftEntryKit.framework */; };
+		F765608F23BF813600765969 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
+		F765609023BF813600765969 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
+		F765609123BF813600765969 /* NCContentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F765608E23BF813500765969 /* NCContentPresenter.swift */; };
 		F76673ED22C901F6007ED366 /* FileProviderDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76673EC22C901F5007ED366 /* FileProviderDomain.swift */; };
 		F76673EE22C901F6007ED366 /* FileProviderDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76673EC22C901F5007ED366 /* FileProviderDomain.swift */; };
 		F76673F022C90434007ED366 /* FileProviderUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76673EF22C90433007ED366 /* FileProviderUtility.swift */; };
+		F7682FE023C36B0500983A04 /* NCMainTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7682FDF23C36B0500983A04 /* NCMainTabBar.swift */; };
 		F769453C22E9CFFF000A798A /* NCShareUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F769453B22E9CFFF000A798A /* NCShareUserCell.xib */; };
 		F769453E22E9E97E000A798A /* NCShareUserMenuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F769453D22E9E97D000A798A /* NCShareUserMenuView.xib */; };
 		F769454022E9F077000A798A /* NCSharePaging.swift in Sources */ = {isa = PBXBuildFile; fileRef = F769453F22E9F077000A798A /* NCSharePaging.swift */; };
@@ -387,6 +388,7 @@
 		F77B0F8C1D118A16002130FE /* CCCellMainTransfer.xib in Resources */ = {isa = PBXBuildFile; fileRef = F70211F91BAC56E9003FC03E /* CCCellMainTransfer.xib */; };
 		F77D49A91DC238E500CDC568 /* loading.gif in Resources */ = {isa = PBXBuildFile; fileRef = F77D49A71DC238E500CDC568 /* loading.gif */; };
 		F77EB6281EC08036003F814F /* CCExifGeo.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A54C351C6267B500E2C8BF /* CCExifGeo.m */; };
+		F77F5D2D23D5F28100D2B7EB /* NCMainRefreshControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F77F5D2C23D5F28100D2B7EB /* NCMainRefreshControl.swift */; };
 		F78071091EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */; };
 		F780710A1EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m in Sources */ = {isa = PBXBuildFile; fileRef = F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */; };
 		F781996922636BFA00EBDF6A /* HCFeatures.m in Sources */ = {isa = PBXBuildFile; fileRef = F781996822636BFA00EBDF6A /* HCFeatures.m */; };
@@ -394,6 +396,8 @@
 		F781996B22636BFA00EBDF6A /* HCFeatures.m in Sources */ = {isa = PBXBuildFile; fileRef = F781996822636BFA00EBDF6A /* HCFeatures.m */; };
 		F78295311F962EFA00A572F5 /* NCEndToEndEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = F70CAE391F8CF31A008125FD /* NCEndToEndEncryption.m */; };
 		F787704F22E7019900F287A9 /* NCShareLinkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F787704E22E7019900F287A9 /* NCShareLinkCell.xib */; };
+		F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78A18B523CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift */; };
+		F78A18B823CDE2B300F681F3 /* NCViewerRichWorkspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78A18B723CDE2B300F681F3 /* NCViewerRichWorkspace.swift */; };
 		F78AA20621F783E900D0F205 /* SwiftRichString.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F78AA20521F783E900D0F205 /* SwiftRichString.framework */; };
 		F78ACD4021903CC20088454D /* NCGridCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD3F21903CC20088454D /* NCGridCell.swift */; };
 		F78ACD4221903CE00088454D /* NCListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78ACD4121903CE00088454D /* NCListCell.swift */; };
@@ -417,8 +421,6 @@
 		F79728D422F96F2E003CACA7 /* NCShareLinkFolderMenuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F79728D322F96F2D003CACA7 /* NCShareLinkFolderMenuView.xib */; };
 		F79728D622F9A0B1003CACA7 /* NCShareUserFolderMenuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F79728D522F9A0B0003CACA7 /* NCShareUserFolderMenuView.xib */; };
 		F79918A221997FA300C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
-		F79918A42199806500C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
-		F79918A52199816500C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
 		F79A65C32191D90F00FF6DCC /* NCSelect.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F79A65C22191D90F00FF6DCC /* NCSelect.storyboard */; };
 		F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79A65C52191D95E00FF6DCC /* NCSelect.swift */; };
 		F7A321551E9E2A070069AD1B /* CCFavorites.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A3214F1E9E2A070069AD1B /* CCFavorites.m */; };
@@ -441,9 +443,6 @@
 		F7B6ACDB22FC2D15008AB646 /* NCComments.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B6ACDA22FC2D15008AB646 /* NCComments.m */; };
 		F7B6ACDC22FC2D15008AB646 /* NCComments.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B6ACDA22FC2D15008AB646 /* NCComments.m */; };
 		F7B6ACDD22FC2D15008AB646 /* NCComments.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B6ACDA22FC2D15008AB646 /* NCComments.m */; };
-		F7B6F70121BD0DD3007D194D /* DZNEmptyDataSet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BE621998F410004137E /* DZNEmptyDataSet.framework */; };
-		F7B6F70221BD0E6D007D194D /* MBProgressHUD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BF22199978B0004137E /* MBProgressHUD.framework */; };
-		F7B6F70321BD0EA0007D194D /* JDStatusBarNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BEC219993330004137E /* JDStatusBarNotification.framework */; };
 		F7B7504B2397D38F004E13EC /* UIImage+fixedOrientation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B7504A2397D38E004E13EC /* UIImage+fixedOrientation.swift */; };
 		F7BAADC81ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
 		F7BAADC91ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
@@ -452,16 +451,11 @@
 		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 */; };
-		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 */; };
 		F7C40BF32199978B0004137E /* MBProgressHUD.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40BF22199978B0004137E /* MBProgressHUD.framework */; };
 		F7C40C102199BA5D0004137E /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C0F2199BA5D0004137E /* Realm.framework */; };
 		F7C40C122199BA620004137E /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C112199BA620004137E /* RealmSwift.framework */; };
-		F7C40C132199BA6A0004137E /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C0F2199BA5D0004137E /* Realm.framework */; };
-		F7C40C142199BA6E0004137E /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C112199BA620004137E /* RealmSwift.framework */; };
-		F7C40C152199BA750004137E /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C0F2199BA5D0004137E /* Realm.framework */; };
-		F7C40C162199BA780004137E /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7C40C112199BA620004137E /* RealmSwift.framework */; };
 		F7C525A01E3B48B700FFE02C /* CCNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C5259F1E3B48B700FFE02C /* CCNotification.swift */; };
 		F7C525A21E3B6DA800FFE02C /* CCNotification.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7C525A11E3B6DA800FFE02C /* CCNotification.storyboard */; };
 		F7C9555321F0C4CA0024296E /* NCActivity.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7C9555221F0C4CA0024296E /* NCActivity.storyboard */; };
@@ -475,6 +469,7 @@
 		F7CA1ED720E7E3FE002CC65E /* PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CA1EC820E7E3FE002CC65E /* PKDownloadButton.m */; };
 		F7CA1ED820E7E3FE002CC65E /* PKBorderedButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CA1ECA20E7E3FE002CC65E /* PKBorderedButton.m */; };
 		F7CA1ED920E7E3FE002CC65E /* NSLayoutConstraint+PKDownloadButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F7CA1ECE20E7E3FE002CC65E /* NSLayoutConstraint+PKDownloadButton.m */; };
+		F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */; };
 		F7D2D127230804E000FD3ED7 /* NCXMLListParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D126230804E000FD3ED7 /* NCXMLListParser.m */; };
 		F7D2D128230804E000FD3ED7 /* NCXMLListParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D126230804E000FD3ED7 /* NCXMLListParser.m */; };
 		F7D2D129230804E000FD3ED7 /* NCXMLListParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D2D126230804E000FD3ED7 /* NCXMLListParser.m */; };
@@ -559,6 +554,7 @@
 		F7E0E1DE22327DBA006B0911 /* NCAudioRecorderViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F7E0E1DD22327DBA006B0911 /* NCAudioRecorderViewController.storyboard */; };
 		F7E4D9C422ED929B003675FD /* NCShareComments.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E4D9C322ED929B003675FD /* NCShareComments.swift */; };
 		F7E9C41B20F4CA870040CF18 /* CCTransfers.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E9C41820F4CA870040CF18 /* CCTransfers.m */; };
+		F7F4B1D823C74B3E00D82A6E /* NCRichWorkspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7F4B1D723C74B3E00D82A6E /* NCRichWorkspace.swift */; };
 		F7F54CE51E5B14C700E19C62 /* ImageError.png in Resources */ = {isa = PBXBuildFile; fileRef = F7F54CAF1E5B14C700E19C62 /* ImageError.png */; };
 		F7F54CE61E5B14C700E19C62 /* ImageError@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7F54CB01E5B14C700E19C62 /* ImageError@2x.png */; };
 		F7F54CE71E5B14C700E19C62 /* ImageError@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7F54CB11E5B14C700E19C62 /* ImageError@3x.png */; };
@@ -667,10 +663,6 @@
 		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>"; };
@@ -756,8 +748,8 @@
 		F716FE7723795E5000FABE50 /* NCCommunication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NCCommunication.framework; path = Carthage/Build/iOS/NCCommunication.framework; sourceTree = "<group>"; };
 		F716FE7923795EC500FABE50 /* FileProviderExtension+NetworkingDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FileProviderExtension+NetworkingDelegate.swift"; sourceTree = "<group>"; };
 		F7226EDB1EE4089300EBECB1 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
+		F722814223C8C34500C41898 /* NCRichWorkspace.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCRichWorkspace.xib; sourceTree = "<group>"; };
 		F7229B491DF71BB300E8C4E7 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = SOURCE_ROOT; };
-		F7233CED23A24F990011D898 /* NCViewerNextcloudText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCViewerNextcloudText.swift; sourceTree = "<group>"; };
 		F72382BB22958569005B8A07 /* FirebaseMLVisionTextModel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMLVisionTextModel.framework; sourceTree = "<group>"; };
 		F72382BE22958569005B8A07 /* GoogleMVTextDetectorResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = GoogleMVTextDetectorResources.bundle; sourceTree = "<group>"; };
 		F72382BF22958569005B8A07 /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleToolboxForMac.framework; sourceTree = "<group>"; };
@@ -774,6 +766,7 @@
 		F72AAEC51E5C60C700BB17E1 /* AHKActionSheetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AHKActionSheetViewController.m; sourceTree = "<group>"; };
 		F72D1005210B6882009C96B7 /* NCPushNotificationEncryption.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NCPushNotificationEncryption.m; sourceTree = "<group>"; };
 		F72D1006210B6882009C96B7 /* NCPushNotificationEncryption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCPushNotificationEncryption.h; sourceTree = "<group>"; };
+		F72D404823D2082500A97FD0 /* NCViewerNextcloudText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCViewerNextcloudText.swift; sourceTree = "<group>"; };
 		F72E0B9C21AD60BC00898D7B /* WeScan.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WeScan.framework; path = Carthage/Build/iOS/WeScan.framework; sourceTree = "<group>"; };
 		F73049B81CB567F000C7C320 /* NSString+TruncateToWidth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+TruncateToWidth.h"; sourceTree = "<group>"; };
 		F73049B91CB567F000C7C320 /* NSString+TruncateToWidth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+TruncateToWidth.m"; sourceTree = "<group>"; };
@@ -882,6 +875,10 @@
 		F747BA1E22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCCreateFormUploadVoiceNote.storyboard; sourceTree = "<group>"; };
 		F7496B81208F5651004B299C /* iOSClient.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = iOSClient.plist; sourceTree = "<group>"; };
 		F7496B83208F5652004B299C /* Share.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Share.plist; sourceTree = "<group>"; };
+		F749C10723C4A5330027D966 /* IntroCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntroCollectionViewCell.swift; sourceTree = "<group>"; };
+		F749C10823C4A5330027D966 /* IntroViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntroViewController.swift; sourceTree = "<group>"; };
+		F749C10923C4A5330027D966 /* Intro.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Intro.storyboard; sourceTree = "<group>"; };
+		F749C10A23C4A5340027D966 /* IntroCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IntroCollectionViewCell.xib; sourceTree = "<group>"; };
 		F74AFCE822E8B024003DE61F /* FSCalendar.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FSCalendar.framework; path = Carthage/Build/iOS/FSCalendar.framework; sourceTree = "<group>"; };
 		F74C4FBA2328C3C100A23E25 /* OpenSSL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenSSL.framework; path = Carthage/Build/iOS/OpenSSL.framework; sourceTree = "<group>"; };
 		F74D3DBD1BAC1941000BAE4B /* OCNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCNetworking.h; sourceTree = "<group>"; };
@@ -920,6 +917,7 @@
 		F75B91E21ECAE17800199C96 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
 		F75B91F71ECAE26300199C96 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = "<group>"; };
 		F75B923D1ECAE55E00199C96 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
+		F75C0C4723D1FAE300163CC8 /* NCRichWorkspaceCommon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCRichWorkspaceCommon.swift; sourceTree = "<group>"; };
 		F75CDBF51DF063AD00116AD0 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; name = .gitignore; path = ../.gitignore; sourceTree = "<group>"; };
 		F75EDFBC1E8C112F00E6F369 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
 		F75EDFBE1E8C116D00E6F369 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; };
@@ -1046,22 +1044,18 @@
 		F762CB831EACB81000B38484 /* REMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = REMenuItem.m; sourceTree = "<group>"; };
 		F762CB841EACB81000B38484 /* REMenuItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REMenuItemView.h; sourceTree = "<group>"; };
 		F762CB851EACB81000B38484 /* REMenuItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = REMenuItemView.m; sourceTree = "<group>"; };
-		F762CB8D1EACB84400B38484 /* icon-error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-error.png"; sourceTree = "<group>"; };
-		F762CB8E1EACB84400B38484 /* icon-error@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-error@2x.png"; sourceTree = "<group>"; };
-		F762CB8F1EACB84400B38484 /* icon-info.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-info.png"; sourceTree = "<group>"; };
-		F762CB901EACB84400B38484 /* icon-info@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-info@2x.png"; sourceTree = "<group>"; };
-		F762CB911EACB84400B38484 /* icon-success.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-success.png"; sourceTree = "<group>"; };
-		F762CB921EACB84400B38484 /* icon-success@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon-success@2x.png"; sourceTree = "<group>"; };
-		F762CB931EACB84400B38484 /* TWMessageBarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TWMessageBarManager.h; sourceTree = "<group>"; };
-		F762CB941EACB84400B38484 /* TWMessageBarManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TWMessageBarManager.m; sourceTree = "<group>"; };
 		F7632FBE21832F8700721B71 /* NCTrashSectionHeaderMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCTrashSectionHeaderMenu.xib; sourceTree = "<group>"; };
 		F7632FC0218353AA00721B71 /* NCTrashSectionFooter.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCTrashSectionFooter.xib; sourceTree = "<group>"; };
 		F76344751BF259A800188725 /* synchronized.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = synchronized.gif; sourceTree = "<group>"; };
 		F76344761BF259A800188725 /* synchronizedcrypto.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = synchronizedcrypto.gif; sourceTree = "<group>"; };
 		F7651A8823A2A3F2001403D2 /* NCCreateFormUploadDocuments.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCCreateFormUploadDocuments.storyboard; sourceTree = "<group>"; };
 		F7651A8923A2A3F2001403D2 /* NCCreateFormUploadDocuments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCCreateFormUploadDocuments.swift; sourceTree = "<group>"; };
+		F765608623BF806C00765969 /* QuickLayout.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLayout.framework; path = Carthage/Build/iOS/QuickLayout.framework; sourceTree = "<group>"; };
+		F765608A23BF80A400765969 /* SwiftEntryKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftEntryKit.framework; path = Carthage/Build/iOS/SwiftEntryKit.framework; sourceTree = "<group>"; };
+		F765608E23BF813500765969 /* NCContentPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCContentPresenter.swift; sourceTree = "<group>"; };
 		F76673EC22C901F5007ED366 /* FileProviderDomain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileProviderDomain.swift; sourceTree = "<group>"; };
 		F76673EF22C90433007ED366 /* FileProviderUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileProviderUtility.swift; sourceTree = "<group>"; };
+		F7682FDF23C36B0500983A04 /* NCMainTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMainTabBar.swift; sourceTree = "<group>"; };
 		F769453B22E9CFFF000A798A /* NCShareUserCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareUserCell.xib; sourceTree = "<group>"; };
 		F769453D22E9E97D000A798A /* NCShareUserMenuView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareUserMenuView.xib; sourceTree = "<group>"; };
 		F769453F22E9F077000A798A /* NCSharePaging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSharePaging.swift; sourceTree = "<group>"; };
@@ -1115,11 +1109,14 @@
 		F777F0301C29717F00CE81CB /* PHAsset+Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PHAsset+Utility.h"; sourceTree = "<group>"; };
 		F777F0311C29717F00CE81CB /* PHAsset+Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PHAsset+Utility.m"; sourceTree = "<group>"; };
 		F77D49A71DC238E500CDC568 /* loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = loading.gif; sourceTree = "<group>"; };
+		F77F5D2C23D5F28100D2B7EB /* NCMainRefreshControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMainRefreshControl.swift; sourceTree = "<group>"; };
 		F78071071EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+MainThread.h"; sourceTree = "<group>"; };
 		F78071081EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNotificationCenter+MainThread.m"; sourceTree = "<group>"; };
 		F781996722636BFA00EBDF6A /* HCFeatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HCFeatures.h; sourceTree = "<group>"; };
 		F781996822636BFA00EBDF6A /* HCFeatures.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HCFeatures.m; sourceTree = "<group>"; };
 		F787704E22E7019900F287A9 /* NCShareLinkCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NCShareLinkCell.xib; sourceTree = "<group>"; };
+		F78A18B523CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerRichWorkspaceWebView.swift; sourceTree = "<group>"; };
+		F78A18B723CDE2B300F681F3 /* NCViewerRichWorkspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerRichWorkspace.swift; sourceTree = "<group>"; };
 		F78AA20521F783E900D0F205 /* SwiftRichString.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftRichString.framework; path = Carthage/Build/iOS/SwiftRichString.framework; sourceTree = "<group>"; };
 		F78ACD3F21903CC20088454D /* NCGridCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCGridCell.swift; sourceTree = "<group>"; };
 		F78ACD4121903CE00088454D /* NCListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCListCell.swift; sourceTree = "<group>"; };
@@ -1248,6 +1245,7 @@
 		F7D0E65E1BC5042E008D989A /* CCDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CCDetail.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
 		F7D0E65F1BC5042E008D989A /* CCDetail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CCDetail.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
 		F7D154271E2392A300202FD9 /* Nextcloud-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Nextcloud-Bridging-Header.h"; sourceTree = "<group>"; };
+		F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCViewerRichWorkspace.storyboard; sourceTree = "<group>"; };
 		F7D2D125230804DF00FD3ED7 /* NCXMLListParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NCXMLListParser.h; sourceTree = "<group>"; };
 		F7D2D126230804E000FD3ED7 /* NCXMLListParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NCXMLListParser.m; sourceTree = "<group>"; };
 		F7D423161F0596AC009C9782 /* AppIcon-076.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AppIcon-076.png"; sourceTree = "<group>"; };
@@ -1360,6 +1358,7 @@
 		F7E9C41520F4CA870040CF18 /* CCTransfers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCTransfers.h; sourceTree = "<group>"; };
 		F7E9C41820F4CA870040CF18 /* CCTransfers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCTransfers.m; sourceTree = "<group>"; };
 		F7F0617A1BAACDD300846525 /* CryptoCloud.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoCloud.pch; sourceTree = "<group>"; };
+		F7F4B1D723C74B3E00D82A6E /* NCRichWorkspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCRichWorkspace.swift; sourceTree = "<group>"; };
 		F7F54CAF1E5B14C700E19C62 /* ImageError.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ImageError.png; sourceTree = "<group>"; };
 		F7F54CB01E5B14C700E19C62 /* ImageError@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ImageError@2x.png"; sourceTree = "<group>"; };
 		F7F54CB11E5B14C700E19C62 /* ImageError@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ImageError@3x.png"; sourceTree = "<group>"; };
@@ -1431,12 +1430,6 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F7B6F70321BD0EA0007D194D /* JDStatusBarNotification.framework in Frameworks */,
-				F7B6F70221BD0E6D007D194D /* MBProgressHUD.framework in Frameworks */,
-				F7B6F70121BD0DD3007D194D /* DZNEmptyDataSet.framework in Frameworks */,
-				F7C40C132199BA6A0004137E /* Realm.framework in Frameworks */,
-				F7C40C142199BA6E0004137E /* RealmSwift.framework in Frameworks */,
-				F79918A42199806500C2E308 /* UICKeyChainStore.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1444,9 +1437,6 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				F7C40C152199BA750004137E /* Realm.framework in Frameworks */,
-				F7C40C162199BA780004137E /* RealmSwift.framework in Frameworks */,
-				F79918A52199816500C2E308 /* UICKeyChainStore.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1473,13 +1463,14 @@
 				F7C40BE521998D5B0004137E /* MGSwipeTableCell.framework in Frameworks */,
 				F7D4B68B2295663D000C2C86 /* FirebaseInstanceID.framework in Frameworks */,
 				F745B251222D871800346520 /* QRCodeReader.framework in Frameworks */,
+				F765608723BF806D00765969 /* QuickLayout.framework in Frameworks */,
 				F7A3771A1EB2364A002856D3 /* Fabric.framework in Frameworks */,
 				F72382C32295856A005B8A07 /* GoogleToolboxForMac.framework in Frameworks */,
 				F72E0B9D21AD60BC00898D7B /* WeScan.framework in Frameworks */,
 				F7063DED2199E55F003F38DA /* SVGKit.framework in Frameworks */,
 				F7D4B6892295663D000C2C86 /* nanopb.framework in Frameworks */,
-				F7C40BED219993330004137E /* JDStatusBarNotification.framework in Frameworks */,
 				F7063DEF2199E568003F38DA /* CocoaLumberjack.framework in Frameworks */,
+				F765608B23BF80A400765969 /* SwiftEntryKit.framework in Frameworks */,
 				F72382C02295856A005B8A07 /* FirebaseMLVisionTextModel.framework in Frameworks */,
 				F7063DF12199E56F003F38DA /* CocoaLumberjackSwift.framework in Frameworks */,
 				F7D4B6952295666E000C2C86 /* Protobuf.framework in Frameworks */,
@@ -1597,22 +1588,24 @@
 		F70211F31BAC56E9003FC03E /* Main */ = {
 			isa = PBXGroup;
 			children = (
-				F78ACD50219046AC0088454D /* Section */,
-				F78ACD4D219043E70088454D /* Layout */,
-				F78ACD3E21903BA20088454D /* Cell */,
 				F78ACD5921904E460088454D /* ActionSheetHeaderView */,
+				F78ACD3E21903BA20088454D /* Cell */,
 				F7DFB7E9219C5A0500680748 /* Create cloud */,
-				F70211FA1BAC56E9003FC03E /* CCMain.h */,
-				F70211FB1BAC56E9003FC03E /* CCMain.m */,
-				F7226EDB1EE4089300EBECB1 /* Main.storyboard */,
+				F78ACD4D219043E70088454D /* Layout */,
+				F78ACD50219046AC0088454D /* Section */,
 				F7D0E65E1BC5042E008D989A /* CCDetail.h */,
 				F7D0E65F1BC5042E008D989A /* CCDetail.m */,
+				F70211FA1BAC56E9003FC03E /* CCMain.h */,
+				F70211FB1BAC56E9003FC03E /* CCMain.m */,
+				F73F537E1E929C8500F8678D /* CCMore.swift */,
 				F78F6FAE1CC8CCB700F4EA25 /* CCSection.h */,
 				F78F6FAF1CC8CCB700F4EA25 /* CCSection.m */,
 				F792A77B1BC7C45400C9388E /* CCSplit.h */,
 				F792A77C1BC7C45400C9388E /* CCSplit.m */,
+				F7226EDB1EE4089300EBECB1 /* Main.storyboard */,
 				F7D6650620FF341600BFBA9E /* NCMainCommon.swift */,
-				F73F537E1E929C8500F8678D /* CCMore.swift */,
+				F7682FDF23C36B0500983A04 /* NCMainTabBar.swift */,
+				F77F5D2C23D5F28100D2B7EB /* NCMainRefreshControl.swift */,
 				F77444F7222816D5000D5EB0 /* NCPhotosPickerViewController.swift */,
 			);
 			path = Main;
@@ -1684,10 +1677,10 @@
 			isa = PBXGroup;
 			children = (
 				F710E80F1EF95C9C00DC2427 /* ImagesIntro.xcassets */,
-				379DC948237EF4DD008EC025 /* IntroView.swift */,
-				375CF03C238282B7000F2B53 /* IntroCollectionViewCell.swift */,
-				375CF03D238282B7000F2B53 /* IntroCollectionViewCell.xib */,
-				379DC94A237EF4EB008EC025 /* IntroView.xib */,
+				F749C10923C4A5330027D966 /* Intro.storyboard */,
+				F749C10723C4A5330027D966 /* IntroCollectionViewCell.swift */,
+				F749C10A23C4A5340027D966 /* IntroCollectionViewCell.xib */,
+				F749C10823C4A5330027D966 /* IntroViewController.swift */,
 			);
 			path = Intro;
 			sourceTree = "<group>";
@@ -2147,29 +2140,6 @@
 			path = REMenu;
 			sourceTree = "<group>";
 		};
-		F762CB8B1EACB84400B38484 /* TWMessageBarManager */ = {
-			isa = PBXGroup;
-			children = (
-				F762CB8C1EACB84400B38484 /* Icons */,
-				F762CB931EACB84400B38484 /* TWMessageBarManager.h */,
-				F762CB941EACB84400B38484 /* TWMessageBarManager.m */,
-			);
-			path = TWMessageBarManager;
-			sourceTree = "<group>";
-		};
-		F762CB8C1EACB84400B38484 /* Icons */ = {
-			isa = PBXGroup;
-			children = (
-				F762CB8D1EACB84400B38484 /* icon-error.png */,
-				F762CB8E1EACB84400B38484 /* icon-error@2x.png */,
-				F762CB8F1EACB84400B38484 /* icon-info.png */,
-				F762CB901EACB84400B38484 /* icon-info@2x.png */,
-				F762CB911EACB84400B38484 /* icon-success.png */,
-				F762CB921EACB84400B38484 /* icon-success@2x.png */,
-			);
-			path = Icons;
-			sourceTree = "<group>";
-		};
 		F7632FC32183667400721B71 /* Section */ = {
 			isa = PBXGroup;
 			children = (
@@ -2269,9 +2239,9 @@
 		F79630EC215526B60015EEA5 /* Viewer */ = {
 			isa = PBXGroup;
 			children = (
+				F72D404823D2082500A97FD0 /* NCViewerNextcloudText.swift */,
 				F790110D21415BF600D7B136 /* NCViewerRichdocument.swift */,
 				F7FB1D3D215E191D00D669EA /* NCViewerDocumentWeb.swift */,
-				F7233CED23A24F990011D898 /* NCViewerNextcloudText.swift */,
 				F79630ED215527D40015EEA5 /* NCViewerMedia.swift */,
 			);
 			path = Viewer;
@@ -2447,6 +2417,7 @@
 				F7053E3C1C639DF500741EA5 /* CCUtility.h */,
 				F7053E3D1C639DF500741EA5 /* CCUtility.m */,
 				F78E7064219F096B006F23E4 /* NCAvatar.swift */,
+				F765608E23BF813500765969 /* NCContentPresenter.swift */,
 				F707C26421A2DC5200F6181E /* NCStoreReview.swift */,
 				F70BFC7320E0FA7C00C67599 /* NCUtility.swift */,
 				F78071071EDAB65800EAFFF6 /* NSNotificationCenter+MainThread.h */,
@@ -2537,6 +2508,19 @@
 			path = PKDownloadButton;
 			sourceTree = "<group>";
 		};
+		F7CADB3D23CCDDA1000EEC78 /* RichWorkspace */ = {
+			isa = PBXGroup;
+			children = (
+				F7F4B1D723C74B3E00D82A6E /* NCRichWorkspace.swift */,
+				F722814223C8C34500C41898 /* NCRichWorkspace.xib */,
+				F75C0C4723D1FAE300163CC8 /* NCRichWorkspaceCommon.swift */,
+				F7D1611F23CF19E30039EBBF /* NCViewerRichWorkspace.storyboard */,
+				F78A18B723CDE2B300F681F3 /* NCViewerRichWorkspace.swift */,
+				F78A18B523CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift */,
+			);
+			path = RichWorkspace;
+			sourceTree = "<group>";
+		};
 		F7D423151F0596AC009C9782 /* Graphics */ = {
 			isa = PBXGroup;
 			children = (
@@ -2712,7 +2696,6 @@
 				F7B4F1C51F44356F00B53B42 /* NCUchardet */,
 				F760F75621F21F61006B1A73 /* PhotoEditor */,
 				F762CB7B1EACB81000B38484 /* REMenu */,
-				F762CB8B1EACB84400B38484 /* TWMessageBarManager */,
 				F762CB1C1EACB7D400B38484 /* VFR Pdf Reader */,
 				F762CA9F1EACB66200B38484 /* XLForm */,
 			);
@@ -2823,6 +2806,7 @@
 				F7C5259A1E3B441D00FFE02C /* Notification */,
 				F7381ED9218218A4000B1560 /* Offline */,
 				F7FCFFD51D70798C000E6E29 /* PeekPop */,
+				F7CADB3D23CCDDA1000EEC78 /* RichWorkspace */,
 				F758B41E212C516300515F55 /* ScanDocument */,
 				F7FE125B1BAC03FB0041924B /* Security */,
 				F79A65C12191D8DC00FF6DCC /* Select */,
@@ -2863,6 +2847,8 @@
 		F7FC7D541DC1F93700BB2C6A /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				F765608A23BF80A400765969 /* SwiftEntryKit.framework */,
+				F765608623BF806C00765969 /* QuickLayout.framework */,
 				F716FE7723795E5000FABE50 /* NCCommunication.framework */,
 				F7E856182351D7BE009A3330 /* SwiftyXMLParser.framework */,
 				F736B551234DCF57008A5C9F /* Alamofire.framework */,
@@ -3133,7 +3119,6 @@
 			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 */,
@@ -3144,7 +3129,6 @@
 				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 */,
@@ -3154,7 +3138,6 @@
 				F700222C1EC479840080073F /* Custom.xcassets in Resources */,
 				F758B45A212C564000515F55 /* Scan.storyboard in Resources */,
 				F77B0EFE1D118A16002130FE /* CCUploadFromOtherUpp.storyboard in Resources */,
-				F762CB991EACB84400B38484 /* icon-success.png in Resources */,
 				F7F54CF81E5B14C700E19C62 /* PlayButtonOverlayLargeTap@2x.png in Resources */,
 				F73B4EEE1F470D9100BBEE4B /* Big5Freq.tab in Resources */,
 				F7D4233B1F0596AC009C9782 /* Reader-Button-N.png in Resources */,
@@ -3177,7 +3160,6 @@
 				F7F54D031E5B14C800E19C62 /* VideoOverlay.png in Resources */,
 				F7F54CE81E5B14C700E19C62 /* ImageSelectedOff.png in Resources */,
 				F7D4234B1F0596AC009C9782 /* Reader-Print@2x.png in Resources */,
-				F762CB971EACB84400B38484 /* icon-info.png in Resources */,
 				F7169A1E1EE590930086BD69 /* NCSharesCell.xib in Resources */,
 				F73D71641F2674A400E233EB /* NCText.storyboard in Resources */,
 				F7226EDC1EE4089300EBECB1 /* Main.storyboard in Resources */,
@@ -3190,7 +3172,6 @@
 				F739513A221B127F00D986C8 /* NCSectionMediaHeader.xib in Resources */,
 				F77B0F481D118A16002130FE /* synchronized.gif in Resources */,
 				F7D4233E1F0596AC009C9782 /* Reader-Email.png in Resources */,
-				F762CB981EACB84400B38484 /* icon-info@2x.png in Resources */,
 				F7D423361F0596AC009C9782 /* AppIcon-167.png in Resources */,
 				F7F54CF71E5B14C700E19C62 /* PlayButtonOverlayLargeTap.png in Resources */,
 				F7E0E1DE22327DBA006B0911 /* NCAudioRecorderViewController.storyboard in Resources */,
@@ -3200,18 +3181,19 @@
 				F760F78621F21F61006B1A73 /* LaunchScreen.storyboard in Resources */,
 				F7381EE5218218C9000B1560 /* NCOffline.storyboard in Resources */,
 				F769453E22E9E97E000A798A /* NCShareUserMenuView.xib in Resources */,
+				F749C10E23C4A5340027D966 /* IntroCollectionViewCell.xib in Resources */,
 				F7F54CF11E5B14C700E19C62 /* ImageSelectedSmallOn.png in Resources */,
 				F723B3DD22FC6D1D00301EFE /* NCShareCommentsCell.xib in Resources */,
 				F760F77C21F21F61006B1A73 /* StickersViewController.xib in Resources */,
 				F762CB1B1EACB66200B38484 /* XLForm.bundle in Resources */,
 				F78ACD4B21903F850088454D /* NCTrashListCell.xib in Resources */,
 				F700510122DF63AC003A3356 /* NCShare.storyboard in Resources */,
-				F762CB9A1EACB84400B38484 /* icon-success@2x.png in Resources */,
 				F77B0F571D118A16002130FE /* synchronizedcrypto.gif in Resources */,
 				F72382C22295856A005B8A07 /* GoogleMVTextDetectorResources.bundle in Resources */,
 				F7F54CEE1E5B14C700E19C62 /* ImageSelectedSmallOff.png in Resources */,
 				F787704F22E7019900F287A9 /* NCShareLinkCell.xib in Resources */,
 				F760F79721F21F61006B1A73 /* StickerCollectionViewCell.xib in Resources */,
+				F749C10D23C4A5340027D966 /* Intro.storyboard in Resources */,
 				F747BA1F22354D2000971601 /* NCCreateFormUploadVoiceNote.storyboard in Resources */,
 				F73B4EF31F470D9100BBEE4B /* GB2312Freq.tab in Resources */,
 				F7B2DEF11F976859007CF4D2 /* english.txt in Resources */,
@@ -3230,13 +3212,13 @@
 				F774DF0F1FCC26BE002AF9FC /* iTunesArtwork@1x.png in Resources */,
 				F78ACD54219047D40088454D /* NCSectionFooter.xib in Resources */,
 				F77B0F611D118A16002130FE /* Acknowledgements.rtf in Resources */,
+				F7D1612023CF19E30039EBBF /* NCViewerRichWorkspace.storyboard in Resources */,
 				F77B0F631D118A16002130FE /* Localizable.strings in Resources */,
 				F7632FC1218353AA00721B71 /* NCTrashSectionFooter.xib in Resources */,
 				F7D4234C1F0596AC009C9782 /* Reader-Print@3x.png in Resources */,
 				F7F54CFB1E5B14C700E19C62 /* UIBarButtonItemArrowLeft@2x.png in Resources */,
 				F7C525A21E3B6DA800FFE02C /* CCNotification.storyboard in Resources */,
 				F7F54CEB1E5B14C700E19C62 /* ImageSelectedOn.png in Resources */,
-				F762CB951EACB84400B38484 /* icon-error.png in Resources */,
 				F7F54CF01E5B14C700E19C62 /* ImageSelectedSmallOff@3x.png in Resources */,
 				F73B4EF01F470D9100BBEE4B /* CMakeLists.txt in Resources */,
 				F7F54CEC1E5B14C700E19C62 /* ImageSelectedOn@2x.png in Resources */,
@@ -3246,6 +3228,7 @@
 				F7D4233A1F0596AC009C9782 /* Reader-Button-H@3x.png in Resources */,
 				F7D423341F0596AC009C9782 /* AppIcon-120.png in Resources */,
 				F7D4234F1F0596AC009C9782 /* Reader-Thumbs@3x.png in Resources */,
+				F722814323C8C34500C41898 /* NCRichWorkspace.xib in Resources */,
 				F7F54CE51E5B14C700E19C62 /* ImageError.png in Resources */,
 				F7D423381F0596AC009C9782 /* Reader-Button-H.png in Resources */,
 				F7F54CFC1E5B14C700E19C62 /* UIBarButtonItemArrowLeft@3x.png in Resources */,
@@ -3270,7 +3253,6 @@
 				F73B4EF11F470D9100BBEE4B /* EUCKRFreq.tab in Resources */,
 				F7501C322212E57500FB1415 /* NCMedia.storyboard in Resources */,
 				F774DF111FCC26BE002AF9FC /* iTunesArtwork@3x.png in Resources */,
-				F762CB961EACB84400B38484 /* icon-error@2x.png in Resources */,
 				F7D4234A1F0596AC009C9782 /* Reader-Print.png in Resources */,
 				F7D423331F0596AC009C9782 /* AppIcon-076.png in Resources */,
 				F7F54CFD1E5B14C700E19C62 /* UIBarButtonItemArrowRight.png in Resources */,
@@ -3304,7 +3286,6 @@
 				"$(SRCROOT)/Carthage/Build/iOS/UICKeyChainStore.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/MGSwipeTableCell.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/DZNEmptyDataSet.framework",
-				"$(SRCROOT)/Carthage/Build/iOS/JDStatusBarNotification.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/KTVHTTPCache.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/KTVCocoaHTTPServer.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/MBProgressHUD.framework",
@@ -3327,6 +3308,8 @@
 				"$(SRCROOT)/Carthage/Build/iOS/SwiftyXMLParser.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/NCCommunication.framework",
 				"$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework",
+				"$(SRCROOT)/Carthage/Build/iOS/QuickLayout.framework",
+				"$(SRCROOT)/Carthage/Build/iOS/SwiftEntryKit.framework",
 			);
 			outputPaths = (
 			);
@@ -3389,6 +3372,7 @@
 				F732BA0B1D76DBA500E9878B /* CCNetworking.m in Sources */,
 				F70022CF1EC4C9100080073F /* OCShareUser.m in Sources */,
 				F71459E11D12E3B700CAFEEC /* CCHud.m in Sources */,
+				F765609023BF813600765969 /* NCContentPresenter.swift in Sources */,
 				F70022EA1EC4C9100080073F /* OCXMLShareByLinkParser.m in Sources */,
 				F70022D81EC4C9100080073F /* NSDate+RFC1123.m in Sources */,
 				F75A9EE723796C6F0044CFCE /* NCNetworking.swift in Sources */,
@@ -3467,6 +3451,7 @@
 				F7434B3F20E2404B00417916 /* OCNotifications.m in Sources */,
 				F7434B6020E2445200417916 /* CCExifGeo.m in Sources */,
 				F7434B5420E240A300417916 /* NSString+Encode.m in Sources */,
+				F765609123BF813600765969 /* NCContentPresenter.swift in Sources */,
 				F7434B4E20E2408A00417916 /* OCWebDAVClient.m in Sources */,
 				F771E3F820E239B500AFB62D /* FileProviderExtension+Thumbnail.swift in Sources */,
 				F7434B4D20E2408600417916 /* OCHTTPRequestOperation.m in Sources */,
@@ -3491,7 +3476,6 @@
 				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 */,
@@ -3548,21 +3532,24 @@
 				F73B4F111F470D9100BBEE4B /* nsSBCSGroupProber.cpp in Sources */,
 				F7B6ACD622FC2BD4008AB646 /* NCXMLCommentsParser.m in Sources */,
 				F738E8421F90FFD100F95C8E /* NCManageEndToEndEncryption.m in Sources */,
+				F78A18B823CDE2B300F681F3 /* NCViewerRichWorkspace.swift in Sources */,
+				F78A18B623CDD07D00F681F3 /* NCViewerRichWorkspaceWebView.swift in Sources */,
 				F75A9EE623796C6F0044CFCE /* NCNetworking.swift in Sources */,
 				F760F79D21F21F61006B1A73 /* CropRectView.swift in Sources */,
 				F73B4F091F470D9100BBEE4B /* nsEUCKRProber.cpp in Sources */,
 				F758B460212C56A400515F55 /* ScanCollectionView.swift in Sources */,
 				F762CB021EACB66200B38484 /* XLFormSliderCell.m in Sources */,
 				F78ACD52219046DC0088454D /* NCSectionHeaderFooter.swift in Sources */,
+				F749C10C23C4A5340027D966 /* IntroViewController.swift in Sources */,
 				F77B0E1B1D118A16002130FE /* CCGraphics.m in Sources */,
 				F70022CB1EC4C9100080073F /* OCSharedDto.m in Sources */,
 				F7CA1ED320E7E3FE002CC65E /* PKStopDownloadButton.m in Sources */,
 				F762CB111EACB66200B38484 /* NSString+XLFormAdditions.m in Sources */,
-				F762CB9B1EACB84400B38484 /* TWMessageBarManager.m in Sources */,
 				F7D423871F0596C6009C9782 /* ReaderThumbsView.m in Sources */,
 				F7DFB7EB219C5A2E00680748 /* NCCreateMenuAdd.swift in Sources */,
 				F7F54D0A1E5B14C800E19C62 /* MWPhotoBrowser.m in Sources */,
 				F762CB081EACB66200B38484 /* XLFormOptionsViewController.m in Sources */,
+				F72D404923D2082500A97FD0 /* NCViewerNextcloudText.swift in Sources */,
 				F73CC0721E813DFF006E3047 /* BKPasscodeLockScreenManager.m in Sources */,
 				F760F78B21F21F61006B1A73 /* UIImage+Crop.swift in Sources */,
 				F73B4F101F470D9100BBEE4B /* nsSBCharSetProber.cpp in Sources */,
@@ -3610,6 +3597,7 @@
 				F760F77D21F21F61006B1A73 /* ColorsCollectionViewDelegate.swift in Sources */,
 				F7BAADC81ED5A87C00B7EAD4 /* NCDatabase.swift in Sources */,
 				F70022E61EC4C9100080073F /* OCXMLServerErrorsParser.m in Sources */,
+				F75C0C4823D1FAE300163CC8 /* NCRichWorkspaceCommon.swift in Sources */,
 				F762CB171EACB66200B38484 /* XLFormRegexValidator.m in Sources */,
 				F729B92D217A2F1B00FE2150 /* NCActionSheetHeaderView.swift in Sources */,
 				F760F78721F21F61006B1A73 /* PhotoEditor+Font.swift in Sources */,
@@ -3623,6 +3611,7 @@
 				F73B4F061F470D9100BBEE4B /* nsEscCharsetProber.cpp in Sources */,
 				F7D4237D1F0596C6009C9782 /* ReaderContentView.m in Sources */,
 				F73B4EFA1F470D9100BBEE4B /* LangFrenchModel.cpp in Sources */,
+				F7682FE023C36B0500983A04 /* NCMainTabBar.swift in Sources */,
 				F762CAF91EACB66200B38484 /* XLFormCheckCell.m in Sources */,
 				F762CB101EACB66200B38484 /* NSPredicate+XLFormAdditions.m in Sources */,
 				F7D4237E1F0596C6009C9782 /* ReaderDocument.m in Sources */,
@@ -3646,6 +3635,7 @@
 				F754EECC21772B6100BB1CDF /* SectionHeader.swift in Sources */,
 				F7B174C822FAC0A8000B7579 /* AppDelegate.m in Sources */,
 				F73CC0751E813DFF006E3047 /* BKPasscodeViewController.m in Sources */,
+				F749C10B23C4A5340027D966 /* IntroCollectionViewCell.swift in Sources */,
 				F7DBC37F23325E2E001A85BA /* NCXMLGetAppPasswordParser.m in Sources */,
 				F750374D1DBFA91A008FB480 /* ALView+PureLayout.m in Sources */,
 				F7381EE1218218C9000B1560 /* NCOffline.swift in Sources */,
@@ -3694,15 +3684,15 @@
 				F70022D41EC4C9100080073F /* NSDate+ISO8601.m in Sources */,
 				F762CB151EACB66200B38484 /* XLFormRowNavigationAccessoryView.m in Sources */,
 				F762CB0A1EACB66200B38484 /* XLFormDescriptor.m in Sources */,
+				F77F5D2D23D5F28100D2B7EB /* NCMainRefreshControl.swift in Sources */,
 				F7D4238C1F0596C6009C9782 /* UIXToolbarView.m in Sources */,
-				F7233CEE23A24F990011D898 /* NCViewerNextcloudText.swift in Sources */,
 				F7020FCE2233D7F700B7297D /* NCCreateFormUploadVoiceNote.swift in Sources */,
+				F7F4B1D823C74B3E00D82A6E /* NCRichWorkspace.swift in Sources */,
 				F726EEEC1FED1C820030B9C8 /* NCEndToEndInitialize.swift in Sources */,
 				F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */,
 				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 */,
@@ -3738,6 +3728,7 @@
 				F7CA1ED820E7E3FE002CC65E /* PKBorderedButton.m in Sources */,
 				F7D4237B1F0596C6009C9782 /* ReaderContentPage.m in Sources */,
 				F73B4F0A1F470D9100BBEE4B /* nsEUCTWProber.cpp in Sources */,
+				F765608F23BF813600765969 /* NCContentPresenter.swift in Sources */,
 				F762CB871EACB81000B38484 /* REMenu.m in Sources */,
 				F762CB091EACB66200B38484 /* XLFormViewController.m in Sources */,
 				F760F79621F21F61006B1A73 /* PhotoEditorViewController.swift in Sources */,
@@ -3854,7 +3845,7 @@
 				CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/Share.entitlements;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -3873,7 +3864,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "\"Libraries external\"/**";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.Nextcloud.Share;
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3898,7 +3889,7 @@
 				CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/Share.entitlements;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -3917,7 +3908,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "\"Libraries external\"/**";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = it.twsweb.Nextcloud.Share;
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3948,7 +3939,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -3967,7 +3958,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "\"Libraries external\"/**";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.Nextcloud.File-Provider-Extension";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -3998,7 +3989,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -4017,7 +4008,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "\"Libraries external\"/**";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.Nextcloud.File-Provider-Extension";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -4032,7 +4023,7 @@
 		F77B0F9B1D118A16002130FE /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
 				CLANG_ENABLE_MODULES = YES;
@@ -4040,7 +4031,7 @@
 				CODE_SIGN_ENTITLEMENTS = iOSClient/Brand/iOSClient.entitlements;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				ENABLE_BITCODE = YES;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -4058,7 +4049,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				OTHER_SWIFT_FLAGS = "";
 				PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.$(PRODUCT_NAME:rfc1034identifier)";
@@ -4078,7 +4069,7 @@
 		F77B0F9C1D118A16002130FE /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
 				CLANG_ENABLE_MODULES = YES;
@@ -4087,7 +4078,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 11;
 				DEVELOPMENT_TEAM = 6JLRKY9ZV7;
 				ENABLE_BITCODE = YES;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -4104,7 +4095,7 @@
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LIBRARY_SEARCH_PATHS = "";
-				MARKETING_VERSION = 2.25.3;
+				MARKETING_VERSION = 2.25.4;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = "it.twsweb.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -4122,7 +4113,7 @@
 		F7F67BC91A24D27800EE80DA /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
@@ -4185,7 +4176,7 @@
 		F7F67BCA1A24D27800EE80DA /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
 				ALWAYS_SEARCH_USER_PATHS = NO;
 				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
 				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";

+ 2 - 1
Share/CCCellShareExt.h

@@ -26,7 +26,8 @@
 @interface CCCellShareExt : UITableViewCell
 
 @property(nonatomic, weak) IBOutlet UIImageView *fileImageView;
-@property(nonatomic, weak) IBOutlet UILabel *labelInformazioni;
+@property(nonatomic, weak) IBOutlet UITextField *fileName;
+@property(nonatomic, weak) IBOutlet UILabel *info;
 
 //Last position of the scroll of the swipe
 @property (nonatomic, assign) CGFloat lastContentOffset;

+ 0 - 14
Share/CCCellShareExt.m

@@ -29,9 +29,6 @@
 {
     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
     if (self) {
-        // Initialization code
-
-        
     }
     return self;
 }
@@ -39,19 +36,8 @@
 - (void)setSelected:(BOOL)selected animated:(BOOL)animated
 {
     [super setSelected:selected animated:animated];
-
-    // Configure the view for the selected state
 }
 
-///-----------------------------------
-/// @name scrollViewWillBeginDecelerating
-///-----------------------------------
-
-/**
- * Method to initialize the position where we make the swipe in order to detect the direction
- *
- * @param UIScrollView -> scrollView
- */
 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
     _lastContentOffset = scrollView.contentOffset.x;
 }

+ 31 - 20
Share/CCCellShareExt.xib

@@ -1,11 +1,9 @@
 <?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" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -15,38 +13,51 @@
             <rect key="frame" x="0.0" y="0.0" width="597" height="80"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
             <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="2" id="sQq-jC-UEV">
-                <rect key="frame" x="0.0" y="0.0" width="597" height="79.5"/>
+                <rect key="frame" x="0.0" y="0.0" width="597" height="80"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
-                    <label opaque="NO" userInteractionEnabled="NO" tag="102" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="15D-cA-LLO" userLabel="Informazioni">
-                        <rect key="frame" x="103" y="2.5" width="484" height="75"/>
-                        <constraints>
-                            <constraint firstAttribute="height" constant="75" id="vPY-Rf-Mrc" userLabel="height = 70"/>
-                        </constraints>
-                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                        <color key="textColor" red="0.3333333432674408" green="0.3333333432674408" blue="0.3333333432674408" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                        <nil key="highlightedColor"/>
-                    </label>
-                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5">
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="5">
                         <rect key="frame" x="10" y="5" width="70" height="70"/>
                         <constraints>
                             <constraint firstAttribute="height" constant="70" id="2Z3-9a-dWb"/>
                             <constraint firstAttribute="width" constant="70" id="fbQ-SN-CAK"/>
                         </constraints>
                     </imageView>
+                    <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="VsB-d4-Sow">
+                        <rect key="frame" x="90" y="20" width="497" height="20"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="20" id="Dk0-na-bfK"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                        <textInputTraits key="textInputTraits"/>
+                    </textField>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Ow-Hb-LiN">
+                        <rect key="frame" x="90" y="55" width="497" height="20"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="20" id="9pk-f4-eS9"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
                 </subviews>
                 <constraints>
                     <constraint firstItem="5" firstAttribute="centerY" secondItem="sQq-jC-UEV" secondAttribute="centerY" id="3LF-0l-IUQ"/>
-                    <constraint firstItem="15D-cA-LLO" firstAttribute="centerY" secondItem="sQq-jC-UEV" secondAttribute="centerY" id="AAD-cK-soS"/>
-                    <constraint firstAttribute="trailing" secondItem="15D-cA-LLO" secondAttribute="trailing" constant="10" id="ZZf-b6-uAj"/>
-                    <constraint firstItem="15D-cA-LLO" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leading" constant="103" id="bSg-xJ-sEw"/>
+                    <constraint firstItem="VsB-d4-Sow" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="10" id="CrK-6o-Z32"/>
+                    <constraint firstAttribute="trailing" secondItem="0Ow-Hb-LiN" secondAttribute="trailing" constant="10" id="DiV-IR-cy6"/>
+                    <constraint firstAttribute="bottom" secondItem="0Ow-Hb-LiN" secondAttribute="bottom" constant="5" id="ObO-OF-tvn"/>
+                    <constraint firstItem="0Ow-Hb-LiN" firstAttribute="leading" secondItem="5" secondAttribute="trailing" constant="10" id="PFo-Au-ORj"/>
+                    <constraint firstAttribute="trailing" secondItem="VsB-d4-Sow" secondAttribute="trailing" constant="10" id="Q94-2Q-wue"/>
                     <constraint firstItem="5" firstAttribute="leading" secondItem="sQq-jC-UEV" secondAttribute="leading" constant="10" id="fuA-E4-YoA"/>
+                    <constraint firstItem="VsB-d4-Sow" firstAttribute="top" secondItem="sQq-jC-UEV" secondAttribute="top" constant="20" id="pdW-jk-v6V"/>
                 </constraints>
             </tableViewCellContentView>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <connections>
+                <outlet property="Info" destination="9pk-f4-eS9" id="vm7-h8-kBz"/>
                 <outlet property="fileImageView" destination="5" id="6"/>
-                <outlet property="labelInformazioni" destination="15D-cA-LLO" id="So0-uY-bRj"/>
+                <outlet property="fileName" destination="VsB-d4-Sow" id="IiA-92-aJd"/>
+                <outlet property="info" destination="0Ow-Hb-LiN" id="Hhb-VE-mwc"/>
             </connections>
             <point key="canvasLocation" x="248.55072463768118" y="278.57142857142856"/>
         </tableViewCell>

+ 45 - 28
Share/CCloadItemData.swift

@@ -30,7 +30,8 @@ class CCloadItemData: NSObject {
         
         var filesName: [String] = []
         var conuter = 0
-        let hud = CCHud(view: vc.view)!
+        
+        CCUtility.clearTmpDirectory()
                 
         if let inputItems : [NSExtensionItem] = extensionContext.inputItems as? [NSExtensionItem] {
             
@@ -49,31 +50,44 @@ class CCloadItemData: NSObject {
                     
                     for (index, current) in (attachments.enumerated()) {
                         
-                        if current.hasItemConformingToTypeIdentifier(kUTTypeItem as String) {
+                        if current.hasItemConformingToTypeIdentifier(kUTTypeItem as String) || current.hasItemConformingToTypeIdentifier("public.url") {
                             
-                            hud.visibleIndeterminateHud()
+                            var typeIdentifier = ""
+                            if current.hasItemConformingToTypeIdentifier(kUTTypeItem as String) { typeIdentifier = kUTTypeItem as String }
+                            if current.hasItemConformingToTypeIdentifier("public.url") { typeIdentifier = "public.url" }
                             
-                            current.loadItem(forTypeIdentifier: kUTTypeItem as String, options: nil, completionHandler: {(item, error) -> Void in
+                            current.loadItem(forTypeIdentifier: typeIdentifier, options: nil, completionHandler: {(item, error) -> Void in
+                                
+                                var fileNameOriginal: String?
+                                var fileName: String = ""
+                                
+                                let dateFormatter = DateFormatter()
+                                dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss-"
+                                conuter += 1
+                                
+                                if let url = item as? NSURL {
+                                    fileNameOriginal = url.lastPathComponent!
+                                }
                                 
                                 if error == nil {
-                                    
-                                    let dateFormatter = DateFormatter()
-                                    dateFormatter.dateFormat = "yyyy-MM-dd HH-mm-ss-"
-                                    conuter += 1
-                                    
+                                                                        
                                     if let image = item as? UIImage {
                                         
                                         print("item as UIImage")
                                         
                                         if let pngImageData = image.pngData() {
                                         
-                                            let fileName = "\(dateFormatter.string(from: Date()))\(conuter).png"
+                                            if fileNameOriginal != nil {
+                                                fileName =  fileNameOriginal!
+                                            } else {
+                                                fileName = "\(dateFormatter.string(from: Date()))\(conuter).png"
+                                            }
+                                            
                                             let filenamePath = directory + fileName
-                                        
+                                            
                                             let result = (try? pngImageData.write(to: URL(fileURLWithPath: filenamePath), options: [.atomic])) != nil
                                         
                                             if result {
-                                         
                                                 filesName.append(fileName)
                                             }
                                             
@@ -87,11 +101,15 @@ class CCloadItemData: NSObject {
                                         
                                         print("item as url: \(String(describing: item))")
                                         
-                                        let ext = url.pathExtension
-                                        let fileName = "\(dateFormatter.string(from: Date()))\(conuter)." + ext
-
-                                        let filenamePath = directory + fileName
+                                        if fileNameOriginal != nil {
+                                            fileName =  fileNameOriginal!
+                                        } else {
+                                            let ext = url.pathExtension
+                                            fileName = "\(dateFormatter.string(from: Date()))\(conuter)." + ext
+                                        }
                                         
+                                        let filenamePath = directory + fileName
+                                      
                                         do {
                                             try FileManager.default.removeItem(atPath: filenamePath)
                                         }
@@ -128,15 +146,18 @@ class CCloadItemData: NSObject {
                                         
                                             print("item as NSdata")
                                         
-                                            let description = current.description
-                                        
-                                            let fullNameArr = description.components(separatedBy: "\"")
-                                            let fileExtArr = fullNameArr[1].components(separatedBy: ".")
-                                            let pathExtention = (fileExtArr[fileExtArr.count-1]).uppercased()
-                                        
-                                            let fileName = "\(dateFormatter.string(from: Date()))\(conuter).\(pathExtention)"
+                                            if fileNameOriginal != nil {
+                                                fileName =  fileNameOriginal!
+                                            } else {
+                                                let description = current.description
+                                                let fullNameArr = description.components(separatedBy: "\"")
+                                                let fileExtArr = fullNameArr[1].components(separatedBy: ".")
+                                                let pathExtention = (fileExtArr[fileExtArr.count-1]).uppercased()
+                                                fileName = "\(dateFormatter.string(from: Date()))\(conuter).\(pathExtention)"
+                                            }
+                                            
                                             let filenamePath = directory + fileName
-
+                                            
                                             FileManager.default.createFile(atPath: filenamePath, contents:data, attributes:nil)
                                                                                 
                                             filesName.append(fileName)
@@ -161,12 +182,8 @@ class CCloadItemData: NSObject {
                                     if index + 1 == attachments.count {
                                         
                                         vc.performSelector(onMainThread: #selector(vc.reloadData), with:filesName, waitUntilDone: false)
-                                        hud.performSelector(onMainThread: #selector(CCHud.hideHud), with: nil, waitUntilDone: false)
                                     }
                                     
-                                } else {
-                                    
-                                    hud.performSelector(onMainThread: #selector(CCHud.hideHud), with: nil, waitUntilDone: false)
                                 }
                             })
                             

+ 10 - 13
Share/MainInterface.storyboard

@@ -1,11 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="yQd-yC-53O">
-    <device id="retina4_7" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="yQd-yC-53O">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
@@ -15,7 +13,7 @@
                 <navigationController id="yQd-yC-53O" sceneMemberID="viewController">
                     <nil key="simulatedStatusBarMetrics"/>
                     <navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="Qr0-yX-mDZ">
-                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                         <autoresizingMask key="autoresizingMask"/>
                     </navigationBar>
                     <connections>
@@ -35,11 +33,11 @@
                         <viewControllerLayoutGuide type="bottom" id="d5i-Ba-RvD"/>
                     </layoutGuides>
                     <view key="view" contentMode="scaleToFill" id="wbc-yd-nQP">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="623"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
                             <toolbar contentMode="scaleToFill" translucent="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gad-k1-Oh8">
-                                <rect key="frame" x="-8" y="559" width="387" height="44"/>
+                                <rect key="frame" x="-8" y="579" width="387" height="44"/>
                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="44" id="rZR-ep-syc"/>
@@ -54,8 +52,8 @@
                                     <barButtonItem style="plain" systemItem="flexibleSpace" id="eZh-WQ-5L1"/>
                                 </items>
                             </toolbar>
-                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="110" sectionHeaderHeight="40" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="6bg-ed-mfL">
-                                <rect key="frame" x="-3" y="0.0" width="381" height="559"/>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="110" sectionHeaderHeight="1" sectionFooterHeight="1" translatesAutoresizingMaskIntoConstraints="NO" id="6bg-ed-mfL">
+                                <rect key="frame" x="0.0" y="0.0" width="375" height="579"/>
                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <connections>
                                     <outlet property="dataSource" destination="j1y-V4-xli" id="cqC-oT-nbV"/>
@@ -66,14 +64,13 @@
                         <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                         <constraints>
                             <constraint firstAttribute="trailingMargin" secondItem="gad-k1-Oh8" secondAttribute="trailing" constant="-20" id="Ogc-Ss-sTA"/>
-                            <constraint firstItem="d5i-Ba-RvD" firstAttribute="top" secondItem="gad-k1-Oh8" secondAttribute="bottom" id="ZbI-py-8av"/>
-                            <constraint firstItem="6bg-ed-mfL" firstAttribute="leading" secondItem="wbc-yd-nQP" secondAttribute="leadingMargin" constant="-19" id="aoW-xE-g2g"/>
-                            <constraint firstAttribute="trailingMargin" secondItem="6bg-ed-mfL" secondAttribute="trailing" constant="-19" id="fyA-0H-E9s"/>
+                            <constraint firstAttribute="trailing" secondItem="6bg-ed-mfL" secondAttribute="trailing" id="dku-zI-tdG"/>
                             <constraint firstItem="d5i-Ba-RvD" firstAttribute="top" secondItem="gad-k1-Oh8" secondAttribute="bottom" id="n1F-h4-Uxd"/>
                             <constraint firstItem="gad-k1-Oh8" firstAttribute="top" secondItem="6bg-ed-mfL" secondAttribute="bottom" id="qEs-cg-DMH"/>
                             <constraint firstItem="gad-k1-Oh8" firstAttribute="leadingMargin" secondItem="wbc-yd-nQP" secondAttribute="leadingMargin" constant="-16" id="qnK-zI-jNY"/>
                             <constraint firstItem="6bg-ed-mfL" firstAttribute="top" secondItem="8bI-gs-bmD" secondAttribute="bottom" id="sKS-dx-tS9"/>
                             <constraint firstItem="gad-k1-Oh8" firstAttribute="top" secondItem="6bg-ed-mfL" secondAttribute="bottom" id="xUM-bt-esX"/>
+                            <constraint firstItem="6bg-ed-mfL" firstAttribute="leading" secondItem="wbc-yd-nQP" secondAttribute="leading" id="xkR-sP-qEX"/>
                         </constraints>
                     </view>
                     <navigationItem key="navigationItem" id="DwO-O2-rAX"/>

+ 1 - 2
Share/NCSelectDestination.h

@@ -22,7 +22,6 @@
 //
 
 #import <UIKit/UIKit.h>
-#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>
 
 #import "CCBKPasscode.h"
 #import "CCUtility.h"
@@ -32,7 +31,7 @@
 
 @protocol NCSelectDestinationDelegate;
 
-@interface NCSelectDestination : UITableViewController <UIAlertViewDelegate, UITableViewDelegate, BKPasscodeViewControllerDelegate, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>
+@interface NCSelectDestination : UITableViewController <UIAlertViewDelegate, UITableViewDelegate, BKPasscodeViewControllerDelegate>
 
 @property (nonatomic, weak) id <NCSelectDestinationDelegate> delegate;
 

+ 2 - 42
Share/NCSelectDestination.m

@@ -89,14 +89,11 @@
     // TableView : at the end of rows nothing
     self.tableView.tableFooterView = [UIView new];
     self.tableView.separatorColor =  NCBrandColor.sharedInstance.separator;
-    self.tableView.emptyDataSetDelegate = self;
-    self.tableView.emptyDataSetSource = self;
 
     // get auto upload folder
     _autoUploadFileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
     _autoUploadDirectory = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:activeUrl];
     
-    // read file->folder
     [self readFolder];
 }
 
@@ -109,7 +106,7 @@
     self.navigationController.navigationBar.tintColor = NCBrandColor.sharedInstance.brandText;
     
     self.navigationController.toolbar.barTintColor = NCBrandColor.sharedInstance.tabBar;
-    self.navigationController.toolbar.tintColor = NCBrandColor.sharedInstance.brandElement;
+    self.navigationController.toolbar.tintColor = [UIColor grayColor];
     
     if (self.hideCreateFolder) {
         [self.create setEnabled:NO];
@@ -125,43 +122,6 @@
     self.tableView.backgroundColor = NCBrandColor.sharedInstance.backgroundView;
 }
 
-#pragma --------------------------------------------------------------------------------------------
-#pragma mark ==== DZNEmptyDataSetSource ====
-#pragma --------------------------------------------------------------------------------------------
-
-- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView
-{
-    if (_loadingFolder)
-        return YES;
-    else
-        return NO;
-}
-
-- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView
-{
-    return NO;
-}
-
-- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView
-{
-    return NCBrandColor.sharedInstance.backgroundView;
-}
-
-- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView
-{
-    if (_loadingFolder) {
-        
-        UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
-        activityView.transform = CGAffineTransformMakeScale(1.5f, 1.5f);
-        activityView.color = NCBrandColor.sharedInstance.brandElement;
-        [activityView startAnimating];
-        
-        return activityView;
-    }
-    
-    return nil;
-}
-
 // MARK: - IBAction
 
 - (IBAction)cancel:(UIBarButtonItem *)sender
@@ -273,7 +233,7 @@
             NCFile *fileDirectory = files[0];
         
             // Update directory etag
-            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:fileDirectory.etag ocId:fileDirectory.ocId encrypted:fileDirectory.e2eEncrypted account:account];
+            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:fileDirectory.etag ocId:fileDirectory.ocId encrypted:fileDirectory.e2eEncrypted richWorkspace:nil account:account];
             
             // Delete metadata
             [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, _serverUrl, k_metadataStatusNormal, k_metadataStatusHide]];

+ 1 - 1
Share/ShareViewController.h

@@ -32,7 +32,7 @@
 #import "CCError.h"
 #import "CCHud.h"
 
-@interface ShareViewController : UIViewController <UITableViewDelegate, MBProgressHUDDelegate, BKPasscodeViewControllerDelegate, NCSelectDestinationDelegate>
+@interface ShareViewController : UIViewController <UITableViewDelegate, MBProgressHUDDelegate, BKPasscodeViewControllerDelegate, NCSelectDestinationDelegate, UITextFieldDelegate>
 
 @property (nonatomic, strong) NSString *activeAccount;
 @property (nonatomic, strong) NSString *serverUrl;

+ 65 - 20
Share/ShareViewController.m

@@ -35,6 +35,10 @@
     
     UIColor *barTintColor;
     UIColor *tintColor;
+    
+    NSString *fileNameOriginal;
+    
+    UIBarButtonItem *rightButtonUpload, *leftButtonCancel;
 }
 @end
 
@@ -57,8 +61,10 @@
         
     } else {
         
+        tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:tableAccount.account];
+
         // Networking
-        [[NCCommunicationCommon sharedInstance] setupWithUsername:tableAccount.user userID:tableAccount.userID password:[CCUtility getPassword:tableAccount.account] userAgent:[CCUtility getUserAgent] capabilitiesGroup:[NCBrandOptions sharedInstance].capabilitiesGroups delegate:[NCNetworking sharedInstance]];
+        [[NCCommunicationCommon sharedInstance] setupWithUsername:tableAccount.user userID:tableAccount.userID password:[CCUtility getPassword:tableAccount.account] userAgent:[CCUtility getUserAgent] capabilitiesGroup:[NCBrandOptions sharedInstance].capabilitiesGroups nextcloudVersion:capabilities.versionMajor delegate:[NCNetworking sharedInstance]];
        
         _activeAccount = tableAccount.account;
         
@@ -95,7 +101,6 @@
     [self loadDataSwift];
 }
 
-// Apparirà
 - (void)viewWillAppear:(BOOL)animated
 {
     [super viewWillAppear:animated];
@@ -107,33 +112,70 @@
     self.shareTable.backgroundColor = NCBrandColor.sharedInstance.backgroundView;
 }
 
-- (void)didReceiveMemoryWarning
-{
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
 - (void)closeShareViewController
 {
     [self.extensionContext completeRequestReturningItems:self.extensionContext.inputItems completionHandler:nil];
 }
 
-//
-// L'applicazione terminerà
-//
 - (void)applicationWillTerminate:(UIApplication *)application
-{    
+{
     NSLog(@"[LOG] bye bye, Nextcloud Share Extension!");
 }
 
+#pragma --------------------------------------------------------------------------------------------
+#pragma mark == TextField Delegate ==
+#pragma --------------------------------------------------------------------------------------------
+
+- (void)textFieldDidBeginEditing:(UITextField *)textField
+{
+    rightButtonUpload.enabled = false;
+    fileNameOriginal = textField.text;
+}
+
+- (void)textFieldDidEndEditing:(UITextField *)textField
+{
+    rightButtonUpload.enabled = true;
+    NSInteger index = [self.filesName indexOfObject:fileNameOriginal];
+    if (index != NSNotFound) {
+        self.filesName[index] = textField.text;
+    }
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
+{
+    NSError *error;
+    
+    if ([string isEqualToString:@"\n"]) {
+        
+        //NSString *fileName = [textField.text stringByDeletingPathExtension];
+        NSString *ext = [textField.text pathExtension];
+
+        if (![ext isEqualToString:@""]) {
+            NSString *fileNameAtPath = [NSTemporaryDirectory() stringByAppendingString:fileNameOriginal];
+            NSString *fileNameToPath = [NSTemporaryDirectory() stringByAppendingString:textField.text];
+            
+            [[NSFileManager defaultManager] moveItemAtPath:fileNameAtPath toPath:fileNameToPath error:&error];
+            
+            if (error != nil) {
+                textField.text = fileNameOriginal;
+            }
+        } else {
+            textField.text = fileNameOriginal;
+        }
+        
+        [textField endEditing:true];
+        return false;
+    }
+    
+    return true;
+}
+
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark == Action ==
 #pragma --------------------------------------------------------------------------------------------
 
 - (void)navigationBarToolBar
-{    
-    UIBarButtonItem *rightButtonUpload, *leftButtonCancel;
-
+{
     // Theming
     if ([NCBrandOptions sharedInstance].use_themingColor) {
         tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:self.activeAccount];
@@ -143,7 +185,7 @@
     self.navigationController.navigationBar.tintColor = NCBrandColor.sharedInstance.brandText;
     
     self.toolBar.barTintColor = NCBrandColor.sharedInstance.tabBar;
-    self.toolBar.tintColor = NCBrandColor.sharedInstance.brandElement;
+    self.toolBar.tintColor = [UIColor grayColor];
     
     // Upload
     rightButtonUpload = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"_save_", nil) style:UIBarButtonItemStylePlain target:self action:@selector(selectPost)];
@@ -432,13 +474,16 @@
     }
     else image = [UIImage imageNamed:@"file"];
     
-    
     NSUInteger fileSize = (NSInteger)[[[NSFileManager defaultManager] attributesOfItemAtPath:[NSTemporaryDirectory() stringByAppendingString:fileName] error:nil] fileSize];
     
-    cell.labelInformazioni.text = [NSString stringWithFormat:@"%@\r\r%@", fileName, [CCUtility transformedSize:fileSize]];
-    cell.labelInformazioni.textColor = NCBrandColor.sharedInstance.textView;
-
     cell.fileImageView.image = image;
+
+    cell.fileName.text = fileName;
+    cell.fileName.textColor = NCBrandColor.sharedInstance.textView;
+    cell.fileName.delegate = self;
+    
+    cell.info.text = [CCUtility transformedSize:fileSize];
+    cell.info.textColor = NCBrandColor.sharedInstance.textView;
     
     return cell;
 }

+ 9 - 14
iOSClient/Activity/NCActivity.swift

@@ -24,6 +24,7 @@
 import Foundation
 import UIKit
 import SwiftRichString
+import NCCommunication
 
 class NCActivity: UIViewController, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate {
     
@@ -210,15 +211,14 @@ extension NCActivity: UITableViewDataSource {
                     if let image = UIImage(contentsOfFile: fileNameLocalPath) { cell.icon.image = image }
                 } else {
                     DispatchQueue.global().async {
-                        let encodedString = activity.icon.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
-                        OCNetworking.sharedManager()?.downloadContents(ofUrl: encodedString, completion: { (data, message, errorCode) in
+                        NCCommunication.sharedInstance.downloadContent(urlString: activity.icon, account: self.appDelegate.activeAccount) { (account, data, errorCode, errorMessage) in
                             if errorCode == 0 {
                                 do {
                                     try data!.write(to: NSURL(fileURLWithPath: fileNameLocalPath) as URL, options: .atomic)
                                     if let image = UIImage(contentsOfFile: fileNameLocalPath) { cell.icon.image = image }
                                 } catch { return }
                             }
-                        })
+                        }
                     }
                 }
             }
@@ -236,16 +236,11 @@ extension NCActivity: UITableViewDataSource {
                     }
                 } else {
                     DispatchQueue.global().async {
-                        let url = self.appDelegate.activeUrl + k_avatar + activity.user + "/" + k_avatar_size
-                        let encodedString = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
-                        OCNetworking.sharedManager()?.downloadContents(ofUrl: encodedString, completion: { (data, message, errorCode) in
-                            if errorCode == 0 && UIImage(data: data!) != nil {
-                                do {
-                                    try data!.write(to: NSURL(fileURLWithPath: fileNameLocalPath) as URL, options: .atomic)
-                                } catch { return }
+                        NCCommunication.sharedInstance.downloadAvatar(urlString: self.appDelegate.activeUrl, userID: activity.user, fileNameLocalPath: fileNameLocalPath, size: Int(k_avatar_size), account: self.appDelegate.activeAccount) { (account, data, errorCode, errorMessage) in
+                            if errorCode == 0 && account == self.appDelegate.activeAccount && UIImage(data: data!) != nil {
                                 cell.avatar.image = UIImage(data: data!)
                             }
-                        })
+                        }
                     }
                 }
             }
@@ -361,7 +356,7 @@ extension activityTableViewCell: UICollectionViewDelegate {
                         viewController.path = result.filePath
                         (responder as? UIViewController)!.navigationController?.pushViewController(viewController, animated: true)
                     } else {
-                        appDelegate.messageNotification("_error_", description: "_trash_file_not_found_", visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.info, errorCode: 0)
+                        NCContentPresenter.shared.messageNotification("_error_", description: "_trash_file_not_found_", delay: TimeInterval(k_dismissAfterSecond), type: NCContentPresenter.messageType.info, errorCode: 0)
                     }
                 }
             }
@@ -458,7 +453,7 @@ extension activityTableViewCell: UICollectionViewDataSource {
                 
                 let source = activityPreview.source
                 
-                NCUtility.sharedInstance.convertSVGtoPNGWriteToUserData(svgUrlString: source, fileName: nil, width: 100, rewrite: false) { (imageNamePath) in
+                NCUtility.sharedInstance.convertSVGtoPNGWriteToUserData(svgUrlString: source, fileName: nil, width: 100, rewrite: false, account: appDelegate.activeAccount) { (imageNamePath) in
                     if imageNamePath != nil {
                         if let image = UIImage(contentsOfFile: imageNamePath!) {
                             cell.imageView.image = image
@@ -472,7 +467,7 @@ extension activityTableViewCell: UICollectionViewDataSource {
                     
                     let source = activityPreview.source
                     
-                    NCUtility.sharedInstance.convertSVGtoPNGWriteToUserData(svgUrlString: source, fileName: nil, width: 100, rewrite: false) { (imageNamePath) in
+                    NCUtility.sharedInstance.convertSVGtoPNGWriteToUserData(svgUrlString: source, fileName: nil, width: 100, rewrite: false, account: appDelegate.activeAccount) { (imageNamePath) in
                         if imageNamePath != nil {
                             if let image = UIImage(contentsOfFile: imageNamePath!) {
                                 cell.imageView.image = image

+ 3 - 4
iOSClient/AppDelegate.h

@@ -28,7 +28,6 @@
 #import "BKPasscodeLockScreenManager.h"
 #import "REMenu.h"
 #import "Reachability.h"
-#import "TWMessageBarManager.h"
 #import "CCBKPasscode.h"
 #import "CCUtility.h"
 #import "CCDetail.h"
@@ -43,7 +42,7 @@
 @class NCAppConfigView;
 @class IMImagemeterViewer;
 
-@interface AppDelegate : UIResponder <UIApplicationDelegate, BKPasscodeLockScreenManagerDelegate, BKPasscodeViewControllerDelegate, TWMessageBarStyleSheet, CCNetworkingDelegate, PKPushRegistryDelegate>
+@interface AppDelegate : UIResponder <UIApplicationDelegate, BKPasscodeLockScreenManagerDelegate, BKPasscodeViewControllerDelegate, CCNetworkingDelegate, PKPushRegistryDelegate>
 
 // Timer Process
 @property (nonatomic, strong) NSTimer *timerProcessAutoDownloadUpload;
@@ -97,6 +96,7 @@
 @property (nonatomic, strong) REMenuItem *typefileItem;
 @property (nonatomic, strong) REMenuItem *dateItem;
 @property (nonatomic, strong) REMenuItem *directoryOnTopItem;
+@property (nonatomic, strong) REMenuItem *addFolderInfo;
 
 @property (nonatomic, strong) REMenu *reSelectMenu;
 @property (nonatomic, strong) REMenuItem *selectAllItem;
@@ -154,8 +154,7 @@
 - (void)configDynamicShortcutItems;
 - (BOOL)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem;
 
-// StatusBar & ApplicationIconBadgeNumber
-- (void)messageNotification:(NSString *)title description:(NSString *)description visible:(BOOL)visible delay:(NSTimeInterval)delay type:(TWMessageBarMessageType)type errorCode:(NSInteger)errorcode;
+// ApplicationIconBadgeNumber
 - (void)updateApplicationIconBadgeNumber;
 
 // TabBarController

+ 106 - 179
iOSClient/AppDelegate.m

@@ -22,7 +22,6 @@
 //
 
 #import "AppDelegate.h"
-#import <JDStatusBarNotification/JDStatusBarNotification.h>
 #import "CCNetworking.h"
 #import "CCGraphics.h"
 #import "CCSynchronize.h"
@@ -168,6 +167,22 @@ PKPushRegistry *pushRegistry;
         }
     }
     
+    if ([NCBrandOptions sharedInstance].disable_intro) {
+        [CCUtility setIntro:YES];
+        
+        if (self.activeAccount.length == 0) {
+            [self openLoginView:nil selector:k_intro_login openLoginWeb:false];
+        }
+    } else {
+        if ([CCUtility getIntro] == NO) {
+            UIViewController *introViewController = [[UIStoryboard storyboardWithName:@"Intro" bundle:[NSBundle mainBundle]] instantiateInitialViewController];
+            
+            UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: introViewController];
+            self.window.rootViewController = navController;
+            [self.window makeKeyAndVisible];
+        }
+    }
+
     return YES;
 }
 
@@ -307,18 +322,14 @@ PKPushRegistry *pushRegistry;
 
 - (void)openLoginView:(UIViewController *)viewController selector:(NSInteger)selector openLoginWeb:(BOOL)openLoginWeb
 {
-    @synchronized (self) {
-
         // use appConfig [MDM]
         if ([NCBrandOptions sharedInstance].use_configuration) {
             
             if (!(_appConfigView.isViewLoaded && _appConfigView.view.window)) {
             
                 self.appConfigView = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"NCAppConfigView"];
-                            
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                    [viewController presentViewController:self.appConfigView animated:YES completion:nil];
-                });
+                
+                [self showLoginViewController:self.appConfigView forContext:viewController];
             }
         
             return;
@@ -332,9 +343,7 @@ PKPushRegistry *pushRegistry;
                 self.activeLoginWeb = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"NCLoginWeb"];
                 self.activeLoginWeb.urlBase = [[NCBrandOptions sharedInstance] loginBaseUrl];
 
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                    [viewController presentViewController:self.activeLoginWeb animated:YES completion:nil];
-                });
+                [self showLoginViewController:self.activeLoginWeb forContext:viewController];
             }
             
             return;
@@ -353,9 +362,7 @@ PKPushRegistry *pushRegistry;
                     self.activeLoginWeb.urlBase = self.activeUrl;
                 }
                 
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                    [viewController presentViewController:self.activeLoginWeb animated:YES completion:nil];
-                });
+               [self showLoginViewController:self.activeLoginWeb forContext:viewController];
             }
             
         } else if ([NCBrandOptions sharedInstance].disable_intro && [NCBrandOptions sharedInstance].disable_request_login_url) {
@@ -363,9 +370,7 @@ PKPushRegistry *pushRegistry;
             self.activeLoginWeb = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"NCLoginWeb"];
             self.activeLoginWeb.urlBase = [[NCBrandOptions sharedInstance] loginBaseUrl];
             
-            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                [viewController presentViewController:self.activeLoginWeb animated:YES completion:nil];
-            });
+            [self showLoginViewController:self.activeLoginWeb forContext:viewController];
             
         } else if (openLoginWeb) {
             
@@ -373,9 +378,7 @@ PKPushRegistry *pushRegistry;
                 self.activeLoginWeb = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"NCLoginWeb"];
                 self.activeLoginWeb.urlBase = self.activeUrl;
 
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                    [viewController presentViewController:self.activeLoginWeb animated:YES completion:nil];
-                });
+                [self showLoginViewController:self.activeLoginWeb forContext:viewController];
             }
             
         } else {
@@ -384,11 +387,30 @@ PKPushRegistry *pushRegistry;
                 
                 _activeLogin = [[UIStoryboard storyboardWithName:@"CCLogin" bundle:nil] instantiateViewControllerWithIdentifier:@"CCLoginNextcloud"];
                 
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {
-                    [viewController presentViewController:_activeLogin animated:YES completion:nil];
-                });
+                [self showLoginViewController:_activeLogin forContext:viewController];
             }
         }
+}
+
+-(void)showLoginViewController:(UIViewController *)viewController forContext:(UIViewController *)contextViewController
+{
+    if (contextViewController == NULL) {
+        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
+        navController.navigationBar.tintColor = NCBrandColor.sharedInstance.customerText;
+        navController.navigationBar.barTintColor = NCBrandColor.sharedInstance.customer;
+        self.window.rootViewController = navController;
+        [self.window makeKeyAndVisible];
+        
+    } else if ([contextViewController isKindOfClass:[UINavigationController class]]) {
+        UINavigationController *navController = ((UINavigationController *)contextViewController);
+        [navController pushViewController:viewController animated:true];
+        
+    } else {
+        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
+        navController.modalPresentationStyle = UIModalPresentationFullScreen;
+        navController.navigationBar.tintColor = NCBrandColor.sharedInstance.customerText;
+        navController.navigationBar.barTintColor = NCBrandColor.sharedInstance.customer;
+        [contextViewController presentViewController:navController animated:true completion:nil];
     }
 }
 
@@ -408,12 +430,13 @@ PKPushRegistry *pushRegistry;
     self.activeUser = activeUser;
     self.activeUserID = activeUserID;
     self.activePassword = activePassword;
-    
+    tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:activeAccount];
+
     // Setting Account to Networking
     [CCNetworking sharedNetworking].delegate = [NCNetworkingMain sharedInstance];
     
     [[NCNetworking sharedInstance] setupWithAccount:activeAccount delegate:nil];
-    [[NCCommunicationCommon sharedInstance] setupWithUsername:activeUser userID:activeUserID password:activePassword userAgent:[CCUtility getUserAgent] capabilitiesGroup:[NCBrandOptions sharedInstance].capabilitiesGroups delegate:[NCNetworking sharedInstance]];
+    [[NCCommunicationCommon sharedInstance] setupWithUsername:activeUser userID:activeUserID password:activePassword userAgent:[CCUtility getUserAgent] capabilitiesGroup:[NCBrandOptions sharedInstance].capabilitiesGroups nextcloudVersion:capabilities.versionMajor delegate:[NCNetworking sharedInstance]];
 }
 
 - (void)deleteAccount:(NSString *)account wipe:(BOOL)wipe
@@ -693,112 +716,9 @@ PKPushRegistry *pushRegistry;
 }
 
 #pragma --------------------------------------------------------------------------------------------
-#pragma mark ===== StatusBar & ApplicationIconBadgeNumber =====
+#pragma mark ===== ApplicationIconBadgeNumber =====
 #pragma --------------------------------------------------------------------------------------------
 
-- (void)messageNotification:(NSString *)title description:(NSString *)description visible:(BOOL)visible delay:(NSTimeInterval)delay type:(TWMessageBarMessageType)type errorCode:(NSInteger)errorcode
-{
-    static NSInteger errorCodePrev = 0;
-    
-    dispatch_async(dispatch_get_main_queue(), ^{
-        
-        if (visible) {
-            
-            switch (errorcode) {
-                    
-                // JDStatusBarNotification
-                case kCFURLErrorNotConnectedToInternet:
-                    
-                    if (errorCodePrev != errorcode)
-                        [JDStatusBarNotification showWithStatus:NSLocalizedString(title, nil) dismissAfter:delay styleName:JDStatusBarStyleDefault];
-                    
-                    errorCodePrev = errorcode;
-                    break;
-                    
-                case kOCErrorServerUnauthorized:
-                case kOCErrorServerForbidden:
-                    
-                    NSLog(@"Error kOCErrorServerUnauthorized - kOCErrorServerForbidden");
-                    break;
-                    
-                // TWMessageBarManager
-                default:
-                    
-                    if (description.length > 0) {
-                        
-                        [TWMessageBarManager sharedInstance].styleSheet = self;
-                        [[TWMessageBarManager sharedInstance] showMessageWithTitle:[NSString stringWithFormat:@"%@\n", NSLocalizedString(title, nil)] description:NSLocalizedString(description, nil) type:type duration:delay];
-                    }
-                    break;
-            }
-                        
-        } else {
-            
-            [[TWMessageBarManager sharedInstance] hideAllAnimated:YES];
-        }
-    });
-}
-
-- (UIColor *)backgroundColorForMessageType:(TWMessageBarMessageType)type
-{
-    UIColor *backgroundColor = nil;
-    switch (type)
-    {
-        case TWMessageBarMessageTypeError:
-            backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.90];
-            break;
-        case TWMessageBarMessageTypeSuccess:
-            backgroundColor = [UIColor colorWithRed:0.588 green:0.797 blue:0.000 alpha:0.90];
-            break;
-        case TWMessageBarMessageTypeInfo:
-            backgroundColor = NCBrandColor.sharedInstance.brand;
-            break;
-        default:
-            break;
-    }
-    return backgroundColor;
-}
-
-- (UIColor *)strokeColorForMessageType:(TWMessageBarMessageType)type
-{
-    UIColor *strokeColor = nil;
-    switch (type)
-    {
-        case TWMessageBarMessageTypeError:
-            strokeColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0];
-            break;
-        case TWMessageBarMessageTypeSuccess:
-            strokeColor = [UIColor colorWithRed:0.0 green:1.0 blue:0.0 alpha:1.0];
-            break;
-        case TWMessageBarMessageTypeInfo:
-            strokeColor = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];
-            break;
-        default:
-            break;
-    }
-    return strokeColor;
-}
-
-- (UIImage *)iconImageForMessageType:(TWMessageBarMessageType)type
-{
-    UIImage *iconImage = nil;
-    switch (type)
-    {
-        case TWMessageBarMessageTypeError:
-            iconImage = [UIImage imageNamed:@"icon-error.png"];
-            break;
-        case TWMessageBarMessageTypeSuccess:
-            iconImage = [UIImage imageNamed:@"icon-success.png"];
-            break;
-        case TWMessageBarMessageTypeInfo:
-            iconImage = [UIImage imageNamed:@"icon-info.png"];
-            break;
-        default:
-            break;
-    }
-    return iconImage;
-}
-
 - (void)updateApplicationIconBadgeNumber
 {
     if (self.activeAccount.length == 0 || self.maintenanceMode)
@@ -841,53 +761,44 @@ PKPushRegistry *pushRegistry;
 {
     UITabBarItem *item;
     NSLayoutConstraint *constraint;
-    CGFloat multiplier = 0;
     CGFloat safeAreaBottom = 0;
     
     if (@available(iOS 11, *)) {
-        UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
-        if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
-            safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.right/2;
-            if (safeAreaBottom > 0) safeAreaBottom -= 5;
-        } else {
-            safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom/2;
-        }
+        safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets.bottom;
     }
-    
-    //[self aspectTabBar:tabBarController.tabBar];
-    
+   
     // File
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexFile];
     [item setTitle:NSLocalizedString(@"_home_", nil)];
-    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFiles"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
-    item.selectedImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFiles"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
+    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFiles"] width:50 height:50 color:NCBrandColor.sharedInstance.brandElement];
+    item.selectedImage = item.image;
     
     // Favorites
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexFavorite];
     [item setTitle:NSLocalizedString(@"_favorites_", nil)];
-    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFavorites"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
-    item.selectedImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFavorites"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
+    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarFavorites"] width:50 height:50 color:NCBrandColor.sharedInstance.brandElement];
+    item.selectedImage = item.image;
     
-    // (PLUS)
+    // (PLUS INVISIBLE)
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexPlusHide];
     item.title = @"";
-    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarPlus"] multiplier:3 color:[UIColor clearColor]];
+    item.image = nil;
     item.enabled = false;
     
     // Media
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexMedia];
     [item setTitle:NSLocalizedString(@"_media_", nil)];
-    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMedia"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
-    item.selectedImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMedia"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
+    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMedia"] width:50 height:50 color:NCBrandColor.sharedInstance.brandElement];
+    item.selectedImage = item.image;
     
     // More
     item = [tabBarController.tabBar.items objectAtIndex: k_tabBarApplicationIndexMore];
     [item setTitle:NSLocalizedString(@"_more_", nil)];
-    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMore"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
-    item.selectedImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMore"] multiplier:2 color:NCBrandColor.sharedInstance.brandElement];
+    item.image = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarMore"] width:50 height:50 color:NCBrandColor.sharedInstance.brandElement];
+    item.selectedImage = item.image;
     
     // Plus Button
-    UIImage *buttonImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarPlus"] multiplier:3 color:NCBrandColor.sharedInstance.brandElement];
+    UIImage *buttonImage = [CCGraphics changeThemingColorImage:[UIImage imageNamed:@"tabBarPlus"] width:120 height:120 color:NCBrandColor.sharedInstance.brandElement];
     UIButton *buttonPlus = [UIButton buttonWithType:UIButtonTypeCustom];
     buttonPlus.tag = 99;
     [buttonPlus setBackgroundImage:buttonImage forState:UIControlStateNormal];
@@ -897,25 +808,36 @@ PKPushRegistry *pushRegistry;
     [buttonPlus setTranslatesAutoresizingMaskIntoConstraints:NO];
     [tabBarController.tabBar addSubview:buttonPlus];
     
-    multiplier = 1.0;
-    // X
-    constraint =[NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterX multiplier:multiplier constant:0];
-    [tabBarController.view addConstraint:constraint];
-    // Y
-    if (safeAreaBottom == 0) {
-        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterY multiplier:multiplier constant:0];
+    if (safeAreaBottom > 0) {
+        
+        // X
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
+        [tabBarController.view addConstraint:constraint];
+        // Y
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeTop multiplier:1.0 constant:5];
+        [tabBarController.view addConstraint:constraint];
+        // Width
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0 constant:40];
+        [tabBarController.view addConstraint:constraint];
+        // Height
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0 constant:40];
+        [tabBarController.view addConstraint:constraint];
+        
     } else {
-        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:5];
+        
+        // X
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
+        [tabBarController.view addConstraint:constraint];
+        // Y
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0];
+        [tabBarController.view addConstraint:constraint];
+        // Width
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0 constant:33];
+        [tabBarController.view addConstraint:constraint];
+        // Height
+        constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0 constant:33];
+        [tabBarController.view addConstraint:constraint];
     }
-    [tabBarController.view addConstraint:constraint];
-    
-    multiplier = 0.8 * (tabBarController.tabBar.frame.size.height - safeAreaBottom) / tabBarController.tabBar.frame.size.height;
-    // Width
-    constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeHeight multiplier:multiplier constant:0];
-    [tabBarController.view addConstraint:constraint];
-    // Height
-    constraint = [NSLayoutConstraint constraintWithItem:buttonPlus attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:tabBarController.tabBar attribute:NSLayoutAttributeHeight multiplier:multiplier constant:0];
-    [tabBarController.view addConstraint:constraint];
 }
 
 - (void)plusButtonVisibile:(BOOL)visible
@@ -953,7 +875,7 @@ PKPushRegistry *pushRegistry;
     if ([tableDirectory.permissions containsString:@"CK"]) {
         (void)[[NCCreateMenuAdd alloc] initWithViewController:self.window.rootViewController view:[(UIButton *)sender superview]];
     } else {
-        [self messageNotification:@"_warning_" description:@"_no_permission_add_file_" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeInfo errorCode:0];
+        [[NCContentPresenter shared] messageNotification:@"_warning_" description:@"_no_permission_add_file_" delay:k_dismissAfterSecond type:messageTypeInfo errorCode:0];
     }
 }
 
@@ -1221,7 +1143,7 @@ PKPushRegistry *pushRegistry;
     } else {
         
         if (self.lastReachability == YES) {
-            [self messageNotification:@"_network_not_available_" description:nil visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeInfo errorCode:kCFURLErrorNotConnectedToInternet];
+            [[NCContentPresenter shared] messageNotification:@"_network_not_available_" description:nil delay:k_dismissAfterSecond type:messageTypeInfo errorCode:kCFURLErrorNotConnectedToInternet];
         }
         
         NSLog(@"[LOG] Reachability Changed: NOT Reachable");
@@ -1303,6 +1225,7 @@ PKPushRegistry *pushRegistry;
     long counterDownload = 0, counterUpload = 0;
     NSUInteger sizeDownload = 0, sizeUpload = 0;
     BOOL isE2EE = false;
+    NSMutableArray *uploaded = [NSMutableArray new];
     
     long maxConcurrentOperationDownloadUpload = k_maxConcurrentOperation;
     
@@ -1352,7 +1275,7 @@ PKPushRegistry *pushRegistry;
     
     while (counterDownload < maxConcurrentOperationDownloadUpload) {
         
-        metadataForDownload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"status == %d", k_metadataStatusWaitDownload] sorted:@"session" ascending:YES];
+        metadataForDownload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"status == %d", k_metadataStatusWaitDownload] sorted:@"date" ascending:YES];
         if (metadataForDownload) {
             
             metadataForDownload.status = k_metadataStatusInDownload;
@@ -1375,11 +1298,17 @@ PKPushRegistry *pushRegistry;
             break;
         }
         
-        metadataForUpload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %d", selectorUploadFile, k_metadataStatusWaitUpload] sorted:@"session" ascending:YES];
+        metadataForUpload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %d", selectorUploadFile, k_metadataStatusWaitUpload] sorted:@"date" ascending:YES];
+        
+        // Verify modify file
+        if ([uploaded containsObject:[NSString stringWithFormat:@"%@%@%@", metadataForUpload.account, metadataForUpload.serverUrl, metadataForUpload.fileName]]) {
+            break;
+        }
+        
         if (metadataForUpload) {
             
+            // Verify modify file
             BOOL isAleadyInUpload = false;
-            
             for (tableMetadata *metadata in metadatasUpload) {
                 if ([metadataForUpload.account isEqualToString:metadata.account] && [metadataForUpload.serverUrl isEqualToString:metadata.serverUrl] && [metadataForUpload.fileName isEqualToString:metadata.fileName]) {
                     isAleadyInUpload = true;
@@ -1395,10 +1324,8 @@ PKPushRegistry *pushRegistry;
                 counterUpload++;
                 sizeUpload = sizeUpload + metadata.size;
                 
-                // IMI -> MODIFY
-                if ([metadata.fileName.pathExtension.lowercaseString isEqualToString:@"imi"]) {
-                    break;
-                }
+                // For verify modify file
+                [uploaded addObject:[NSString stringWithFormat:@"%@%@%@", metadata.account, metadata.serverUrl, metadata.fileName]];
                 
             } else {
                 break;
@@ -1417,7 +1344,7 @@ PKPushRegistry *pushRegistry;
             break;
         }
         
-        metadataForUpload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %d", selectorUploadAutoUpload, k_metadataStatusWaitUpload] sorted:@"session" ascending:YES];
+        metadataForUpload = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %d", selectorUploadAutoUpload, k_metadataStatusWaitUpload] sorted:@"date" ascending:YES];
         if (metadataForUpload) {
             
             metadataForUpload.status = k_metadataStatusInUpload;
@@ -1435,12 +1362,12 @@ PKPushRegistry *pushRegistry;
     // ------------------------- <selector Auto Upload All> ----------------------
     
     // Verify num error k_maxErrorAutoUploadAll after STOP (100)
-    NSArray *metadatas = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %i", selectorUploadAutoUploadAll, k_metadataStatusUploadError] sorted:nil ascending:NO];
+    NSArray *metadatas = [[NCManageDatabase sharedInstance] getMetadatasWithPredicate:[NSPredicate predicateWithFormat:@"sessionSelector == %@ AND status == %i", selectorUploadAutoUploadAll, k_metadataStatusUploadError] sorted:@"date" ascending:YES];
     NSInteger errorCount = [metadatas count];
     
     if (errorCount >= k_maxErrorAutoUploadAll) {
         
-        [self messageNotification:@"_error_" description:@"_too_errors_automatic_all_" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
+        [[NCContentPresenter shared] messageNotification:@"_error_" description:@"_too_errors_automatic_all_" delay:k_dismissAfterSecond type:messageTypeError errorCode:k_CCErrorInternalError];
         
     } else {
         

+ 4 - 4
iOSClient/AutoUpload/NCAutoUpload.m

@@ -479,12 +479,12 @@
         
         tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@", appDelegate.activeAccount, autoUploadPath]];
         if (!tableDirectory)
-            (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:autoUploadPath account:appDelegate.activeAccount];
+            (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:autoUploadPath richWorkspace:nil account:appDelegate.activeAccount];
         
     } else {
        
         if ([selector isEqualToString:selectorUploadAutoUploadAll])
-            [appDelegate messageNotification:@"_error_" description:@"_error_createsubfolders_upload_" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
+            [[NCContentPresenter shared] messageNotification:@"_error_" description:@"_error_createsubfolders_upload_" delay:k_dismissAfterSecond type:messageTypeError errorCode:k_CCErrorInternalError];
 
         return false;
     }
@@ -500,12 +500,12 @@
             
             if ( error == nil) {
                 
-                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:folderPathName account:appDelegate.activeAccount];
+                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:folderPathName richWorkspace:nil account:appDelegate.activeAccount];
                 
             } else {
                 
                 if ([selector isEqualToString:selectorUploadAutoUploadAll])
-                    [appDelegate messageNotification:@"_error_" description:@"_error_createsubfolders_upload_" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError errorCode:k_CCErrorInternalError];
+                    [[NCContentPresenter shared] messageNotification:@"_error_" description:@"_error_createsubfolders_upload_" delay:k_dismissAfterSecond type:messageTypeError errorCode:k_CCErrorInternalError];
 
                 return false;
             }

+ 25 - 25
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Contents.json

@@ -3,151 +3,151 @@
     {
       "size" : "20x20",
       "idiom" : "iphone",
-      "filename" : "Icon-App-20x20@2x.png",
+      "filename" : "nextcloud-icon40@1x.png",
       "scale" : "2x"
     },
     {
       "size" : "20x20",
       "idiom" : "iphone",
-      "filename" : "Icon-App-20x20@3x.png",
+      "filename" : "nextcloud-icon60@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "29x29",
       "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@1x.png",
+      "filename" : "nextcloud-icon29@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "29x29",
       "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@2x.png",
+      "filename" : "nextcloud-icon58@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "29x29",
       "idiom" : "iphone",
-      "filename" : "Icon-App-29x29@3x.png",
+      "filename" : "nextcloud-icon87@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "40x40",
       "idiom" : "iphone",
-      "filename" : "Icon-App-40x40@2x.png",
+      "filename" : "nextcloud-icon80@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "40x40",
       "idiom" : "iphone",
-      "filename" : "Icon-App-40x40@3x.png",
+      "filename" : "nextcloud-icon120@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "57x57",
       "idiom" : "iphone",
-      "filename" : "Icon-App-57x57@1x.png",
+      "filename" : "nextcloud-icon57@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "57x57",
       "idiom" : "iphone",
-      "filename" : "Icon-App-57x57@2x.png",
+      "filename" : "nextcloud-icon114@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "60x60",
       "idiom" : "iphone",
-      "filename" : "Icon-App-60x60@2x.png",
+      "filename" : "nextcloud-icon120@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "60x60",
       "idiom" : "iphone",
-      "filename" : "Icon-App-60x60@3x.png",
+      "filename" : "nextcloud-icon180@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "20x20",
       "idiom" : "ipad",
-      "filename" : "Icon-App-20x20@1x.png",
+      "filename" : "nextcloud-icon20@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "20x20",
       "idiom" : "ipad",
-      "filename" : "Icon-App-20x20@2x.png",
+      "filename" : "nextcloud-icon40@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "29x29",
       "idiom" : "ipad",
-      "filename" : "Icon-App-29x29@1x.png",
+      "filename" : "nextcloud-icon29@1x-1.png",
       "scale" : "1x"
     },
     {
       "size" : "29x29",
       "idiom" : "ipad",
-      "filename" : "Icon-App-29x29@2x.png",
+      "filename" : "nextcloud-icon58@2x-1.png",
       "scale" : "2x"
     },
     {
       "size" : "40x40",
       "idiom" : "ipad",
-      "filename" : "Icon-App-40x40@1x.png",
+      "filename" : "nextcloud-icon40@1x-1.png",
       "scale" : "1x"
     },
     {
       "size" : "40x40",
       "idiom" : "ipad",
-      "filename" : "Icon-App-40x40@2x.png",
+      "filename" : "nextcloud-icon80@2x-1.png",
       "scale" : "2x"
     },
     {
       "size" : "50x50",
       "idiom" : "ipad",
-      "filename" : "Icon-Small-50x50@1x.png",
+      "filename" : "nextcloud-icon50@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "50x50",
       "idiom" : "ipad",
-      "filename" : "Icon-Small-50x50@2x.png",
+      "filename" : "nextcloud-icon100@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "72x72",
       "idiom" : "ipad",
-      "filename" : "Icon-App-72x72@1x.png",
+      "filename" : "nextcloud-icon72@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "72x72",
       "idiom" : "ipad",
-      "filename" : "Icon-App-72x72@2x.png",
+      "filename" : "nextcloud-icon144@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "76x76",
       "idiom" : "ipad",
-      "filename" : "Icon-App-76x76@1x.png",
+      "filename" : "nextcloud-icon76@1x.png",
       "scale" : "1x"
     },
     {
       "size" : "76x76",
       "idiom" : "ipad",
-      "filename" : "Icon-App-76x76@2x.png",
+      "filename" : "nextcloud-icon152@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "83.5x83.5",
       "idiom" : "ipad",
-      "filename" : "Icon-App-83.5x83.5@2x.png",
+      "filename" : "nextcloud-icon167@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "1024x1024",
       "idiom" : "ios-marketing",
-      "filename" : "ItunesArtwork@2x.png",
+      "filename" : "nextcloud-icon1024@1x.png",
       "scale" : "1x"
     }
   ],

BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon100@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon1024@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon114@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon120@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon120@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon144@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon152@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon167@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon180@3x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon20@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon29@1x-1.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon29@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@1x-1.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon40@2x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon50@1x.png


BIN
iOSClient/Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon57@1x.png


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно