Преглед изворни кода

move InputBarAccessoryView submodule to libraries folder, adapt the xcode setup

cyberta пре 3 година
родитељ
комит
83be007e88
52 измењених фајлова са 1282 додато и 1020 уклоњено
  1. 1 1
      .gitmodules
  2. 119 255
      deltachat-ios.xcodeproj/project.pbxproj
  3. 0 96
      deltachat-ios/View/InputBarAccessoryView/Controls/InputBarSendButton.swift
  4. 0 354
      deltachat-ios/View/InputBarAccessoryView/InputBarButtonItem.swift
  5. 0 185
      deltachat-ios/View/InputBarAccessoryView/RxInputBarAccessoryView/RxInputBarAccessoryView.swift
  6. 39 0
      deltachat-ios/libraries/InputbarAccessoryView/.circleci/config.yml
  7. 37 0
      deltachat-ios/libraries/InputbarAccessoryView/.gitignore
  8. 22 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/LICENSE.md
  9. 1 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/README.md
  10. 643 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.pbxproj
  11. 7 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  12. 8 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  13. 80 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/xcshareddata/xcschemes/InputBarAccessoryView.xcscheme
  14. 19 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/contents.xcworkspacedata
  15. 8 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  16. 8 0
      deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  17. 8 4
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Controls/InputBarButtonItem.swift
  18. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Controls/InputBarSendButton.swift
  19. 41 5
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/NSMutableAttributedString+Extensions.swift
  20. 3 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/NSNotification+Extensions.swift
  21. 0 0
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/String+Extensions.swift
  22. 7 8
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/UITextView+Extensions.swift
  23. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/UIView+AutoLayout.swift
  24. 88 39
      deltachat-ios/libraries/InputbarAccessoryView/Sources/InputBarAccessoryView.swift
  25. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardEvent.swift
  26. 3 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardManager.swift
  27. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardNotification.swift
  28. 6 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Models/HorizontalEdgePadding.swift
  29. 9 5
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Models/NSConstraintLayoutSet.swift
  30. 16 4
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/AttachmentManager.swift
  31. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Protocols/AttachmentManagerDataSource.swift
  32. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Protocols/AttachmentManagerDelegate.swift
  33. 16 6
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/AttachmentCell.swift
  34. 6 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/AttachmentsView.swift
  35. 2 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/ImageAttachmentCell.swift
  36. 24 9
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/AutocompleteManager.swift
  37. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Models/AutocompleteCompletion.swift
  38. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Models/AutocompleteSession.swift
  39. 6 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDataSource.swift
  40. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDelegate.swift
  41. 6 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Views/AutocompleteCell.swift
  42. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Views/AutocompleteTableView.swift
  43. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputBarAccessoryViewDelegate.swift
  44. 2 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputItem.swift
  45. 2 2
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputPlugin.swift
  46. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/Info.plist
  47. 4 3
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/InputBarAccessoryView+Availability.swift
  48. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/InputBarAccessoryView-Bridging-Header.h
  49. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/ViewControllers/InputBarViewController.swift
  50. 1 1
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/InputStackView.swift
  51. 18 11
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/InputTextView.swift
  52. 8 4
      deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/SeparatorLine.swift

+ 1 - 1
.gitmodules

@@ -2,5 +2,5 @@
 	path = deltachat-ios/libraries/deltachat-core-rust
 	url = https://github.com/deltachat/deltachat-core-rust.git
 [submodule "deltachat-ios/InputBarAccessoryView"]
-	path = deltachat-ios/InputBarAccessoryView
+	path = deltachat-ios/libraries/InputBarAccessoryView
 	url = https://github.com/cyBerta/InputBarAccessoryView.git

+ 119 - 255
deltachat-ios.xcodeproj/project.pbxproj

@@ -45,41 +45,26 @@
 		304F769925DD23D70094B5E2 /* FullMessageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304F769825DD23D70094B5E2 /* FullMessageViewController.swift */; };
 		3052C60A253F082E007D13EA /* MessageLabelDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3052C609253F082E007D13EA /* MessageLabelDelegate.swift */; };
 		3052C60E253F088E007D13EA /* DetectorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3052C60D253F088E007D13EA /* DetectorType.swift */; };
-		30558A3927709AFA008781EE /* NSNotification+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0427709AF5008781EE /* NSNotification+Extensions.swift */; };
-		30558A3A27709AFA008781EE /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0527709AF5008781EE /* String+Extensions.swift */; };
-		30558A3B27709AFA008781EE /* UITextView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0627709AF5008781EE /* UITextView+Extensions.swift */; };
-		30558A3C27709AFA008781EE /* NSMutableAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0727709AF5008781EE /* NSMutableAttributedString+Extensions.swift */; };
-		30558A3D27709AFA008781EE /* UIView+AutoLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0827709AF5008781EE /* UIView+AutoLayout.swift */; };
-		30558A3E27709AFA008781EE /* KeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0A27709AF6008781EE /* KeyboardManager.swift */; };
-		30558A3F27709AFA008781EE /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0B27709AF6008781EE /* KeyboardNotification.swift */; };
-		30558A4027709AFA008781EE /* KeyboardEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0C27709AF6008781EE /* KeyboardEvent.swift */; };
-		30558A4127709AFA008781EE /* RxInputBarAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A0E27709AF6008781EE /* RxInputBarAccessoryView.swift */; };
-		30558A4227709AFA008781EE /* AttachmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1127709AF7008781EE /* AttachmentManager.swift */; };
-		30558A4327709AFA008781EE /* ImageAttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1327709AF7008781EE /* ImageAttachmentCell.swift */; };
-		30558A4427709AFA008781EE /* AttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1427709AF7008781EE /* AttachmentCell.swift */; };
-		30558A4527709AFA008781EE /* AttachmentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1527709AF7008781EE /* AttachmentsView.swift */; };
-		30558A4627709AFA008781EE /* AttachmentManagerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1727709AF7008781EE /* AttachmentManagerDataSource.swift */; };
-		30558A4727709AFA008781EE /* AttachmentManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1827709AF7008781EE /* AttachmentManagerDelegate.swift */; };
-		30558A4827709AFA008781EE /* AutocompleteManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1A27709AF7008781EE /* AutocompleteManager.swift */; };
-		30558A4927709AFA008781EE /* AutocompleteSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1C27709AF7008781EE /* AutocompleteSession.swift */; };
-		30558A4A27709AFA008781EE /* AutocompleteCompletion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1D27709AF7008781EE /* AutocompleteCompletion.swift */; };
-		30558A4B27709AFA008781EE /* AutocompleteTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A1F27709AF7008781EE /* AutocompleteTableView.swift */; };
-		30558A4C27709AFA008781EE /* AutocompleteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2027709AF7008781EE /* AutocompleteCell.swift */; };
-		30558A4D27709AFA008781EE /* AutocompleteManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2227709AF7008781EE /* AutocompleteManagerDelegate.swift */; };
-		30558A4E27709AFA008781EE /* AutocompleteManagerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2327709AF7008781EE /* AutocompleteManagerDataSource.swift */; };
-		30558A4F27709AFA008781EE /* InputStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2527709AF7008781EE /* InputStackView.swift */; };
-		30558A5027709AFA008781EE /* InputTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2627709AF7008781EE /* InputTextView.swift */; };
-		30558A5127709AFA008781EE /* SeparatorLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2727709AF7008781EE /* SeparatorLine.swift */; };
-		30558A5227709AFA008781EE /* InputBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2927709AF8008781EE /* InputBarButtonItem.swift */; };
-		30558A5327709AFA008781EE /* InputBarSendButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2A27709AF8008781EE /* InputBarSendButton.swift */; };
-		30558A5427709AFA008781EE /* InputBarAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2B27709AF8008781EE /* InputBarAccessoryView.swift */; };
-		30558A5527709AFA008781EE /* HorizontalEdgeInsets.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2D27709AF8008781EE /* HorizontalEdgeInsets.swift.swift */; };
-		30558A5627709AFA008781EE /* NSConstraintLayoutSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A2E27709AF8008781EE /* NSConstraintLayoutSet.swift */; };
-		30558A5727709AFA008781EE /* InputPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A3027709AF9008781EE /* InputPlugin.swift */; };
-		30558A5827709AFA008781EE /* InputBarAccessoryViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A3127709AF9008781EE /* InputBarAccessoryViewDelegate.swift */; };
-		30558A5927709AFA008781EE /* InputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A3227709AF9008781EE /* InputItem.swift */; };
-		30558A5A27709AFA008781EE /* InputBarAccessoryView+Availability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A3527709AF9008781EE /* InputBarAccessoryView+Availability.swift */; };
-		30558A5C27709AFA008781EE /* InputBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558A3827709AFA008781EE /* InputBarViewController.swift */; };
+		30558AF12774C5F3008781EE /* KeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AD72774C5F2008781EE /* KeyboardManager.swift */; };
+		30558AF22774C5F3008781EE /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AD82774C5F2008781EE /* KeyboardNotification.swift */; };
+		30558AF32774C5F3008781EE /* KeyboardEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AD92774C5F2008781EE /* KeyboardEvent.swift */; };
+		30558AF42774C5F3008781EE /* HorizontalEdgePadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558ADB2774C5F2008781EE /* HorizontalEdgePadding.swift */; };
+		30558AF52774C5F3008781EE /* NSConstraintLayoutSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558ADC2774C5F2008781EE /* NSConstraintLayoutSet.swift */; };
+		30558AF62774C5F3008781EE /* InputBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558ADE2774C5F2008781EE /* InputBarButtonItem.swift */; };
+		30558AF72774C5F3008781EE /* InputBarSendButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558ADF2774C5F2008781EE /* InputBarSendButton.swift */; };
+		30558AF82774C5F3008781EE /* InputBarAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE02774C5F2008781EE /* InputBarAccessoryView.swift */; };
+		30558AF92774C5F3008781EE /* InputPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE22774C5F2008781EE /* InputPlugin.swift */; };
+		30558AFA2774C5F3008781EE /* InputBarAccessoryViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE32774C5F2008781EE /* InputBarAccessoryViewDelegate.swift */; };
+		30558AFB2774C5F3008781EE /* InputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE42774C5F2008781EE /* InputItem.swift */; };
+		30558AFC2774C5F3008781EE /* InputStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE62774C5F3008781EE /* InputStackView.swift */; };
+		30558AFD2774C5F3008781EE /* InputTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE72774C5F3008781EE /* InputTextView.swift */; };
+		30558AFE2774C5F3008781EE /* SeparatorLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AE82774C5F3008781EE /* SeparatorLine.swift */; };
+		30558AFF2774C5F3008781EE /* NSNotification+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AEA2774C5F3008781EE /* NSNotification+Extensions.swift */; };
+		30558B002774C5F3008781EE /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AEB2774C5F3008781EE /* String+Extensions.swift */; };
+		30558B012774C5F3008781EE /* UITextView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AEC2774C5F3008781EE /* UITextView+Extensions.swift */; };
+		30558B022774C5F3008781EE /* NSMutableAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AED2774C5F3008781EE /* NSMutableAttributedString+Extensions.swift */; };
+		30558B032774C5F3008781EE /* UIView+AutoLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AEE2774C5F3008781EE /* UIView+AutoLayout.swift */; };
+		30558B042774C5F3008781EE /* InputBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30558AF02774C5F3008781EE /* InputBarViewController.swift */; };
 		3057027F24C5B2F800D84EFC /* ChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3057027E24C5B2F800D84EFC /* ChatListViewModel.swift */; };
 		3057028724C5C88300D84EFC /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = 306011B422E5E7FB00C1CE6F /* Localizable.stringsdict */; };
 		3057028C24C5E7B600D84EFC /* ContactCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE77838E23E4276D0093EABD /* ContactCellViewModel.swift */; };
@@ -298,42 +283,26 @@
 		304F769825DD23D70094B5E2 /* FullMessageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FullMessageViewController.swift; sourceTree = "<group>"; };
 		3052C609253F082E007D13EA /* MessageLabelDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageLabelDelegate.swift; sourceTree = "<group>"; };
 		3052C60D253F088E007D13EA /* DetectorType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetectorType.swift; sourceTree = "<group>"; };
-		30558A0427709AF5008781EE /* NSNotification+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extensions.swift"; sourceTree = "<group>"; };
-		30558A0527709AF5008781EE /* String+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
-		30558A0627709AF5008781EE /* UITextView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITextView+Extensions.swift"; sourceTree = "<group>"; };
-		30558A0727709AF5008781EE /* NSMutableAttributedString+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSMutableAttributedString+Extensions.swift"; sourceTree = "<group>"; };
-		30558A0827709AF5008781EE /* UIView+AutoLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+AutoLayout.swift"; sourceTree = "<group>"; };
-		30558A0A27709AF6008781EE /* KeyboardManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardManager.swift; sourceTree = "<group>"; };
-		30558A0B27709AF6008781EE /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = "<group>"; };
-		30558A0C27709AF6008781EE /* KeyboardEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardEvent.swift; sourceTree = "<group>"; };
-		30558A0E27709AF6008781EE /* RxInputBarAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxInputBarAccessoryView.swift; sourceTree = "<group>"; };
-		30558A1127709AF7008781EE /* AttachmentManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttachmentManager.swift; sourceTree = "<group>"; };
-		30558A1327709AF7008781EE /* ImageAttachmentCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageAttachmentCell.swift; sourceTree = "<group>"; };
-		30558A1427709AF7008781EE /* AttachmentCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttachmentCell.swift; sourceTree = "<group>"; };
-		30558A1527709AF7008781EE /* AttachmentsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttachmentsView.swift; sourceTree = "<group>"; };
-		30558A1727709AF7008781EE /* AttachmentManagerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttachmentManagerDataSource.swift; sourceTree = "<group>"; };
-		30558A1827709AF7008781EE /* AttachmentManagerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttachmentManagerDelegate.swift; sourceTree = "<group>"; };
-		30558A1A27709AF7008781EE /* AutocompleteManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteManager.swift; sourceTree = "<group>"; };
-		30558A1C27709AF7008781EE /* AutocompleteSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteSession.swift; sourceTree = "<group>"; };
-		30558A1D27709AF7008781EE /* AutocompleteCompletion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteCompletion.swift; sourceTree = "<group>"; };
-		30558A1F27709AF7008781EE /* AutocompleteTableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteTableView.swift; sourceTree = "<group>"; };
-		30558A2027709AF7008781EE /* AutocompleteCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteCell.swift; sourceTree = "<group>"; };
-		30558A2227709AF7008781EE /* AutocompleteManagerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteManagerDelegate.swift; sourceTree = "<group>"; };
-		30558A2327709AF7008781EE /* AutocompleteManagerDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutocompleteManagerDataSource.swift; sourceTree = "<group>"; };
-		30558A2527709AF7008781EE /* InputStackView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputStackView.swift; sourceTree = "<group>"; };
-		30558A2627709AF7008781EE /* InputTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputTextView.swift; sourceTree = "<group>"; };
-		30558A2727709AF7008781EE /* SeparatorLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeparatorLine.swift; sourceTree = "<group>"; };
-		30558A2927709AF8008781EE /* InputBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarButtonItem.swift; sourceTree = "<group>"; };
-		30558A2A27709AF8008781EE /* InputBarSendButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarSendButton.swift; sourceTree = "<group>"; };
-		30558A2B27709AF8008781EE /* InputBarAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarAccessoryView.swift; sourceTree = "<group>"; };
-		30558A2D27709AF8008781EE /* HorizontalEdgeInsets.swift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalEdgeInsets.swift.swift; sourceTree = "<group>"; };
-		30558A2E27709AF8008781EE /* NSConstraintLayoutSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSConstraintLayoutSet.swift; sourceTree = "<group>"; };
-		30558A3027709AF9008781EE /* InputPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputPlugin.swift; sourceTree = "<group>"; };
-		30558A3127709AF9008781EE /* InputBarAccessoryViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarAccessoryViewDelegate.swift; sourceTree = "<group>"; };
-		30558A3227709AF9008781EE /* InputItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputItem.swift; sourceTree = "<group>"; };
-		30558A3427709AF9008781EE /* InputBarAccessoryView-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "InputBarAccessoryView-Bridging-Header.h"; sourceTree = "<group>"; };
-		30558A3527709AF9008781EE /* InputBarAccessoryView+Availability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "InputBarAccessoryView+Availability.swift"; sourceTree = "<group>"; };
-		30558A3827709AFA008781EE /* InputBarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarViewController.swift; sourceTree = "<group>"; };
+		30558AD72774C5F2008781EE /* KeyboardManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardManager.swift; sourceTree = "<group>"; };
+		30558AD82774C5F2008781EE /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = "<group>"; };
+		30558AD92774C5F2008781EE /* KeyboardEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardEvent.swift; sourceTree = "<group>"; };
+		30558ADB2774C5F2008781EE /* HorizontalEdgePadding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalEdgePadding.swift; sourceTree = "<group>"; };
+		30558ADC2774C5F2008781EE /* NSConstraintLayoutSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSConstraintLayoutSet.swift; sourceTree = "<group>"; };
+		30558ADE2774C5F2008781EE /* InputBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarButtonItem.swift; sourceTree = "<group>"; };
+		30558ADF2774C5F2008781EE /* InputBarSendButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarSendButton.swift; sourceTree = "<group>"; };
+		30558AE02774C5F2008781EE /* InputBarAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InputBarAccessoryView.swift; path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/InputBarAccessoryView.swift"; sourceTree = SOURCE_ROOT; };
+		30558AE22774C5F2008781EE /* InputPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputPlugin.swift; sourceTree = "<group>"; };
+		30558AE32774C5F2008781EE /* InputBarAccessoryViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarAccessoryViewDelegate.swift; sourceTree = "<group>"; };
+		30558AE42774C5F2008781EE /* InputItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputItem.swift; sourceTree = "<group>"; };
+		30558AE62774C5F3008781EE /* InputStackView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputStackView.swift; sourceTree = "<group>"; };
+		30558AE72774C5F3008781EE /* InputTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputTextView.swift; sourceTree = "<group>"; };
+		30558AE82774C5F3008781EE /* SeparatorLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SeparatorLine.swift; sourceTree = "<group>"; };
+		30558AEA2774C5F3008781EE /* NSNotification+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extensions.swift"; sourceTree = "<group>"; };
+		30558AEB2774C5F3008781EE /* String+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
+		30558AEC2774C5F3008781EE /* UITextView+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITextView+Extensions.swift"; sourceTree = "<group>"; };
+		30558AED2774C5F3008781EE /* NSMutableAttributedString+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSMutableAttributedString+Extensions.swift"; sourceTree = "<group>"; };
+		30558AEE2774C5F3008781EE /* UIView+AutoLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+AutoLayout.swift"; sourceTree = "<group>"; };
+		30558AF02774C5F3008781EE /* InputBarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarViewController.swift; sourceTree = "<group>"; };
 		3057027E24C5B2F800D84EFC /* ChatListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListViewModel.swift; sourceTree = "<group>"; };
 		3057029A24C6441300D84EFC /* EmptyStateLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmptyStateLabel.swift; sourceTree = "<group>"; };
 		305702A024C6453700D84EFC /* TypeAlias.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypeAlias.swift; sourceTree = "<group>"; };
@@ -625,185 +594,95 @@
 			path = View;
 			sourceTree = "<group>";
 		};
-		305589FD27709A6A008781EE /* InputBarAccessoryView */ = {
+		30558AD52774C568008781EE /* InputBarAccessoryView */ = {
 			isa = PBXGroup;
 			children = (
-				30558A2827709AF8008781EE /* Controls */,
-				30558A0327709AF5008781EE /* Extensions */,
-				30558A2B27709AF8008781EE /* InputBarAccessoryView.swift */,
-				30558A0927709AF6008781EE /* KeyboardManager */,
-				30558A2C27709AF8008781EE /* Models */,
-				30558A0F27709AF7008781EE /* Plugins */,
-				30558A2F27709AF9008781EE /* Protocols */,
-				30558A0D27709AF6008781EE /* RxInputBarAccessoryView */,
-				30558A3327709AF9008781EE /* Supporting Files */,
-				30558A3727709AFA008781EE /* ViewControllers */,
-				30558A2427709AF7008781EE /* Views */,
-			);
-			name = InputBarAccessoryView;
-			path = View/InputBarAccessoryView;
+				30558ADD2774C5F2008781EE /* Controls */,
+				30558AE92774C5F3008781EE /* Extensions */,
+				30558AE02774C5F2008781EE /* InputBarAccessoryView.swift */,
+				30558AD62774C5F2008781EE /* KeyboardManager */,
+				30558ADA2774C5F2008781EE /* Models */,
+				30558AE12774C5F2008781EE /* Protocols */,
+				30558AEF2774C5F3008781EE /* ViewControllers */,
+				30558AE52774C5F3008781EE /* Views */,
+			);
+			path = InputBarAccessoryView;
 			sourceTree = "<group>";
 		};
