blob: c0f04cd94c06a2fe5db50fd2de09b949a3866772 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// @dart = 2.9
part of base;
// TODO(jacobr): cache these results.
// TODO(jacobr): figure out how to test this.
/**
* Utils for device detection.
*/
class Device {
/**
* The regular expression for detecting an iPhone or iPod.
*/
static final _IPHONE_REGEX = new RegExp('iPhone|iPod');
/**
* The regular expression for detecting an iPhone or iPod or iPad.
*/
static final _MOBILE_SAFARI_REGEX = new RegExp('iPhone|iPod|iPad');
/**
* The regular expression for detecting an iPhone or iPod or iPad simulator.
*/
static final _APPLE_SIM_REGEX = new RegExp('iP.*Simulator');
/**
* Gets the browser's user agent. Using this function allows tests to inject
* the user agent.
* Returns the user agent.
*/
static String get userAgent => window.navigator.userAgent;
/**
* Determines if the current device is an iPhone or iPod.
* Returns true if the current device is an iPhone or iPod.
*/
static bool get isIPhone => _IPHONE_REGEX.hasMatch(userAgent);
/**
* Determines if the current device is an iPad.
* Returns true if the current device is an iPad.
*/
static bool get isIPad => userAgent.contains("iPad", 0);
/**
* Determines if the current device is running Firefox.
*/
static bool get isFirefox => userAgent.contains("Firefox", 0);
/**
* Determines if the current device is an iPhone or iPod or iPad.
* Returns true if the current device is an iPhone or iPod or iPad.
*/
static bool get isMobileSafari => _MOBILE_SAFARI_REGEX.hasMatch(userAgent);
/**
* Determines if the current device is the iP* Simulator.
* Returns true if the current device is an iP* Simulator.
*/
static bool get isAppleSimulator => _APPLE_SIM_REGEX.hasMatch(userAgent);
/**
* Determines if the current device is an Android.
* Returns true if the current device is an Android.
*/
static bool get isAndroid => userAgent.contains("Android", 0);
/**
* Determines if the current device is WebOS WebKit.
* Returns true if the current device is WebOS WebKit.
*/
static bool get isWebOs => userAgent.contains("webOS", 0);
static bool _supportsTouch;
static bool get supportsTouch {
if (_supportsTouch == null) {
_supportsTouch = isMobileSafari || isAndroid;
}
return _supportsTouch;
}
}