From 3a187f43dfb528bf0f18b67b6d8d736d4a7d67a3 Mon Sep 17 00:00:00 2001 From: Niels Leenheer Date: Mon, 1 Jun 2015 19:49:10 +0200 Subject: [PATCH] Built WhichBrowser from commit 1c709de on branch dev --- data/build-android.php | 25 +++++++++ data/models-android.php | 110 ++++++++++++++++++++++++++++++++++--- data/models-palmos.php | 7 ++- detect.php | 6 +- libraries/whichbrowser.php | 18 +++++- 5 files changed, 152 insertions(+), 14 deletions(-) diff --git a/data/build-android.php b/data/build-android.php index 38a5713..1fd1919 100644 --- a/data/build-android.php +++ b/data/build-android.php @@ -103,6 +103,31 @@ 'KTU84P' => '4.4.4', 'LPV79' => array('value' => '5.0', 'alias' => 'L'), + 'LPV81C' => array('value' => '5.0', 'alias' => 'L'), + 'LPX13D' => array('value' => '5.0', 'alias' => 'L'), + + 'LRX21L' => '5.0', + 'LRX21M' => '5.0', + 'LRX21O' => '5.0', + 'LRX21P' => '5.0', + 'LRX21Q' => '5.0', + 'LRX21R' => '5.0', + 'LRX21T' => '5.0', + 'LRX21V' => '5.0', + 'LRX22C' => '5.0.1', + 'LRX22G' => '5.0.2', + 'LRX22L' => '5.0.2', + 'LMY47D' => '5.1', + 'LMY47E' => '5.1', + 'LMY47I' => '5.1', + 'LMY47M' => '5.1', + 'LMY47O' => '5.1', + 'LMY47V' => '5.1.1', + 'LMY47X' => '5.1.1', + 'LMY47Z' => '5.1.1', + 'LMY48B' => '5.1.1', + + 'MPZ44Q' => array('value' => '5.2', 'alias' => 'M'), ); // Source: http://source.android.com/source/build-numbers.html diff --git a/data/models-android.php b/data/models-android.php index 43869c6..927233a 100644 --- a/data/models-android.php +++ b/data/models-android.php @@ -19,6 +19,7 @@ 'vexpress a9' => array( 'ARM', 'Versatile Express development platform' ), 'sama5d3' => array( 'Atmel', 'SAMA5D3 based device' ), 'BEAGLEBONE' => array( 'BeagleBoard', 'BeagleBone' ), + 'BeagleBone Black' => array( 'BeagleBoard', 'BeagleBone Black' ), 'BEAGLEBONEBLACK' => array( 'BeagleBoard', 'BeagleBone Black' ), 'BEAGLEBONEBLACK.A5C' => array( 'BeagleBoard', 'BeagleBone Black' ), 'NITROGEN6X' => array( 'Boundary Devices', 'Nitrogen6X' ), @@ -229,8 +230,8 @@ 'manta' => array( 'Samsung', 'Nexus 10', TYPE_TABLET ), '(Google )?Nexus ?10!' => array( 'Samsung', 'Nexus 10', TYPE_TABLET ), - 'Nexus Player' => array( 'Asus', 'Nexus Player', TYPE_TELEVISION, FLAG_ANDROIDTV), + /* Google Edition */ 'HTC One' => array( 'HTC', 'One (Google Edition)' ), 'Moto E' => array( 'Motorola', 'Moto E (Google Edition)' ), 'Moto G' => array( 'Motorola', 'Moto G (Google Edition)' ), @@ -249,13 +250,18 @@ /* Android Wear */ - 'ASUS ZenWatch' => array( 'Asus', 'ZenWatch', TYPE_WATCH, FLAG_ANDROIDWEAR ), + 'ZenWatch' => array( 'Asus', 'ZenWatch', TYPE_WATCH, FLAG_ANDROIDWEAR ), 'G Watch' => array( 'LG', 'G Watch', TYPE_WATCH, FLAG_ANDROIDWEAR ), 'G Watch R' => array( 'LG', 'G Watch R', TYPE_WATCH, FLAG_ANDROIDWEAR ), 'Moto 360' => array( 'Motorola', 'Moto 360', TYPE_WATCH, FLAG_ANDROIDWEAR ), 'Gear Live' => array( 'Samsung', 'Gear Live', TYPE_WATCH, FLAG_ANDROIDWEAR ), + /* Android TV */ + 'Nexus Player' => array( 'Asus', 'Nexus Player', TYPE_TELEVISION, FLAG_ANDROIDTV), + 'BRAVIA 2015' => array( 'Sony', 'Bravia', TYPE_TELEVISION, FLAG_ANDROIDTV), + + /* Middleware and emulators */ 'BlueStacks!' => array( 'BlueStacks', 'App Player', 'desktop' ), @@ -401,12 +407,17 @@ 'B1-A71' => array( 'Acer', 'Iconia B1-A71', TYPE_TABLET ), 'B1-710' => array( 'Acer', 'Iconia B1-710', TYPE_TABLET ), 'B1-711' => array( 'Acer', 'Iconia B1-711', TYPE_TABLET ), + 'B1-713' => array( 'Acer', 'Iconia B1-713', TYPE_TABLET ), 'B1-720' => array( 'Acer', 'Iconia B1-720', TYPE_TABLET ), 'B1-721' => array( 'Acer', 'Iconia B1-721', TYPE_TABLET ), 'B1-730' => array( 'Acer', 'Iconia One 7 B1-730', TYPE_TABLET ), 'B1-730HD' => array( 'Acer', 'Iconia One 7 B1-730 HD', TYPE_TABLET ), - 'B1-750' => array( 'Acer', 'Iconia B1-750', TYPE_TABLET ), + 'B1-750' => array( 'Acer', 'Iconia One 7 B1-750', TYPE_TABLET ), + 'B1-760' => array( 'Acer', 'Iconia One 7 B1-760', TYPE_TABLET ), + 'B1-770' => array( 'Acer', 'Iconia B1-770', TYPE_TABLET ), 'B1-810' => array( 'Acer', 'Iconia One 8 B1-810', TYPE_TABLET ), + 'B1-820' => array( 'Acer', 'Iconia One 8 B1-820', TYPE_TABLET ), + 'B1-830' => array( 'Acer', 'Iconia One 8 B1-830', TYPE_TABLET ), 'ICONIA Tab W500' => array( 'Acer', 'Iconia W500', TYPE_TABLET ), 'ICONIA Tab W500P' => array( 'Acer', 'Iconia W500P', TYPE_TABLET ), 'ICONIA Tab W501' => array( 'Acer', 'Iconia W501', TYPE_TABLET ), @@ -619,6 +630,7 @@ 'one touch D920' => array( 'Alcatel', 'One Touch D920' ), 'one touch J320' => array( 'Alcatel', 'One Touch J320' ), '1216[X]!' => array( 'Alcatel', 'One Touch Pixi 3 (7)' ), + '4003[A]!' => array( 'Alcatel', 'One Touch Pixi 3 (4)' ), 'one ?touch 40(05|10|11)!' => array( 'Alcatel', 'One Touch T\'Pop' ), 'one ?touch 4007!' => array( 'Alcatel', 'One Touch Pixi' ), 'one ?touch 4008!' => array( 'Alcatel', 'One Touch Pixi 3 (3.5)' ), @@ -634,21 +646,27 @@ '4015[D]!' => array( 'Alcatel', 'One Touch Pixi 2' ), '4016[ADX]!' => array( 'Alcatel', 'One Touch Pop C1' ), '4018[ADEMX]!' => array( 'Alcatel', 'One Touch Pop D1' ), + '4027[ADX]!' => array( 'Alcatel', 'One Touch Pixi 3 (4.5)' ), + '4028[AEJ]!' => array( 'Alcatel', 'One Touch Pixi 3 (4.5)' ), 'one ?touch 4030!' => array( 'Alcatel', 'One Touch S\'Pop' ), '4032[ADEX]!' => array( 'Alcatel', 'One Touch Pop C2' ), 'one ?touch 4033!' => array( 'Alcatel', 'One Touch Pop C3' ), 'ONETOUCH POPC3' => array( 'Alcatel', 'One Touch Pop C3' ), 'one ?touch 40(35|36|37)!' => array( 'Alcatel', 'One Touch Pop D3' ), - '4035[DYX]!' => array( 'Alcatel', 'One Touch Pop D3' ), + '4035[ADYX]!' => array( 'Alcatel', 'One Touch Pop D3' ), '4036[E]!' => array( 'Alcatel', 'One Touch Pop D3' ), '4037[AX]!' => array( 'Alcatel', 'One Touch Pop D3' ), '4037[T]!' => array( 'Alcatel', 'One Touch Evolve 2' ), 'one ?touch 5045!' => array( 'Alcatel', 'One Touch Pop 2 (4)' ), '4045[ADEX]!' => array( 'Alcatel', 'One Touch Pop 2 (4)' ), + '5015[ADEX]!' => array( 'Alcatel', 'One Touch Pixi 3 (5)' ), + '5016[A]!' => array( 'Alcatel', 'One Touch Pixi 3 (5)' ), + '5017[ADEX]!' => array( 'Alcatel', 'One Touch Pixi 3 (4.5)' ), 'one ?touch 5020!' => array( 'Alcatel', 'One Touch M\'Pop' ), 'Alcatel OT M\'pop 5020D' => array( 'Alcatel', 'One Touch M\'Pop' ), 'M POP 5020A' => array( 'Alcatel', 'One Touch M\'Pop' ), 'M POP' => array( 'Alcatel', 'One Touch M\'Pop' ), + '5020[A]!' => array( 'Alcatel', 'One Touch M\'Pop' ), 'one ?touch 5021!' => array( 'Alcatel', 'One Touch Soleil' ), 'one ?touch 5035!' => array( 'Alcatel', 'One Touch X\'Pop' ), 'one ?touch 50(36|37)!' => array( 'Alcatel', 'One Touch Pop C5' ), @@ -658,6 +676,7 @@ '5042[ADEFGTWXY]!' => array( 'Alcatel', 'One Touch Pop 2 (4.5)' ), 'one ?touch 5050!' => array( 'Alcatel', 'One Touch Pop S3' ), '5050[ASYX]!' => array( 'Alcatel', 'One Touch Pop S3' ), + '5065[ADJWX]!' => array( 'Alcatel', 'One Touch Pixi 3 (5)' ), 'one ?touch 6010!' => array( 'Alcatel', 'One Touch Star' ), 'one ?touch 6012!' => array( 'Alcatel', 'One Touch Idol Mini' ), 'ONE TOUCH IDOL MINI' => array( 'Alcatel', 'One Touch Idol Mini' ), @@ -676,6 +695,7 @@ 'one ?touch 6039!' => array( 'Alcatel', 'One Touch Idol 3 (4.7)' ), '6039[AHKY]!' => array( 'Alcatel', 'One Touch Idol 3 (4.7)' ), 'one ?touch 6040!' => array( 'Alcatel', 'One Touch Idol X' ), + '6042[D]!' => array( 'Alcatel', 'One Touch Flash' ), 'one ?touch 6043!' => array( 'Alcatel', 'One Touch Idol X+' ), '6043[AD]!' => array( 'Alcatel', 'One Touch Idol X+' ), 'one ?touch 6045!' => array( 'Alcatel', 'One Touch Idol 3 (5.5)' ), @@ -940,6 +960,7 @@ 'Archos 97 Cobalt' => array( 'Archos', '97 Cobalt', TYPE_TABLET ), // Elements 'Archos 101 Cobalt' => array( 'Archos', '101 Cobalt', TYPE_TABLET ), // Elements 'Archos 70 Copper' => array( 'Archos', '70 Copper', TYPE_TABLET ), // Elements + 'Archos 90 Copper' => array( 'Archos', '90 Copper', TYPE_TABLET ), // Elements 'Archos 101 Copper' => array( 'Archos', '101 Copper', TYPE_TABLET ), // Elements 'Archos 45 Helium 4G' => array( 'Archos', '45 Helium' ), // Elements 'Archos 50 Helium 4G' => array( 'Archos', '50 Helium' ), // Elements @@ -948,15 +969,19 @@ 'Archos 50 Neon' => array( 'Archos', '50 Neon' ), // Elements 'Archos 50b Neon' => array( 'Archos', '50b Neon' ), // Elements 'Archos 70 Neon' => array( 'Archos', '70 Neon', TYPE_TABLET ), // Elements + 'Archos 90b Neon' => array( 'Archos', '90b Neon', TYPE_TABLET ), // Elements 'Archos 97 Neon' => array( 'Archos', '97 Neon', TYPE_TABLET ), // Elements 'Archos 101 Neon' => array( 'Archos', '101 Neon', TYPE_TABLET ), // Elements 'Archos 101b Neon' => array( 'Archos', '101b Neon', TYPE_TABLET ), // Elements + 'Archos 101c Neon' => array( 'Archos', '101c Neon', TYPE_TABLET ), // Elements 'Archos 50 Oxygen' => array( 'Archos', '50 Oxygen' ), // Elements 'Archos 50b Oxygen' => array( 'Archos', '50b Oxygen' ), // Elements 'Archos 50c Oxygen' => array( 'Archos', '50c Oxygen' ), // Elements + 'Archos 101 Oxygen' => array( 'Archos', '101 Oxygen' ), // Elements 'Archos 45 Platinum' => array( 'Archos', '45 Platinum' ), // Elements 'Archos 45c Platinum' => array( 'Archos', '45c Platinum' ), // Elements 'Archos 50 Platinum' => array( 'Archos', '50 Platinum' ), // Elements + 'Archos 50b Platinum' => array( 'Archos', '50b Platinum' ), // Elements 'Archos 53 Platinum' => array( 'Archos', '53 Platinum' ), // Elements 'Archos 5.3s Platinum' => array( 'Archos', '53s Platinum' ), // Elements 'ARCHOS 79 Platinum' => array( 'Archos', '79 Platinum', TYPE_TABLET ), // Elements @@ -965,12 +990,14 @@ 'ARCHOS 97b PLATINUM' => array( 'Archos', '97b Platinum', TYPE_TABLET ), // Elements 'Archos 101b Platinium' => array( 'Archos', '101b Platinum', TYPE_TABLET ), // Elements 'Archos 35 Titanium' => array( 'Archos', '35 Titanium' ), // Elements + 'Archos 35b Titanium' => array( 'Archos', '35b Titanium' ), // Elements 'Archos 40 Titanium' => array( 'Archos', '40 Titanium' ), // Elements 'Archos 40b Titanium Surround' => array( 'Archos', '40b Titanium' ), // Elements 'Archos 40c Titanium' => array( 'Archos', '40c Titanium' ), // Elements 'Archos 45 Titanium' => array( 'Archos', '45 Titanium' ), // Elements 'Archos 50 Titanium' => array( 'Archos', '50 Titanium' ), // Elements 'Archos 53 Titanium' => array( 'Archos', '53 Titanium' ), // Elements + 'Archos 59 Titanium' => array( 'Archos', '59 Titanium' ), // Elements 'ARCHOS 70 Titanium' => array( 'Archos', '70 Titanium', TYPE_TABLET ), // Elements 'ARCHOS 70b TITANIUM' => array( 'Archos', '70b Titanium', TYPE_TABLET ), // Elements 'ARCHOS 80 TITANIUM' => array( 'Archos', '80 Titanium', TYPE_TABLET ), // Elements @@ -993,15 +1020,20 @@ 'Artes D821' => array( 'Artes', 'D821', TYPE_TABLET ), 'D9702' => array( 'Artes', 'D9702', TYPE_TABLET ), 'Artes i701' => array( 'Artes', 'i701', TYPE_TABLET ), + 'ARTES I709' => array( 'Artes', 'i709', TYPE_TABLET ), 'Artes Q812' => array( 'Artes', 'Q812', TYPE_TABLET ), 'AT10H-A10WP' => array( 'Artview', 'AT10H-A10WP', TYPE_TABLET ), 'Arya A1+' => array( 'Arya', 'A1 Plus' ), 'Arya Z2' => array( 'Arya', 'Z2' ), + 'ASK SP440 3G' => array( 'ASK', 'SP440' ), + 'ASK SP460 HD' => array( 'ASK', 'SP460 HD' ), 'ASK SP461 3G' => array( 'ASK', 'SP461' ), 'ASK SP510 HD' => array( 'ASK', 'SP510 HD' ), + 'ASK SP516 IPS' => array( 'ASK', 'SP516' ), 'ASK SP516+ IPS' => array( 'ASK', 'SP516+' ), 'ASK SP551 HD' => array( 'ASK', 'SP551 HD' ), 'ASK SP551+HD' => array( 'ASK', 'SP551+ HD' ), + 'ASK SP554 HD' => array( 'ASK', 'SP554 HD' ), 'ASK SP581 HD' => array( 'ASK', 'SP581 HD' ), 'ASK SP584 FHD' => array( 'ASK', 'SP584 FHD' ), 'ASTRI' => array( 'ASTRI', 'e-reader', TYPE_EREADER ), @@ -1083,6 +1115,7 @@ 'T00I' => array( 'Asus', 'ZenFone 4' ), 'T00F' => array( 'Asus', 'ZenFone 5' ), 'T00J' => array( 'Asus', 'ZenFone 5' ), + 'T00J-D' => array( 'Asus', 'ZenFone 5' ), 'T00K' => array( 'Asus', 'ZenFone 5' ), // LTE variant 'T00P' => array( 'Asus', 'ZenFone 5' ), // LTE variant 'T00G' => array( 'Asus', 'ZenFone 6' ), @@ -1090,6 +1123,12 @@ 'T00S' => array( 'Asus', 'Padfone X Mini', TYPE_TABLET ), 'T00T' => array( 'Asus', 'Padfone Mini', TYPE_TABLET ), 'Z002' => array( 'Asus', 'ZenFone 6' ), + 'Z007' => array( 'Asus', 'ZenFone C' ), + 'Z008D' => array( 'Asus', 'ZenFone 2' ), + 'Z00AD' => array( 'Asus', 'ZenFone 2' ), + 'Z00ADA' => array( 'Asus', 'ZenFone 2' ), + 'Z00ADB' => array( 'Asus', 'ZenFone 2' ), + 'X002' => array( 'Asus', 'Pegasus' ), 'TX201LA' => array( 'Asus', 'Transformer Book Trio', TYPE_TABLET ), 'TX201LAF' => array( 'Asus', 'Transformer Book Trio', TYPE_TABLET ), 'asus google cube' => array( 'Asus', 'Cube with Google TV', TYPE_TELEVISION, FLAG_GOOGLETV ), @@ -1105,6 +1144,7 @@ 'AUX V920' => array( 'AUX', 'V920' ), 'AUX V920P' => array( 'AUX', 'V920P' ), 'AUX V950' => array( 'AUX', 'V950' ), + 'AUX V950P' => array( 'AUX', 'V950P' ), 'AUX V965T' => array( 'AUX', 'V965T' ), 'AUX W6' => array( 'AUX', 'W6' ), 'Avea inTouch 2' => array( 'Avea', 'inTouch 2', TYPE_TABLET ), @@ -1124,6 +1164,7 @@ 'Avvio 790' => array( 'Avvio', '790' ), 'Avvio 790s' => array( 'Avvio', '790s' ), 'Avvio 792' => array( 'Avvio', '792' ), + 'Avvio 792s' => array( 'Avvio', '792s' ), 'Avvio 793' => array( 'Avvio', '793' ), 'Avvio L500 Claro' => array( 'Avvio', 'L500' ), 'PICOphone 2' => array( 'Axioo', 'PICOphone 2' ), @@ -1160,6 +1201,7 @@ 'A10MID' => array( 'Azhuo', 'A10 MID', TYPE_TABLET ), 'Azumi A35S' => array( 'Azumi', 'A35s' ), 'Azumi A50c' => array( 'Azumi', 'A50c' ), + 'AZUMI A50c+' => array( 'Azumi', 'A50c+' ), 'Azumi KL32' => array( 'Azumi', 'KL32' ), 'Azumi AT7' => array( 'Azumi', 'AT7', TYPE_TABLET ), 'BDS-S100' => array( 'B box', 'B tv BDS-S100', TYPE_TELEVISION ), @@ -1204,12 +1246,14 @@ 'BF G11' => array( 'Bellefonte', 'G11' ), 'BF V5T!' => array( 'Bellefonte', 'V5T' ), 'BenQ F5' => array( 'BenQ', 'F5' ), + 'BenQ T3' => array( 'BenQ', 'T3' ), 'BenQ R71' => array( 'BenQ', 'R71', TYPE_TABLET ), 'BenWee 550S' => array( 'BenWee', '550S' ), 'BenWee 5100S' => array( 'BenWee', '5100S' ), 'BenWee N7' => array( 'BenWee', 'N7' ), 'BenWee N9' => array( 'BenWee', 'N9' ), 'BePhone UN030' => array( 'BePhone', 'UN030' ), + 'Best sonny L82' => array( 'Best Sonny', 'L82' ), 'Best sonny LT986' => array( 'Best Sonny', 'LT986' ), 'Best sonny T898' => array( 'Best Sonny', 'T898' ), 'BestsonnyT961' => array( 'Best Sonny', 'T961' ), @@ -1221,15 +1265,19 @@ 'BF5200' => array( 'Bifer', 'BF5200' ), 'BF9100' => array( 'Bifer', 'BF9100' ), 'BF9200' => array( 'Bifer', 'BF9200' ), + 'BIRD E700' => array( 'Bird', 'E700' ), 'Bird i8' => array( 'Bird', 'I8' ), 'Bird i500' => array( 'Bird', 'I500' ), 'Bird i600' => array( 'Bird', 'I600' ), + 'BIRD I720 WIFI 3000' => array( 'Bird', 'I720' ), 'Bird i900' => array( 'Bird', 'I900' ), + 'BIRD L108' => array( 'Bird', 'L108' ), 'Bird LT01' => array( 'Bird', 'LT01' ), 'BIRD S6' => array( 'Bird', 'S6' ), 'BIRD T40' => array( 'Bird', 'T40' ), 'BIRD T900' => array( 'Bird', 'T900' ), 'T9108' => array( 'Bird', 'T9108' ), + 'Bird T9608' => array( 'Bird', 'T9608' ), 'Bird W188' => array( 'Bird', 'W188' ), 'Bird XL100' => array( 'Bird', 'XL100' ), '(BB )?Q5$!' => array( 'BlackBerry', 'Q5' ), @@ -1287,11 +1335,13 @@ 'BLU Quattro 4.5 HD' => array( 'BLU', 'Quattro 4.5 HD' ), 'BLU Quattro 5.7HD' => array( 'BLU', 'Quattro 5.7 HD' ), 'BLU STUDIO 5.0' => array( 'BLU', 'Studio 5.0' ), + 'BLU STUDIO 5.0 C' => array( 'BLU', 'Studio 5.0c' ), 'BLU STUDIO 5.0 Ce' => array( 'BLU', 'Studio 5.0ce' ), 'BLU STUDIO 5.0 C HD' => array( 'BLU', 'Studio 5.0c HD' ), 'STUDIO 5.0e' => array( 'BLU', 'Studio 5.0e' ), 'STUDIO 5.0K' => array( 'BLU', 'Studio 5.0k' ), 'Studio 5.0s' => array( 'BLU', 'Studio 5.0s' ), + 'BLU Studio 5.0 S II' => array( 'BLU', 'Studio 5.0s II' ), 'BLU STUDIO 5.0 II' => array( 'BLU', 'Studio 5.0 II' ), 'Studio 5.0LTE' => array( 'BLU', 'Studio 5.0 LTE' ), 'Studio 5.0 HD LTE' => array( 'BLU', 'Studio 5.0 HD LTE' ), @@ -1321,12 +1371,21 @@ 'VIVO IV' => array( 'BLU', 'Vivo IV' ), 'VIVO AIR' => array( 'BLU', 'Vivo Air' ), 'B3000' => array( 'BlueBo', 'B3000' ), + 'AX410' => array( 'Bmobile', 'AX410' ), 'Bmobile AX512' => array( 'Bmobile', 'AX512' ), + 'AX515' => array( 'Bmobile', 'AX515' ), 'AX520' => array( 'Bmobile', 'AX520' ), 'AX525' => array( 'Bmobile', 'AX525' ), 'AX530' => array( 'Bmobile', 'AX530' ), + 'AX535' => array( 'Bmobile', 'AX535' ), + 'AX540' => array( 'Bmobile', 'AX540' ), + 'Bmobile AX540' => array( 'Bmobile', 'AX540' ), 'AX600' => array( 'Bmobile', 'AX600' ), + 'AX610' => array( 'Bmobile', 'AX610' ), 'AX620' => array( 'Bmobile', 'AX620' ), + 'Bmobile AX620' => array( 'Bmobile', 'AX620' ), + 'AX650' => array( 'Bmobile', 'AX650' ), + 'AX745' => array( 'Bmobile', 'AX745' ), 'Bmobile AX745' => array( 'Bmobile', 'AX745' ), 'BMOBILE AX1060' => array( 'Bmobile', 'AX1060' ), 'JC-S9220' => array( 'Bmorn', 'Phone One' ), @@ -1337,8 +1396,10 @@ 'BO-LFSPBS5' => array( 'Bogo', 'Lifestyle 5BS' ), 'BOVO S-F16' => array( 'Bovo', 'Walker S-F16' ), 'S-F16' => array( 'Bovo', 'Walker S-F16' ), + 'BOWAY F3' => array( 'Boway', 'F3' ), 'BOWAY I3' => array( 'Boway', 'I3' ), 'BOWAY I5' => array( 'Boway', 'I5' ), + 'BOWAY I9' => array( 'Boway', 'I9' ), 'BOWAY P1' => array( 'Boway', 'P1' ), 'BOWAY U1' => array( 'Boway', 'U1' ), 'BOWAY-BOWAY-U1' => array( 'Boway', 'U1' ), @@ -1375,6 +1436,7 @@ 'Aquaris E5 FHD' => array( 'bq', 'Aquaris E5 FHD' ), 'Aquaris E6' => array( 'bq', 'Aquaris E6' ), 'Aquaris E10' => array( 'bq', 'Aquaris E10' ), + 'Aquaris M5' => array( 'bq', 'Aquaris M5' ), 'bq Curie' => array( 'bq', 'Curie', TYPE_TABLET ), 'bq Curie 2' => array( 'bq', 'Curie 2', TYPE_TABLET ), 'bq Curie 2 3G' => array( 'bq', 'Curie 2', TYPE_TABLET ), @@ -1399,6 +1461,7 @@ 'bq Maxwell 2 Quad Core' => array( 'bq', 'Maxwell 2', TYPE_TABLET ), 'bq Pascal 2!' => array( 'bq', 'Pascal 2', TYPE_TABLET ), 'bq Verne Plus' => array( 'bq', 'Verne Plus', TYPE_TABLET ), + 'bq Verne Plus 3G' => array( 'bq', 'Verne Plus', TYPE_TABLET ), 'bq Voltaire' => array( 'bq', 'Voltaire', TYPE_TABLET ), 'BUSH 7.0 TABLET' => array( 'Bush', '7.0 Tablet', TYPE_TABLET ), 'BUSH 7.85 TABLET' => array( 'Bush', '7.85 Tablet', TYPE_TABLET ), @@ -1591,6 +1654,7 @@ 'CW-V99-QUAD' => array( 'Chuwi', 'V99' ), 'CW-VX8-3G' => array( 'Chuwi', 'VX8 3G' ), 'AQUILA 080-1008' => array( 'CMX', 'Aquila 080-1008', TYPE_TABLET ), + 'AQUILA 097-1006' => array( 'CMX', 'Aquila 097-1006', TYPE_TABLET ), 'Clanga 097-2016' => array( 'CMX', 'Clanga 097-2016', TYPE_TABLET ), 'CnM TouchPad 7' => array( 'CnM', 'TouchPad 7', TYPE_TABLET ), 'CnM-TOUCHPAD 7' => array( 'CnM', 'TouchPad 7', TYPE_TABLET ), @@ -3639,7 +3703,7 @@ 'Huawei HOL-(T00|U10|U19)!' => array( 'Huawei', 'Honor 3C' ), 'Honor3c2G-T' => array( 'Huawei', 'Honor 3C' ), 'HUAWEI Honor 3c w' => array( 'Huawei', 'Honor 3C' ), - 'CHM-(CL00|TL00H|U01|UL00)!' => array( 'Huawei', 'Honor 4C' ), + 'CHM-(CL00|TL00H|U01|UL00)!' => array( 'Huawei', 'Honor Play 4C' ), 'HW-Che1-CL10' => array( 'Huawei', 'Honor 4X' ), 'Che1-(L04|CL10|CL20)!' => array( 'Huawei', 'Honor 4X' ), 'Che2-(L11|TL00|UL00)!' => array( 'Huawei', 'Honor 4X' ), @@ -4082,6 +4146,7 @@ 'Intex Aqua 3X' => array( 'Intex', 'Aqua 3X' ), 'AQUA 4X' => array( 'Intex', 'Aqua 4X' ), 'Intex Aqua 3.2' => array( 'Intex', 'Aqua 3.2' ), + 'AQUA 4.0' => array( 'Intex', 'Aqua 4.0' ), 'AQUA 5.0' => array( 'Intex', 'Aqua 5.0' ), 'Aqua.Active' => array( 'Intex', 'Aqua Active' ), 'Aqua Curve' => array( 'Intex', 'Aqua Curve' ), @@ -4093,9 +4158,13 @@ 'Intex Aqua Marvel' => array( 'Intex', 'Aqua Marvel' ), 'AQUA OCTA' => array( 'Intex', 'Aqua Octa' ), 'Aqua Power' => array( 'Intex', 'Aqua Power' ), + 'Aqua Power HD' => array( 'Intex', 'Aqua Power HD' ), 'Aqua S' => array( 'Intex', 'Aqua S' ), 'Aqua Sx' => array( 'Intex', 'Aqua Sx' ), + 'Aqua Speed HD' => array( 'Intex', 'Aqua Speed HD' ), 'Aqua Star' => array( 'Intex', 'Aqua Star' ), + 'Aqua Star L' => array( 'Intex', 'Aqua Star L' ), + 'Aqua Star II' => array( 'Intex', 'Aqua Star II' ), 'Aqua Star 5.0' => array( 'Intex', 'Aqua Star 5.0' ), 'Aqua Star HD' => array( 'Intex', 'Aqua Star HD' ), 'Aqua Star Power' => array( 'Intex', 'Aqua Star Power' ), @@ -4106,9 +4175,11 @@ 'Aqua Trendy' => array( 'Intex', 'Aqua Trendy' ), 'Aqua Wonder' => array( 'Intex', 'Aqua Wonder' ), 'Aqua Wonder Quad Core' => array( 'Intex', 'Aqua Wonder' ), + 'Aqua Xtreme' => array( 'Intex', 'Aqua Xtreme' ), 'Aqua i2' => array( 'Intex', 'Aqua i2' ), 'Intex Aqua I3' => array( 'Intex', 'Aqua i3' ), 'Aqua I-5' => array( 'Intex', 'Aqua i5' ), + 'Aqua I5' => array( 'Intex', 'Aqua i5' ), 'Aqua i5 HD' => array( 'Intex', 'Aqua i5 HD' ), 'Aqua i5 mini' => array( 'Intex', 'Aqua i5 mini' ), 'Aqua i6' => array( 'Intex', 'Aqua i6' ), @@ -4116,10 +4187,13 @@ 'Aqua I14' => array( 'Intex', 'Aqua i14' ), 'Aqua i15' => array( 'Intex', 'Aqua i15' ), 'Aqua N2' => array( 'Intex', 'Aqua N2' ), + 'Aqua N8' => array( 'Intex', 'Aqua N8' ), 'Aqua N15' => array( 'Intex', 'Aqua N15' ), + 'Aqua Q1+' => array( 'Intex', 'Aqua Q1' ), 'Aqua T3' => array( 'Intex', 'Aqua T3' ), 'Aqua T4' => array( 'Intex', 'Aqua T4' ), 'Aqua Y2' => array( 'Intex', 'Aqua Y2' ), + 'Aqua Y2 1GB' => array( 'Intex', 'Aqua Y2' ), 'Aqua Y2 Pro' => array( 'Intex', 'Aqua Y2 Pro' ), 'Aqua Y3' => array( 'Intex', 'Aqua Y3' ), 'Intex Cloud X+' => array( 'Intex', 'Cloud X' ), @@ -5041,7 +5115,8 @@ 'LG-H3(20|26)!' => array( 'LG', 'Leon' ), 'LG-H3(40|42)!' => array( 'LG', 'Leon' ), 'LG-H4(20|22)!' => array( 'LG', 'Spirit' ), - 'LG-H4(40|41|42|43|45)!' => array( 'LG', 'Spirit' ), + 'LG-H4(40|41|42)!' => array( 'LG', 'Spirit' ), + 'LG-H4(43|45)!' => array( 'LG', 'Escape2' ), 'LG-H500!' => array( 'LG', 'H50x' ), // Unknown 'LG-H5(20|22|25)!' => array( 'LG', 'H52x' ), // Unknown 'LG-H540!' => array( 'LG', 'H54x' ), // Unknown @@ -5202,6 +5277,7 @@ 'lgp-970' => array( 'LG', 'Optimus Black' ), 'AS740' => array( 'LG', 'Axis' ), 'AS870 4G' => array( 'LG', 'Optimus F5' ), + 'AS985' => array( 'LG', 'G3' ), 'LGAS991' => array( 'LG', 'AS991' ), // Unknown 'LGAS995' => array( 'LG', 'G Flex 2' ), 'E900' => array( 'LG', 'Optimus 7' ), @@ -5588,8 +5664,9 @@ 'Micromax A110!' => array( 'Micromax', 'A110 Canvas 2' ), 'Micromax Canvas 2' => array( 'Micromax', 'A110 Canvas 2' ), 'Micromax A110 (Canvas 2)' => array( 'Micromax', 'A110 Canvas 2' ), - 'A110Q' => array( 'Micromax', 'A110 Canvas 2' ), - 'A110Q Canvas 2 Plus' => array( 'Micromax', 'A110 Canvas 2' ), + 'A110Q' => array( 'Micromax', 'A110Q Canvas 2 Plus' ), + 'A110Q Canvas 2 Plus' => array( 'Micromax', 'A110Q Canvas 2 Plus' ), + 'A110Q Canvas 2+' => array( 'Micromax', 'A110Q Canvas 2 Plus' ), 'Micromax A111!' => array( 'Micromax', 'A111 Canvas Doodle' ), 'Micromax A114' => array( 'Micromax', 'A114 Canvas 2.2' ), 'Micromax A114R' => array( 'Micromax', 'A114R Canvas Beat' ), @@ -6033,11 +6110,12 @@ 'N-06E' => array( 'NEC', 'MEDIAS X N-06E' ), 'N-07D' => array( 'NEC', 'MEDIAS X N-07D' ), 'N-08D' => array( 'NEC', 'MEDIAS Tab UL N-08D', TYPE_TABLET ), - '101N' => array( 'NEC', 'MEDIAS CH Softbank 101N' ), 'IS11N' => array( 'NEC', 'MEDIAS BR IS11N' ), + '101N' => array( 'NEC', 'MEDIAS CH Softbank 101N' ), 'NEC-101S' => array( 'NEC', 'MEDIAS 101S' ), 'NECTEL-101S' => array( 'NEC', 'MEDIAS 101S' ), 'NEC-101T' => array( 'NEC', 'MEDIAS 101T' ), + '101T' => array( 'NEC', 'MEDIAS 101T' ), 'NEC-102' => array( 'NEC', 'MEDIAS 102' ), 'NE-103T' => array( 'NEC', 'MEDIAS U 103T' ), 'NE-202' => array( 'NEC', 'MEDIAS 202' ), @@ -6566,6 +6644,8 @@ 'Philips-W8500' => array( 'Philips', 'W8500' ), 'Philips W8510' => array( 'Philips', 'W8510' ), 'Philips W8555' => array( 'Philips', 'W8555' ), + 'AND1E' => array( 'Philips', 'Android TV (2014)', TYPE_TELEVISION ), + 'AND1E TV' => array( 'Philips', 'Android TV (2014)', TYPE_TELEVISION ), 'BIP-6000' => array( 'Pidion', 'BIP-6000' ), 'Pioneer E80w' => array( 'Pioneer', 'E80w' ), 'Pioneer E81c' => array( 'Pioneer', 'E81c' ), @@ -7430,6 +7510,7 @@ 'SM-G925!' => array( 'Samsung', 'Galaxy S6 Edge' ), 'SM-J100!' => array( 'Samsung', 'Galaxy J1' ), 'SM-J500!' => array( 'Samsung', 'Galaxy J5' ), + 'SM-J700!' => array( 'Samsung', 'Galaxy J7' ), 'SM-N750[025789][QV]?!' => array( 'Samsung', 'Galaxy Note 3 Neo' ), 'SM-N750[LS]?!' => array( 'Samsung', 'Galaxy Note 3 Neo' ), 'SM-N8000' => array( 'Samsung', 'Galaxy Note 800', TYPE_TABLET ), @@ -7995,6 +8076,7 @@ 'NWZ?-Z1000Series!' => array( 'Sony', 'Walkman Z', TYPE_MEDIA ), 'NSZ-GP9' => array( 'Sony', 'NSZ-GP9', TYPE_TELEVISION, FLAG_GOOGLETV ), 'NSZ-GS7' => array( 'Sony', 'NSZ-GS7', TYPE_TELEVISION, FLAG_GOOGLETV ), + 'NSZ-GS8' => array( 'Sony', 'NSZ-GS8', TYPE_TELEVISION, FLAG_GOOGLETV ), 'NSZ-GT1' => array( 'Sony', 'NSZ-GT1', TYPE_TELEVISION, FLAG_GOOGLETV ), 'NSZ-GU1' => array( 'Sony', 'BRAVIA Smart Stick NSZ-GU1', TYPE_TELEVISION, FLAG_GOOGLETV ), 'PRS-T1' => array( 'Sony', 'Reader PRS-T1', TYPE_EREADER ), @@ -8651,11 +8733,14 @@ 'Amazing A3' => array( 'TWM', 'Amazing A3' ), 'Amazing A4' => array( 'TWM', 'Amazing A4' ), 'Amazing A4C' => array( 'TWM', 'Amazing A4C' ), + 'Amazing A4S' => array( 'TWM', 'Amazing A4S' ), 'Amazing A6' => array( 'TWM', 'Amazing A6' ), 'A6S' => array( 'TWM', 'Amazing A6S' ), 'Amazing A7' => array( 'TWM', 'Amazing A7' ), 'Amazing A8' => array( 'TWM', 'Amazing A8' ), + 'Amazing P6' => array( 'TWM', 'Amazing P6' ), 'Amazing X1' => array( 'TWM', 'Amazing X1' ), + 'Amazing X2' => array( 'TWM', 'Amazing X2' ), 'Amazing X3' => array( 'TWM', 'Amazing X3' ), 'Fantastic T3' => array( 'TWM', 'Fantastic T3' ), 'TB100' => array( 'Unitech', 'TB100', TYPE_TABLET ), @@ -8985,6 +9070,7 @@ 'AT-AS45qHD' => array( 'Wolfgang', 'AT-AS45QHD' ), 'AT-AS45q2' => array( 'Wolfgang', 'AT-AS45Q2' ), 'AT-AS45WP' => array( 'Wolfgang', 'AT-AS45WP' ), + 'AT-AS45LTE' => array( 'Wolfgang', 'AT-AS45LTE' ), 'AT-AS50HD' => array( 'Wolfgang', 'AT-AS50HD' ), 'AT-AS50SE' => array( 'Wolfgang', 'AT-AS50SE' ), 'AT-AS50Q' => array( 'Wolfgang', 'AT-AS50Q' ), @@ -9138,10 +9224,13 @@ 'YEZZ-A4M' => array( 'Yezz', 'Andy A4M' ), 'Andy A5' => array( 'Yezz', 'Andy A5' ), 'YEZZ-A5QP' => array( 'Yezz', 'Andy A5QP' ), + 'ANDY A5QP' => array( 'Yezz', 'Andy A5QP' ), 'Yezz-AC4EI' => array( 'Yezz', 'Andy AC4EI' ), 'Andy C3.5EI' => array( 'Yezz', 'Andy C3.5EI' ), + 'Andy C5V' => array( 'Yezz', 'Andy C5V' ), 'Andy C5VP' => array( 'Yezz', 'Andy C5VP' ), 'YEZZ-4E' => array( 'Yezz', 'Andy 4E' ), + 'Andy 4EI' => array( 'Yezz', 'Andy 4EI' ), 'C868' => array( 'Yicheer', 'C868' ), 'EMR1879' => array( 'Yidong', 'EMR1879', TYPE_TABLET ), 'YD201' => array( 'Yota', 'YotaPhone 2' ), @@ -9251,6 +9340,7 @@ 'ZTE Blade' => array( 'ZTE', 'Blade' ), 'a5' => array( 'ZTE', 'Blade' ), 'ZTE Blade 2' => array( 'ZTE', 'Blade 2' ), + 'BLADE III IL' => array( 'ZTE', 'Blade III' ), 'ZTE Blade III Pro' => array( 'ZTE', 'Blade III Pro' ), 'ZTE Blade Apex' => array( 'ZTE', 'Blade Apex' ), 'ZTE Blade Apex2' => array( 'ZTE', 'Blade Apex2' ), @@ -9261,6 +9351,7 @@ 'ZTE Blade G' => array( 'ZTE', 'Blade G' ), 'Blade G LTE' => array( 'ZTE', 'Blade G' ), 'ZTE Blade G Lux' => array( 'ZTE', 'Blade G Lux' ), + 'Blade G Lux' => array( 'ZTE', 'Blade G Lux' ), 'ZTE Blade G2' => array( 'ZTE', 'Blade G2' ), 'Blade G2' => array( 'ZTE', 'Blade G2' ), 'Blade Super' => array( 'ZTE', 'Blade Super' ), @@ -9665,6 +9756,7 @@ 'BASE Tab' => array( 'BASE', 'TAB', TYPE_TABLET ), 'BASE Tab 7.1' => array( 'BASE', 'TAB 7-1', TYPE_TABLET ), + 'Beeline Smart' => array( 'Beeline', 'Smart' ), 'Beeline Smart2' => array( 'Beeline', 'Smart2' ), 'Beeline Smart 3' => array( 'Beeline', 'Smart3' ), 'Beeline E300' => array( 'Beeline', 'E300' ), diff --git a/data/models-palmos.php b/data/models-palmos.php index 9b9aca1..931ab6b 100644 --- a/data/models-palmos.php +++ b/data/models-palmos.php @@ -1,5 +1,10 @@ array( 'Palm', 'TX' ) + 'Palm-D050' => array( 'Palm', 'TX' ), + 'Palm-D053' => array( 'Palm', 'Treo 680' ), + 'Palm-D061' => array( 'Palm', 'Centro' ), + 'Palm-D062' => array( 'Palm', 'Centro' ), + 'Palm-TunX' => array( 'Palm', 'LifeDrive' ), + 'hspr-H102' => array( 'Palm', 'Treo 650' ) ); \ No newline at end of file diff --git a/detect.php b/detect.php index 2f154ea..2546ae6 100644 --- a/detect.php +++ b/detect.php @@ -111,7 +111,7 @@ toJSON: function() { return { name: this.name, - version: this.version.toJSON(), + version: (this.version) ? this.version.toJSON() : null, stock: this.stock, channel: this.channel, mode: this.mode, @@ -136,7 +136,7 @@ toJSON: function() { return { name: this.name, - version: this.version.toJSON() + version: (this.version) ? this.version.toJSON() : null } }, @@ -157,7 +157,7 @@ toJSON: function() { return { name: this.name, - version: this.version.toJSON() + version: (this.version) ? this.version.toJSON() : null } }, diff --git a/libraries/whichbrowser.php b/libraries/whichbrowser.php index 0c5d0ab..3549010 100644 --- a/libraries/whichbrowser.php +++ b/libraries/whichbrowser.php @@ -1994,7 +1994,7 @@ function analyseUserAgent($ua) { $this->device->identified = ID_PATTERN; } - if ($this->device->model) { + if (isset($this->device->model) && $this->device->model) { $device = DeviceModels::identify('palmos', $this->device->model); if ($device->identified) { @@ -2539,6 +2539,7 @@ function analyseUserAgent($ua) { case 'VIERA 2012': $this->device->series = 'Viera 2012'; break; case 'VIERA 2013': $this->device->series = 'Viera 2013'; break; case 'VIERA 2014': $this->device->series = 'Viera 2014'; break; + case 'VIERA 2015': $this->device->series = 'Viera 2015'; break; default: $this->device->model = $modelName; break; } @@ -4409,6 +4410,14 @@ function analyseUserAgent($ua) { $this->browser->channel = null; } + /* Webview for Android 5 */ + if (preg_match('/; wv\)/u', $ua)) { + $this->browser->stock = true; + $this->browser->name = null; + $this->browser->version = null; + $this->browser->channel = null; + } + /* LG Chromium based browsers */ if (isset($device->manufacturer) && $device->manufacturer == 'LG') { if (in_array($match[1], array('30.0.1599.103', '34.0.1847.118', '38.0.2125.102')) && preg_match('/Version\/4/u', $ua)) { @@ -6006,6 +6015,13 @@ function analyseUserAgent($ua) { unset($this->device->flag); } + if (isset($this->device->flag) && $this->device->flag == FLAG_ANDROIDTV) { + $this->os->name = 'Android TV'; + $this->os->family = 'Android'; + + unset($this->device->flag); + } + if (isset($this->device->flag) && $this->device->flag == FLAG_ANDROIDWEAR) { $this->os->name = 'Android Wear'; $this->os->family = 'Android';