-		30558A0327709AF5008781EE /* Extensions */ = {
+		30558AD62774C5F2008781EE /* KeyboardManager */ = {
 			isa = PBXGroup;
 			children = (
-				30558A0427709AF5008781EE /* NSNotification+Extensions.swift */,
-				30558A0527709AF5008781EE /* String+Extensions.swift */,
-				30558A0627709AF5008781EE /* UITextView+Extensions.swift */,
-				30558A0727709AF5008781EE /* NSMutableAttributedString+Extensions.swift */,
-				30558A0827709AF5008781EE /* UIView+AutoLayout.swift */,
+				30558AD72774C5F2008781EE /* KeyboardManager.swift */,
+				30558AD82774C5F2008781EE /* KeyboardNotification.swift */,
+				30558AD92774C5F2008781EE /* KeyboardEvent.swift */,
 			);
-			path = Extensions;
-			sourceTree = "<group>";
-		};
-		30558A0927709AF6008781EE /* KeyboardManager */ = {
-			isa = PBXGroup;
-			children = (
-				30558A0A27709AF6008781EE /* KeyboardManager.swift */,
-				30558A0B27709AF6008781EE /* KeyboardNotification.swift */,
-				30558A0C27709AF6008781EE /* KeyboardEvent.swift */,
-			);
-			path = KeyboardManager;
-			sourceTree = "<group>";
+			name = KeyboardManager;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A0D27709AF6008781EE /* RxInputBarAccessoryView */ = {
+		30558ADA2774C5F2008781EE /* Models */ = {
 			isa = PBXGroup;
 			children = (
-				30558A0E27709AF6008781EE /* RxInputBarAccessoryView.swift */,
+				30558ADB2774C5F2008781EE /* HorizontalEdgePadding.swift */,
+				30558ADC2774C5F2008781EE /* NSConstraintLayoutSet.swift */,
 			);
-			path = RxInputBarAccessoryView;
-			sourceTree = "<group>";
+			name = Models;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/Models";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A0F27709AF7008781EE /* Plugins */ = {
+		30558ADD2774C5F2008781EE /* Controls */ = {
 			isa = PBXGroup;
 			children = (
-				30558A1027709AF7008781EE /* AttachmentManager */,
-				30558A1927709AF7008781EE /* AutocompleteManager */,
+				30558ADE2774C5F2008781EE /* InputBarButtonItem.swift */,
+				30558ADF2774C5F2008781EE /* InputBarSendButton.swift */,
 			);
-			path = Plugins;
-			sourceTree = "<group>";
+			name = Controls;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/Controls";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A1027709AF7008781EE /* AttachmentManager */ = {
+		30558AE12774C5F2008781EE /* Protocols */ = {
 			isa = PBXGroup;
 			children = (
-				30558A1127709AF7008781EE /* AttachmentManager.swift */,
-				30558A1227709AF7008781EE /* Views */,
-				30558A1627709AF7008781EE /* Protocols */,
+				30558AE22774C5F2008781EE /* InputPlugin.swift */,
+				30558AE32774C5F2008781EE /* InputBarAccessoryViewDelegate.swift */,
+				30558AE42774C5F2008781EE /* InputItem.swift */,
 			);
-			path = AttachmentManager;
-			sourceTree = "<group>";
+			name = Protocols;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A1227709AF7008781EE /* Views */ = {
+		30558AE52774C5F3008781EE /* Views */ = {
 			isa = PBXGroup;
 			children = (
-				30558A1327709AF7008781EE /* ImageAttachmentCell.swift */,
-				30558A1427709AF7008781EE /* AttachmentCell.swift */,
-				30558A1527709AF7008781EE /* AttachmentsView.swift */,
+				30558AE62774C5F3008781EE /* InputStackView.swift */,
+				30558AE72774C5F3008781EE /* InputTextView.swift */,
+				30558AE82774C5F3008781EE /* SeparatorLine.swift */,
 			);
-			path = Views;
-			sourceTree = "<group>";
+			name = Views;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/Views";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A1627709AF7008781EE /* Protocols */ = {
+		30558AE92774C5F3008781EE /* Extensions */ = {
 			isa = PBXGroup;
 			children = (
-				30558A1727709AF7008781EE /* AttachmentManagerDataSource.swift */,
-				30558A1827709AF7008781EE /* AttachmentManagerDelegate.swift */,
+				30558AEA2774C5F3008781EE /* NSNotification+Extensions.swift */,
+				30558AEB2774C5F3008781EE /* String+Extensions.swift */,
+				30558AEC2774C5F3008781EE /* UITextView+Extensions.swift */,
+				30558AED2774C5F3008781EE /* NSMutableAttributedString+Extensions.swift */,
+				30558AEE2774C5F3008781EE /* UIView+AutoLayout.swift */,
 			);
-			path = Protocols;
-			sourceTree = "<group>";
+			name = Extensions;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions";
+			sourceTree = SOURCE_ROOT;
 		};
-		30558A1927709AF7008781EE /* AutocompleteManager */ = {
+		30558AEF2774C5F3008781EE /* ViewControllers */ = {
 			isa = PBXGroup;
 			children = (
-				30558A1A27709AF7008781EE /* AutocompleteManager.swift */,
-				30558A1B27709AF7008781EE /* Models */,
-				30558A1E27709AF7008781EE /* Views */,
-				30558A2127709AF7008781EE /* Protocols */,
+				30558AF02774C5F3008781EE /* InputBarViewController.swift */,
 			);
-			path = AutocompleteManager;
-			sourceTree = "<group>";
-		};
-		30558A1B27709AF7008781EE /* Models */ = {
-			isa = PBXGroup;
-			children = (
-				30558A1C27709AF7008781EE /* AutocompleteSession.swift */,
-				30558A1D27709AF7008781EE /* AutocompleteCompletion.swift */,
-			);
-			path = Models;
-			sourceTree = "<group>";
-		};
-		30558A1E27709AF7008781EE /* Views */ = {
-			isa = PBXGroup;
-			children = (
-				30558A1F27709AF7008781EE /* AutocompleteTableView.swift */,
-				30558A2027709AF7008781EE /* AutocompleteCell.swift */,
-			);
-			path = Views;
-			sourceTree = "<group>";
-		};
-		30558A2127709AF7008781EE /* Protocols */ = {
-			isa = PBXGroup;
-			children = (
-				30558A2227709AF7008781EE /* AutocompleteManagerDelegate.swift */,
-				30558A2327709AF7008781EE /* AutocompleteManagerDataSource.swift */,
-			);
-			path = Protocols;
-			sourceTree = "<group>";
-		};
-		30558A2427709AF7008781EE /* Views */ = {
-			isa = PBXGroup;
-			children = (
-				30558A2527709AF7008781EE /* InputStackView.swift */,
-				30558A2627709AF7008781EE /* InputTextView.swift */,
-				30558A2727709AF7008781EE /* SeparatorLine.swift */,
-			);
-			path = Views;
-			sourceTree = "<group>";
-		};
-		30558A2827709AF8008781EE /* Controls */ = {
-			isa = PBXGroup;
-			children = (
-				30558A2927709AF8008781EE /* InputBarButtonItem.swift */,
-				30558A2A27709AF8008781EE /* InputBarSendButton.swift */,
-			);
-			path = Controls;
-			sourceTree = "<group>";
-		};
-		30558A2C27709AF8008781EE /* Models */ = {
-			isa = PBXGroup;
-			children = (
-				30558A2D27709AF8008781EE /* HorizontalEdgeInsets.swift.swift */,
-				30558A2E27709AF8008781EE /* NSConstraintLayoutSet.swift */,
-			);
-			path = Models;
-			sourceTree = "<group>";
-		};
-		30558A2F27709AF9008781EE /* Protocols */ = {
-			isa = PBXGroup;
-			children = (
-				30558A3027709AF9008781EE /* InputPlugin.swift */,
-				30558A3127709AF9008781EE /* InputBarAccessoryViewDelegate.swift */,
-				30558A3227709AF9008781EE /* InputItem.swift */,
-			);
-			path = Protocols;
-			sourceTree = "<group>";
-		};
-		30558A3327709AF9008781EE /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				30558A3427709AF9008781EE /* InputBarAccessoryView-Bridging-Header.h */,
-				30558A3527709AF9008781EE /* InputBarAccessoryView+Availability.swift */,
-			);
-			path = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		30558A3727709AFA008781EE /* ViewControllers */ = {
-			isa = PBXGroup;
-			children = (
-				30558A3827709AFA008781EE /* InputBarViewController.swift */,
-			);
-			path = ViewControllers;
-			sourceTree = "<group>";
+			name = ViewControllers;
+			path = "deltachat-ios/libraries/InputbarAccessoryView/Sources/ViewControllers";
+			sourceTree = SOURCE_ROOT;
 		};
 		3057027D24C5B2C700D84EFC /* ViewModel */ = {
 			isa = PBXGroup;
@@ -930,7 +809,7 @@
 		7A9FB1421FB061E2001FEA36 /* deltachat-ios */ = {
 			isa = PBXGroup;
 			children = (
-				305589FD27709A6A008781EE /* InputBarAccessoryView */,
+				30558AD52774C568008781EE /* InputBarAccessoryView */,
 				AE57C07E2552BBC0003CFE70 /* Model */,
 				304219D7244072E600516852 /* DC */,
 				AE1988AA23EB3C7600B4CD5F /* Assets */,
@@ -1530,72 +1409,62 @@
 			buildActionMask = 2147483647;
 			files = (
 				3059620E234614E700C80F33 /* DcContact+Extension.swift in Sources */,
-				30558A5227709AFA008781EE /* InputBarButtonItem.swift in Sources */,
 				AED423D7249F580700B6B2BB /* BlockedContactsViewController.swift in Sources */,
 				303492B32577E40700A523D0 /* DocumentPreview.swift in Sources */,
+				30558AFE2774C5F3008781EE /* SeparatorLine.swift in Sources */,
 				3008CB7424F9436C00E6A617 /* AudioPlayerView.swift in Sources */,
 				AED62BCE247687E6009E220D /* LocationStreamingIndicator.swift in Sources */,
 				30AAD71B2762869600DE3DC1 /* SelectableCell.swift in Sources */,
 				AE9DAF0F22C278C6004C9591 /* ChatTitleView.swift in Sources */,
 				AE4AEE3522B1030D000AA495 /* PreviewController.swift in Sources */,
 				7070FB9B2101ECBB000DC258 /* NewGroupController.swift in Sources */,
-				30558A4827709AFA008781EE /* AutocompleteManager.swift in Sources */,
 				AE57C084255310BB003CFE70 /* ContextMenuController.swift in Sources */,
+				30558B042774C5F3008781EE /* InputBarViewController.swift in Sources */,
 				304219D92440734A00516852 /* DcMsg+Extension.swift in Sources */,
 				303492CF2587C2DC00A523D0 /* ChatInputBar.swift in Sources */,
 				AE52EA19229EB53C00C586C9 /* ContactDetailHeader.swift in Sources */,
-				30558A4D27709AFA008781EE /* AutocompleteManagerDelegate.swift in Sources */,
 				78E45E4421D3F14A00D4B15E /* UIImage+Extension.swift in Sources */,
-				30558A4227709AFA008781EE /* AttachmentManager.swift in Sources */,
-				30558A3F27709AFA008781EE /* KeyboardNotification.swift in Sources */,
 				30734326249A280B00BF9AD1 /* MediaQualityController.swift in Sources */,
 				AE6EC5282497B9B200A400E4 /* ThumbnailCache.swift in Sources */,
-				30558A5327709AFA008781EE /* InputBarSendButton.swift in Sources */,
-				30558A4B27709AFA008781EE /* AutocompleteTableView.swift in Sources */,
-				30558A5127709AFA008781EE /* SeparatorLine.swift in Sources */,
 				30FDB70524D1C1000066C48D /* ChatViewController.swift in Sources */,
 				AE52EA20229EB9F000C586C9 /* EditGroupViewController.swift in Sources */,
-				30558A5627709AFA008781EE /* NSConstraintLayoutSet.swift in Sources */,
-				30558A4127709AFA008781EE /* RxInputBarAccessoryView.swift in Sources */,
 				AE18F294228C602A0007B1BE /* SecuritySettingsController.swift in Sources */,
-				30558A3B27709AFA008781EE /* UITextView+Extensions.swift in Sources */,
+				30558B032774C5F3008781EE /* UIView+AutoLayout.swift in Sources */,
 				30C2BFFE27032375005505DA /* ChatSearchAccessoryBar.swift in Sources */,
+				30558AFB2774C5F3008781EE /* InputItem.swift in Sources */,
 				AE39D323249CFC1A007346A1 /* DocumentGalleryController.swift in Sources */,
 				AE8DD451249D1DFB009A4BC1 /* DocumentGalleryFileCell.swift in Sources */,
-				30558A3A27709AFA008781EE /* String+Extensions.swift in Sources */,
 				3095A351237DD1F700AB07F7 /* MediaPicker.swift in Sources */,
 				B21005DB23383664004C70C5 /* SettingsClassicViewController.swift in Sources */,
 				AEC67A1C241CE9E4007DDBE1 /* AppStateRestorer.swift in Sources */,
 				3008CB7224F93EB900E6A617 /* AudioMessageCell.swift in Sources */,
 				302E1BB4252B5AB4008F4264 /* PlayButtonView.swift in Sources */,
-				30558A3927709AFA008781EE /* NSNotification+Extensions.swift in Sources */,
+				30558AF22774C5F3008781EE /* KeyboardNotification.swift in Sources */,
 				303492AD2577CAC300A523D0 /* FileView.swift in Sources */,
 				7AE0A5491FC42F65005ECB4B /* NewChatViewController.swift in Sources */,
-				30558A3E27709AFA008781EE /* KeyboardManager.swift in Sources */,
 				AE77838F23E4276D0093EABD /* ContactCellViewModel.swift in Sources */,
 				B20462E62440C99600367A57 /* SettingsAutodelSetController.swift in Sources */,
 				3015634423A003BA00E9DEF4 /* AudioRecorderController.swift in Sources */,
 				AE57C0802552BBD0003CFE70 /* GalleryItem.swift in Sources */,
 				AE25F09022807AD800CDEA66 /* AvatarSelectionCell.swift in Sources */,
 				30A4149724F6EFBE00EC91EB /* InfoMessageCell.swift in Sources */,
-				30558A5727709AFA008781EE /* InputPlugin.swift in Sources */,
 				302B84C6239676F0001C261F /* AvatarHelper.swift in Sources */,
 				AE77838D23E32ED20093EABD /* ContactDetailViewModel.swift in Sources */,
 				30DAF71C275901610073C154 /* SettingsBackgroundSelectionController.swift in Sources */,
 				3010968926838A050032CBA0 /* VideoInviteCell.swift in Sources */,
 				303492CB257A814200A523D0 /* DraftArea.swift in Sources */,
 				AEE6EC3F2282C59C00EDC689 /* GroupMembersViewController.swift in Sources */,
-				30558A4527709AFA008781EE /* AttachmentsView.swift in Sources */,
 				B26B3BC7236DC3DC008ED35A /* SwitchCell.swift in Sources */,
 				AEE700252438E0E500D6992E /* ProgressAlertHandler.swift in Sources */,
 				30E348E524F6647D005C93D1 /* FileTextCell.swift in Sources */,
+				30558AFD2774C5F3008781EE /* InputTextView.swift in Sources */,
 				306C32322445CDE9001D89F3 /* DcLogger.swift in Sources */,
-				30558A5827709AFA008781EE /* InputBarAccessoryViewDelegate.swift in Sources */,
 				307A82CC25B8D26700748B57 /* ChatEditingBar.swift in Sources */,
+				30558AF92774C5F3008781EE /* InputPlugin.swift in Sources */,
 				303492952565AABC00A523D0 /* DraftModel.swift in Sources */,
+				30558B022774C5F3008781EE /* NSMutableAttributedString+Extensions.swift in Sources */,
 				78E45E3A21D3CFBC00D4B15E /* SettingsController.swift in Sources */,
 				AE8519EA2272FDCA00ED86F0 /* DeviceContactsHandler.swift in Sources */,
-				30558A4327709AFA008781EE /* ImageAttachmentCell.swift in Sources */,
 				302E592426A5CF4800DD4F58 /* ConnectivityViewController.swift in Sources */,
 				78ED838321D5379000243125 /* TextFieldCell.swift in Sources */,
 				305702A124C6453700D84EFC /* TypeAlias.swift in Sources */,
@@ -1603,47 +1472,43 @@
 				AE0D26FD1FB1FE88002FAFCE /* ChatListController.swift in Sources */,
 				302D5450268B6B2300A8B271 /* MessageUtils.swift in Sources */,
 				30149D9322F21129003C12B5 /* QrViewController.swift in Sources */,
-				30558A4C27709AFA008781EE /* AutocompleteCell.swift in Sources */,
 				AEE56D80225504DB007DC082 /* Extensions.swift in Sources */,
+				30558AF82774C5F3008781EE /* InputBarAccessoryView.swift in Sources */,
 				7A0052C81FBE6CB40048C3BF /* NewContactController.swift in Sources */,
-				30558A3D27709AFA008781EE /* UIView+AutoLayout.swift in Sources */,
+				30558AF52774C5F3008781EE /* NSConstraintLayoutSet.swift in Sources */,
 				30860EE926F49E64002651A6 /* DownloadOnDemandViewController.swift in Sources */,
 				AEE56D762253431E007DC082 /* AccountSetupController.swift in Sources */,
 				AE8F503524753DFE007FEE0B /* GalleryViewController.swift in Sources */,
 				B2C42570265C325C00B95377 /* MultilineLabelCell.swift in Sources */,
 				AEF53BD5248904BF00D309C1 /* GalleryTimeLabel.swift in Sources */,
-				30558A5C27709AFA008781EE /* InputBarViewController.swift in Sources */,
+				30558AFA2774C5F3008781EE /* InputBarAccessoryViewDelegate.swift in Sources */,
 				AEE6EC482283045D00EDC689 /* EditSettingsController.swift in Sources */,
 				30653081254358B10093E196 /* QuoteView.swift in Sources */,
 				3067AAC62667F3FE00525036 /* ImageFormat.swift in Sources */,
-				30558A4F27709AFA008781EE /* InputStackView.swift in Sources */,
 				30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */,
+				30558AF12774C5F3008781EE /* KeyboardManager.swift in Sources */,
 				30EF7308252F6A3300E2C54A /* PaddingTextView.swift in Sources */,
-				30558A4E27709AFA008781EE /* AutocompleteManagerDataSource.swift in Sources */,
 				30E348E124F53772005C93D1 /* ImageTextCell.swift in Sources */,
 				3008CB7624F95B6D00E6A617 /* AudioController.swift in Sources */,
 				302B84CE2397F6CD001C261F /* URL+Extension.swift in Sources */,
 				7A9FB1441FB061E2001FEA36 /* AppDelegate.swift in Sources */,
 				3034929F25752FC800A523D0 /* MediaPreview.swift in Sources */,
 				AE76E5EE242BF2EA003CF461 /* WelcomeViewController.swift in Sources */,
+				30558AF42774C5F3008781EE /* HorizontalEdgePadding.swift in Sources */,
 				3052C60A253F082E007D13EA /* MessageLabelDelegate.swift in Sources */,
 				AE0AA9562478191900D42A7F /* GridCollectionViewFlowLayout.swift in Sources */,
 				AEA0F6A124474146009F887B /* ProfileInfoViewController.swift in Sources */,
+				30558AF62774C5F3008781EE /* InputBarButtonItem.swift in Sources */,
 				303492A5257546B400A523D0 /* DraftPreview.swift in Sources */,
 				305961D02346125100C80F33 /* NSAttributedString+Extensions.swift in Sources */,
-				30558A5A27709AFA008781EE /* InputBarAccessoryView+Availability.swift in Sources */,
 				21D6C941260623F500D0755A /* NotificationManager.swift in Sources */,
-				30558A5527709AFA008781EE /* HorizontalEdgeInsets.swift.swift in Sources */,
 				302B84C72396770B001C261F /* RelayHelper.swift in Sources */,
 				305961CF2346125100C80F33 /* UIColor+Extensions.swift in Sources */,
-				30558A5027709AFA008781EE /* InputTextView.swift in Sources */,
 				AEACE2E51FB32E1900DCDD78 /* Utils.swift in Sources */,
 				3052C60E253F088E007D13EA /* DetectorType.swift in Sources */,
-				30558A4A27709AFA008781EE /* AutocompleteCompletion.swift in Sources */,
 				30349291256441E200A523D0 /* QuotePreview.swift in Sources */,
 				AEC67A1E241FCFE0007DDBE1 /* ChatListViewModel.swift in Sources */,
 				30FDB71F24D8170E0066C48D /* TextMessageCell.swift in Sources */,
-				30558A3C27709AFA008781EE /* NSMutableAttributedString+Extensions.swift in Sources */,
 				AE1988A523EB2FBA00B4CD5F /* Errors.swift in Sources */,
 				302D5454268B84CB00A8B271 /* SettingsVideoChatViewController.swift in Sources */,
 				AEFBE22F23FEF23D0045327A /* ProviderInfoCell.swift in Sources */,
@@ -1657,22 +1522,19 @@
 				305961D22346125100C80F33 /* CGRect+Extensions.swift in Sources */,
 				3057029B24C6441300D84EFC /* EmptyStateLabel.swift in Sources */,
 				30260CA7238F02F700D8D52C /* MultilineTextFieldCell.swift in Sources */,
-				30558A5427709AFA008781EE /* InputBarAccessoryView.swift in Sources */,
 				70B8882E2091B8550074812E /* ContactCell.swift in Sources */,
 				305961CD2346125100C80F33 /* UIEdgeInsets+Extensions.swift in Sources */,
 				30EF7324252FF15F00E2C54A /* MessageLabel.swift in Sources */,
 				30C0D49D237C4908008E2A0E /* CertificateCheckController.swift in Sources */,
-				30558A4727709AFA008781EE /* AttachmentManagerDelegate.swift in Sources */,
+				30558AF72774C5F3008781EE /* InputBarSendButton.swift in Sources */,
 				304F769525DD237B0094B5E2 /* WebViewViewController.swift in Sources */,
 				7092474120B3869500AF8799 /* ContactDetailViewController.swift in Sources */,
-				30558A4627709AFA008781EE /* AttachmentManagerDataSource.swift in Sources */,
 				30F9B9EC235F2116006E7ACF /* MessageCounter.swift in Sources */,
 				304F769925DD23D70094B5E2 /* FullMessageViewController.swift in Sources */,
+				30558B002774C5F3008781EE /* String+Extensions.swift in Sources */,
 				AE0AA952247800E700D42A7F /* GalleryCell.swift in Sources */,
 				AE0AA958247834A400D42A7F /* Date+Extension.swift in Sources */,
-				30558A4427709AFA008781EE /* AttachmentCell.swift in Sources */,
 				307D822E241669C7006D2490 /* LocationManager.swift in Sources */,
-				30558A4927709AFA008781EE /* AutocompleteSession.swift in Sources */,
 				AE851AD0227DF50900ED86F0 /* GroupChatDetailViewController.swift in Sources */,
 				30FDB72124D838240066C48D /* BaseMessageCell.swift in Sources */,
 				7A451DB01FB1F84900177250 /* AppCoordinator.swift in Sources */,
@@ -1680,13 +1542,15 @@
 				AE9DAF0D22C1215D004C9591 /* EditContactController.swift in Sources */,
 				302D546A2693591700A8B271 /* ChatContactRequestBar.swift in Sources */,
 				305DDD8725DD97BF00974489 /* DynamicFontButton.swift in Sources */,
-				30558A4027709AFA008781EE /* KeyboardEvent.swift in Sources */,
+				30558AFC2774C5F3008781EE /* InputStackView.swift in Sources */,
 				785BE16821E247F1003BE98C /* MessageInfoViewController.swift in Sources */,
+				30558B012774C5F3008781EE /* UITextView+Extensions.swift in Sources */,
+				30558AF32774C5F3008781EE /* KeyboardEvent.swift in Sources */,
 				AED423D3249F578B00B6B2BB /* AddGroupMembersViewController.swift in Sources */,
 				AE851AC5227C755A00ED86F0 /* Protocols.swift in Sources */,
-				30558A5927709AFA008781EE /* InputItem.swift in Sources */,
 				AE728F15229D5C390047565B /* PhotoPickerAlertAction.swift in Sources */,
 				AECEF03E244F2D55006C90DA /* QrPageController.swift in Sources */,
+				30558AFF2774C5F3008781EE /* NSNotification+Extensions.swift in Sources */,
 				AEACE2E31FB32B5C00DCDD78 /* Constants.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

+ 0 - 96
deltachat-ios/View/InputBarAccessoryView/Controls/InputBarSendButton.swift

@@ -1,96 +0,0 @@
-//
-//  InputBarSendButton.swift
-//  InputBarAccessoryView
-//
-//  Copyright © 2017-2019 Nathan Tannar.
-//
-//  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.
-//
-//  Created by Nathan Tannar on 8/18/17.
-//
-
-import UIKit
-
-open class InputBarSendButton: InputBarButtonItem {
-
-    /// A flag indicating the animation state of the `InputBarSendButton`
-    open private(set) var isAnimating: Bool = false
-
-    /// Accessor to modify the color of the activity view
-    open var activityViewColor: UIColor! {
-        get {
-            return activityView.color
-        }
-        set {
-            activityView.color = newValue
-        }
-    }
-
-    private let activityView: UIActivityIndicatorView = {
-        let view = UIActivityIndicatorView(style: .gray)
-        view.isUserInteractionEnabled = false
-        view.isHidden = true
-        return view
-    }()
-
-    public convenience init() {
-        self.init(frame: .zero)
-    }
-
-    public override init(frame: CGRect) {
-        super.init(frame: frame)
-        setupSendButton()
-    }
-
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        setupSendButton()
-    }
-
-    private func setupSendButton() {
-        addSubview(activityView)
-    }
-
-    open override func layoutSubviews() {
-        super.layoutSubviews()
-        activityView.frame = bounds
-    }
-
-    /// Starts the animation of the activity view, hiding other elements
-    open func startAnimating() {
-        guard !isAnimating else { return }
-        defer { isAnimating = true }
-        activityView.startAnimating()
-        activityView.isHidden = false
-        // Setting isHidden doesn't hide the elements
-        titleLabel?.alpha = 0
-        imageView?.layer.transform = CATransform3DMakeScale(0.0, 0.0, 0.0)
-    }
-
-    /// Stops the animation of the activity view, shows other elements
-    open func stopAnimating() {
-        guard isAnimating else { return }
-        defer { isAnimating = false }
-        activityView.stopAnimating()
-        activityView.isHidden = true
-        titleLabel?.alpha = 1
-        imageView?.layer.transform = CATransform3DIdentity
-    }
-
-}

+ 0 - 354
deltachat-ios/View/InputBarAccessoryView/InputBarButtonItem.swift

@@ -1,354 +0,0 @@
-//
-//  InputBarButtonItem.swift
-//  InputBarAccessoryView
-//
-//  Copyright © 2017-2019 Nathan Tannar.
-//
-//  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.
-//
-//  Created by Nathan Tannar on 8/18/17.
-//
-
-import UIKit
-
-/**
- A InputItem that inherits from UIButton
- 
- ## Important Notes ##
- 1. Intended to be used in an `InputStackView`
- */
-open class InputBarButtonItem: UIButton, InputItem {
-    
-    /// The spacing properties of the InputBarButtonItem
-    ///
-    /// - fixed: The spacing is fixed
-    /// - flexible: The spacing is flexible
-    /// - none: There is no spacing
-    public enum Spacing {
-        case fixed(CGFloat)
-        case flexible
-        case none
-    }
-    
-    public typealias InputBarButtonItemAction = ((InputBarButtonItem) -> Void)
-    
-    // MARK: - Properties
-    
-    /// A weak reference to the InputBarAccessoryView that the InputBarButtonItem used in
-    open weak var inputBarAccessoryView: InputBarAccessoryView?
-    
-    /// The spacing property of the InputBarButtonItem that determines the contentHuggingPriority and any
-    /// additional space to the intrinsicContentSize
-    open var spacing: Spacing = .none {
-        didSet {
-            switch spacing {
-            case .flexible:
-                setContentHuggingPriority(UILayoutPriority(rawValue: 1), for: .horizontal)
-            case .fixed:
-                setContentHuggingPriority(UILayoutPriority(rawValue: 1000), for: .horizontal)
-            case .none:
-                setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-            }
-        }
-    }
-    
-    /// When not nil this size overrides the intrinsicContentSize
-    private var size: CGSize? = CGSize(width: 20, height: 20) {
-        didSet {
-            invalidateIntrinsicContentSize()
-        }
-    }
-    
-    open override var intrinsicContentSize: CGSize {
-        var contentSize = size ?? super.intrinsicContentSize
-        switch spacing {
-        case .fixed(let width):
-            contentSize.width += width
-        case .flexible, .none:
-            break
-        }
-        return contentSize
-    }
-    
-    /// A reference to the stack view position that the InputBarButtonItem is held in
-    open var parentStackViewPosition: InputStackView.Position?
-    
-    /// The title for the UIControlState.normal
-    open var title: String? {
-        get {
-            return title(for: .normal)
-        }
-        set {
-            setTitle(newValue, for: .normal)
-        }
-    }
-    
-    /// The image for the UIControlState.normal
-    open var image: UIImage? {
-        get {
-            return image(for: .normal)
-        }
-        set {
-            setImage(newValue, for: .normal)
-        }
-    }
-    
-    /// Calls the onSelectedAction or onDeselectedAction when set
-    open override var isHighlighted: Bool {
-        get {
-            return super.isHighlighted
-        }
-        set {
-            guard newValue != isHighlighted else { return }
-            super.isHighlighted = newValue
-            if newValue {
-                onSelectedAction?(self)
-            } else {
-                onDeselectedAction?(self)
-            }
-
-        }
-    }
-
-    /// Calls the onEnabledAction or onDisabledAction when set
-    open override var isEnabled: Bool {
-        didSet {
-            if isEnabled {
-                onEnabledAction?(self)
-            } else {
-                onDisabledAction?(self)
-            }
-        }
-    }
-    
-    // MARK: - Reactive Hooks
-    
-    private var onTouchUpInsideAction: InputBarButtonItemAction?
-    private var onKeyboardEditingBeginsAction: InputBarButtonItemAction?
-    private var onKeyboardEditingEndsAction: InputBarButtonItemAction?
-    private var onKeyboardSwipeGestureAction: ((InputBarButtonItem, UISwipeGestureRecognizer) -> Void)?
-    private var onTextViewDidChangeAction: ((InputBarButtonItem, InputTextView) -> Void)?
-    private var onSelectedAction: InputBarButtonItemAction?
-    private var onDeselectedAction: InputBarButtonItemAction?
-    private var onEnabledAction: InputBarButtonItemAction?
-    private var onDisabledAction: InputBarButtonItemAction?
-    
-    // MARK: - Initialization
-    
-    public convenience init() {
-        self.init(frame: .zero)
-    }
-    
-    public override init(frame: CGRect) {
-        super.init(frame: frame)
-        setup()
-    }
-    
-    required public init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        setup()
-    }
-    
-    // MARK: - Setup
-    
-    /// Sets up the default properties
-    open func setup() {
-        contentVerticalAlignment = .center
-        contentHorizontalAlignment = .center
-        imageView?.contentMode = .scaleAspectFit
-        setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
-        setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .vertical)
-        setTitleColor(UIColor(red: 0, green: 122/255, blue: 1, alpha: 1), for: .normal)
-        setTitleColor(UIColor(red: 0, green: 122/255, blue: 1, alpha: 0.3), for: .highlighted)
-        setTitleColor(.lightGray, for: .disabled)
-        adjustsImageWhenHighlighted = false
-        addTarget(self, action: #selector(InputBarButtonItem.touchUpInsideAction), for: .touchUpInside)
-    }
-    
-    // MARK: - Size Adjustment
-    
-    /// Sets the size of the InputBarButtonItem which overrides the intrinsicContentSize. When set to nil
-    /// the default intrinsicContentSize is used. The new size will be laid out in the UIStackView that
-    /// the InputBarButtonItem is held in
-    ///
-    /// - Parameters:
-    ///   - newValue: The new size
-    ///   - animated: If the layout should be animated
-    open func setSize(_ newValue: CGSize?, animated: Bool) {
-        size = newValue
-        if animated, let position = parentStackViewPosition {
-            inputBarAccessoryView?.performLayout(animated) { [weak self] in
-                self?.inputBarAccessoryView?.layoutStackViews([position])
-            }
-        }
-    }
-    
-    // MARK: - Hook Setup Methods
-    
-    /// Used to setup your own initial properties
-    ///
-    /// - Parameter item: A reference to Self
-    /// - Returns: Self
-    @discardableResult
-    open func configure(_ item: InputBarButtonItemAction) -> Self {
-        item(self)
-        return self
-    }
-    
-    /// Sets the onKeyboardEditingBeginsAction
-    ///
-    /// - Parameter action: The new onKeyboardEditingBeginsAction
-    /// - Returns: Self
-    @discardableResult
-    open func onKeyboardEditingBegins(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onKeyboardEditingBeginsAction = action
-        return self
-    }
-    
-    /// Sets the onKeyboardEditingEndsAction
-    ///
-    /// - Parameter action: The new onKeyboardEditingEndsAction
-    /// - Returns: Self
-    @discardableResult
-    open func onKeyboardEditingEnds(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onKeyboardEditingEndsAction = action
-        return self
-    }
-    
-    
-    /// Sets the onKeyboardSwipeGestureAction
-    ///
-    /// - Parameter action: The new onKeyboardSwipeGestureAction
-    /// - Returns: Self
-    @discardableResult
-    open func onKeyboardSwipeGesture(_ action: @escaping (_ item: InputBarButtonItem, _ gesture: UISwipeGestureRecognizer) -> Void) -> Self {
-        onKeyboardSwipeGestureAction = action
-        return self
-    }
-    
-    /// Sets the onTextViewDidChangeAction
-    ///
-    /// - Parameter action: The new onTextViewDidChangeAction
-    /// - Returns: Self
-    @discardableResult
-    open func onTextViewDidChange(_ action: @escaping (_ item: InputBarButtonItem, _ textView: InputTextView) -> Void) -> Self {
-        onTextViewDidChangeAction = action
-        return self
-    }
-    
-    /// Sets the onTouchUpInsideAction
-    ///
-    /// - Parameter action: The new onTouchUpInsideAction
-    /// - Returns: Self
-    @discardableResult
-    open func onTouchUpInside(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onTouchUpInsideAction = action
-        return self
-    }
-    
-    /// Sets the onSelectedAction
-    ///
-    /// - Parameter action: The new onSelectedAction
-    /// - Returns: Self
-    @discardableResult
-    open func onSelected(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onSelectedAction = action
-        return self
-    }
-    
-    /// Sets the onDeselectedAction
-    ///
-    /// - Parameter action: The new onDeselectedAction
-    /// - Returns: Self
-    @discardableResult
-    open func onDeselected(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onDeselectedAction = action
-        return self
-    }
-    
-    /// Sets the onEnabledAction
-    ///
-    /// - Parameter action: The new onEnabledAction
-    /// - Returns: Self
-    @discardableResult
-    open func onEnabled(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onEnabledAction = action
-        return self
-    }
-    
-    /// Sets the onDisabledAction
-    ///
-    /// - Parameter action: The new onDisabledAction
-    /// - Returns: Self
-    @discardableResult
-    open func onDisabled(_ action: @escaping InputBarButtonItemAction) -> Self {
-        onDisabledAction = action
-        return self
-    }
-    
-    // MARK: - InputItem Protocol
-    
-    /// Executes the onTextViewDidChangeAction with the given textView
-    ///
-    /// - Parameter textView: A reference to the InputTextView
-    open func textViewDidChangeAction(with textView: InputTextView) {
-        onTextViewDidChangeAction?(self, textView)
-    }
-    
-    /// Executes the onKeyboardSwipeGestureAction with the given gesture
-    ///
-    /// - Parameter gesture: A reference to the gesture that was recognized
-    open func keyboardSwipeGestureAction(with gesture: UISwipeGestureRecognizer) {
-        onKeyboardSwipeGestureAction?(self, gesture)
-    }
-    
-    /// Executes the onKeyboardEditingEndsAction
-    open func keyboardEditingEndsAction() {
-        onKeyboardEditingEndsAction?(self)
-    }
-    
-    /// Executes the onKeyboardEditingBeginsAction
-    open func keyboardEditingBeginsAction() {
-        onKeyboardEditingBeginsAction?(self)
-    }
-    
-    /// Executes the onTouchUpInsideAction
-    @objc
-    open func touchUpInsideAction() {
-        onTouchUpInsideAction?(self)
-    }
-    
-    // MARK: - Static Spacers
-    
-    /// An InputBarButtonItem that's spacing property is set to be .flexible
-    public static var flexibleSpace: InputBarButtonItem {
-        let item = InputBarButtonItem()
-        item.setSize(.zero, animated: false)
-        item.spacing = .flexible
-        return item
-    }
-    
-    /// An InputBarButtonItem that's spacing property is set to be .fixed with the width arguement
-    public static func fixedSpace(_ width: CGFloat) -> InputBarButtonItem {
-        let item = InputBarButtonItem()
-        item.setSize(.zero, animated: false)
-        item.spacing = .fixed(width)
-        return item
-    }
-}

+ 0 - 185
deltachat-ios/View/InputBarAccessoryView/RxInputBarAccessoryView/RxInputBarAccessoryView.swift

@@ -1,185 +0,0 @@
-//
-//  RxInputBarAccessoryView.swift
-//  InputBarAccessoryView
-//
-//  Copyright © 2017-2019 Nathan Tannar.
-//
-//  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.
-//
-//  Created by Nathan Tannar on 9/13/18.
-//
-
-import UIKit
-#if canImport(RxSwift) && canImport(RxCocoa)
-import RxSwift
-import RxCocoa
-
-final class RxInputBarAccessoryViewDelegate:
-    DelegateProxy<InputBarAccessoryView, InputBarAccessoryViewDelegate>,
-    DelegateProxyType,
-InputBarAccessoryViewDelegate {
-
-    let sendText = PublishSubject<String>()
-    let currentText = PublishSubject<String>()
-    let intrinsicContentSize = PublishSubject<CGSize>()
-    let swipeGesture = PublishSubject<UISwipeGestureRecognizer>()
-
-    func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
-        sendText.onNext(text)
-    }
-
-    func inputBar(_ inputBar: InputBarAccessoryView, textViewTextDidChangeTo text: String) {
-        currentText.onNext(text)
-    }
-
-    func inputBar(_ inputBar: InputBarAccessoryView, didChangeIntrinsicContentTo size: CGSize) {
-        intrinsicContentSize.onNext(size)
-    }
-
-    func inputBar(_ inputBar: InputBarAccessoryView, didSwipeTextViewWith gesture: UISwipeGestureRecognizer) {
-        swipeGesture.onNext(gesture)
-    }
-
-    static func registerKnownImplementations() {
-        register {
-            RxInputBarAccessoryViewDelegate(
-                parentObject: $0,
-                delegateProxy: RxInputBarAccessoryViewDelegate.self
-            )
-        }
-    }
-
-    static func currentDelegate(for object: InputBarAccessoryView) -> InputBarAccessoryViewDelegate? {
-        return object.delegate
-    }
-
-    static func setCurrentDelegate(_ delegate: InputBarAccessoryViewDelegate?, to object: InputBarAccessoryView) {
-        object.delegate = delegate
-    }
-}
-
-extension InputBarAccessoryView {
-    var rxDelegate: RxInputBarAccessoryViewDelegate {
-        return RxInputBarAccessoryViewDelegate.proxy(for: self)
-    }
-}
-
-extension Reactive where Base: InputBarAccessoryView {
-    public var isTranslucent: Binder<Bool> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.isTranslucent = newValue
-        }
-    }
-
-    public var shouldAutoUpdateMaxTextViewHeight: Binder<Bool> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.shouldAutoUpdateMaxTextViewHeight = newValue
-        }
-    }
-
-    public var maxTextViewHeight: Binder<CGFloat> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.maxTextViewHeight = newValue
-        }
-    }
-
-    public var shouldManageSendButtonEnabledState: Binder<Bool> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.shouldManageSendButtonEnabledState = newValue
-        }
-    }
-
-    public var leftStackViewItems: Binder<[InputItem]> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setStackViewItems(newValue, forStack: .left, animated: false)
-        }
-    }
-
-    public var rightStackViewItems: Binder<[InputItem]> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setStackViewItems(newValue, forStack: .right, animated: false)
-        }
-    }
-
-    public var topStackViewItems: Binder<[InputItem]> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setStackViewItems(newValue, forStack: .top, animated: false)
-        }
-    }
-
-    public var bottomStackViewItems: Binder<[InputItem]> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setStackViewItems(newValue, forStack: .bottom, animated: false)
-        }
-    }
-
-    public var leftStackViewWidthConstant: Binder<CGFloat> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setLeftStackViewWidthConstant(to: newValue, animated: false)
-        }
-    }
-
-    public var rightStackViewWidthConstant: Binder<CGFloat> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setRightStackViewWidthConstant(to: newValue, animated: false)
-        }
-    }
-
-    public var shouldForceMaxTextViewHeight: Binder<Bool> {
-        return Binder(base) { inputBar, newValue in
-            inputBar.setShouldForceMaxTextViewHeight(to: newValue, animated: false)
-        }
-    }
-}
-
-extension Reactive where Base: InputBarButtonItem {
-    public var size: Binder<CGSize?> {
-        return Binder(base) { item, newValue in
-            item.setSize(newValue, animated: false)
-        }
-    }
-
-    public var spacing: Binder<InputBarButtonItem.Spacing> {
-        return Binder(base) { item, newValue in
-            item.spacing = newValue
-        }
-    }
-}
-
-extension Reactive where Base: InputBarSendButton {
-    public var isAnimating: Binder<Bool> {
-        return Binder(base) { item, newValue in
-            if newValue {
-                item.startAnimating()
-            } else {
-                item.stopAnimating()
-            }
-        }
-    }
-}
-
-extension Reactive where Base: InputBarViewController {
-    public var isInputBarHidden: Binder<Bool> {
-        return Binder(base) { viewController, newValue in
-            viewController.isInputBarHidden = newValue
-        }
-    }
-}
-
-#endif

