From f9f7bc88f0b928a95cb6503167b5f7ace19149f6 Mon Sep 17 00:00:00 2001 From: CodePoet80 Date: Sun, 17 Oct 2021 15:51:31 -0400 Subject: [PATCH] Add support for legacy webOS Mobile devices --- src/Os.php | 1 + src/OsDetector.php | 41 ++++++++++++++++++++++++++ tests/BrowserDetector/Tests/OsTest.php | 7 +++++ 3 files changed, 49 insertions(+) diff --git a/src/Os.php b/src/Os.php index ba50ae6..5859cb0 100644 --- a/src/Os.php +++ b/src/Os.php @@ -25,6 +25,7 @@ class Os const BEOS = 'BeOS'; const WINDOWS_PHONE = 'Windows Phone'; const CHROME_OS = 'Chrome OS'; + const WEBOS = "webOS"; const VERSION_UNKNOWN = 'unknown'; diff --git a/src/OsDetector.php b/src/OsDetector.php index 40b0611..efafd74 100644 --- a/src/OsDetector.php +++ b/src/OsDetector.php @@ -38,6 +38,8 @@ public static function detect(Os $os, UserAgent $userAgent) self::checkBeOS($os, $userAgent) || // Android before Linux self::checkAndroid($os, $userAgent) || + // webOS before Linux + self::checkWebOS($os, $userAgent) || self::checkLinux($os, $userAgent) || self::checkNokia($os, $userAgent) || self::checkBlackBerry($os, $userAgent) @@ -505,4 +507,43 @@ private static function checkBeOS(Os $os, UserAgent $userAgent) return false; } + + /** + * Determine if the user's operating system is webOS. + * + * @param Os $os + * @param UserAgent $userAgent + * + * @return bool + */ + private static function checkWebOS(Os $os, UserAgent $userAgent) + { + if (stripos($userAgent->getUserAgentString(), 'hpwOS') !== false) { + $aresult = explode('hpwOS/', $userAgent->getUserAgentString()); + if (isset($aresult[1])) { + $aversion = explode(';', $aresult[1]); + $os->setVersion($aversion[0]); + } else { + $os->setVersion($os::VERSION_UNKNOWN); + } + $os->setName($os::WEBOS); + $os->setIsMobile(true); + + return true; + } elseif (stripos($userAgent->getUserAgentString(), 'webOS') !== false) { + $aresult = explode('webOS/', $userAgent->getUserAgentString()); + if (isset($aresult[1])) { + $aversion = explode(';', $aresult[1]); + $os->setVersion($aversion[0]); + } else { + $os->setVersion($os::VERSION_UNKNOWN); + } + $os->setName($os::WEBOS); + $os->setIsMobile(true); + + return true; + } + + return false; + } } diff --git a/tests/BrowserDetector/Tests/OsTest.php b/tests/BrowserDetector/Tests/OsTest.php index a09e4ad..221ee45 100644 --- a/tests/BrowserDetector/Tests/OsTest.php +++ b/tests/BrowserDetector/Tests/OsTest.php @@ -38,6 +38,13 @@ public function testBlackberry() $this->assertSame('7.1.0.346', $os->getVersion()); } + public function testWebOS() + { + $os = new Os('Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.5; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.83 Safari/534.6 TouchPad/1.0'); + $this->assertSame(Os::WEBOS, $os->getName()); + $this->assertSame('3.0.5', $os->getVersion()); + } + public function testIsMobile() { $os = new Os('Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; Lumia 640 LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Mobile Safari/537.36 Edge/14.14393');