IOS-1716 adds "Company Features" Section and "Extra Keys" setting skeleton IOS-1716
authorbuff <andreas@pep-project.org>
Tue, 13 Aug 2019 18:59:12 +0200
branchIOS-1716
changeset 96688605c2cf484b
parent 9667 9ff0ad8d23d2
child 9669 28bb4671b45c
IOS-1716 adds "Company Features" Section and "Extra Keys" setting skeleton
pEpForiOS.xcodeproj/project.pbxproj
pEpForiOS/Base.lproj/Settings.storyboard
pEpForiOS/UI/Settings/Setting/ExtraKeysSetting/ExtraKeysSettingTableViewController.swift
pEpForiOS/UI/Settings/Setting/ExtraKeysSetting/ExtraKeysSettingViewModel.swift
pEpForiOS/UI/Settings/SettingsTableViewController.swift
pEpForiOS/UI/Settings/ViewModel/SettingsCellViewModel.swift
pEpForiOS/UI/Settings/ViewModel/SettingsSectionViewModel.swift
pEpForiOS/UI/Settings/ViewModel/SettingsViewModel.swift
     1.1 --- a/pEpForiOS.xcodeproj/project.pbxproj	Tue Aug 13 14:40:03 2019 +0200
     1.2 +++ b/pEpForiOS.xcodeproj/project.pbxproj	Tue Aug 13 18:59:12 2019 +0200
     1.3 @@ -64,6 +64,8 @@
     1.4  		151F7200202A06760057C74D /* TestUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151F71F5202A06750057C74D /* TestUtil.swift */; };
     1.5  		151F7201202A06760057C74D /* CdAccount+TestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151F71F6202A06750057C74D /* CdAccount+TestUtils.swift */; };
     1.6  		151F7205202A070E0057C74D /* PantomimeFolderAttribute+ExtensionsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151F7204202A070E0057C74D /* PantomimeFolderAttribute+ExtensionsTest.swift */; };
     1.7 +		152295542302F72900204FD3 /* ExtraKeysSettingTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 152295532302F72900204FD3 /* ExtraKeysSettingTableViewController.swift */; };
     1.8 +		152295572302F7E200204FD3 /* ExtraKeysSettingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 152295562302F7E200204FD3 /* ExtraKeysSettingViewModel.swift */; };
     1.9  		15255B031F825CD100A2CFC9 /* IdentityImageTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15255B021F825CD100A2CFC9 /* IdentityImageTool.swift */; };
    1.10  		15265962216230B1006A78DF /* ContactCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15265949216230B0006A78DF /* ContactCell.swift */; };
    1.11  		1526596A216230B1006A78DF /* ComposeDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15265952216230B0006A78DF /* ComposeDataSource.swift */; };
    1.12 @@ -542,6 +544,8 @@
    1.13  		151F71F6202A06750057C74D /* CdAccount+TestUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CdAccount+TestUtils.swift"; sourceTree = "<group>"; };
    1.14  		151F7204202A070E0057C74D /* PantomimeFolderAttribute+ExtensionsTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PantomimeFolderAttribute+ExtensionsTest.swift"; sourceTree = "<group>"; };
    1.15  		152130531FD00B7A00688DF2 /* DisplayUserError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayUserError.swift; sourceTree = "<group>"; };
    1.16 +		152295532302F72900204FD3 /* ExtraKeysSettingTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraKeysSettingTableViewController.swift; sourceTree = "<group>"; };
    1.17 +		152295562302F7E200204FD3 /* ExtraKeysSettingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtraKeysSettingViewModel.swift; sourceTree = "<group>"; };
    1.18  		15255B021F825CD100A2CFC9 /* IdentityImageTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityImageTool.swift; sourceTree = "<group>"; };
    1.19  		15265949216230B0006A78DF /* ContactCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactCell.swift; sourceTree = "<group>"; };
    1.20  		15265952216230B0006A78DF /* ComposeDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComposeDataSource.swift; sourceTree = "<group>"; };
    1.21 @@ -1108,6 +1112,15 @@
    1.22  			path = IMAP;
    1.23  			sourceTree = "<group>";
    1.24  		};
    1.25 +		152295552302F73400204FD3 /* ExtraKeysSetting */ = {
    1.26 +			isa = PBXGroup;
    1.27 +			children = (
    1.28 +				152295532302F72900204FD3 /* ExtraKeysSettingTableViewController.swift */,
    1.29 +				152295562302F7E200204FD3 /* ExtraKeysSettingViewModel.swift */,
    1.30 +			);
    1.31 +			path = ExtraKeysSetting;
    1.32 +			sourceTree = "<group>";
    1.33 +		};
    1.34  		15265942216230B0006A78DF /* Compose */ = {
    1.35  			isa = PBXGroup;
    1.36  			children = (
    1.37 @@ -1435,6 +1448,7 @@
    1.38  				15874BB12127493E00A3A4A6 /* OnOffSettings */,
    1.39  				15874BB62127493E00A3A4A6 /* AccountSettings */,
    1.40  				15874BBE2127493E00A3A4A6 /* TrustedServerSetting */,
    1.41 +				152295552302F73400204FD3 /* ExtraKeysSetting */,
    1.42  			);
    1.43  			path = Setting;
    1.44  			sourceTree = "<group>";
    1.45 @@ -2728,6 +2742,7 @@
    1.46  				4351C2D61F4441190053381F /* man.c in Sources */,
    1.47  				150B8EB31FCEB93D00374438 /* UIUtils.swift in Sources */,
    1.48  				43AAC22A1F7A5AEE00F435F4 /* BaseTableViewController.swift in Sources */,
    1.49 +				152295542302F72900204FD3 /* ExtraKeysSettingTableViewController.swift in Sources */,
    1.50  				220DCE351E0AB5CC002FE716 /* MessageContentCell.swift in Sources */,
    1.51  				1526597A21623652006A78DF /* SuggestViewModel.swift in Sources */,
    1.52  				4351C2D31F4441190053381F /* inlines.c in Sources */,
    1.53 @@ -2861,6 +2876,7 @@
    1.54  				43ED53701CC77F95006AB156 /* EmailListViewController.swift in Sources */,
    1.55  				496C0EE720BC2A880009B5B9 /* EmailDisplayDelegate.swift in Sources */,
    1.56  				152A39DD21905C3E00D9F8E4 /* AccountCell.swift in Sources */,
    1.57 +				152295572302F7E200204FD3 /* ExtraKeysSettingViewModel.swift in Sources */,
    1.58  				B7DB7FDC221ADDBD003968DA /* UIImageView+Extension.swift in Sources */,
    1.59  				37C3C0E62260C64D003E290C /* Log.swift in Sources */,
    1.60  				43306EC21FE129840045DD00 /* OAuth2Type.swift in Sources */,
     2.1 --- a/pEpForiOS/Base.lproj/Settings.storyboard	Tue Aug 13 14:40:03 2019 +0200
     2.2 +++ b/pEpForiOS/Base.lproj/Settings.storyboard	Tue Aug 13 18:59:12 2019 +0200
     2.3 @@ -126,6 +126,7 @@
     2.4                          <segue destination="pQb-5p-QId" kind="showDetail" identifier="segueShowSettingDefaultAccount" id="qiY-7g-nll"/>
     2.5                          <segue destination="95U-QI-nlr" kind="showDetail" identifier="segueShowSettingTrustedServers" id="tvG-bN-ITt"/>
     2.6                          <segue destination="cMW-fr-EKn" kind="showDetail" identifier="segueSetOwnKey" id="D3B-Zt-U43"/>
     2.7 +                        <segue destination="uzc-58-YKg" kind="show" identifier="segueExtraKeys" id="OfN-k9-B9h"/>
     2.8                      </connections>
     2.9                  </tableViewController>
    2.10                  <placeholder placeholderIdentifier="IBFirstResponder" id="BPe-Zm-lKR" userLabel="First Responder" sceneMemberID="firstResponder"/>
    2.11 @@ -712,5 +713,57 @@
    2.12              </objects>
    2.13              <point key="canvasLocation" x="-391.19999999999999" y="-388.15592203898052"/>
    2.14          </scene>
    2.15 +        <!--Extra Keys Table View Controller-->
    2.16 +        <scene sceneID="oPN-rz-GTz">
    2.17 +            <objects>
    2.18 +                <tableViewController storyboardIdentifier="ExtraKeysTableViewController" id="uzc-58-YKg" customClass="ExtraKeysTableViewController" customModule="pEpForiOS" customModuleProvider="target" sceneMemberID="viewController">
    2.19 +                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="deG-Tt-VmN">
    2.20 +                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
    2.21 +                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
    2.22 +                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
    2.23 +                        <view key="tableHeaderView" contentMode="scaleToFill" id="NV8-u2-BdN">
    2.24 +                            <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
    2.25 +                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
    2.26 +                            <subviews>
    2.27 +                                <textField opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="AAAA" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="GfF-QP-aFc">
    2.28 +                                    <rect key="frame" x="139" y="7" width="97" height="30"/>
    2.29 +                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
    2.30 +                                    <nil key="textColor"/>
    2.31 +                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
    2.32 +                                    <textInputTraits key="textInputTraits"/>
    2.33 +                                </textField>
    2.34 +                            </subviews>
    2.35 +                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
    2.36 +                        </view>
    2.37 +                        <prototypes>
    2.38 +                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ExtraKeysSettingFprCell" textLabel="GEq-nv-Mbi" style="IBUITableViewCellStyleDefault" id="vpK-ct-FhS">
    2.39 +                                <rect key="frame" x="0.0" y="72" width="375" height="44"/>
    2.40 +                                <autoresizingMask key="autoresizingMask"/>
    2.41 +                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="vpK-ct-FhS" id="xJE-OM-d4U">
    2.42 +                                    <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
    2.43 +                                    <autoresizingMask key="autoresizingMask"/>
    2.44 +                                    <subviews>
    2.45 +                                        <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" insetsLayoutMarginsFromSafeArea="NO" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="GEq-nv-Mbi">
    2.46 +                                            <rect key="frame" x="16" y="0.0" width="343" height="43.5"/>
    2.47 +                                            <autoresizingMask key="autoresizingMask"/>
    2.48 +                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
    2.49 +                                            <nil key="textColor"/>
    2.50 +                                            <nil key="highlightedColor"/>
    2.51 +                                        </label>
    2.52 +                                    </subviews>
    2.53 +                                </tableViewCellContentView>
    2.54 +                            </tableViewCell>
    2.55 +                        </prototypes>
    2.56 +                        <sections/>
    2.57 +                        <connections>
    2.58 +                            <outlet property="dataSource" destination="uzc-58-YKg" id="aBi-C7-0V9"/>
    2.59 +                            <outlet property="delegate" destination="uzc-58-YKg" id="w7K-nn-boK"/>
    2.60 +                        </connections>
    2.61 +                    </tableView>
    2.62 +                </tableViewController>
    2.63 +                <placeholder placeholderIdentifier="IBFirstResponder" id="ry7-IZ-RNV" userLabel="First Responder" sceneMemberID="firstResponder"/>
    2.64 +            </objects>
    2.65 +            <point key="canvasLocation" x="-476" y="-1848"/>
    2.66 +        </scene>
    2.67      </scenes>
    2.68  </document>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/pEpForiOS/UI/Settings/Setting/ExtraKeysSetting/ExtraKeysSettingTableViewController.swift	Tue Aug 13 18:59:12 2019 +0200
     3.3 @@ -0,0 +1,45 @@
     3.4 +//
     3.5 +//  ExtraKeysSettingTableViewController.swift
     3.6 +//  pEp
     3.7 +//
     3.8 +//  Created by Andreas Buff on 13.08.19.
     3.9 +//  Copyright © 2019 p≡p Security S.A. All rights reserved.
    3.10 +//
    3.11 +
    3.12 +import Foundation
    3.13 +
    3.14 +class ExtraKeysSettingTableViewController: BaseTableViewController {
    3.15 +    static private let uiTableViewCellID = "ExtraKeysSettingFprCell"
    3.16 +    private var viewModel: ExtraKeysSettingViewModel?
    3.17 +
    3.18 +    override func viewDidLoad() {
    3.19 +        super.viewDidLoad()
    3.20 +        viewModel = ExtraKeysSettingViewModel()
    3.21 +    }
    3.22 +}
    3.23 +
    3.24 +// MARK: - UITableViewDataSource
    3.25 +
    3.26 +extension ExtraKeysSettingTableViewController {
    3.27 +
    3.28 +    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    3.29 +        return viewModel?.numRows ?? 0
    3.30 +    }
    3.31 +
    3.32 +    override func tableView(_ tableView: UITableView,
    3.33 +                            cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    3.34 +        let cell =
    3.35 +            tableView.dequeueReusableCell(withIdentifier: ExtraKeysSettingTableViewController.uiTableViewCellID,
    3.36 +                                          for: indexPath)
    3.37 +        cell.textLabel?.text = viewModel?[indexPath.row]
    3.38 +
    3.39 +        return cell
    3.40 +    }
    3.41 +}
    3.42 +
    3.43 +
    3.44 +//// MARK: - UITableViewDelegate
    3.45 +//
    3.46 +//extension ExtraKeysSettingTableViewController: UITableViewDelegate {
    3.47 +//
    3.48 +//}
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/pEpForiOS/UI/Settings/Setting/ExtraKeysSetting/ExtraKeysSettingViewModel.swift	Tue Aug 13 18:59:12 2019 +0200
     4.3 @@ -0,0 +1,50 @@
     4.4 +//
     4.5 +//  ExtraKeysSettingViewModel.swift
     4.6 +//  pEp
     4.7 +//
     4.8 +//  Created by Andreas Buff on 13.08.19.
     4.9 +//  Copyright © 2019 p≡p Security S.A. All rights reserved.
    4.10 +//
    4.11 +
    4.12 +import MessageModel
    4.13 +
    4.14 +//extension ExtraKeysSettingViewModel {
    4.15 +//
    4.16 +////    struct Row {
    4.17 +////        let fpr: String
    4.18 +////    }
    4.19 +//
    4.20 +//
    4.21 +//}
    4.22 +
    4.23 +class ExtraKeysSettingViewModel {
    4.24 +    typealias Fingerprint = String
    4.25 +//    private var rows = [Row]()
    4.26 +    private let fprsOfExtraKeys: [String]
    4.27 +
    4.28 +    var numRows: Int {
    4.29 +        return fprsOfExtraKeys.count
    4.30 +    }
    4.31 +
    4.32 +    subscript(index: Int) -> Fingerprint {
    4.33 +        get {
    4.34 +            return self.fprsOfExtraKeys[index]
    4.35 +        }
    4.36 +    }
    4.37 +
    4.38 +    init() {
    4.39 +        fprsOfExtraKeys = ExtraKeysService.extraKeys.map { $0.fingerprint }
    4.40 +    }
    4.41 +
    4.42 +
    4.43 +
    4.44 +}
    4.45 +//
    4.46 +//// MARK: - Private
    4.47 +//
    4.48 +//extension ExtraKeysSettingViewModel {
    4.49 +//
    4.50 +//    private func setup() {
    4.51 +//        let extraKeys = ExtraKeysService.extraKeys
    4.52 +//    }
    4.53 +//}
     5.1 --- a/pEpForiOS/UI/Settings/SettingsTableViewController.swift	Tue Aug 13 14:40:03 2019 +0200
     5.2 +++ b/pEpForiOS/UI/Settings/SettingsTableViewController.swift	Tue Aug 13 18:59:12 2019 +0200
     5.3 @@ -167,6 +167,8 @@
     5.4                  performSegue(withIdentifier: .segueShowSettingTrustedServers, sender: self)
     5.5              case .setOwnKey:
     5.6                  performSegue(withIdentifier: .segueSetOwnKey, sender: self)
     5.7 +            case .extraKeys:
     5.8 +                performSegue(withIdentifier: .segueExtraKeys, sender: self)
     5.9              }
    5.10          case let vm as SettingsActionCellViewModelProtocol:
    5.11              switch vm.type {
    5.12 @@ -190,6 +192,7 @@
    5.13          case segueShowSettingDefaultAccount
    5.14          case sequeShowCredits
    5.15          case segueShowSettingTrustedServers
    5.16 +        case segueExtraKeys
    5.17          case segueSetOwnKey
    5.18          case noAccounts
    5.19          case noSegue
    5.20 @@ -221,7 +224,8 @@
    5.21              }
    5.22              destination.appConfig = self.appConfig
    5.23          case .segueShowSettingDefaultAccount,
    5.24 -             .segueShowSettingTrustedServers:
    5.25 +             .segueShowSettingTrustedServers,
    5.26 +             .segueExtraKeys:
    5.27              guard let destination = segue.destination as? BaseTableViewController else {
    5.28                  return
    5.29              }
    5.30 @@ -237,7 +241,7 @@
    5.31  
    5.32  // MARK: - Private
    5.33  extension SettingsTableViewController {
    5.34 -    private func updateModel() {
    5.35 +    private func updateModel() { //!!!: looks wrong. Is named updateModel but does not.
    5.36          //reload data in view model
    5.37          tableView.reloadData()
    5.38      }
     6.1 --- a/pEpForiOS/UI/Settings/ViewModel/SettingsCellViewModel.swift	Tue Aug 13 14:40:03 2019 +0200
     6.2 +++ b/pEpForiOS/UI/Settings/ViewModel/SettingsCellViewModel.swift	Tue Aug 13 18:59:12 2019 +0200
     6.3 @@ -17,6 +17,7 @@
     6.4          case defaultAccount
     6.5          case trustedServer
     6.6          case setOwnKey
     6.7 +        case extraKeys
     6.8      }
     6.9  }
    6.10  
    6.11 @@ -72,6 +73,10 @@
    6.12                  return NSLocalizedString("Set Own Key",
    6.13                                           comment:
    6.14                      "Settings: Cell (button) title for entering fingerprints that are made own keys")
    6.15 +            case .extraKeys:
    6.16 +                return NSLocalizedString("Extra Keys",
    6.17 +                                         comment:
    6.18 +                    "Settings: Cell (button) title to view Extra Keys setting")
    6.19              }
    6.20          }
    6.21      }
    6.22 @@ -79,7 +84,7 @@
    6.23      var value : String? {
    6.24          get {
    6.25              switch type {
    6.26 -            case .account, .credits, .trustedServer, .setOwnKey:
    6.27 +            case .account, .credits, .trustedServer, .setOwnKey, .extraKeys:
    6.28                  // Have no value.
    6.29                  return nil
    6.30              case .defaultAccount:
     7.1 --- a/pEpForiOS/UI/Settings/ViewModel/SettingsSectionViewModel.swift	Tue Aug 13 14:40:03 2019 +0200
     7.2 +++ b/pEpForiOS/UI/Settings/ViewModel/SettingsSectionViewModel.swift	Tue Aug 13 18:59:12 2019 +0200
     7.3 @@ -16,6 +16,7 @@
     7.4          case globalSettings
     7.5          case pgpCompatibilitySettings
     7.6          case keySync
     7.7 +        case companyFeatures
     7.8      }
     7.9  
    7.10      var cells = [SettingCellViewModelProtocol]()
    7.11 @@ -45,14 +46,18 @@
    7.12                                         comment: "Tableview section footer")
    7.13          case .keySync:
    7.14              guard let messageModelService = messageModelService else {
    7.15 -                Log.shared.errorAndCrash("%@", SettingsInternalError.nilMessageModelService.localizedDescription)
    7.16 +                Log.shared.errorAndCrash("missing service")
    7.17                  return
    7.18              }
    7.19              generateKeySyncCells(messageModelService)
    7.20              title = NSLocalizedString("Key sync", comment: "Tableview section header")
    7.21 +        case .companyFeatures:
    7.22 +            generateExtaKeysCells()
    7.23 +            title = NSLocalizedString("Company Features", comment: "Tableview section header")
    7.24          }
    7.25      }
    7.26  
    7.27 +    //BUFF: move private (and make all generate... and other private)
    7.28      func generateAccountCells() {
    7.29          Account.all().forEach { (acc) in
    7.30              self.cells.append(SettingsCellViewModel(account: acc))
    7.31 @@ -107,7 +112,10 @@
    7.32  
    7.33  // MARK: - Private
    7.34  
    7.35 +// MARK: KeySync
    7.36 +
    7.37  extension SettingsSectionViewModel {
    7.38 +
    7.39      private func isInDeviceGroup() -> Bool {
    7.40          guard let keySyncDeviceGroupService = keySyncDeviceGroupService else {
    7.41              Log.shared.errorAndCrash("%@", SettingsInternalError.nilKeySyncDeviceGroupService.localizedDescription)
    7.42 @@ -123,3 +131,12 @@
    7.43          }
    7.44      }
    7.45  }
    7.46 +
    7.47 +// MARK: Extra Keys
    7.48 +
    7.49 +extension SettingsSectionViewModel {
    7.50 +
    7.51 +    private func generateExtaKeysCells() {
    7.52 +        cells.append(SettingsCellViewModel(type: .extraKeys))
    7.53 +    }
    7.54 +}
     8.1 --- a/pEpForiOS/UI/Settings/ViewModel/SettingsViewModel.swift	Tue Aug 13 14:40:03 2019 +0200
     8.2 +++ b/pEpForiOS/UI/Settings/ViewModel/SettingsViewModel.swift	Tue Aug 13 18:59:12 2019 +0200
     8.3 @@ -35,6 +35,7 @@
     8.4          sections.append(SettingsSectionViewModel(type: .keySync,
     8.5                                                   messageModelService: messageModelService,
     8.6                                                   keySyncDeviceGroupService: keySyncDeviceGroupService))
     8.7 +        sections.append(SettingsSectionViewModel(type: .companyFeatures))
     8.8      }
     8.9  
    8.10      func delete(section: Int, cell: Int) {