+ 39 - 0
deltachat-ios/libraries/InputbarAccessoryView/.circleci/config.yml

@@ -0,0 +1,39 @@
+# .circleci/config.yml
+
+# Specify the config version - version 2 is latest.
+version: 2
+
+# Define the jobs for the current project.
+jobs:
+  build-and-test:
+
+    environment:
+      - DESTINATION: "platform=iOS Simulator,name=iPhone XS"
+
+    # Specify the Xcode version to use.
+    macos:
+      xcode: "10.2.0"
+
+    # Define the steps required to build the project.
+    steps:
+
+      # Get the code from the VCS provider.
+      - checkout
+      - run:
+          name: Build framework
+          command: xcodebuild build -project InputBarAccessoryView.xcodeproj -scheme InputBarAccessoryView -destination "$DESTINATION" CODE_SIGNING_REQUIRED=NO | xcpretty -c
+      - run:
+          name: Report CodeCov
+          command: bash <(curl -s https://codecov.io/bash) -t "849130fe-2cf2-4614-bc81-35c44cf9324c"
+      - run: 
+          name: Fetch CocoaPods Specs
+          command: curl -sS https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash
+      - run:
+          name: Build and analyze Example
+          command: xcodebuild build analyze -workspace InputBarAccessoryView.xcworkspace -scheme Example -destination "$DESTINATION" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_REQUIRED=NO | xcpretty -c
+
+workflows:
+  version: 2
+  build-and-deploy:
+    jobs:
+      - build-and-test

+ 37 - 0
deltachat-ios/libraries/InputbarAccessoryView/.gitignore

@@ -0,0 +1,37 @@
+# OS X
+.DS_Store
+
+# Xcode
+
+## Build generated
+build/
+.build
+.swiftpm
+DerivedData
+
+## Various settings
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+
+## Other
+*.xccheckout
+*.moved-aside
+*.xcuserstate
+*.xcscmblueprint
+
+## Obj-C/Swift specific
+*.hmap
+*.ipa
+
+# CocoaPods
+Pods
+
+# Carthage
+Carthage

+ 22 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/LICENSE.md

@@ -0,0 +1,22 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2017 
+
+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.

+ 1 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/README.md

@@ -0,0 +1 @@
+NTInputAccessoryView

+ 643 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.pbxproj

@@ -0,0 +1,643 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		381042231F85FD1300B1E61A /* SeparatorLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381042221F85FD1300B1E61A /* SeparatorLine.swift */; };
+		381042251F87F34900B1E61A /* InputStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381042241F87F34900B1E61A /* InputStackView.swift */; };
+		381042271F87FDE500B1E61A /* AttachmentManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381042261F87FDE500B1E61A /* AttachmentManagerDelegate.swift */; };
+		3821ADD920F5315400DE0D1D /* KeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3821ADD720F5315400DE0D1D /* KeyboardNotification.swift */; };
+		3821ADDA20F5315400DE0D1D /* KeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3821ADD820F5315400DE0D1D /* KeyboardManager.swift */; };
+		3821ADDC20F531A600DE0D1D /* KeyboardEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3821ADDB20F531A600DE0D1D /* KeyboardEvent.swift */; };
+		3821ADE820F54B3700DE0D1D /* NSMutableAttributedString+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3821ADE720F54B3700DE0D1D /* NSMutableAttributedString+Extensions.swift */; };
+		38570138218651C400589A30 /* InputBarSendButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38570137218651C400589A30 /* InputBarSendButton.swift */; };
+		3876DA8B1F8352F200C89326 /* AutocompleteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DA8A1F8352F200C89326 /* AutocompleteCell.swift */; };
+		3876DA901F83530900C89326 /* AutocompleteManagerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DA8E1F83530900C89326 /* AutocompleteManagerDataSource.swift */; };
+		3876DA911F83530900C89326 /* AutocompleteManagerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DA8F1F83530900C89326 /* AutocompleteManagerDelegate.swift */; };
+		3876DA921F83551400C89326 /* AutocompleteManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DA8D1F83530200C89326 /* AutocompleteManager.swift */; };
+		3876DAA91F84C0DB00C89326 /* AttachmentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DAA81F84C0DB00C89326 /* AttachmentsView.swift */; };
+		3876DAAB1F84C22100C89326 /* AttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DAAA1F84C22100C89326 /* AttachmentCell.swift */; };
+		3876DAAD1F84C42800C89326 /* AttachmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DAAC1F84C42800C89326 /* AttachmentManager.swift */; };
+		3876DAB11F84D9DB00C89326 /* AutocompleteTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3876DAB01F84D9DA00C89326 /* AutocompleteTableView.swift */; };
+		3877525D1F8834F0000E0AC5 /* ImageAttachmentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3877525C1F8834F0000E0AC5 /* ImageAttachmentCell.swift */; };
+		387752601F884FF3000E0AC5 /* AttachmentManagerDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3877525F1F884FF3000E0AC5 /* AttachmentManagerDataSource.swift */; };
+		388B31D921EA9928000EEE45 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 388B31D821EA9928000EEE45 /* String+Extensions.swift */; };
+		3891276D1F980F0300702C05 /* InputItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3891276C1F980F0300702C05 /* InputItem.swift */; };
+		3892AEA4202E427F006AF939 /* UITextView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3892AEA3202E427F006AF939 /* UITextView+Extensions.swift */; };
+		389C571622C8557D00D78F87 /* HorizontalEdgePadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 389C571522C8557D00D78F87 /* HorizontalEdgePadding.swift */; };
+		389C571822C855E900D78F87 /* InputPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 389C571722C855E900D78F87 /* InputPlugin.swift */; };
+		38C501242148C76900246686 /* NSNotification+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C501232148C76900246686 /* NSNotification+Extensions.swift */; };
+		38C8677D1F50A6AD00811974 /* NSConstraintLayoutSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C867721F50A6AD00811974 /* NSConstraintLayoutSet.swift */; };
+		38C8677E1F50A6AD00811974 /* UIView+AutoLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C867731F50A6AD00811974 /* UIView+AutoLayout.swift */; };
+		38C8677F1F50A6AD00811974 /* InputBarAccessoryViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C867751F50A6AD00811974 /* InputBarAccessoryViewDelegate.swift */; };
+		38C867811F50A6AD00811974 /* InputBarAccessoryView-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 38C867781F50A6AD00811974 /* InputBarAccessoryView-Bridging-Header.h */; };
+		38C867821F50A6AD00811974 /* InputBarAccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C8677A1F50A6AD00811974 /* InputBarAccessoryView.swift */; };
+		38C867831F50A6AD00811974 /* InputBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C8677B1F50A6AD00811974 /* InputBarButtonItem.swift */; };
+		38C867841F50A6AD00811974 /* InputTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38C8677C1F50A6AD00811974 /* InputTextView.swift */; };
+		38ECDBBD219B46D50076E154 /* InputBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38ECDBBC219B46D50076E154 /* InputBarViewController.swift */; };
+		38F0C1F220C7807D00FF8DD3 /* AutocompleteSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F0C1F120C7807D00FF8DD3 /* AutocompleteSession.swift */; };
+		38F0C1F420C7808F00FF8DD3 /* AutocompleteCompletion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F0C1F320C7808F00FF8DD3 /* AutocompleteCompletion.swift */; };
+		38F0C1FB20C8971500FF8DD3 /* InputBarAccessoryView+Availability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F0C1FA20C8971500FF8DD3 /* InputBarAccessoryView+Availability.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		51E04F4224F7DCD0004D7452 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 51E04F3E24F7DCD0004D7452 /* Example.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 383B83991F47897800027965;
+			remoteInfo = Example;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		381042221F85FD1300B1E61A /* SeparatorLine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorLine.swift; sourceTree = "<group>"; };
+		381042241F87F34900B1E61A /* InputStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputStackView.swift; sourceTree = "<group>"; };
+		381042261F87FDE500B1E61A /* AttachmentManagerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentManagerDelegate.swift; sourceTree = "<group>"; };
+		3821ADD720F5315400DE0D1D /* KeyboardNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardNotification.swift; sourceTree = "<group>"; };
+		3821ADD820F5315400DE0D1D /* KeyboardManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyboardManager.swift; sourceTree = "<group>"; };
+		3821ADDB20F531A600DE0D1D /* KeyboardEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardEvent.swift; sourceTree = "<group>"; };
+		3821ADE720F54B3700DE0D1D /* NSMutableAttributedString+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSMutableAttributedString+Extensions.swift"; sourceTree = "<group>"; };
+		383B83831F4787E200027965 /* InputBarAccessoryView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InputBarAccessoryView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		38447E1D22A31BE70002649D /* RxInputBarAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxInputBarAccessoryView.swift; sourceTree = "<group>"; };
+		38570137218651C400589A30 /* InputBarSendButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputBarSendButton.swift; sourceTree = "<group>"; };
+		3876DA8A1F8352F200C89326 /* AutocompleteCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteCell.swift; sourceTree = "<group>"; };
+		3876DA8D1F83530200C89326 /* AutocompleteManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteManager.swift; sourceTree = "<group>"; };
+		3876DA8E1F83530900C89326 /* AutocompleteManagerDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteManagerDataSource.swift; sourceTree = "<group>"; };
+		3876DA8F1F83530900C89326 /* AutocompleteManagerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteManagerDelegate.swift; sourceTree = "<group>"; };
+		3876DAA81F84C0DB00C89326 /* AttachmentsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentsView.swift; sourceTree = "<group>"; };
+		3876DAAA1F84C22100C89326 /* AttachmentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentCell.swift; sourceTree = "<group>"; };
+		3876DAAC1F84C42800C89326 /* AttachmentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentManager.swift; sourceTree = "<group>"; };
+		3876DAB01F84D9DA00C89326 /* AutocompleteTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteTableView.swift; sourceTree = "<group>"; };
+		3877525C1F8834F0000E0AC5 /* ImageAttachmentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageAttachmentCell.swift; sourceTree = "<group>"; };
+		3877525F1F884FF3000E0AC5 /* AttachmentManagerDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentManagerDataSource.swift; sourceTree = "<group>"; };
+		388B31D821EA9928000EEE45 /* String+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
+		3891276C1F980F0300702C05 /* InputItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputItem.swift; sourceTree = "<group>"; };
+		3892AEA3202E427F006AF939 /* UITextView+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextView+Extensions.swift"; sourceTree = "<group>"; };
+		389C571522C8557D00D78F87 /* HorizontalEdgePadding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalEdgePadding.swift; sourceTree = "<group>"; };
+		389C571722C855E900D78F87 /* InputPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputPlugin.swift; sourceTree = "<group>"; };
+		38C501232148C76900246686 /* NSNotification+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extensions.swift"; sourceTree = "<group>"; };
+		38C867721F50A6AD00811974 /* NSConstraintLayoutSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSConstraintLayoutSet.swift; sourceTree = "<group>"; };
+		38C867731F50A6AD00811974 /* UIView+AutoLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+AutoLayout.swift"; sourceTree = "<group>"; };
+		38C867751F50A6AD00811974 /* InputBarAccessoryViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarAccessoryViewDelegate.swift; sourceTree = "<group>"; };
+		38C867771F50A6AD00811974 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		38C867781F50A6AD00811974 /* InputBarAccessoryView-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "InputBarAccessoryView-Bridging-Header.h"; sourceTree = "<group>"; };
+		38C8677A1F50A6AD00811974 /* InputBarAccessoryView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarAccessoryView.swift; sourceTree = "<group>"; };
+		38C8677B1F50A6AD00811974 /* InputBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputBarButtonItem.swift; sourceTree = "<group>"; };
+		38C8677C1F50A6AD00811974 /* InputTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputTextView.swift; sourceTree = "<group>"; };
+		38ECDBBC219B46D50076E154 /* InputBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputBarViewController.swift; sourceTree = "<group>"; };
+		38F0C1F120C7807D00FF8DD3 /* AutocompleteSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteSession.swift; sourceTree = "<group>"; };
+		38F0C1F320C7808F00FF8DD3 /* AutocompleteCompletion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutocompleteCompletion.swift; sourceTree = "<group>"; };
+		38F0C1FA20C8971500FF8DD3 /* InputBarAccessoryView+Availability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "InputBarAccessoryView+Availability.swift"; sourceTree = "<group>"; };
+		51E04F3E24F7DCD0004D7452 /* Example.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Example.xcodeproj; path = Example/Example.xcodeproj; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		383B837F1F4787E200027965 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		3821ADD620F5314800DE0D1D /* KeyboardManager */ = {
+			isa = PBXGroup;
+			children = (
+				3821ADD820F5315400DE0D1D /* KeyboardManager.swift */,
+				3821ADDB20F531A600DE0D1D /* KeyboardEvent.swift */,
+				3821ADD720F5315400DE0D1D /* KeyboardNotification.swift */,
+			);
+			path = KeyboardManager;
+			sourceTree = "<group>";
+		};
+		383B83791F4787E200027965 = {
+			isa = PBXGroup;
+			children = (
+				38447E1C22A31BE70002649D /* RxInputBarAccessoryView */,
+				38C867701F50A6AD00811974 /* Sources */,
+				383B83841F4787E200027965 /* Products */,
+				51E04F3E24F7DCD0004D7452 /* Example.xcodeproj */,
+			);
+			sourceTree = "<group>";
+		};
+		383B83841F4787E200027965 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				383B83831F4787E200027965 /* InputBarAccessoryView.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		38447E1C22A31BE70002649D /* RxInputBarAccessoryView */ = {
+			isa = PBXGroup;
+			children = (
+				38447E1D22A31BE70002649D /* RxInputBarAccessoryView.swift */,
+			);
+			path = RxInputBarAccessoryView;
+			sourceTree = "<group>";
+		};
+		3876DA8C1F8352F800C89326 /* Plugins */ = {
+			isa = PBXGroup;
+			children = (
+				38F0C1ED20C7802300FF8DD3 /* AutocompleteManager */,
+				38F0C1EE20C7802B00FF8DD3 /* AttachmentManager */,
+			);
+			path = Plugins;
+			sourceTree = "<group>";
+		};
+		38C867701F50A6AD00811974 /* Sources */ = {
+			isa = PBXGroup;
+			children = (
+				38C8677A1F50A6AD00811974 /* InputBarAccessoryView.swift */,
+				38F0C1EB20C77F9900FF8DD3 /* Controls */,
+				38C867711F50A6AD00811974 /* Extensions */,
+				3821ADD620F5314800DE0D1D /* KeyboardManager */,
+				38F0C1EC20C77FA000FF8DD3 /* Models */,
+				3876DA8C1F8352F800C89326 /* Plugins */,
+				38C867741F50A6AD00811974 /* Protocols */,
+				38C867761F50A6AD00811974 /* Supporting Files */,
+				38ECDBBB219B46B90076E154 /* ViewControllers */,
+				38C867791F50A6AD00811974 /* Views */,
+			);
+			path = Sources;
+			sourceTree = "<group>";
+		};
+		38C867711F50A6AD00811974 /* Extensions */ = {
+			isa = PBXGroup;
+			children = (
+				3821ADE720F54B3700DE0D1D /* NSMutableAttributedString+Extensions.swift */,
+				38C501232148C76900246686 /* NSNotification+Extensions.swift */,
+				3892AEA3202E427F006AF939 /* UITextView+Extensions.swift */,
+				388B31D821EA9928000EEE45 /* String+Extensions.swift */,
+				38C867731F50A6AD00811974 /* UIView+AutoLayout.swift */,
+			);
+			path = Extensions;
+			sourceTree = "<group>";
+		};
+		38C867741F50A6AD00811974 /* Protocols */ = {
+			isa = PBXGroup;
+			children = (
+				38C867751F50A6AD00811974 /* InputBarAccessoryViewDelegate.swift */,
+				389C571722C855E900D78F87 /* InputPlugin.swift */,
+				3891276C1F980F0300702C05 /* InputItem.swift */,
+			);
+			path = Protocols;
+			sourceTree = "<group>";
+		};
+		38C867761F50A6AD00811974 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				38C867771F50A6AD00811974 /* Info.plist */,
+				38F0C1FA20C8971500FF8DD3 /* InputBarAccessoryView+Availability.swift */,
+				38C867781F50A6AD00811974 /* InputBarAccessoryView-Bridging-Header.h */,
+			);
+			path = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		38C867791F50A6AD00811974 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				38C8677C1F50A6AD00811974 /* InputTextView.swift */,
+				381042241F87F34900B1E61A /* InputStackView.swift */,
+				381042221F85FD1300B1E61A /* SeparatorLine.swift */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		38ECDBBB219B46B90076E154 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				38ECDBBC219B46D50076E154 /* InputBarViewController.swift */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		38F0C1EB20C77F9900FF8DD3 /* Controls */ = {
+			isa = PBXGroup;
+			children = (
+				38C8677B1F50A6AD00811974 /* InputBarButtonItem.swift */,
+				38570137218651C400589A30 /* InputBarSendButton.swift */,
+			);
+			path = Controls;
+			sourceTree = "<group>";
+		};
+		38F0C1EC20C77FA000FF8DD3 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				38C867721F50A6AD00811974 /* NSConstraintLayoutSet.swift */,
+				389C571522C8557D00D78F87 /* HorizontalEdgePadding.swift */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		38F0C1ED20C7802300FF8DD3 /* AutocompleteManager */ = {
+			isa = PBXGroup;
+			children = (
+				3876DA8D1F83530200C89326 /* AutocompleteManager.swift */,
+				38F0C1EF20C7804100FF8DD3 /* Views */,
+				38F0C1F520C7809E00FF8DD3 /* Models */,
+				38F0C1F620C780B000FF8DD3 /* Protocols */,
+			);
+			path = AutocompleteManager;
+			sourceTree = "<group>";
+		};
+		38F0C1EE20C7802B00FF8DD3 /* AttachmentManager */ = {
+			isa = PBXGroup;
+			children = (
+				3876DAAC1F84C42800C89326 /* AttachmentManager.swift */,
+				38F0C1F020C7804600FF8DD3 /* Views */,
+				38F0C1F720C780C600FF8DD3 /* Protocols */,
+			);
+			path = AttachmentManager;
+			sourceTree = "<group>";
+		};
+		38F0C1EF20C7804100FF8DD3 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				3876DAB01F84D9DA00C89326 /* AutocompleteTableView.swift */,
+				3876DA8A1F8352F200C89326 /* AutocompleteCell.swift */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		38F0C1F020C7804600FF8DD3 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				3876DAA81F84C0DB00C89326 /* AttachmentsView.swift */,
+				3876DAAA1F84C22100C89326 /* AttachmentCell.swift */,
+				3877525C1F8834F0000E0AC5 /* ImageAttachmentCell.swift */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		38F0C1F520C7809E00FF8DD3 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				38F0C1F120C7807D00FF8DD3 /* AutocompleteSession.swift */,
+				38F0C1F320C7808F00FF8DD3 /* AutocompleteCompletion.swift */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		38F0C1F620C780B000FF8DD3 /* Protocols */ = {
+			isa = PBXGroup;
+			children = (
+				3876DA8F1F83530900C89326 /* AutocompleteManagerDelegate.swift */,
+				3876DA8E1F83530900C89326 /* AutocompleteManagerDataSource.swift */,
+			);
+			path = Protocols;
+			sourceTree = "<group>";
+		};
+		38F0C1F720C780C600FF8DD3 /* Protocols */ = {
+			isa = PBXGroup;
+			children = (
+				381042261F87FDE500B1E61A /* AttachmentManagerDelegate.swift */,
+				3877525F1F884FF3000E0AC5 /* AttachmentManagerDataSource.swift */,
+			);
+			path = Protocols;
+			sourceTree = "<group>";
+		};
+		51E04F3F24F7DCD0004D7452 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				51E04F4324F7DCD0004D7452 /* Example.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		383B83801F4787E200027965 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				38C867811F50A6AD00811974 /* InputBarAccessoryView-Bridging-Header.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		383B83821F4787E200027965 /* InputBarAccessoryView */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 383B838B1F4787E200027965 /* Build configuration list for PBXNativeTarget "InputBarAccessoryView" */;
+			buildPhases = (
+				383B837E1F4787E200027965 /* Sources */,
+				383B837F1F4787E200027965 /* Frameworks */,
+				383B83801F4787E200027965 /* Headers */,
+				383B83811F4787E200027965 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = InputBarAccessoryView;
+			productName = NTInputAccessoryView;
+			productReference = 383B83831F4787E200027965 /* InputBarAccessoryView.framework */;
+			productType = "com.apple.product-type.framework";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		383B837A1F4787E200027965 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 1020;
+				ORGANIZATIONNAME = "Nathan Tannar";
+				TargetAttributes = {
+					383B83821F4787E200027965 = {
+						CreatedOnToolsVersion = 8.3.3;
+						DevelopmentTeam = 9EUCWD26TP;
+						LastSwiftMigration = 0900;
+						ProvisioningStyle = Automatic;
+					};
+				};
+			};
+			buildConfigurationList = 383B837D1F4787E200027965 /* Build configuration list for PBXProject "InputBarAccessoryView" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 383B83791F4787E200027965;
+			productRefGroup = 383B83841F4787E200027965 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 51E04F3F24F7DCD0004D7452 /* Products */;
+					ProjectRef = 51E04F3E24F7DCD0004D7452 /* Example.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				383B83821F4787E200027965 /* InputBarAccessoryView */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		51E04F4324F7DCD0004D7452 /* Example.app */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.application;
+			path = Example.app;
+			remoteRef = 51E04F4224F7DCD0004D7452 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		383B83811F4787E200027965 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		383B837E1F4787E200027965 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				387752601F884FF3000E0AC5 /* AttachmentManagerDataSource.swift in Sources */,
+				3821ADDC20F531A600DE0D1D /* KeyboardEvent.swift in Sources */,
+				3876DA921F83551400C89326 /* AutocompleteManager.swift in Sources */,
+				38ECDBBD219B46D50076E154 /* InputBarViewController.swift in Sources */,
+				38C867841F50A6AD00811974 /* InputTextView.swift in Sources */,
+				389C571822C855E900D78F87 /* InputPlugin.swift in Sources */,
+				3876DA901F83530900C89326 /* AutocompleteManagerDataSource.swift in Sources */,
+				3876DAA91F84C0DB00C89326 /* AttachmentsView.swift in Sources */,
+				38F0C1F220C7807D00FF8DD3 /* AutocompleteSession.swift in Sources */,
+				3892AEA4202E427F006AF939 /* UITextView+Extensions.swift in Sources */,
+				3891276D1F980F0300702C05 /* InputItem.swift in Sources */,
+				38C8677D1F50A6AD00811974 /* NSConstraintLayoutSet.swift in Sources */,
+				38C8677F1F50A6AD00811974 /* InputBarAccessoryViewDelegate.swift in Sources */,
+				38F0C1F420C7808F00FF8DD3 /* AutocompleteCompletion.swift in Sources */,
+				3876DA8B1F8352F200C89326 /* AutocompleteCell.swift in Sources */,
+				389C571622C8557D00D78F87 /* HorizontalEdgePadding.swift in Sources */,
+				388B31D921EA9928000EEE45 /* String+Extensions.swift in Sources */,
+				3876DAAB1F84C22100C89326 /* AttachmentCell.swift in Sources */,
+				3821ADE820F54B3700DE0D1D /* NSMutableAttributedString+Extensions.swift in Sources */,
+				38C867821F50A6AD00811974 /* InputBarAccessoryView.swift in Sources */,
+				38570138218651C400589A30 /* InputBarSendButton.swift in Sources */,
+				3876DAB11F84D9DB00C89326 /* AutocompleteTableView.swift in Sources */,
+				381042271F87FDE500B1E61A /* AttachmentManagerDelegate.swift in Sources */,
+				3876DAAD1F84C42800C89326 /* AttachmentManager.swift in Sources */,
+				38F0C1FB20C8971500FF8DD3 /* InputBarAccessoryView+Availability.swift in Sources */,
+				381042251F87F34900B1E61A /* InputStackView.swift in Sources */,
+				38C8677E1F50A6AD00811974 /* UIView+AutoLayout.swift in Sources */,
+				3877525D1F8834F0000E0AC5 /* ImageAttachmentCell.swift in Sources */,
+				381042231F85FD1300B1E61A /* SeparatorLine.swift in Sources */,
+				38C867831F50A6AD00811974 /* InputBarButtonItem.swift in Sources */,
+				3821ADD920F5315400DE0D1D /* KeyboardNotification.swift in Sources */,
+				38C501242148C76900246686 /* NSNotification+Extensions.swift in Sources */,
+				3876DA911F83530900C89326 /* AutocompleteManagerDelegate.swift in Sources */,
+				3821ADDA20F5315400DE0D1D /* KeyboardManager.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		383B83891F4787E200027965 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Debug;
+		};
+		383B838A1F4787E200027965 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				CURRENT_PROJECT_VERSION = 1;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+				VERSIONING_SYSTEM = "apple-generic";
+				VERSION_INFO_PREFIX = "";
+			};
+			name = Release;
+		};
+		383B838C1F4787E200027965 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "";
+				DEFINES_MODULE = YES;
+				DEVELOPMENT_TEAM = 9EUCWD26TP;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				INFOPLIST_FILE = "$(SRCROOT)/Sources/Supporting Files/Info.plist";
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MARKETING_VERSION = 5.1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = me.nathantannar.InputBarAccessoryView;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SKIP_INSTALL = YES;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
+				SWIFT_VERSION = 5.0;
+			};
+			name = Debug;
+		};
+		383B838D1F4787E200027965 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "";
+				DEFINES_MODULE = YES;
+				DEVELOPMENT_TEAM = 9EUCWD26TP;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				DYLIB_INSTALL_NAME_BASE = "@rpath";
+				INFOPLIST_FILE = "$(SRCROOT)/Sources/Supporting Files/Info.plist";
+				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+				MARKETING_VERSION = 5.1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = me.nathantannar.InputBarAccessoryView;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SKIP_INSTALL = YES;
+				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
+				SWIFT_VERSION = 5.0;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		383B837D1F4787E200027965 /* Build configuration list for PBXProject "InputBarAccessoryView" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				383B83891F4787E200027965 /* Debug */,
+				383B838A1F4787E200027965 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		383B838B1F4787E200027965 /* Build configuration list for PBXNativeTarget "InputBarAccessoryView" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				383B838C1F4787E200027965 /* Debug */,
+				383B838D1F4787E200027965 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 383B837A1F4787E200027965 /* Project object */;
+}

