This repository has been archived by the owner. It is now read-only.
Permalink
Cannot retrieve contributors at this time
executable file
81 lines (69 sloc)
3.3 KB
| /* This Source Code Form is subject to the terms of the Mozilla Public | |
| * License, v. 2.0. If a copy of the MPL was not distributed with this | |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
| import UIKit | |
| open class DeviceInfo { | |
| // List of device names that don't support advanced visual settings | |
| static let lowGraphicsQualityModels = ["iPad", "iPad1,1", "iPhone1,1", "iPhone1,2", "iPhone2,1", "iPhone3,1", "iPhone3,2", "iPhone3,3", "iPod1,1", "iPod2,1", "iPod2,2", "iPod3,1", "iPod4,1", "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4", "iPad3,1", "iPad3,2", "iPad3,3"] | |
| open static var specificModelName: String { | |
| var systemInfo = utsname() | |
| uname(&systemInfo) | |
| let machine = systemInfo.machine | |
| let mirror = Mirror(reflecting: machine) | |
| var identifier = "" | |
| // Parses the string for the model name via NSUTF8StringEncoding, refer to | |
| // http://stackoverflow.com/questions/26028918/ios-how-to-determine-iphone-model-in-swift | |
| for child in mirror.children.enumerated() { | |
| if let value = child.1.value as? Int8, value != 0 { | |
| identifier.append(String(UnicodeScalar(UInt8(value)))) | |
| } | |
| } | |
| return identifier | |
| } | |
| /// Return the client name, which can be either "Fennec on Stefan's iPod" or simply "Stefan's iPod" if the application display name cannot be obtained. | |
| open class func defaultClientName() -> String { | |
| let format = NSLocalizedString("%@ on %@", tableName: "Shared", comment: "A brief descriptive name for this app on this device, used for Send Tab and Synced Tabs. The first argument is the app name. The second argument is the device name.") | |
| return String(format: format, AppInfo.displayName, UIDevice.current.name) | |
| } | |
| open class func clientIdentifier(_ prefs: Prefs) -> String { | |
| if let id = prefs.stringForKey("clientIdentifier") { | |
| return id | |
| } | |
| let id = UUID().uuidString | |
| prefs.setString(id, forKey: "clientIdentifier") | |
| return id | |
| } | |
| open class func deviceModel() -> String { | |
| return UIDevice.current.model | |
| } | |
| open class func isSimulator() -> Bool { | |
| return ProcessInfo.processInfo.environment["SIMULATOR_ROOT"] != nil | |
| } | |
| open class func isBlurSupported() -> Bool { | |
| // We've tried multiple ways to make this change visible on simulators, but we | |
| // haven't found a solution that worked: | |
| // 1. http://stackoverflow.com/questions/21603475/how-can-i-detect-if-the-iphone-my-app-is-on-is-going-to-use-a-simple-transparen | |
| // 2. https://gist.github.com/conradev/8655650 | |
| // Thus, testing has to take place on actual devices. | |
| return !lowGraphicsQualityModels.contains(specificModelName) | |
| } | |
| open class func hasConnectivity() -> Bool { | |
| let status = Reach().connectionStatus() | |
| switch status { | |
| case .online(.wwan), .online(.wiFi): | |
| return true | |
| default: | |
| return false | |
| } | |
| } | |
| // Cliqz: added hasWwanConnectivity() method to check if the device is connected via wwan | |
| open class func hasWwanConnectivity() -> Bool { | |
| let status = Reach().connectionStatus() | |
| switch status { | |
| case .online(.wwan): | |
| return true | |
| default: | |
| return false | |
| } | |
| } | |
| } |