1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Platine User Agent |
5
|
|
|
* |
6
|
|
|
* Platine User Agent is a lightweight library for detecting |
7
|
|
|
* user browser, device, OS, CPU |
8
|
|
|
* |
9
|
|
|
* This content is released under the MIT License (MIT) |
10
|
|
|
* |
11
|
|
|
* Copyright (c) 2020 Platine User Agent |
12
|
|
|
* |
13
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy |
14
|
|
|
* of this software and associated documentation files (the "Software"), to deal |
15
|
|
|
* in the Software without restriction, including without limitation the rights |
16
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
17
|
|
|
* copies of the Software, and to permit persons to whom the Software is |
18
|
|
|
* furnished to do so, subject to the following conditions: |
19
|
|
|
* |
20
|
|
|
* The above copyright notice and this permission notice shall be included in all |
21
|
|
|
* copies or substantial portions of the Software. |
22
|
|
|
* |
23
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
24
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
25
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
26
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
27
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
28
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
29
|
|
|
* SOFTWARE. |
30
|
|
|
*/ |
31
|
|
|
|
32
|
|
|
/** |
33
|
|
|
* @file DeviceDetector.php |
34
|
|
|
* |
35
|
|
|
* The device detector class |
36
|
|
|
* |
37
|
|
|
* @package Platine\UserAgent\Detector |
38
|
|
|
* @author Platine Developers Team |
39
|
|
|
* @copyright Copyright (c) 2020 |
40
|
|
|
* @license http://opensource.org/licenses/MIT MIT License |
41
|
|
|
* @link https://www.platine-php.com |
42
|
|
|
* @version 1.0.0 |
43
|
|
|
* @filesource |
44
|
|
|
*/ |
45
|
|
|
|
46
|
|
|
declare(strict_types=1); |
47
|
|
|
|
48
|
|
|
namespace Platine\UserAgent\Detector; |
49
|
|
|
|
50
|
|
|
use Platine\UserAgent\Entity\Device; |
51
|
|
|
|
52
|
|
|
/** |
53
|
|
|
* @class DeviceDetector |
54
|
|
|
* @package Platine\UserAgent\Detector |
55
|
|
|
*/ |
56
|
|
|
class DeviceDetector extends AbstractDetector |
57
|
|
|
{ |
58
|
|
|
/** |
59
|
|
|
* {@inheritdoc} |
60
|
|
|
*/ |
61
|
|
|
public function __construct() |
62
|
|
|
{ |
63
|
|
|
parent::__construct(); |
64
|
|
|
|
65
|
|
|
$this->entity = new Device(); |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
/** |
69
|
|
|
* {@inheritdoc} |
70
|
|
|
*/ |
71
|
|
|
public function maps(): array |
72
|
|
|
{ |
73
|
|
|
return [ |
74
|
|
|
'amazon' => [ |
75
|
|
|
'model' => [ |
76
|
|
|
'Fire Phone' => ['SD', 'KF'] |
77
|
|
|
] |
78
|
|
|
], |
79
|
|
|
'sprint' => [ |
80
|
|
|
'model' => [ |
81
|
|
|
'Evo Shift 4G' => '7373KT' |
82
|
|
|
], |
83
|
|
|
'vendor' => [ |
84
|
|
|
'HTC' => 'APA', |
85
|
|
|
'Sprint' => 'Sprint' |
86
|
|
|
] |
87
|
|
|
] |
88
|
|
|
]; |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
/** |
92
|
|
|
* {@inheritdoc} |
93
|
|
|
*/ |
94
|
|
|
public function regex(): array |
95
|
|
|
{ |
96
|
|
|
return [ |
97
|
|
|
[ |
98
|
|
|
|
99
|
|
|
'/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i' // iPad/PlayBook |
100
|
|
|
], [self::MODEL, self::VENDOR, [self::TYPE, self::TABLET]], [ |
101
|
|
|
|
102
|
|
|
'/applecoremedia\/[\w\.]+ \((ipad)/' // iPad |
103
|
|
|
], [self::MODEL, [self::VENDOR, 'Apple'], [self::TYPE, self::TABLET]], [ |
104
|
|
|
|
105
|
|
|
'/(apple\s{0,1}tv)/i' // Apple TV |
106
|
|
|
], [[self::MODEL, 'Apple TV'], [self::VENDOR, 'Apple']], [ |
107
|
|
|
|
108
|
|
|
'/(archos)\s(gamepad2?)/i', // Archos |
109
|
|
|
'/(hp).+(touchpad)/i', // HP TouchPad |
110
|
|
|
'/(hp).+(tablet)/i', // HP Tablet |
111
|
|
|
'/(kindle)\/([\w\.]+)/i', // Kindle |
112
|
|
|
'/\s(nook)[\w\s]+build\/(\w+)/i', // Nook |
113
|
|
|
'/(dell)\s(strea[kpr\s\d]*[\dko])/i' // Dell Streak |
114
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
115
|
|
|
|
116
|
|
|
'/(kf[A-z]+)\sbuild\/.+silk\//i' // Kindle Fire HD |
117
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::TABLET]], [ |
118
|
|
|
'/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i' // Fire Phone |
119
|
|
|
], [[self::MODEL, '__str', 'amazon.model'], [self::VENDOR, 'Amazon'], [self::TYPE, self::MOBILE]], [ |
120
|
|
|
'/android.+aft([bms])\sbuild/i' // Fire TV |
121
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::SMART_TV]], [ |
122
|
|
|
|
123
|
|
|
'/\((ip[honed|\s\w*]+);.+(apple)/i' // iPod/iPhone |
124
|
|
|
], [self::MODEL, self::VENDOR, [self::TYPE, self::MOBILE]], [ |
125
|
|
|
'/\((ip[honed|\s\w*]+);/i' // iPod/iPhone |
126
|
|
|
], [self::MODEL, [self::VENDOR, 'Apple'], [self::TYPE, self::MOBILE]], [ |
127
|
|
|
|
128
|
|
|
'/(blackberry)[\s-]?(\w+)/i', // BlackBerry |
129
|
|
|
'/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i', |
130
|
|
|
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron |
131
|
|
|
'/(hp)\s([\w\s]+\w)/i', // HP iPAQ |
132
|
|
|
'/(asus)-?(\w+)/i' // Asus |
133
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
134
|
|
|
'/\(bb10;\s(\w+)/i' // BlackBerry 10 |
135
|
|
|
], [self::MODEL, [self::VENDOR, 'BlackBerry'], [self::TYPE, self::MOBILE]], [ |
136
|
|
|
// Asus Tablets |
137
|
|
|
'/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i' |
138
|
|
|
], [self::MODEL, [self::VENDOR, 'Asus'], [self::TYPE, self::TABLET]], [ |
139
|
|
|
|
140
|
|
|
'/(sony)\s(tablet\s[ps])\sbuild\//i', // Sony |
141
|
|
|
'/(sony)?(?:sgp.+)\sbuild\//i' |
142
|
|
|
], [[self::VENDOR, 'Sony'], [self::MODEL, 'Xperia Tablet'], [self::TYPE, self::TABLET]], [ |
143
|
|
|
'/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i' |
144
|
|
|
], [self::MODEL, [self::VENDOR, 'Sony'], [self::TYPE, self::MOBILE]], [ |
145
|
|
|
|
146
|
|
|
'/\s(ouya)\s/i', // Ouya |
147
|
|
|
'/(nintendo)\s([wids3u]+)/i' // Nintendo |
148
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::CONSOLE]], [ |
149
|
|
|
|
150
|
|
|
'/android.+;\s(shield)\sbuild/i' // Nvidia |
151
|
|
|
], [self::MODEL, [self::VENDOR, 'Nvidia'], [self::TYPE, self::CONSOLE]], [ |
152
|
|
|
|
153
|
|
|
'/(playstation\s[34portablevi]+)/i' // Playstation |
154
|
|
|
], [self::MODEL, [self::VENDOR, 'Sony'], [self::TYPE, self::CONSOLE]], [ |
155
|
|
|
|
156
|
|
|
'/(sprint\s(\w+))/i' // Sprint Phones |
157
|
|
|
], [[self::VENDOR, '__str', 'sprint.vendor'], [self::MODEL, '__str', 'sprint.model'], [self::TYPE, self::MOBILE]], [ |
158
|
|
|
|
159
|
|
|
'/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i', // HTC |
160
|
|
|
'/(zte)-(\w*)/i', // ZTE |
161
|
|
|
'/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i' |
162
|
|
|
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony |
163
|
|
|
], [self::VENDOR, [self::MODEL, '/_/', ' '], [self::TYPE, self::MOBILE]], [ |
164
|
|
|
|
165
|
|
|
'/(nexus\s9)/i' // HTC Nexus 9 |
166
|
|
|
], [self::MODEL, [self::VENDOR, 'HTC'], [self::TYPE, self::TABLET]], [ |
167
|
|
|
|
168
|
|
|
'/d\/huawei([\w\s-]+)[;\)]/i', |
169
|
|
|
'/(nexus\s6p)/i' // Huawei |
170
|
|
|
], [self::MODEL, [self::VENDOR, 'Huawei'], [self::TYPE, self::MOBILE]], [ |
171
|
|
|
|
172
|
|
|
'/(microsoft);\s(lumia[\s\w]+)/i' // Microsoft Lumia |
173
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
174
|
|
|
|
175
|
|
|
'/[\s\(;](xbox(?:\sone)?)[\s\);]/i' // Microsoft Xbox |
176
|
|
|
], [self::MODEL, [self::VENDOR, 'Microsoft'], [self::TYPE, self::CONSOLE]], [ |
177
|
|
|
'/(kin\.[onetw]{3})/i' // Microsoft Kin |
178
|
|
|
], [[self::MODEL, '/\./', ' '], [self::VENDOR, 'Microsoft'], [self::TYPE, self::MOBILE]], [ |
179
|
|
|
|
180
|
|
|
// Motorola |
181
|
|
|
'/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i', |
182
|
|
|
'/mot[\s-]?(\w*)/i', |
183
|
|
|
'/(XT\d{3,4}) build\//i', |
184
|
|
|
'/(nexus\s6)/i' |
185
|
|
|
], [self::MODEL, [self::VENDOR, 'Motorola'], [self::TYPE, self::MOBILE]], [ |
186
|
|
|
'/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i' |
187
|
|
|
], [self::MODEL, [self::VENDOR, 'Motorola'], [self::TYPE, self::TABLET]], [ |
188
|
|
|
|
189
|
|
|
'/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i' // HbbTV devices |
190
|
|
|
], [[self::VENDOR, '__trim'], [self::MODEL, '__trim'], [self::TYPE, self::SMART_TV]], [ |
191
|
|
|
|
192
|
|
|
'/hbbtv.+maple;(\d+)/i' |
193
|
|
|
], [[self::MODEL, '/^/', 'SMART_TV'], [self::VENDOR, 'Samsung'], [self::TYPE, self::SMART_TV]], [ |
194
|
|
|
|
195
|
|
|
'/\(dtv[\);].+(aquos)/i' // Sharp |
196
|
|
|
], [self::MODEL, [self::VENDOR, 'Sharp'], [self::TYPE, self::SMART_TV]], [ |
197
|
|
|
|
198
|
|
|
'/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i', |
199
|
|
|
'/((SM-T\w+))/i' |
200
|
|
|
], [[self::VENDOR, 'Samsung'], self::MODEL, [self::TYPE, self::TABLET]], [ // Samsung |
201
|
|
|
'/smart-tv.+(samsung)/i' |
202
|
|
|
], [self::VENDOR, [self::TYPE, self::SMART_TV], self::MODEL], [ |
203
|
|
|
'/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i', |
204
|
|
|
'/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i', |
205
|
|
|
'/sec-((sgh\w+))/i' |
206
|
|
|
], [[self::VENDOR, 'Samsung'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
207
|
|
|
|
208
|
|
|
'/sie-(\w*)/i' // Siemens |
209
|
|
|
], [self::MODEL, [self::VENDOR, 'Siemens'], [self::TYPE, self::MOBILE]], [ |
210
|
|
|
|
211
|
|
|
'/(maemo|nokia).*(n900|lumia\s\d+)/i', // Nokia |
212
|
|
|
'/(nokia)[\s_-]?([\w-]*)/i' |
213
|
|
|
], [[self::VENDOR, 'Nokia'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
214
|
|
|
|
215
|
|
|
'/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i' // Acer |
216
|
|
|
], [self::MODEL, [self::VENDOR, 'Acer'], [self::TYPE, self::TABLET]], [ |
217
|
|
|
|
218
|
|
|
'/android.+([vl]k\-?\d{3})\s+build/i' // LG Tablet |
219
|
|
|
], [self::MODEL, [self::VENDOR, 'LG'], [self::TYPE, self::TABLET]], [ |
220
|
|
|
'/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i' // LG Tablet |
221
|
|
|
], [[self::VENDOR, 'LG'], self::MODEL, [self::TYPE, self::TABLET]], [ |
222
|
|
|
'/(lg) netcast\.tv/i' // LG SMART_TV |
223
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::SMART_TV]], [ |
224
|
|
|
'/(nexus\s[45])/i', // LG |
225
|
|
|
'/lg[e;\s\/-]+(\w*)/i', |
226
|
|
|
'/android.+lg(\-?[\d\w]+)\s+build/i' |
227
|
|
|
], [self::MODEL, [self::VENDOR, 'LG'], [self::TYPE, self::MOBILE]], [ |
228
|
|
|
|
229
|
|
|
'/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i' // Lenovo tablets |
230
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
231
|
|
|
'/android.+(ideatab[a-z0-9\-\s]+)/i' // Lenovo |
232
|
|
|
], [self::MODEL, [self::VENDOR, 'Lenovo'], [self::TYPE, self::TABLET]], [ |
233
|
|
|
'/(lenovo)[_\s-]?([\w-]+)/i' |
234
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
235
|
|
|
|
236
|
|
|
'/linux;.+((jolla));/i' // Jolla |
237
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
238
|
|
|
|
239
|
|
|
'/((pebble))app\/[\d\.]+\s/i' // Pebble |
240
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::WEARABLE]], [ |
241
|
|
|
|
242
|
|
|
'/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i' // OPPO |
243
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
244
|
|
|
|
245
|
|
|
'/crkey/i' // Google Chromecast |
246
|
|
|
], [[self::MODEL, 'Chromecast'], [self::VENDOR, 'Google']], [ |
247
|
|
|
|
248
|
|
|
'/android.+;\s(glass)\s\d/i' // Google Glass |
249
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::WEARABLE]], [ |
250
|
|
|
|
251
|
|
|
'/android.+;\s(pixel c)[\s)]/i' // Google Pixel C |
252
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::TABLET]], [ |
253
|
|
|
|
254
|
|
|
'/android.+;\s(pixel( [23])?( xl)?)[\s)]/i' // Google Pixel |
255
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::MOBILE]], [ |
256
|
|
|
|
257
|
|
|
'/android.+;\s(\w+)\s+build\/hm\1/i', // Xiaomi Hongmi 'numeric' models |
258
|
|
|
'/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i', // Xiaomi Hongmi |
259
|
|
|
'/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i', |
260
|
|
|
// Xiaomi Mi |
261
|
|
|
'/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i' // Redmi Phones |
262
|
|
|
], [[self::MODEL, '/_/', ' '], [self::VENDOR, 'Xiaomi'], [self::TYPE, self::MOBILE]], [ |
263
|
|
|
'/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i' // Mi Pad tablets |
264
|
|
|
], [[self::MODEL, '/_/', ' '], [self::VENDOR, 'Xiaomi'], [self::TYPE, self::TABLET]], [ |
265
|
|
|
'/android.+;\s(m[1-5]\snote)\sbuild/i' // Meizu |
266
|
|
|
], [self::MODEL, [self::VENDOR, 'Meizu'], [self::TYPE, self::MOBILE]], [ |
267
|
|
|
'/(mz)-([\w-]{2,})/i' |
268
|
|
|
], [[self::VENDOR, 'Meizu'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
269
|
|
|
|
270
|
|
|
'/android.+a000(1)\s+build/i', // OnePlus |
271
|
|
|
'/android.+oneplus\s(a\d{4})\s+build/i' |
272
|
|
|
], [self::MODEL, [self::VENDOR, 'OnePlus'], [self::TYPE, self::MOBILE]], [ |
273
|
|
|
|
274
|
|
|
'/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i' // RCA Tablets |
275
|
|
|
], [self::MODEL, [self::VENDOR, 'RCA'], [self::TYPE, self::TABLET]], [ |
276
|
|
|
|
277
|
|
|
'/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i' // Dell Venue Tablets |
278
|
|
|
], [self::MODEL, [self::VENDOR, 'Dell'], [self::TYPE, self::TABLET]], [ |
279
|
|
|
|
280
|
|
|
'/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i' // Verizon Tablet |
281
|
|
|
], [self::MODEL, [self::VENDOR, 'Verizon'], [self::TYPE, self::TABLET]], [ |
282
|
|
|
|
283
|
|
|
'/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i' // Barnes & Noble Tablet |
284
|
|
|
], [[self::VENDOR, 'Barnes & Noble'], self::MODEL, [self::TYPE, self::TABLET]], [ |
285
|
|
|
|
286
|
|
|
'/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i' // Barnes & Noble Tablet |
287
|
|
|
], [self::MODEL, [self::VENDOR, 'NuVision'], [self::TYPE, self::TABLET]], [ |
288
|
|
|
|
289
|
|
|
'/android.+;\s(k88)\sbuild/i' // ZTE K Series Tablet |
290
|
|
|
], [self::MODEL, [self::VENDOR, 'ZTE'], [self::TYPE, self::TABLET]], [ |
291
|
|
|
|
292
|
|
|
'/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i' // Swiss GEN Mobile |
293
|
|
|
], [self::MODEL, [self::VENDOR, 'Swiss'], [self::TYPE, self::MOBILE]], [ |
294
|
|
|
|
295
|
|
|
'/android.+[;\/]\s*(zur\d{3})\s+build/i' // Swiss ZUR Tablet |
296
|
|
|
], [self::MODEL, [self::VENDOR, 'Swiss'], [self::TYPE, self::TABLET]], [ |
297
|
|
|
|
298
|
|
|
'/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i' // Zeki Tablets |
299
|
|
|
], [self::MODEL, [self::VENDOR, 'Zeki'], [self::TYPE, self::TABLET]], [ |
300
|
|
|
|
301
|
|
|
'/(android).+[;\/]\s+([YR]\d{2})\s+build/i', |
302
|
|
|
'/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i' // Dragon Touch Tablet |
303
|
|
|
], [[self::VENDOR, 'Dragon Touch'], self::MODEL, [self::TYPE, self::TABLET]], [ |
304
|
|
|
|
305
|
|
|
'/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i' // Insignia Tablets |
306
|
|
|
], [self::MODEL, [self::VENDOR, 'Insignia'], [self::TYPE, self::TABLET]], [ |
307
|
|
|
|
308
|
|
|
'/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i' // NextBook Tablets |
309
|
|
|
], [self::MODEL, [self::VENDOR, 'NextBook'], [self::TYPE, self::TABLET]], [ |
310
|
|
|
|
311
|
|
|
'/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i' |
312
|
|
|
], [[self::VENDOR, 'Voice'], self::MODEL, [self::TYPE, self::MOBILE]], [ // Voice Xtreme Phones |
313
|
|
|
|
314
|
|
|
'/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i' // LvTel Phones |
315
|
|
|
], [[self::VENDOR, 'LvTel'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
316
|
|
|
|
317
|
|
|
'/android.+;\s(PH-1)\s/i' |
318
|
|
|
], [self::MODEL, [self::VENDOR, 'Essential'], [self::TYPE, self::MOBILE]], [ // Essential PH-1 |
319
|
|
|
|
320
|
|
|
'/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i' // Envizen Tablets |
321
|
|
|
], [self::MODEL, [self::VENDOR, 'Envizen'], [self::TYPE, self::TABLET]], [ |
322
|
|
|
|
323
|
|
|
'/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i' // Le Pan Tablets |
324
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
325
|
|
|
|
326
|
|
|
'/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i' // MachSpeed Tablets |
327
|
|
|
], [self::MODEL, [self::VENDOR, 'MachSpeed'], [self::TYPE, self::TABLET]], [ |
328
|
|
|
|
329
|
|
|
'/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i' // Trinity Tablets |
330
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
331
|
|
|
|
332
|
|
|
'/android.+[;\/]\s*TU_(1491)\s+build/i' // Rotor Tablets |
333
|
|
|
], [self::MODEL, [self::VENDOR, 'Rotor'], [self::TYPE, self::TABLET]], [ |
334
|
|
|
|
335
|
|
|
'/android.+(KS(.+))\s+build/i' // Amazon Kindle Tablets |
336
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::TABLET]], [ |
337
|
|
|
|
338
|
|
|
'/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i' // Gigaset Tablets |
339
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
340
|
|
|
|
341
|
|
|
'/\s(tablet|tab)[;\/]/i', // Unidentifiable Tablet |
342
|
|
|
'/\s(mobile)(?:[;\/]|\ssafari)/i' // Unidentifiable Mobile |
343
|
|
|
], [[self::TYPE, '__lowerize'], self::VENDOR, self::MODEL], [ |
344
|
|
|
|
345
|
|
|
'/[\s\/\(](smart-?tv)[;\)]/i' // SMART_TV |
346
|
|
|
], [[self::TYPE, self::SMART_TV]], [ |
347
|
|
|
|
348
|
|
|
'/(android[\w\.\s\-]{0,9});.+build/i' // Generic Android Device |
349
|
|
|
], [self::MODEL, [self::VENDOR, 'Generic']] |
350
|
|
|
]; |
351
|
|
|
} |
352
|
|
|
} |
353
|
|
|
|