+ 7 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:NTInputAccessoryView.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?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>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 80 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcodeproj/xcshareddata/xcschemes/InputBarAccessoryView.xcscheme

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1020"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "383B83821F4787E200027965"
+               BuildableName = "InputBarAccessoryView.framework"
+               BlueprintName = "InputBarAccessoryView"
+               ReferencedContainer = "container:InputBarAccessoryView.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "383B83821F4787E200027965"
+            BuildableName = "InputBarAccessoryView.framework"
+            BlueprintName = "InputBarAccessoryView"
+            ReferencedContainer = "container:InputBarAccessoryView.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "383B83821F4787E200027965"
+            BuildableName = "InputBarAccessoryView.framework"
+            BlueprintName = "InputBarAccessoryView"
+            ReferencedContainer = "container:InputBarAccessoryView.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 19 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:README.md">
+   </FileRef>
+   <FileRef
+      location = "group:CHANGELOG.md">
+   </FileRef>
+   <FileRef
+      location = "group:LICENSE">
+   </FileRef>
+   <FileRef
+      location = "group:InputBarAccessoryView.podspec">
+   </FileRef>
+   <FileRef
+      location = "group:InputBarAccessoryView.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?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>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 8 - 0
deltachat-ios/libraries/InputbarAccessoryView/InputBarAccessoryView.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?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>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

