Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

ControlCenter prototype

  • Loading branch information
naira-cliqz committed Apr 19, 2018
1 parent 4774ea7 commit 09b9ab6d377db1f48ef4732f749c65f98bd8205d
@@ -359,6 +359,9 @@
4F30F5512051E3F90049E4F6 /* etld.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4F30F5422051E3F90049E4F6 /* etld.plist */; };
4F3FA4E32044194400A9E7F6 /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F3FA4E22044194400A9E7F6 /* ColorExtension.swift */; };
4F3FA4E520444FE900A9E7F6 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F3FA4E420444FE900A9E7F6 /* StringExtension.swift */; };
4F4033C42086358D00AD2A8D /* ControlCenterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4033C32086358D00AD2A8D /* ControlCenterViewController.swift */; };
4F4033D82086575500AD2A8D /* OverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4033D72086575500AD2A8D /* OverviewViewController.swift */; };
4F4033DA2086577D00AD2A8D /* GlobalTrackersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4033D92086577D00AD2A8D /* GlobalTrackersViewController.swift */; };
4F514FD41ACD8F2C0022D7EA /* HistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F514FD31ACD8F2C0022D7EA /* HistoryTests.swift */; };
4F69309A2048185600FB0B2E /* TopSitesDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6930992048185600FB0B2E /* TopSitesDataSource.swift */; };
4F97573B1AFA6F37006ECC24 /* readerContent.html in Resources */ = {isa = PBXBuildFile; fileRef = 4F9757391AFA6F37006ECC24 /* readerContent.html */; };
@@ -1796,6 +1799,9 @@
4F30F5422051E3F90049E4F6 /* etld.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = etld.plist; sourceTree = "<group>"; };
4F3FA4E22044194400A9E7F6 /* ColorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorExtension.swift; sourceTree = "<group>"; };
4F3FA4E420444FE900A9E7F6 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = "<group>"; };
4F4033C32086358D00AD2A8D /* ControlCenterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlCenterViewController.swift; sourceTree = "<group>"; };
4F4033D72086575500AD2A8D /* OverviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverviewViewController.swift; sourceTree = "<group>"; };
4F4033D92086577D00AD2A8D /* GlobalTrackersViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalTrackersViewController.swift; sourceTree = "<group>"; };
4F514FD31ACD8F2C0022D7EA /* HistoryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryTests.swift; sourceTree = "<group>"; };
4F5FE45DC6FEBE807CF32CC0 /* Pods-Client.fennec_enterprise.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Client.fennec_enterprise.xcconfig"; path = "Pods/Target Support Files/Pods-Client/Pods-Client.fennec_enterprise.xcconfig"; sourceTree = "<group>"; };
4F6930992048185600FB0B2E /* TopSitesDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopSitesDataSource.swift; sourceTree = "<group>"; };
@@ -3471,6 +3477,9 @@
children = (
AF24CB9F2068E3B000DBE428 /* TrackersController.swift */,
AF99C8A1206935F0009404FF /* GhosteryButton.swift */,
4F4033C32086358D00AD2A8D /* ControlCenterViewController.swift */,
4F4033D72086575500AD2A8D /* OverviewViewController.swift */,
4F4033D92086577D00AD2A8D /* GlobalTrackersViewController.swift */,
);
path = UI;
sourceTree = "<group>";
@@ -5649,13 +5658,16 @@
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Client-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
D6D515078BA2F8059B3DB387 /* [CP] Embed Pods Frameworks */ = {
@@ -5664,9 +5676,44 @@
files = (
);
inputPaths = (
"${SRCROOT}/Pods/Target Support Files/Pods-Client/Pods-Client-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/AWSCore/AWSCore.framework",
"${BUILT_PRODUCTS_DIR}/AWSSNS/AWSSNS.framework",
"${BUILT_PRODUCTS_DIR}/CRToast/CRToast.framework",
"${BUILT_PRODUCTS_DIR}/Charts/Charts.framework",
"${BUILT_PRODUCTS_DIR}/KKDomain/KKDomain.framework",
"${BUILT_PRODUCTS_DIR}/RNDeviceInfo/RNDeviceInfo.framework",
"${BUILT_PRODUCTS_DIR}/RNFS/RNFS.framework",
"${BUILT_PRODUCTS_DIR}/RNSqlite2/RNSqlite2.framework",
"${BUILT_PRODUCTS_DIR}/RNViewShot/RNViewShot.framework",
"${BUILT_PRODUCTS_DIR}/React/React.framework",
"${BUILT_PRODUCTS_DIR}/Realm/Realm.framework",
"${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework",
"${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework",
"${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework",
"${PODS_ROOT}/../node_modules/react-native-webrtc/ios/WebRTC.framework",
"${BUILT_PRODUCTS_DIR}/react-native-webrtc/react_native_webrtc.framework",
"${BUILT_PRODUCTS_DIR}/yoga/yoga.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSSNS.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CRToast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Charts.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KKDomain.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNDeviceInfo.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNFS.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNSqlite2.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNViewShot.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/React.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/react_native_webrtc.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/yoga.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -6279,6 +6326,7 @@
E69E06C91C76198000D0F926 /* AuthenticationManagerConstants.swift in Sources */,
392ED7E61D0AEFEF009D9B62 /* HomePageAccessors.swift in Sources */,
AF6FA99220652D4600D7F9F0 /* TrieNode.swift in Sources */,
4F4033D82086575500AD2A8D /* OverviewViewController.swift in Sources */,
4F30F5152051670C0049E4F6 /* SubscriptionModule.swift in Sources */,
4FD19FC5205A9F7700547DD5 /* NativeContextMenu.swift in Sources */,
1E4CFBFB2073A5CC00B26E85 /* EditConnectionViewController.swift in Sources */,
@@ -6332,6 +6380,7 @@
E650754E1E37F6AE006961AC /* GeometryExtensions.swift in Sources */,
AF6FA99120652D4600D7F9F0 /* TrackerStore.swift in Sources */,
D3972BF41C22412B00035B87 /* TitleActivityItemProvider.swift in Sources */,
4F4033C42086358D00AD2A8D /* ControlCenterViewController.swift in Sources */,
D38A1BEE1A9FA2CA00F6A386 /* SiteTableViewController.swift in Sources */,
7BA0601B1C0F4DE200DFADB6 /* TabPeekViewController.swift in Sources */,
AF6FA97920652C8F00D7F9F0 /* BlockListManager.swift in Sources */,
@@ -6356,6 +6405,7 @@
2F44FCC51A9E85E900FD20CC /* SettingsTableViewController.swift in Sources */,
A9072B801D07B34100459960 /* NoImageModeHelper.swift in Sources */,
E660BDD91BB06521009AC090 /* TabsButton.swift in Sources */,
4F4033DA2086577D00AD2A8D /* GlobalTrackersViewController.swift in Sources */,
2F44FCCB1A9E972E00FD20CC /* SearchEnginePicker.swift in Sources */,
D02816C21ECA5E2A00240CAA /* HistoryStateHelper.swift in Sources */,
E68E7ACB1CAC1D4500FDCA76 /* PagingPasscodeViewController.swift in Sources */,
@@ -0,0 +1,179 @@
//
// ControlCenterViewController.swift
// Client
//
// Created by Sahakyan on 4/17/18.
// Copyright © 2018 Cliqz. All rights reserved.
//
import Foundation

class ControlCenterViewController: UIViewController {

fileprivate var panelSwitchControl = UISegmentedControl(items: [])
fileprivate var panelContainerView: UIView!
private let toolBar = UIToolbar()

fileprivate lazy var overviewViewController: OverviewViewController = {
let overview = OverviewViewController()
return overview
}()

fileprivate lazy var trackersViewController: TrackersController = {
let trackers = TrackersController()
return trackers
}()

fileprivate lazy var globalTrackersViewController: GlobalTrackersViewController = {
let global = GlobalTrackersViewController()
return global
}()

private var _trackers: [TrackerListApp] = []
private var trackersCategories = [String: [TrackerListApp]]()

var trackers: [TrackerListApp] {
set {
_trackers = newValue
self.generateCategories()
self.updateBlockedTrackersCount()
}
get {
return _trackers
}
}

var pageURL: String = "" {
didSet {
self.overviewViewController.pageURL = pageURL
}
}

override func viewDidLoad() {
super.viewDidLoad()
setupComponents()
self.panelSwitchControl.selectedSegmentIndex = 0
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.switchPanel(self.panelSwitchControl)
}

private func setupComponents() {
createPanelSwitchControl()

let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed))
toolBar.setItems([done], animated: false)
view.addSubview(toolBar)

toolBar.snp.makeConstraints { (make) in
make.bottom.left.right.equalToSuperview()
}

panelContainerView = UIView()
view.addSubview(panelContainerView)

panelContainerView.snp.makeConstraints { make in
make.top.equalTo(self.panelSwitchControl.snp.bottom).offset(10)
make.left.right.equalTo(self.view)
make.bottom.equalTo(self.toolBar.snp.top)
}

}

@objc func donePressed(_ button: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
}

private func createPanelSwitchControl() {
let overview = "Overview"
let trackers = "Trackers"
let globalTrackers = "Global Trackers"

let items = [overview, trackers, globalTrackers]
let bgView = UIView()
bgView.backgroundColor = UIColor.cliqzBluePrimary

panelSwitchControl = UISegmentedControl(items: items)
panelSwitchControl.tintColor = UIColor.white
panelSwitchControl.backgroundColor = UIColor.cliqzBluePrimary
panelSwitchControl.addTarget(self, action: #selector(switchPanel), for: .valueChanged)
bgView.addSubview(panelSwitchControl)
self.view.addSubview(bgView)

bgView.snp.makeConstraints { (make) in
make.top.equalToSuperview().offset(30)
make.left.right.equalToSuperview()
make.height.equalTo(40)
}
panelSwitchControl.snp.makeConstraints { make in
make.top.equalTo(bgView).offset(5)
make.left.equalTo(bgView).offset(10)
make.right.equalTo(bgView).offset(-10)
make.height.equalTo(30)
}
self.view.backgroundColor = UIColor.white
}

@objc private func switchPanel(_ sender: UISegmentedControl) {
if let panel = childViewControllers.first {
panel.willMove(toParentViewController: nil)
panel.view.removeFromSuperview()
panel.removeFromParentViewController()
}

let viewController = self.getCurrentPanel()
addChildViewController(viewController)
self.panelContainerView.addSubview(viewController.view)
viewController.view.snp.makeConstraints { make in
make.top.left.right.bottom.equalToSuperview()
}
viewController.didMove(toParentViewController: self)

// if let panelType = DashBoardPanelType(rawValue: sender.selectedSegmentIndex) {
// currentPanel = panelType
// self.switchToCurrentPanel()
// }
}

private func getCurrentPanel() -> UIViewController {
switch panelSwitchControl.selectedSegmentIndex {
case 0:
self.overviewViewController.categories = self.trackersCategories
return self.overviewViewController
case 1:
self.trackersViewController.trackers = trackersCategories
return self.trackersViewController
case 2:
self.globalTrackersViewController.trackers = TrackerList.instance.apps.map { $0.1 }
return self.globalTrackersViewController
default:
return UIViewController()
}
return UIViewController()
}

private func generateCategories() {
for i in self.trackers {
// var count = 1
if let _ = self.trackersCategories[i.category] {
self.trackersCategories[i.category]?.append(i)
// count = x + 1
} else {
self.trackersCategories[i.category] = [i]
}
}
self.overviewViewController.categories = self.trackersCategories
}

private func updateBlockedTrackersCount() {
let count = self.trackers.reduce(0) { (accumulator, value) -> Int in
if value.isBlocked {
return accumulator + 1
}
return accumulator
}
self.overviewViewController.blockedTrackersCount = count
}
}
@@ -0,0 +1,78 @@
//
// GlobalTrackersViewController.swift
// Client
//
// Created by Sahakyan on 4/17/18.
// Copyright © 2018 Cliqz. All rights reserved.
//
import Foundation

class GlobalTrackersViewController: UIViewController {
let tableView = UITableView()

private var _trackers: [TrackerListApp] = []
var trackers: [TrackerListApp] {
set {
_trackers = newValue
self.tableView.reloadData()
}
get {
return _trackers
}
}

override func viewDidLoad() {
super.viewDidLoad()

// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.register(CustomCell.self, forCellReuseIdentifier: "reuseIdentifier")

view.addSubview(tableView)
// view.addSubview(toolBar)
// toolBar.snp.makeConstraints { (make) in
// make.bottom.left.right.equalToSuperview()
// }
//
tableView.snp.makeConstraints { (make) in
make.top.left.right.bottom.equalToSuperview()
}
}

}

extension GlobalTrackersViewController: UITableViewDataSource, UITableViewDelegate {
// MARK: - Table view data source
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return trackers.count
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! CustomCell

// Configure the cell...
cell.textLabel?.text = trackers[indexPath.row].name
cell.toggle.isOn = trackers[indexPath.row].isBlocked
cell.appId = trackers[indexPath.row].appId
// cell.delegate = self
print("AAAAAA - \(trackers[indexPath.row].category)")

return cell
}

}

0 comments on commit 09b9ab6

Please sign in to comment.