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 http://www.iacademy.cf |
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
|
|
|
/** |
60
|
|
|
* {@inheritdoc} |
61
|
|
|
*/ |
62
|
|
|
public function __construct() |
63
|
|
|
{ |
64
|
|
|
parent::__construct(); |
65
|
|
|
|
66
|
|
|
$this->entity = new Device(); |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* {@inheritdoc} |
71
|
|
|
*/ |
72
|
|
|
public function maps(): array |
73
|
|
|
{ |
74
|
|
|
return [ |
75
|
|
|
'amazon' => [ |
76
|
|
|
'model' => [ |
77
|
|
|
'Fire Phone' => ['SD', 'KF'] |
78
|
|
|
] |
79
|
|
|
], |
80
|
|
|
'sprint' => [ |
81
|
|
|
'model' => [ |
82
|
|
|
'Evo Shift 4G' => '7373KT' |
83
|
|
|
], |
84
|
|
|
'vendor' => [ |
85
|
|
|
'HTC' => 'APA', |
86
|
|
|
'Sprint' => 'Sprint' |
87
|
|
|
] |
88
|
|
|
] |
89
|
|
|
]; |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
/** |
93
|
|
|
* {@inheritdoc} |
94
|
|
|
*/ |
95
|
|
|
public function regex(): array |
96
|
|
|
{ |
97
|
|
|
return [ |
98
|
|
|
[ |
99
|
|
|
|
100
|
|
|
'/\((ipad|playbook);[\w\s\),;-]+(rim|apple)/i' // iPad/PlayBook |
101
|
|
|
], [self::MODEL, self::VENDOR, [self::TYPE, self::TABLET]], [ |
102
|
|
|
|
103
|
|
|
'/applecoremedia\/[\w\.]+ \((ipad)/' // iPad |
104
|
|
|
], [self::MODEL, [self::VENDOR, 'Apple'], [self::TYPE, self::TABLET]], [ |
105
|
|
|
|
106
|
|
|
'/(apple\s{0,1}tv)/i' // Apple TV |
107
|
|
|
], [[self::MODEL, 'Apple TV'], [self::VENDOR, 'Apple']], [ |
108
|
|
|
|
109
|
|
|
'/(archos)\s(gamepad2?)/i', // Archos |
110
|
|
|
'/(hp).+(touchpad)/i', // HP TouchPad |
111
|
|
|
'/(hp).+(tablet)/i', // HP Tablet |
112
|
|
|
'/(kindle)\/([\w\.]+)/i', // Kindle |
113
|
|
|
'/\s(nook)[\w\s]+build\/(\w+)/i', // Nook |
114
|
|
|
'/(dell)\s(strea[kpr\s\d]*[\dko])/i' // Dell Streak |
115
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
116
|
|
|
|
117
|
|
|
'/(kf[A-z]+)\sbuild\/.+silk\//i' // Kindle Fire HD |
118
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::TABLET]], [ |
119
|
|
|
'/(sd|kf)[0349hijorstuw]+\sbuild\/.+silk\//i' // Fire Phone |
120
|
|
|
], [[self::MODEL, '__str', 'amazon.model'], [self::VENDOR, 'Amazon'], [self::TYPE, self::MOBILE]], [ |
121
|
|
|
'/android.+aft([bms])\sbuild/i' // Fire TV |
122
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::SMART_TV]], [ |
123
|
|
|
|
124
|
|
|
'/\((ip[honed|\s\w*]+);.+(apple)/i' // iPod/iPhone |
125
|
|
|
], [self::MODEL, self::VENDOR, [self::TYPE, self::MOBILE]], [ |
126
|
|
|
'/\((ip[honed|\s\w*]+);/i' // iPod/iPhone |
127
|
|
|
], [self::MODEL, [self::VENDOR, 'Apple'], [self::TYPE, self::MOBILE]], [ |
128
|
|
|
|
129
|
|
|
'/(blackberry)[\s-]?(\w+)/i', // BlackBerry |
130
|
|
|
'/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i', |
131
|
|
|
// BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron |
132
|
|
|
'/(hp)\s([\w\s]+\w)/i', // HP iPAQ |
133
|
|
|
'/(asus)-?(\w+)/i' // Asus |
134
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
135
|
|
|
'/\(bb10;\s(\w+)/i' // BlackBerry 10 |
136
|
|
|
], [self::MODEL, [self::VENDOR, 'BlackBerry'], [self::TYPE, self::MOBILE]], [ |
137
|
|
|
// Asus Tablets |
138
|
|
|
'/android.+(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus 7|padfone|p00c)/i' |
139
|
|
|
], [self::MODEL, [self::VENDOR, 'Asus'], [self::TYPE, self::TABLET]], [ |
140
|
|
|
|
141
|
|
|
'/(sony)\s(tablet\s[ps])\sbuild\//i', // Sony |
142
|
|
|
'/(sony)?(?:sgp.+)\sbuild\//i' |
143
|
|
|
], [[self::VENDOR, 'Sony'], [self::MODEL, 'Xperia Tablet'], [self::TYPE, self::TABLET]], [ |
144
|
|
|
'/android.+\s([c-g]\d{4}|so[-l]\w+)(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i' |
145
|
|
|
], [self::MODEL, [self::VENDOR, 'Sony'], [self::TYPE, self::MOBILE]], [ |
146
|
|
|
|
147
|
|
|
'/\s(ouya)\s/i', // Ouya |
148
|
|
|
'/(nintendo)\s([wids3u]+)/i' // Nintendo |
149
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::CONSOLE]], [ |
150
|
|
|
|
151
|
|
|
'/android.+;\s(shield)\sbuild/i' // Nvidia |
152
|
|
|
], [self::MODEL, [self::VENDOR, 'Nvidia'], [self::TYPE, self::CONSOLE]], [ |
153
|
|
|
|
154
|
|
|
'/(playstation\s[34portablevi]+)/i' // Playstation |
155
|
|
|
], [self::MODEL, [self::VENDOR, 'Sony'], [self::TYPE, self::CONSOLE]], [ |
156
|
|
|
|
157
|
|
|
'/(sprint\s(\w+))/i' // Sprint Phones |
158
|
|
|
], [[self::VENDOR, '__str', 'sprint.vendor'], [self::MODEL, '__str', 'sprint.model'], [self::TYPE, self::MOBILE]], [ |
159
|
|
|
|
160
|
|
|
'/(htc)[;_\s-]+([\w\s]+(?=\)|\sbuild)|\w+)/i', // HTC |
161
|
|
|
'/(zte)-(\w*)/i', // ZTE |
162
|
|
|
'/(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i' |
163
|
|
|
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony |
164
|
|
|
], [self::VENDOR, [self::MODEL, '/_/', ' '], [self::TYPE, self::MOBILE]], [ |
165
|
|
|
|
166
|
|
|
'/(nexus\s9)/i' // HTC Nexus 9 |
167
|
|
|
], [self::MODEL, [self::VENDOR, 'HTC'], [self::TYPE, self::TABLET]], [ |
168
|
|
|
|
169
|
|
|
'/d\/huawei([\w\s-]+)[;\)]/i', |
170
|
|
|
'/(nexus\s6p)/i' // Huawei |
171
|
|
|
], [self::MODEL, [self::VENDOR, 'Huawei'], [self::TYPE, self::MOBILE]], [ |
172
|
|
|
|
173
|
|
|
'/(microsoft);\s(lumia[\s\w]+)/i' // Microsoft Lumia |
174
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
175
|
|
|
|
176
|
|
|
'/[\s\(;](xbox(?:\sone)?)[\s\);]/i' // Microsoft Xbox |
177
|
|
|
], [self::MODEL, [self::VENDOR, 'Microsoft'], [self::TYPE, self::CONSOLE]], [ |
178
|
|
|
'/(kin\.[onetw]{3})/i' // Microsoft Kin |
179
|
|
|
], [[self::MODEL, '/\./', ' '], [self::VENDOR, 'Microsoft'], [self::TYPE, self::MOBILE]], [ |
180
|
|
|
|
181
|
|
|
// Motorola |
182
|
|
|
'/\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)[\w\s]+build\//i', |
183
|
|
|
'/mot[\s-]?(\w*)/i', |
184
|
|
|
'/(XT\d{3,4}) build\//i', |
185
|
|
|
'/(nexus\s6)/i' |
186
|
|
|
], [self::MODEL, [self::VENDOR, 'Motorola'], [self::TYPE, self::MOBILE]], [ |
187
|
|
|
'/android.+\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i' |
188
|
|
|
], [self::MODEL, [self::VENDOR, 'Motorola'], [self::TYPE, self::TABLET]], [ |
189
|
|
|
|
190
|
|
|
'/hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i' // HbbTV devices |
191
|
|
|
], [[self::VENDOR, '__trim'], [self::MODEL, '__trim'], [self::TYPE, self::SMART_TV]], [ |
192
|
|
|
|
193
|
|
|
'/hbbtv.+maple;(\d+)/i' |
194
|
|
|
], [[self::MODEL, '/^/', 'SMART_TV'], [self::VENDOR, 'Samsung'], [self::TYPE, self::SMART_TV]], [ |
195
|
|
|
|
196
|
|
|
'/\(dtv[\);].+(aquos)/i' // Sharp |
197
|
|
|
], [self::MODEL, [self::VENDOR, 'Sharp'], [self::TYPE, self::SMART_TV]], [ |
198
|
|
|
|
199
|
|
|
'/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus 10))/i', |
200
|
|
|
'/((SM-T\w+))/i' |
201
|
|
|
], [[self::VENDOR, 'Samsung'], self::MODEL, [self::TYPE, self::TABLET]], [ // Samsung |
202
|
|
|
'/smart-tv.+(samsung)/i' |
203
|
|
|
], [self::VENDOR, [self::TYPE, self::SMART_TV], self::MODEL], [ |
204
|
|
|
'/((s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+))/i', |
205
|
|
|
'/(sam[sung]*)[\s-]*(\w+-?[\w-]*)/i', |
206
|
|
|
'/sec-((sgh\w+))/i' |
207
|
|
|
], [[self::VENDOR, 'Samsung'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
208
|
|
|
|
209
|
|
|
'/sie-(\w*)/i' // Siemens |
210
|
|
|
], [self::MODEL, [self::VENDOR, 'Siemens'], [self::TYPE, self::MOBILE]], [ |
211
|
|
|
|
212
|
|
|
'/(maemo|nokia).*(n900|lumia\s\d+)/i', // Nokia |
213
|
|
|
'/(nokia)[\s_-]?([\w-]*)/i' |
214
|
|
|
], [[self::VENDOR, 'Nokia'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
215
|
|
|
|
216
|
|
|
'/android[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i' // Acer |
217
|
|
|
], [self::MODEL, [self::VENDOR, 'Acer'], [self::TYPE, self::TABLET]], [ |
218
|
|
|
|
219
|
|
|
'/android.+([vl]k\-?\d{3})\s+build/i' // LG Tablet |
220
|
|
|
], [self::MODEL, [self::VENDOR, 'LG'], [self::TYPE, self::TABLET]], [ |
221
|
|
|
'/android\s3\.[\s\w;-]{10}(lg?)-([06cv9]{3,4})/i' // LG Tablet |
222
|
|
|
], [[self::VENDOR, 'LG'], self::MODEL, [self::TYPE, self::TABLET]], [ |
223
|
|
|
'/(lg) netcast\.tv/i' // LG SMART_TV |
224
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::SMART_TV]], [ |
225
|
|
|
'/(nexus\s[45])/i', // LG |
226
|
|
|
'/lg[e;\s\/-]+(\w*)/i', |
227
|
|
|
'/android.+lg(\-?[\d\w]+)\s+build/i' |
228
|
|
|
], [self::MODEL, [self::VENDOR, 'LG'], [self::TYPE, self::MOBILE]], [ |
229
|
|
|
|
230
|
|
|
'/(lenovo)\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+))/i' // Lenovo tablets |
231
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
232
|
|
|
'/android.+(ideatab[a-z0-9\-\s]+)/i' // Lenovo |
233
|
|
|
], [self::MODEL, [self::VENDOR, 'Lenovo'], [self::TYPE, self::TABLET]], [ |
234
|
|
|
'/(lenovo)[_\s-]?([\w-]+)/i' |
235
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
236
|
|
|
|
237
|
|
|
'/linux;.+((jolla));/i' // Jolla |
238
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
239
|
|
|
|
240
|
|
|
'/((pebble))app\/[\d\.]+\s/i' // Pebble |
241
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::WEARABLE]], [ |
242
|
|
|
|
243
|
|
|
'/android.+;\s(oppo)\s?([\w\s]+)\sbuild/i' // OPPO |
244
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::MOBILE]], [ |
245
|
|
|
|
246
|
|
|
'/crkey/i' // Google Chromecast |
247
|
|
|
], [[self::MODEL, 'Chromecast'], [self::VENDOR, 'Google']], [ |
248
|
|
|
|
249
|
|
|
'/android.+;\s(glass)\s\d/i' // Google Glass |
250
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::WEARABLE]], [ |
251
|
|
|
|
252
|
|
|
'/android.+;\s(pixel c)[\s)]/i' // Google Pixel C |
253
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::TABLET]], [ |
254
|
|
|
|
255
|
|
|
'/android.+;\s(pixel( [23])?( xl)?)[\s)]/i' // Google Pixel |
256
|
|
|
], [self::MODEL, [self::VENDOR, 'Google'], [self::TYPE, self::MOBILE]], [ |
257
|
|
|
|
258
|
|
|
'/android.+;\s(\w+)\s+build\/hm\1/i', // Xiaomi Hongmi 'numeric' models |
259
|
|
|
'/android.+(hm[\s\-_]*note?[\s_]*(?:\d\w)?)\s+build/i', // Xiaomi Hongmi |
260
|
|
|
'/android.+(mi[\s\-_]*(?:a\d|one|one[\s_]plus|note lte)?[\s_]*(?:\d?\w?)[\s_]*(?:plus)?)\s+build/i', |
261
|
|
|
// Xiaomi Mi |
262
|
|
|
'/android.+(redmi[\s\-_]*(?:note)?(?:[\s_]*[\w\s]+))\s+build/i' // Redmi Phones |
263
|
|
|
], [[self::MODEL, '/_/', ' '], [self::VENDOR, 'Xiaomi'], [self::TYPE, self::MOBILE]], [ |
264
|
|
|
'/android.+(mi[\s\-_]*(?:pad)(?:[\s_]*[\w\s]+))\s+build/i' // Mi Pad tablets |
265
|
|
|
], [[self::MODEL, '/_/', ' '], [self::VENDOR, 'Xiaomi'], [self::TYPE, self::TABLET]], [ |
266
|
|
|
'/android.+;\s(m[1-5]\snote)\sbuild/i' // Meizu |
267
|
|
|
], [self::MODEL, [self::VENDOR, 'Meizu'], [self::TYPE, self::MOBILE]], [ |
268
|
|
|
'/(mz)-([\w-]{2,})/i' |
269
|
|
|
], [[self::VENDOR, 'Meizu'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
270
|
|
|
|
271
|
|
|
'/android.+a000(1)\s+build/i', // OnePlus |
272
|
|
|
'/android.+oneplus\s(a\d{4})\s+build/i' |
273
|
|
|
], [self::MODEL, [self::VENDOR, 'OnePlus'], [self::TYPE, self::MOBILE]], [ |
274
|
|
|
|
275
|
|
|
'/android.+[;\/]\s*(RCT[\d\w]+)\s+build/i' // RCA Tablets |
276
|
|
|
], [self::MODEL, [self::VENDOR, 'RCA'], [self::TYPE, self::TABLET]], [ |
277
|
|
|
|
278
|
|
|
'/android.+[;\/\s]+(Venue[\d\s]{2,7})\s+build/i' // Dell Venue Tablets |
279
|
|
|
], [self::MODEL, [self::VENDOR, 'Dell'], [self::TYPE, self::TABLET]], [ |
280
|
|
|
|
281
|
|
|
'/android.+[;\/]\s*(Q[T|M][\d\w]+)\s+build/i' // Verizon Tablet |
282
|
|
|
], [self::MODEL, [self::VENDOR, 'Verizon'], [self::TYPE, self::TABLET]], [ |
283
|
|
|
|
284
|
|
|
'/android.+[;\/]\s+(Barnes[&\s]+Noble\s+|BN[RT])(V?.*)\s+build/i' // Barnes & Noble Tablet |
285
|
|
|
], [[self::VENDOR, 'Barnes & Noble'], self::MODEL, [self::TYPE, self::TABLET]], [ |
286
|
|
|
|
287
|
|
|
'/android.+[;\/]\s+(TM\d{3}.*\b)\s+build/i' // Barnes & Noble Tablet |
288
|
|
|
], [self::MODEL, [self::VENDOR, 'NuVision'], [self::TYPE, self::TABLET]], [ |
289
|
|
|
|
290
|
|
|
'/android.+;\s(k88)\sbuild/i' // ZTE K Series Tablet |
291
|
|
|
], [self::MODEL, [self::VENDOR, 'ZTE'], [self::TYPE, self::TABLET]], [ |
292
|
|
|
|
293
|
|
|
'/android.+[;\/]\s*(gen\d{3})\s+build.*49h/i' // Swiss GEN Mobile |
294
|
|
|
], [self::MODEL, [self::VENDOR, 'Swiss'], [self::TYPE, self::MOBILE]], [ |
295
|
|
|
|
296
|
|
|
'/android.+[;\/]\s*(zur\d{3})\s+build/i' // Swiss ZUR Tablet |
297
|
|
|
], [self::MODEL, [self::VENDOR, 'Swiss'], [self::TYPE, self::TABLET]], [ |
298
|
|
|
|
299
|
|
|
'/android.+[;\/]\s*((Zeki)?TB.*\b)\s+build/i' // Zeki Tablets |
300
|
|
|
], [self::MODEL, [self::VENDOR, 'Zeki'], [self::TYPE, self::TABLET]], [ |
301
|
|
|
|
302
|
|
|
'/(android).+[;\/]\s+([YR]\d{2})\s+build/i', |
303
|
|
|
'/android.+[;\/]\s+(Dragon[\-\s]+Touch\s+|DT)(\w{5})\sbuild/i' // Dragon Touch Tablet |
304
|
|
|
], [[self::VENDOR, 'Dragon Touch'], self::MODEL, [self::TYPE, self::TABLET]], [ |
305
|
|
|
|
306
|
|
|
'/android.+[;\/]\s*(NS-?\w{0,9})\sbuild/i' // Insignia Tablets |
307
|
|
|
], [self::MODEL, [self::VENDOR, 'Insignia'], [self::TYPE, self::TABLET]], [ |
308
|
|
|
|
309
|
|
|
'/android.+[;\/]\s*((NX|Next)-?\w{0,9})\s+build/i' // NextBook Tablets |
310
|
|
|
], [self::MODEL, [self::VENDOR, 'NextBook'], [self::TYPE, self::TABLET]], [ |
311
|
|
|
|
312
|
|
|
'/android.+[;\/]\s*(Xtreme\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\s+build/i' |
313
|
|
|
], [[self::VENDOR, 'Voice'], self::MODEL, [self::TYPE, self::MOBILE]], [ // Voice Xtreme Phones |
314
|
|
|
|
315
|
|
|
'/android.+[;\/]\s*(LVTEL\-)?(V1[12])\s+build/i' // LvTel Phones |
316
|
|
|
], [[self::VENDOR, 'LvTel'], self::MODEL, [self::TYPE, self::MOBILE]], [ |
317
|
|
|
|
318
|
|
|
'/android.+;\s(PH-1)\s/i' |
319
|
|
|
], [self::MODEL, [self::VENDOR, 'Essential'], [self::TYPE, self::MOBILE]], [ // Essential PH-1 |
320
|
|
|
|
321
|
|
|
'/android.+[;\/]\s*(V(100MD|700NA|7011|917G).*\b)\s+build/i' // Envizen Tablets |
322
|
|
|
], [self::MODEL, [self::VENDOR, 'Envizen'], [self::TYPE, self::TABLET]], [ |
323
|
|
|
|
324
|
|
|
'/android.+[;\/]\s*(Le[\s\-]+Pan)[\s\-]+(\w{1,9})\s+build/i' // Le Pan Tablets |
325
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
326
|
|
|
|
327
|
|
|
'/android.+[;\/]\s*(Trio[\s\-]*.*)\s+build/i' // MachSpeed Tablets |
328
|
|
|
], [self::MODEL, [self::VENDOR, 'MachSpeed'], [self::TYPE, self::TABLET]], [ |
329
|
|
|
|
330
|
|
|
'/android.+[;\/]\s*(Trinity)[\-\s]*(T\d{3})\s+build/i' // Trinity Tablets |
331
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
332
|
|
|
|
333
|
|
|
'/android.+[;\/]\s*TU_(1491)\s+build/i' // Rotor Tablets |
334
|
|
|
], [self::MODEL, [self::VENDOR, 'Rotor'], [self::TYPE, self::TABLET]], [ |
335
|
|
|
|
336
|
|
|
'/android.+(KS(.+))\s+build/i' // Amazon Kindle Tablets |
337
|
|
|
], [self::MODEL, [self::VENDOR, 'Amazon'], [self::TYPE, self::TABLET]], [ |
338
|
|
|
|
339
|
|
|
'/android.+(Gigaset)[\s\-]+(Q\w{1,9})\s+build/i' // Gigaset Tablets |
340
|
|
|
], [self::VENDOR, self::MODEL, [self::TYPE, self::TABLET]], [ |
341
|
|
|
|
342
|
|
|
'/\s(tablet|tab)[;\/]/i', // Unidentifiable Tablet |
343
|
|
|
'/\s(mobile)(?:[;\/]|\ssafari)/i' // Unidentifiable Mobile |
344
|
|
|
], [[self::TYPE, '__lowerize'], self::VENDOR, self::MODEL], [ |
345
|
|
|
|
346
|
|
|
'/[\s\/\(](smart-?tv)[;\)]/i' // SMART_TV |
347
|
|
|
], [[self::TYPE, self::SMART_TV]], [ |
348
|
|
|
|
349
|
|
|
'/(android[\w\.\s\-]{0,9});.+build/i' // Generic Android Device |
350
|
|
|
], [self::MODEL, [self::VENDOR, 'Generic']] |
351
|
|
|
|
352
|
|
|
]; |
353
|
|
|
} |
354
|
|
|
} |
355
|
|
|
|