+ 8 - 4
deltachat-ios/View/InputBarAccessoryView/Controls/InputBarButtonItem.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Controls/InputBarButtonItem.swift

@@ -2,7 +2,7 @@
 //  InputBarButtonItem.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -174,9 +174,13 @@ open class InputBarButtonItem: UIButton, InputItem {
         imageView?.contentMode = .scaleAspectFit
         setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .horizontal)
         setContentHuggingPriority(UILayoutPriority(rawValue: 500), for: .vertical)
-        setTitleColor(UIColor(red: 0, green: 122/255, blue: 1, alpha: 1), for: .normal)
-        setTitleColor(UIColor(red: 0, green: 122/255, blue: 1, alpha: 0.3), for: .highlighted)
-        setTitleColor(.lightGray, for: .disabled)
+        setTitleColor(.systemBlue, for: .normal)
+        setTitleColor(UIColor.systemBlue.withAlphaComponent(0.3), for: .highlighted)
+        if #available(iOS 13, *) {
+            setTitleColor(.systemGray2, for: .disabled)
+        } else {
+            setTitleColor(.lightGray, for: .disabled)
+        }
         adjustsImageWhenHighlighted = false
         addTarget(self, action: #selector(InputBarButtonItem.touchUpInsideAction), for: .touchUpInside)
     }

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/InputBarSendButton.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Controls/InputBarSendButton.swift

