From 466a8b26be6e931aafd4eb981607ce9b28fca5f4 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Mon, 12 May 2025 21:10:55 +0700 Subject: [PATCH] Improve device detection: OnePlus --- src/main/ua-parser.js | 14 +- test/data/ua/device/_others.json | 9 -- test/data/ua/device/oneplus.json | 228 ++++++++++++++++++++++++++++++- test/data/ua/device/oppo.json | 9 -- test/unit/ua-ch.js | 2 +- 5 files changed, 230 insertions(+), 32 deletions(-) diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index d6b7e04..d1624da 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -578,12 +578,17 @@ / ([\w ]+) miui\/v?\d/i ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [ + // OnePlus + /droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-k]\w[1m]10)\b/i, + /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i + ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [ + // OPPO /; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [ /\b(opd2(\d{3}a?))(?: bui|\))/i - ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [ + ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [ // BLU Vivo Series /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i @@ -643,11 +648,6 @@ /\b(?:sony)?sgp\w+(?: bui|\))/i ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [ - // OnePlus - / (kb2005|in20[12]5|be20[12][59])\b/i, - /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i - ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [ - // Amazon /(alexa)webm/i, /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i, // Kindle Fire without Silk / Echo Show @@ -736,7 +736,7 @@ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i, // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan - /; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL + /; (blu|hmd|imo|oneplus|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/OnePlus/TCL /(hp) ([\w ]+\w)/i, // HP iPAQ /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia /(oppo) ?([\w ]+) bui/i // OPPO diff --git a/test/data/ua/device/_others.json b/test/data/ua/device/_others.json index b545f39..c58a01e 100644 --- a/test/data/ua/device/_others.json +++ b/test/data/ua/device/_others.json @@ -122,15 +122,6 @@ "type": "undefined" } }, - { - "desc": "OnePlus 7T Pro", - "ua": "Mozilla/5.0 (Linux; Android 10; HD1913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36 EdgA/110.0.1587.66", - "expect": { - "vendor": "undefined", - "model": "HD1913", - "type": "mobile" - } - }, { "desc": "Philips SmartTV", "ua": "Opera/9.80 HbbTV/1.1.1 (; Philips; ; ; ; ) NETTV/4.0.2; en) Version/11.60", diff --git a/test/data/ua/device/oneplus.json b/test/data/ua/device/oneplus.json index 74ddcf6..a02c0f3 100644 --- a/test/data/ua/device/oneplus.json +++ b/test/data/ua/device/oneplus.json @@ -54,11 +54,20 @@ } }, { - "desc": "OnePlus 8T", - "ua": "Mozilla/5.0 (Linux; Android 11; KB2005) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", + "desc": "OnePlus 7T Pro", + "ua": "Mozilla/5.0 (Linux; Android 10; HD1913) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.57 Mobile Safari/537.36 EdgA/110.0.1587.66", "expect": { "vendor": "OnePlus", - "model": "KB2005", + "model": "HD1913", + "type": "mobile" + } + }, + { + "desc": "OnePlus 8 Lite", + "ua": "Mozilla/5.0 (Linux; Android 10; OnePlus 8 Lite) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4741.47 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "8 Lite", "type": "mobile" } }, @@ -72,11 +81,191 @@ } }, { - "desc": "OnePlus Nord N100", - "ua": "Mozilla/5.0 (Linux; Android 10; BE2015 Build/QKQ1.200719.002; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36", + "desc": "OnePlus 8T", + "ua": "Mozilla/5.0 (Linux; Android 11; KB2005) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.127 Mobile Safari/537.36", "expect": { "vendor": "OnePlus", - "model": "BE2015", + "model": "KB2005", + "type": "mobile" + } + }, + { + "desc": "OnePlus 9", + "ua": "Mozilla/5.0 (Android 14; SDK 28; OnePlus 9) Gecko/128.0 Firefox/128.0", + "expect": { + "vendor": "OnePlus", + "model": "9", + "type": "mobile" + } + }, + { + "desc": "OnePlus 9", + "ua": "Mozilla/5.0 (Linux; Android 13; LE2113 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/113.0.5672.162 Mobile Safari/537.36 Flipboard/4.3.14/5377,4.3.14.5377", + "expect": { + "vendor": "OnePlus", + "model": "LE2113", + "type": "mobile" + } + }, + { + "desc": "OnePlus 9 Pro", + "ua": "Mozilla/5.0 (Linux; Android 13; LE2123) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.128 Mobile Safari/537.36 OPR/73.0.3832.69371", + "expect": { + "vendor": "OnePlus", + "model": "LE2123", + "type": "mobile" + } + }, + { + "desc": "OnePlus 9R", + "ua": "Mozilla/5.0 (Linux; arm_64; Android 11; LE2100) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.85 YaApp_Android/21.114.1 YaSearchBrowser/21.114.1 BroPP/1.0 SA/3 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "LE2100", + "type": "mobile" + } + }, + { + "desc": "OnePlus 9RT 5G", + "ua": "Mozilla/5.0 (Linux; U; Android 11; en-in; MT2111 Build/RKQ1.210614.002) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 GSA/13.14.15.23.arm64", + "expect": { + "vendor": "OnePlus", + "model": "MT2111", + "type": "mobile" + } + }, + { + "desc": "OnePlus 10 Pro", + "ua": "Mozilla/5.0 (Linux; arm_64; Android 12; NE2213) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.148 YaBrowser/22.7.5.90.00 SA/3 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "NE2213", + "type": "mobile" + } + }, + { + "desc": "OnePlus 10RT", + "ua": "Mozilla/5.0 (Linux; Android 13; CPH2413) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "CPH2413", + "type": "mobile" + } + }, + { + "desc": "OnePlus 11R", + "ua": "Mozilla/5.0 (Linux; Android 14; CPH2487) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "CPH2487", + "type": "mobile" + } + }, + { + "desc": "OnePlus 13", + "ua": "Mozilla/5.0 (Linux; Android 15; CPH2653 Build/AP3A.240617.008; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/134.0.6998.92 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/504.0.0.69.64;IABMV/1;] FBNV/5", + "expect": { + "vendor": "OnePlus", + "model": "CPH2653", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace", + "ua": "Mozilla/5.0 (Linux; U; Android 15; zh-cn; PGKM10 Build/AP3A.240617.008) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.168 Mobile Safari/537.36 HeyTapBrowser/40.9.6.2", + "expect": { + "vendor": "OnePlus", + "model": "PGKM10", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 2", + "ua": "Mozilla/5.0 (Linux; U; Android 14; zh-CN; PHK110 Build/UKQ1.231108.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/17.3.6.1367 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PHK110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 2 Pro", + "ua": "Mozilla/5.0 (Linux; arm; Android 13; PJA110) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 YaBrowser/23.1.0.284.00 (beta) SA/3 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PJA110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 2V", + "ua": "Mozilla/5.0 (Linux; U; Android 15; zh-cn; PHP110 Build/AP3A.240617.008) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.71 MQQBrowser/16.3 Mobile Safari/537.36 COVC/047707", + "expect": { + "vendor": "OnePlus", + "model": "PHP110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 3", + "ua": "Mozilla/5.0 (Linux; U; Android 15; zh-CN; PJE110 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/123.0.6312.80 Quark/7.9.7.782 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PJE110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 3 Pro 5G", + "ua": "Mozilla/5.0 (Linux; U; Android 15; zh-CN; PJX110 Build/UKQ1.231108.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/123.0.6312.80 Quark/7.11.4.814 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PJX110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 3V", + "ua": "Mozilla/5.0 (Linux; U; Android 14; zh-cn; PJF110 Build/UP1A.231005.007) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.61 Mobile Safari/537.36 HeyTapBrowser/40.8.33.1.2beta", + "expect": { + "vendor": "OnePlus", + "model": "PJF110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace 5", + "ua": "Mozilla/5.0 (Linux; U; Android 15; zh-cn; PKG110 Build/UKQ1.231108.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.168 Mobile Safari/537.36 HeyTapBrowser/40.9.9.2", + "expect": { + "vendor": "OnePlus", + "model": "PKG110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace Pro", + "ua": "Mozilla/5.0 (Linux; U; Android 14; zh-CN; PGP110 Build/UKQ1.230924.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/17.2.9.1360 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PGP110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Ace Racing Edition", + "ua": "Mozilla/5.0 (Linux; U; Android 13; zh-CN; PGZ110 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/17.3.6.1367 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "PGZ110", + "type": "mobile" + } + }, + { + "desc": "OnePlus Nord CE 4", + "ua": "Mozilla/5.0 (Linux; Android 14; CPH2613) AppleWebKit/537.36 (KHTML, like Gecko) JioSphere/5.0.4 Chrome/119.0.6045.193 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "CPH2613", "type": "mobile" } }, @@ -89,6 +278,33 @@ "type": "mobile" } }, + { + "desc": "OnePlus Nord N30 SE 5G", + "ua": "Mozilla/5.0 (Linux; Android 14; CPH2605 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/135.0.7049.92 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/509.0.0.67.28;IABMV/1;]", + "expect": { + "vendor": "OnePlus", + "model": "CPH2605", + "type": "mobile" + } + }, + { + "desc": "OnePlus Nord N100", + "ua": "Mozilla/5.0 (Linux; Android 10; BE2015 Build/QKQ1.200719.002; xx-xx) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36", + "expect": { + "vendor": "OnePlus", + "model": "BE2015", + "type": "mobile" + } + }, + { + "desc": "OnePlus Open", + "ua": "Dalvik/2.1.0 (Linux; U; Android 15; CPH2551 Build/AP3A.240617.008)", + "expect": { + "vendor": "OnePlus", + "model": "CPH2551", + "type": "mobile" + } + }, { "desc": "OnePlus Pad Go 11.35", "ua": "Mozilla/5.0 (Linux; arm_64; Android 14; OPD2304) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.629 YaApp_Android/24.101/apad YaSearchBrowser/24.101/apad BroPP/1.0 SA/3 Mobile Safari/537.36", diff --git a/test/data/ua/device/oppo.json b/test/data/ua/device/oppo.json index 367039e..ab63e26 100644 --- a/test/data/ua/device/oppo.json +++ b/test/data/ua/device/oppo.json @@ -1,13 +1,4 @@ [ - { - "desc": "OnePlus 10RT", - "ua": "Mozilla/5.0 (Linux; Android 13; CPH2413) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Mobile Safari/537.36", - "expect": { - "vendor": "OPPO", - "model": "CPH2413", - "type": "mobile" - } - }, { "desc": "OPPO Pad", "ua": "Mozilla/5.0 (Linux; U; Android 13; zh-CN; OPD2101 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UCBrowser/16.3.9.1290 Mobile Safari/537.36", diff --git a/test/unit/ua-ch.js b/test/unit/ua-ch.js index 54e2f9a..18dd09a 100644 --- a/test/unit/ua-ch.js +++ b/test/unit/ua-ch.js @@ -470,7 +470,7 @@ describe('Identify vendor & type of device from given model name', () => { { model: 'CPH2389', expect: { - vendor : 'OPPO', + vendor : 'OnePlus', type : 'mobile' } },