@@ -2,7 +2,7 @@
 //  InputBarSendButton.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 41 - 5
deltachat-ios/View/InputBarAccessoryView/Extensions/NSMutableAttributedString+Extensions.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/NSMutableAttributedString+Extensions.swift

@@ -2,7 +2,7 @@
 //  NSMutableAttributedString+Extensions.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -30,7 +30,7 @@ import UIKit
 internal extension NSMutableAttributedString {
  
     @discardableResult
-    func bold(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor = .black) -> NSMutableAttributedString {
+    func bold(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor) -> NSMutableAttributedString {
         let attrs: [NSAttributedString.Key:AnyObject] = [
             NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: fontSize),
             NSAttributedString.Key.foregroundColor : textColor
@@ -41,7 +41,7 @@ internal extension NSMutableAttributedString {
     }
     
     @discardableResult
-    func medium(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor = .black) -> NSMutableAttributedString {
+    func medium(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor) -> NSMutableAttributedString {
         let attrs: [NSAttributedString.Key:AnyObject] = [
             NSAttributedString.Key.font : UIFont.systemFont(ofSize: fontSize, weight: UIFont.Weight.medium),
             NSAttributedString.Key.foregroundColor : textColor
@@ -52,7 +52,7 @@ internal extension NSMutableAttributedString {
     }
     
     @discardableResult
-    func italic(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor = .black) -> NSMutableAttributedString {
+    func italic(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor) -> NSMutableAttributedString {
         let attrs: [NSAttributedString.Key:AnyObject] = [
             NSAttributedString.Key.font : UIFont.italicSystemFont(ofSize: fontSize),
             NSAttributedString.Key.foregroundColor : textColor
@@ -63,7 +63,7 @@ internal extension NSMutableAttributedString {
     }
     
     @discardableResult
-    func normal(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor = .black) -> NSMutableAttributedString {
+    func normal(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize, textColor: UIColor) -> NSMutableAttributedString {
         let attrs:[NSAttributedString.Key:AnyObject] = [
             NSAttributedString.Key.font : UIFont.systemFont(ofSize: fontSize),
             NSAttributedString.Key.foregroundColor : textColor
@@ -73,6 +73,42 @@ internal extension NSMutableAttributedString {
         return self
     }
 
+    @discardableResult
+    func bold(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize) -> NSMutableAttributedString {
+        if #available(iOS 13, *) {
+            return bold(text, fontSize: fontSize, textColor: .label)
+        } else {
+            return bold(text, fontSize: fontSize, textColor: .black)
+        }
+    }
+
+    @discardableResult
+    func medium(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize) -> NSMutableAttributedString {
+        if #available(iOS 13, *) {
+            return medium(text, fontSize: fontSize, textColor: .label)
+        } else {
+            return medium(text, fontSize: fontSize, textColor: .black)
+        }
+    }
+
+    @discardableResult
+    func italic(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize) -> NSMutableAttributedString {
+        if #available(iOS 13, *) {
+            return italic(text, fontSize: fontSize, textColor: .label)
+        } else {
+            return italic(text, fontSize: fontSize, textColor: .black)
+
+        }
+    }
+
+    @discardableResult
+    func normal(_ text: String, fontSize: CGFloat = UIFont.preferredFont(forTextStyle: .body).pointSize) -> NSMutableAttributedString {
+        if #available(iOS 13, *) {
+            return normal(text, fontSize: fontSize, textColor: .label)
+        } else {
+            return normal(text, fontSize: fontSize, textColor: .black)
+        }
+    }
 }
 
 internal extension NSAttributedString {

+ 3 - 1
deltachat-ios/View/InputBarAccessoryView/Extensions/NSNotification+Extensions.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/NSNotification+Extensions.swift

@@ -2,7 +2,7 @@
 //  NSNotification+Extensions.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -70,6 +70,8 @@ internal extension NSNotification {
             return .curveEaseInOut
         case .linear:
             return .curveLinear
+        @unknown default:
+            return .curveLinear
         }
     }
     

+ 0 - 0
deltachat-ios/View/InputBarAccessoryView/Extensions/String+Extensions.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/String+Extensions.swift


+ 7 - 8
deltachat-ios/View/InputBarAccessoryView/Extensions/UITextView+Extensions.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/UITextView+Extensions.swift

@@ -15,12 +15,11 @@ internal extension UITextView {
     func find(prefixes: Set<String>, with delimiterSet: CharacterSet) -> Match? {
         guard !prefixes.isEmpty else { return nil }
 
-        for prefix in prefixes {
-            if let match = find(prefix: prefix, with: delimiterSet) {
-                return match
-            }
+        let matches = prefixes.compactMap { find(prefix: $0, with: delimiterSet) }
+        let sorted = matches.sorted { a, b in
+            return a.range.lowerBound > b.range.lowerBound
         }
-        return nil
+        return sorted.first
     }
     
     func find(prefix: String, with delimiterSet: CharacterSet) -> Match? {
@@ -34,7 +33,7 @@ internal extension UITextView {
             guard let index = leadingText.lastIndex(of: char) else { return nil }
             if i == 0 {
                 prefixStartIndex = index
-            } else if index.encodedOffset == prefixStartIndex.encodedOffset + 1 {
+            } else if index.utf16Offset(in: leadingText) == prefixStartIndex.utf16Offset(in: leadingText) + 1 {
                 prefixStartIndex = index
             } else {
                 return nil
@@ -44,8 +43,8 @@ internal extension UITextView {
         let wordRange = prefixStartIndex..<cursorRange.upperBound
         let word = leadingText[wordRange]
         
-        let location = wordRange.lowerBound.encodedOffset
-        let length = wordRange.upperBound.encodedOffset - location
+        let location = wordRange.lowerBound.utf16Offset(in: leadingText)
+        let length = wordRange.upperBound.utf16Offset(in: word) - location
         let range = NSRange(location: location, length: length)
         
         return (String(prefix), String(word), range)

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Extensions/UIView+AutoLayout.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Extensions/UIView+AutoLayout.swift

@@ -2,7 +2,7 @@
 //  UIView+Autolayout.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 88 - 39
deltachat-ios/View/InputBarAccessoryView/InputBarAccessoryView.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/InputBarAccessoryView.swift

@@ -2,7 +2,7 @@
 //  InputBarAccessoryView.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -40,7 +40,7 @@ open class InputBarAccessoryView: UIView {
     open var backgroundView: UIView = {
         let view = UIView()
         view.translatesAutoresizingMaskIntoConstraints = false
-        view.backgroundColor = .white
+        view.backgroundColor = InputBarAccessoryView.defaultBackgroundColor
         return view
     }()
     
@@ -59,8 +59,11 @@ open class InputBarAccessoryView: UIView {
      ## Important Notes ##
      1. The blurView is initially not added to the backgroundView to improve performance when not needed. When `isTranslucent` is set to TRUE for the first time the blurView is added and anchored to the `backgroundView`s edge anchors
     */
-    open var blurView: UIVisualEffectView = {
-        let blurEffect = UIBlurEffect(style: .light)
+    open lazy var blurView: UIVisualEffectView = {
+        var blurEffect = UIBlurEffect(style: .light)
+        if #available(iOS 13, *) {
+            blurEffect = UIBlurEffect(style: .systemMaterial)
+        }
         let view = UIVisualEffectView(effect: blurEffect)
         view.translatesAutoresizingMaskIntoConstraints = false
         return view
@@ -74,7 +77,7 @@ open class InputBarAccessoryView: UIView {
                 blurView.fillSuperview()
             }
             blurView.isHidden = !isTranslucent
-            let color: UIColor = backgroundView.backgroundColor ?? .white
+            let color: UIColor = backgroundView.backgroundColor ?? InputBarAccessoryView.defaultBackgroundColor
             backgroundView.backgroundColor = isTranslucent ? color.withAlphaComponent(0.75) : color
         }
     }
@@ -138,9 +141,17 @@ open class InputBarAccessoryView: UIView {
         view.translatesAutoresizingMaskIntoConstraints = false
         return view
     }()
+
+    private static let defaultBackgroundColor: UIColor = {
+        if #available(iOS 13, *) {
+            return .systemBackground
+        } else {
+            return .white
+        }
+    }()
     
     /// The InputTextView a user can input a message in
-    open lazy var inputTextView: InputTextView = { [weak self] in
+    open lazy var inputTextView: InputTextView = {
         let inputTextView = InputTextView()
         inputTextView.translatesAutoresizingMaskIntoConstraints = false
         inputTextView.inputBarAccessoryView = self
@@ -250,6 +261,7 @@ open class InputBarAccessoryView: UIView {
     
     /// A boolean that indicates if the maxTextViewHeight has been met. Keeping track of this
     /// improves the performance
+    /// The default value is `FALSE`
     public private(set) var isOverMaxTextViewHeight = false
     
     /// A boolean that when set as `TRUE` will always enable the `InputTextView` to be anchored to the
@@ -259,11 +271,13 @@ open class InputBarAccessoryView: UIView {
     
     /// A boolean that determines if the `maxTextViewHeight` should be maintained automatically.
     /// To control the maximum height of the view yourself, set this to `false`.
+    /// The default value is `TRUE`
     open var shouldAutoUpdateMaxTextViewHeight = true
 
     /// The maximum height that the InputTextView can reach.
     /// This is set automatically when `shouldAutoUpdateMaxTextViewHeight` is true.
     /// To control the height yourself, make sure to set `shouldAutoUpdateMaxTextViewHeight` to false.
+    /// The default value is `0`
     open var maxTextViewHeight: CGFloat = 0 {
         didSet {
             textViewHeightAnchor?.constant = maxTextViewHeight
@@ -271,7 +285,13 @@ open class InputBarAccessoryView: UIView {
     }
     
     /// A boolean that determines whether the sendButton's `isEnabled` state should be managed automatically.
+    /// The default value is `TRUE`
     open var shouldManageSendButtonEnabledState = true
+
+    /// A boolean that determines if the layout required for new or typed text should
+    /// be animated.
+    /// The default value is `FALSE`
+    open var shouldAnimateTextDidChangeLayout = false
     
     /// The height that will fit the current text in the InputTextView based on its current bounds
     public var requiredInputTextViewHeight: CGFloat {
@@ -283,6 +303,7 @@ open class InputBarAccessoryView: UIView {
     }
     
     /// The fixed widthAnchor constant of the leftStackView
+    /// The default value is `0`
     public private(set) var leftStackViewWidthConstant: CGFloat = 0 {
         didSet {
             leftStackViewLayoutSet?.width?.constant = leftStackViewWidthConstant
@@ -290,6 +311,7 @@ open class InputBarAccessoryView: UIView {
     }
     
     /// The fixed widthAnchor constant of the rightStackView
+    /// The default value is `52`
     public private(set) var rightStackViewWidthConstant: CGFloat = 52 {
         didSet {
             rightStackViewLayoutSet?.width?.constant = rightStackViewWidthConstant
@@ -318,6 +340,9 @@ open class InputBarAccessoryView: UIView {
     public var items: [InputItem] {
         return [leftStackViewItems, rightStackViewItems, bottomStackViewItems, topStackViewItems, nonStackViewItems].flatMap { $0 }
     }
+    
+    private let keyboardManager: KeyboardManager = KeyboardManager()
+    open var keyboardHeight: CGFloat = 0
 
     // MARK: - Auto-Layout Constraint Sets
     
@@ -370,7 +395,7 @@ open class InputBarAccessoryView: UIView {
     /// Sets up the default properties
     open func setup() {
 
-        backgroundColor = .white
+        backgroundColor = InputBarAccessoryView.defaultBackgroundColor
         autoresizingMask = [.flexibleHeight]
         setupSubviews()
         setupConstraints()
@@ -378,6 +403,18 @@ open class InputBarAccessoryView: UIView {
         setupGestureRecognizers()
     }
     
+    private func setupKeyboardEvents() {
+        keyboardManager.on(event: .willChangeFrame, do: {  [weak self] (notification) in
+            guard let self = self else { return }
+            self.keyboardHeight = notification.endFrame.height - self.intrinsicContentSize.height
+        }).on(event: .didChangeFrame, do: {  [weak self] (notification) in
+            guard let self = self else { return }
+            self.keyboardHeight = notification.endFrame.height - self.intrinsicContentSize.height
+            logger.debug("HEIGHTS: \(notification.endFrame.height) - \(self.intrinsicContentSize.height) >> \(notification.endFrame.height - self.intrinsicContentSize.height)")
+        })
+    }
+
+    
     /// Adds the required notification observers
     private func setupObservers() {
         NotificationCenter.default.addObserver(self,
@@ -437,26 +474,16 @@ open class InputBarAccessoryView: UIView {
         topStackViewLayoutSet = NSLayoutConstraintSet(
             top:    topStackView.topAnchor.constraint(equalTo: topAnchor, constant: topStackViewPadding.top),
             bottom: topStackView.bottomAnchor.constraint(equalTo: contentView.topAnchor, constant: -padding.top),
-            left:   topStackView.leftAnchor.constraint(equalTo: leftAnchor, constant: topStackViewPadding.left + frameInsets.left),
-            right:  topStackView.rightAnchor.constraint(equalTo: rightAnchor, constant: -(topStackViewPadding.right + frameInsets.right))
+            left:   topStackView.leftAnchor.constraint(equalTo: safeAreaLayoutGuide.leftAnchor, constant: topStackViewPadding.left + frameInsets.left),
+            right:  topStackView.rightAnchor.constraint(equalTo: safeAreaLayoutGuide.rightAnchor, constant: -(topStackViewPadding.right + frameInsets.right))
         )
         
         contentViewLayoutSet = NSLayoutConstraintSet(
             top:    contentView.topAnchor.constraint(equalTo: topStackView.bottomAnchor, constant: padding.top),
-            bottom: contentView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -padding.bottom),
-            left:   contentView.leftAnchor.constraint(equalTo: leftAnchor, constant: padding.left + frameInsets.left),
-            right:  contentView.rightAnchor.constraint(equalTo: rightAnchor, constant: -(padding.right + frameInsets.right))
+            bottom: contentView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -padding.bottom),
+            left:   contentView.leftAnchor.constraint(equalTo: safeAreaLayoutGuide.leftAnchor, constant: padding.left + frameInsets.left),
+            right:  contentView.rightAnchor.constraint(equalTo: safeAreaLayoutGuide.rightAnchor, constant: -(padding.right + frameInsets.right))
         )
-        
-        if #available(iOS 11.0, *) {
-            // Switch to safeAreaLayoutGuide
-            contentViewLayoutSet?.bottom = contentView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -padding.bottom)
-            contentViewLayoutSet?.left = contentView.leftAnchor.constraint(equalTo: safeAreaLayoutGuide.leftAnchor, constant: padding.left + frameInsets.left)
-            contentViewLayoutSet?.right = contentView.rightAnchor.constraint(equalTo: safeAreaLayoutGuide.rightAnchor, constant: -(padding.right + frameInsets.right))
-            
-            topStackViewLayoutSet?.left = topStackView.leftAnchor.constraint(equalTo: safeAreaLayoutGuide.leftAnchor, constant: topStackViewPadding.left + frameInsets.left)
-            topStackViewLayoutSet?.right = topStackView.rightAnchor.constraint(equalTo: safeAreaLayoutGuide.rightAnchor, constant: -(topStackViewPadding.right + frameInsets.right))
-        }
 
         // Constraints Within the contentView
         middleContentViewLayoutSet = NSLayoutConstraintSet(
@@ -497,17 +524,13 @@ open class InputBarAccessoryView: UIView {
     ///
     /// - Parameter window: The window to anchor to
     private func setupConstraints(to window: UIWindow?) {
-        if #available(iOS 11.0, *) {
-            if let window = window {
-                guard window.safeAreaInsets.bottom > 0 else { return }
-                windowAnchor?.isActive = false
-                windowAnchor = contentView.bottomAnchor.constraint(lessThanOrEqualToSystemSpacingBelow: window.safeAreaLayoutGuide.bottomAnchor, multiplier: 1)
-                windowAnchor?.constant = -padding.bottom
-                windowAnchor?.priority = UILayoutPriority(rawValue: 750)
-                windowAnchor?.isActive = true
-                backgroundViewLayoutSet?.bottom?.constant = window.safeAreaInsets.bottom
-            }
-        }
+        guard let window = window, window.safeAreaInsets.bottom > 0 else { return }
+        windowAnchor?.isActive = false
+        windowAnchor = contentView.bottomAnchor.constraint(lessThanOrEqualToSystemSpacingBelow: window.safeAreaLayoutGuide.bottomAnchor, multiplier: 1)
+        windowAnchor?.constant = -padding.bottom
+        windowAnchor?.priority = UILayoutPriority(rawValue: 750)
+        windowAnchor?.isActive = true
+        backgroundViewLayoutSet?.bottom?.constant = window.safeAreaInsets.bottom
     }
     
     // MARK: - Constraint Layout Updates
@@ -700,6 +723,13 @@ open class InputBarAccessoryView: UIView {
     /// Removes all of the arranged subviews from the InputStackView and adds the given items.
     /// Sets the inputBarAccessoryView property of the InputBarButtonItem
     ///
+    /// Note: If you call `animated = true`, the `items` property of the stack view items will not be updated until the 
+    /// views are done being animated. If you perform a check for the items after they're set, setting animated to `false`
+    /// will apply the body of the closure immediately.
+    ///
+    /// The send button is attached to `rightStackView` so remember to remove it if you're setting it to a different
+    /// stack.
+    ///
     /// - Parameters:
     ///   - items: New InputStackView arranged views
     ///   - position: The targeted InputStackView
@@ -774,8 +804,7 @@ open class InputBarAccessoryView: UIView {
         performLayout(animated) { 
             self.leftStackViewWidthConstant = newValue
             self.layoutStackViews([.left])
-            guard self.superview?.superview != nil else { return }
-            self.superview?.superview?.layoutIfNeeded()
+            self.layoutContainerViewIfNeeded()
         }
     }
     
@@ -788,8 +817,7 @@ open class InputBarAccessoryView: UIView {
         performLayout(animated) { 
             self.rightStackViewWidthConstant = newValue
             self.layoutStackViews([.right])
-            guard self.superview?.superview != nil else { return }
-            self.superview?.superview?.layoutIfNeeded()
+            self.layoutContainerViewIfNeeded()
         }
     }
     
@@ -802,10 +830,25 @@ open class InputBarAccessoryView: UIView {
         performLayout(animated) {
             self.shouldForceTextViewMaxHeight = newValue
             self.textViewHeightAnchor?.isActive = newValue
-            guard self.superview?.superview != nil else { return }
-            self.superview?.superview?.layoutIfNeeded()
+            self.layoutContainerViewIfNeeded()
         }
     }
+
+    /// Calls `layoutIfNeeded()` on the `UIInputSetContainerView` that holds the
+    /// `InputBarAccessoryView`, if it exists, else `layoutIfNeeded()` is called
+    /// on the `superview`.
+    /// Use this for invoking a smooth layout of a size change when used as
+    /// an `inputAccessoryView`
+    public func layoutContainerViewIfNeeded() {
+        guard
+            let UIInputSetContainerViewKind: AnyClass = NSClassFromString("UIInputSetContainerView"),
+            let container = superview?.superview,
+            container.isKind(of: UIInputSetContainerViewKind) else {
+            superview?.layoutIfNeeded()
+            return
+        }
+        superview?.superview?.layoutIfNeeded()
+    }
     
     // MARK: - Notifications/Hooks
     
@@ -857,6 +900,12 @@ open class InputBarAccessoryView: UIView {
         if shouldInvalidateIntrinsicContentSize {
             // Prevent un-needed content size invalidation
             invalidateIntrinsicContentSize()
+            if shouldAnimateTextDidChangeLayout {
+                inputTextView.layoutIfNeeded()
+                UIView.animate(withDuration: 0.15) {
+                    self.layoutContainerViewIfNeeded()
+                }
+            }
         }
     }
     

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/KeyboardManager/KeyboardEvent.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardEvent.swift

@@ -2,7 +2,7 @@
 //  KeyboardEvent.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 3 - 2
deltachat-ios/View/InputBarAccessoryView/KeyboardManager/KeyboardManager.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardManager.swift

@@ -2,7 +2,7 @@
 //  KeyboardManager.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -259,7 +259,8 @@ open class KeyboardManager: NSObject, UIGestureRecognizerDelegate {
     // MARK: - Helper Methods
     
     private func animateAlongside(_ notification: KeyboardNotification, animations: @escaping ()->Void) {
-        UIView.animate(withDuration: notification.timeInterval, delay: 0,
+        UIView.animate(withDuration: notification.timeInterval,
+                       delay: 0,
                        options: [notification.animationOptions, .allowAnimatedContent, .beginFromCurrentState],
                        animations: animations, completion: nil)
     }

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/KeyboardManager/KeyboardNotification.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/KeyboardManager/KeyboardNotification.swift

@@ -2,7 +2,7 @@
 //  KeyboardNotification.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 6 - 1
deltachat-ios/View/InputBarAccessoryView/Models/HorizontalEdgeInsets.swift.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Models/HorizontalEdgePadding.swift

@@ -12,5 +12,10 @@ public struct HorizontalEdgePadding {
     public let left: CGFloat
     public let right: CGFloat
 
-    static let zero = HorizontalEdgePadding(left: 0, right: 0)
+    public static let zero = HorizontalEdgePadding(left: 0, right: 0)
+
+    public init(left: CGFloat, right: CGFloat) {
+        self.left = left
+        self.right = right
+    }
 }

+ 9 - 5
deltachat-ios/View/InputBarAccessoryView/Models/NSConstraintLayoutSet.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Models/NSConstraintLayoutSet.swift

@@ -2,7 +2,7 @@
 //  NSConstraintLayoutSet.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -39,10 +39,14 @@ class NSLayoutConstraintSet {
     var width: NSLayoutConstraint?
     var height: NSLayoutConstraint?
     
-    public init(top: NSLayoutConstraint? = nil, bottom: NSLayoutConstraint? = nil,
-                left: NSLayoutConstraint? = nil, right: NSLayoutConstraint? = nil,
-                centerX: NSLayoutConstraint? = nil, centerY: NSLayoutConstraint? = nil,
-                width: NSLayoutConstraint? = nil, height: NSLayoutConstraint? = nil) {
+    public init(top: NSLayoutConstraint? = nil,
+                bottom: NSLayoutConstraint? = nil,
+                left: NSLayoutConstraint? = nil,
+                right: NSLayoutConstraint? = nil,
+                centerX: NSLayoutConstraint? = nil,
+                centerY: NSLayoutConstraint? = nil,
+                width: NSLayoutConstraint? = nil,
+                height: NSLayoutConstraint? = nil) {
         self.top = top
         self.bottom = bottom
         self.left = left

+ 16 - 4
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/AttachmentManager.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/AttachmentManager.swift

@@ -2,7 +2,7 @@
 //  AttachmentManager.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -63,7 +63,13 @@ open class AttachmentManager: NSObject, InputPlugin {
     open var showAddAttachmentCell = true { didSet { attachmentView.reloadData() } }
     
     /// The color applied to the backgroundColor of the deleteButton in each `AttachmentCell`
-    open var tintColor: UIColor = UIColor(red: 0, green: 0.5, blue: 1, alpha: 1)
+    open var tintColor: UIColor {
+        if #available(iOS 13, *) {
+            return .link
+        } else {
+            return .systemBlue
+        }
+    }
     
     // MARK: - Initialization
     
@@ -216,18 +222,24 @@ extension AttachmentManager: UICollectionViewDataSource, UICollectionViewDelegat
                                         height: cell.bounds.height - cell.padding.top - cell.padding.bottom))
         let strokeWidth: CGFloat = 3
         let length: CGFloat = frame.width / 2
+        let grayColor: UIColor
+        if #available(iOS 13, *) {
+            grayColor = .systemGray2
+        } else {
+            grayColor = .lightGray
+        }
         let vLayer = CAShapeLayer()
         vLayer.path = UIBezierPath(roundedRect: CGRect(x: frame.midX - (strokeWidth / 2),
                                                        y: frame.midY - (length / 2),
                                                        width: strokeWidth,
                                                        height: length), cornerRadius: 5).cgPath
-        vLayer.fillColor = UIColor.lightGray.cgColor
+        vLayer.fillColor = grayColor.cgColor
         let hLayer = CAShapeLayer()
         hLayer.path = UIBezierPath(roundedRect: CGRect(x: frame.midX - (length / 2),
                                                        y: frame.midY - (strokeWidth / 2),
                                                        width: length,
                                                        height: strokeWidth), cornerRadius: 5).cgPath
-        hLayer.fillColor = UIColor.lightGray.cgColor
+        hLayer.fillColor = grayColor.cgColor
         cell.containerView.layer.addSublayer(vLayer)
         cell.containerView.layer.addSublayer(hLayer)
         return cell

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/Protocols/AttachmentManagerDataSource.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Protocols/AttachmentManagerDataSource.swift

@@ -2,7 +2,7 @@
 //  AttachmentManagerDataSource.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/Protocols/AttachmentManagerDelegate.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Protocols/AttachmentManagerDelegate.swift

@@ -2,7 +2,7 @@
 //  AttachmentManagerDelegate.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 16 - 6
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/Views/AttachmentCell.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/AttachmentCell.swift

@@ -2,7 +2,7 @@
 //  AttachmentCell.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -31,14 +31,18 @@ open class AttachmentCell: UICollectionViewCell {
     
     // MARK: - Properties
     
-    class var reuseIdentifier: String {
+    public class var reuseIdentifier: String {
         return "AttachmentCell"
     }
     
     public let containerView: UIView = {
         let view = UIView()
         view.translatesAutoresizingMaskIntoConstraints = false
-        view.backgroundColor = .groupTableViewBackground
+        if #available(iOS 13, *) {
+            view.backgroundColor = .systemGray6
+        } else {
+            view.backgroundColor = .groupTableViewBackground
+        }
         view.layer.cornerRadius = 8
         view.clipsToBounds = true
         return view
@@ -52,11 +56,17 @@ open class AttachmentCell: UICollectionViewCell {
     
     open lazy var deleteButton: UIButton = { [weak self] in
         let button = UIButton()
-        button.setAttributedTitle(NSMutableAttributedString().bold("X", fontSize: 15, textColor: .white), for: .normal)
-        button.setAttributedTitle(NSMutableAttributedString().bold("X", fontSize: 15, textColor: UIColor.white.withAlphaComponent(0.5)), for: .highlighted)
+        let textColor: UIColor
+        if #available(iOS 13, *) {
+            textColor = .systemBackground
+        } else {
+            textColor = .white
+        }
+        button.setAttributedTitle(NSMutableAttributedString().bold("X", fontSize: 15, textColor: textColor), for: .normal)
+        button.setAttributedTitle(NSMutableAttributedString().bold("X", fontSize: 15, textColor: textColor.withAlphaComponent(0.5)), for: .highlighted)
         button.layer.cornerRadius = 10
         button.clipsToBounds = true
-        button.backgroundColor = UIColor(red: 0, green: 122/255, blue: 1, alpha: 1)
+        button.backgroundColor = .systemBlue
         button.addTarget(self, action: #selector(deleteAttachment), for: .touchUpInside)
         return button
     }()

+ 6 - 2
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/Views/AttachmentsView.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/AttachmentsView.swift

@@ -2,7 +2,7 @@
 //  AttachmentCollectionView.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -72,7 +72,11 @@ open class AttachmentCollectionView: UICollectionView {
     
     private func setup() {
         
-        backgroundColor = .white
+        if #available(iOS 13, *) {
+            backgroundColor = .systemBackground
+        } else {
+            backgroundColor = .white
+        }
         alwaysBounceHorizontal = true
         showsHorizontalScrollIndicator = true
         setContentHuggingPriority(UILayoutPriority.defaultHigh, for: .vertical)

+ 2 - 2
deltachat-ios/View/InputBarAccessoryView/Plugins/AttachmentManager/Views/ImageAttachmentCell.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AttachmentManager/Views/ImageAttachmentCell.swift

@@ -2,7 +2,7 @@
 //  ImageAttachmentCell.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -31,7 +31,7 @@ open class ImageAttachmentCell: AttachmentCell {
     
     // MARK: - Properties
     
-    override class var reuseIdentifier: String {
+    override public class var reuseIdentifier: String {
         return "ImageAttachmentCell"
     }
     

+ 24 - 9
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/AutocompleteManager.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/AutocompleteManager.swift

@@ -2,7 +2,7 @@
 //  AttachmentManager.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -62,7 +62,11 @@ open class AutocompleteManager: NSObject, InputPlugin, UITextViewDelegate, UITab
         let tableView = AutocompleteTableView()
         tableView.register(AutocompleteCell.self, forCellReuseIdentifier: AutocompleteCell.reuseIdentifier)
         tableView.separatorStyle = .none
-        tableView.backgroundColor = .white
+        if #available(iOS 13, *) {
+            tableView.backgroundColor = .systemBackground
+        } else {
+            tableView.backgroundColor = .white
+        }
         tableView.rowHeight = 44
         tableView.delegate = self
         tableView.dataSource = self
@@ -94,8 +98,15 @@ open class AutocompleteManager: NSObject, InputPlugin, UITextViewDelegate, UITab
     open var deleteCompletionByParts = true
     
     /// The default text attributes
-    open var defaultTextAttributes: [NSAttributedString.Key: Any] =
-        [.font: UIFont.preferredFont(forTextStyle: .body), .foregroundColor: UIColor.black]
+    open var defaultTextAttributes: [NSAttributedString.Key: Any] = {
+        var foregroundColor: UIColor
+        if #available(iOS 13, *) {
+            foregroundColor = .label
+        } else {
+            foregroundColor = .black
+        }
+        return [.font: UIFont.preferredFont(forTextStyle: .body), .foregroundColor: foregroundColor]
+    }()
     
     /// The NSAttributedString.Key.paragraphStyle value applied to attributed strings
     public let paragraphStyle: NSMutableParagraphStyle = {
@@ -430,16 +441,16 @@ open class AutocompleteManager: NSObject, InputPlugin, UITextViewDelegate, UITab
 
                     let textToReplace = textView.attributedText.attributedSubstring(from: subrange).string
                     guard deleteCompletionByParts,
-                            let delimiterRange = textToReplace.rangeOfCharacter(from: .whitespacesAndNewlines,
-                                                                                options: .backwards,
-                                                                                range: Range(subrange, in: textToReplace)) else {
+                          let delimiterRange = textToReplace.rangeOfCharacter(from: .whitespacesAndNewlines,
+                                                                              options: .backwards,
+                                                                              range: Range(subrange, in: textToReplace)) else {
                         // Replace entire autocomplete
                         textView.attributedText = textView.attributedText.replacingCharacters(in: subrange, with: nothing)
                         textView.selectedRange = NSRange(location: subrange.location, length: 0)
                         return
                     }
                     // Delete up to delimiter
-                    let delimiterLocation = delimiterRange.lowerBound.encodedOffset
+                    let delimiterLocation = delimiterRange.lowerBound.utf16Offset(in: textToReplace)
                     let length = subrange.length - delimiterLocation
                     let rangeFromDelimiter = NSRange(location: delimiterLocation + subrange.location, length: length)
                     textView.attributedText = textView.attributedText.replacingCharacters(in: rangeFromDelimiter, with: nothing)
@@ -450,8 +461,12 @@ open class AutocompleteManager: NSObject, InputPlugin, UITextViewDelegate, UITab
             }
         } else if range.length >= 0, range.location < totalRange.length {
             
+            // Inserting text before a tag when the tag is at the start of the string
+            guard range.location != 0 else { return true }
+
             // Inserting text in the middle of an autocompleted string
-            let attributes = textView.attributedText.attributes(at: range.location, longestEffectiveRange: nil, in: range)
+            let attributes = textView.attributedText.attributes(at: range.location-1, longestEffectiveRange: nil, in: NSMakeRange(range.location-1, range.length))
+
             let isAutocompleted = attributes[.autocompleted] as? Bool ?? false
             if isAutocompleted {
                 textView.attributedText.enumerateAttribute(.autocompleted, in: totalRange, options: .reverse) { _, subrange, stop in

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Models/AutocompleteCompletion.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Models/AutocompleteCompletion.swift

@@ -2,7 +2,7 @@
 //  AutocompleteCompletion.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Models/AutocompleteSession.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Models/AutocompleteSession.swift

@@ -2,7 +2,7 @@
 //  AutocompleteSession.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 6 - 2
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDataSource.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDataSource.swift

@@ -2,7 +2,7 @@
 //  AutocompleteManagerDataSource.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -58,7 +58,11 @@ public extension AutocompleteManagerDataSource {
         }
         
         cell.textLabel?.attributedText = manager.attributedText(matching: session, fontSize: 13)
-        cell.backgroundColor = .white
+        if #available(iOS 13, *) {
+            cell.backgroundColor = .systemBackground
+        } else {
+            cell.backgroundColor = .white
+        }
         cell.separatorLine.isHidden = tableView.numberOfRows(inSection: indexPath.section) - 1 == indexPath.row
         return cell
         

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDelegate.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Protocols/AutocompleteManagerDelegate.swift

@@ -2,7 +2,7 @@
 //  AutocompleteManagerDelegate.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 6 - 2
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Views/AutocompleteCell.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Views/AutocompleteCell.swift

@@ -2,7 +2,7 @@
 //  AutocompleteCell.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -58,7 +58,11 @@ open class AutocompleteCell: UITableViewCell {
         detailTextLabel?.text = nil
         imageView?.image = nil
         imageViewEdgeInsets = .zero
-        separatorLine.backgroundColor = .lightGray
+        if #available(iOS 13, *) {
+            separatorLine.backgroundColor = .systemGray2
+        } else {
+            separatorLine.backgroundColor = .lightGray
+        }
         separatorLine.isHidden = false
     }
     

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Plugins/AutocompleteManager/Views/AutocompleteTableView.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Plugins/AutocompleteManager/Views/AutocompleteTableView.swift

@@ -2,7 +2,7 @@
 //  AutocompleteTableView.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Protocols/InputBarAccessoryViewDelegate.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputBarAccessoryViewDelegate.swift

@@ -2,7 +2,7 @@
 //  InputBarAccessoryViewDelegate.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 2 - 2
deltachat-ios/View/InputBarAccessoryView/Protocols/InputItem.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputItem.swift

@@ -2,7 +2,7 @@
 //  InputItem.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -22,7 +22,7 @@
 //  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 //  SOFTWARE.
 //
-//  Copyright © 2017-2019 Nathan Tannar. All rights reserved.
+//  Copyright © 2017-2020 Nathan Tannar. All rights reserved.
 //
 
 import UIKit

+ 2 - 2
deltachat-ios/View/InputBarAccessoryView/Protocols/InputPlugin.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Protocols/InputPlugin.swift

@@ -2,7 +2,7 @@
 //  InputPlugin.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -22,7 +22,7 @@
 //  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 //  SOFTWARE.
 //
-//  Copyright © 2017-2019 Nathan Tannar. All rights reserved.
+//  Copyright © 2017-2020 Nathan Tannar. All rights reserved.
 //
 
 import UIKit

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Supporting Files/Info.plist → deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/Info.plist

@@ -15,7 +15,7 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>4.2.1</string>
+	<string>$(MARKETING_VERSION)</string>
 	<key>CFBundleVersion</key>
 	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>NSPrincipalClass</key>

+ 4 - 3
deltachat-ios/View/InputBarAccessoryView/Supporting Files/InputBarAccessoryView+Availability.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/InputBarAccessoryView+Availability.swift

@@ -2,7 +2,7 @@
 //  InputBarAccessoryView+Availability.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -55,12 +55,13 @@ extension AutocompleteManager {
     public var isCaseSensitive: Bool {
         get { return false }
         set {
-            if isCaseSensitive {
+            if newValue {
                 filterBlock = { session, completion in
                     completion.text.contains(session.filter)
                 }
             } else {
-                filterBlock = { session, completion in completion.text.lowercased().contains(session.filter.lowercased())
+                filterBlock = { session, completion in
+                    completion.text.lowercased().contains(session.filter.lowercased())
                 }
             }
         }

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Supporting Files/InputBarAccessoryView-Bridging-Header.h → deltachat-ios/libraries/InputbarAccessoryView/Sources/Supporting Files/InputBarAccessoryView-Bridging-Header.h

@@ -3,7 +3,7 @@
 //  InputBarAccessoryView
 //
 //  Created by Nathan Tannar on 8/18/17.
-//  Copyright © 2017-2019 Nathan Tannar. All rights reserved.
+//  Copyright © 2017-2020 Nathan Tannar. All rights reserved.
 //
 
 #import <UIKit/UIKit.h>

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/ViewControllers/InputBarViewController.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/ViewControllers/InputBarViewController.swift

@@ -2,7 +2,7 @@
 //  InputBarViewController.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 1 - 1
deltachat-ios/View/InputBarAccessoryView/Views/InputStackView.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/InputStackView.swift

@@ -2,7 +2,7 @@
 //  InputStackView.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal

+ 18 - 11
deltachat-ios/View/InputBarAccessoryView/Views/InputTextView.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/InputTextView.swift

@@ -2,7 +2,7 @@
 //  InputTextView.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -68,7 +68,11 @@ open class InputTextView: UITextView {
     public let placeholderLabel: UILabel = {
         let label = UILabel()
         label.numberOfLines = 0
-        label.textColor = .lightGray
+        if #available(iOS 13, *) {
+            label.textColor = .systemGray2
+        } else {
+            label.textColor = .lightGray
+        }
         label.text = "Aa"
         label.backgroundColor = .clear
         label.translatesAutoresizingMaskIntoConstraints = false
@@ -239,18 +243,15 @@ open class InputTextView: UITextView {
     
     open override func paste(_ sender: Any?) {
         
-        guard let image = UIPasteboard.general.image else {
+        guard isImagePasteEnabled, let image = UIPasteboard.general.image else {
             return super.paste(sender)
         }
-        if isImagePasteEnabled {
-            pasteImageInTextContainer(with: image)
-        } else {
-            for plugin in inputBarAccessoryView?.inputPlugins ?? [] {
-                if plugin.handleInput(of: image) {
-                    return
-                }
+        for plugin in inputBarAccessoryView?.inputPlugins ?? [] {
+            if plugin.handleInput(of: image) {
+                return
             }
         }
+        pasteImageInTextContainer(with: image)
     }
     
     /// Addes a new UIImage to the NSTextContainer as an NSTextAttachment
@@ -271,9 +272,15 @@ open class InputTextView: UITextView {
         newAttributedStingComponent.append(NSAttributedString(string: "\n"))
         
         // The attributes that should be applied to the new NSAttributedString to match the current attributes
+        let defaultTextColor: UIColor
+        if #available(iOS 13, *) {
+            defaultTextColor = .label
+        } else {
+            defaultTextColor = .black
+        }
         let attributes: [NSAttributedString.Key: Any] = [
             NSAttributedString.Key.font: font ?? UIFont.preferredFont(forTextStyle: .body),
-            NSAttributedString.Key.foregroundColor: textColor ?? .black
+            NSAttributedString.Key.foregroundColor: textColor ?? defaultTextColor
         ]
         newAttributedStingComponent.addAttributes(attributes, range: NSRange(location: 0, length: newAttributedStingComponent.length))
         

+ 8 - 4
deltachat-ios/View/InputBarAccessoryView/Views/SeparatorLine.swift → deltachat-ios/libraries/InputbarAccessoryView/Sources/Views/SeparatorLine.swift

@@ -2,7 +2,7 @@
 //  SeparatorLine.swift
 //  InputBarAccessoryView
 //
-//  Copyright © 2017-2019 Nathan Tannar.
+//  Copyright © 2017-2020 Nathan Tannar.
 //
 //  Permission is hereby granted, free of charge, to any person obtaining a copy
 //  of this software and associated documentation files (the "Software"), to deal
@@ -31,7 +31,7 @@ import UIKit
  A UIView thats intrinsicContentSize is overrided so an exact height can be specified
  
  ## Important Notes ##
- 1. Default height is 1.0
+ 1. Default height is 1 pixel
  2. Default backgroundColor is UIColor.lightGray
  3. Intended to be used in an `InputStackView`
  */
@@ -40,7 +40,7 @@ open class SeparatorLine: UIView {
     // MARK: - Properties
     
     /// The height of the line
-    open var height: CGFloat = 1.0 {
+  open var height: CGFloat = 1.0 / UIScreen.main.scale {
         didSet {
             constraints.filter { $0.identifier == "height" }.forEach { $0.constant = height } // Assumes constraint was given an identifier
             invalidateIntrinsicContentSize()
@@ -65,7 +65,11 @@ open class SeparatorLine: UIView {
     
     /// Sets up the default properties
     open func setup() {
-        backgroundColor = .lightGray
+        if #available(iOS 13, *) {
+            backgroundColor = .systemGray2
+        } else {
+            backgroundColor = .lightGray
+        }
         translatesAutoresizingMaskIntoConstraints = false
         setContentHuggingPriority(.defaultHigh, for: .vertical)
     }