mobileesp_converted 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/java_source/UAgentInfo.java +364 -241
- data/lib/mobileesp_converted/user_agent_info.rb +456 -300
- data/lib/mobileesp_converted/version.rb +1 -1
- data/spec/mobileesp_converted/user_agent_info_spec.rb +26 -0
- data/spec/spec_helper.rb +1 -1
- metadata +19 -5
- checksums.yaml +0 -7
data/java_source/UAgentInfo.java
CHANGED
@@ -1,35 +1,26 @@
|
|
1
1
|
/* *******************************************
|
2
|
-
// Copyright 2010-
|
2
|
+
// Copyright 2010-2013, Anthony Hand
|
3
3
|
//
|
4
|
-
// File version
|
5
|
-
//
|
6
|
-
//
|
4
|
+
// File version 2013.08.01 (August 1, 2013)
|
5
|
+
// Updates:
|
6
|
+
// - Updated DetectMobileQuick(). Moved the 'Exclude Tablets' logic to the top of the method to fix a logic bug.
|
7
7
|
//
|
8
|
-
// File version
|
9
|
-
//
|
10
|
-
//
|
11
|
-
//
|
12
|
-
//
|
8
|
+
// File version 2013.07.13 (July 13, 2013)
|
9
|
+
// Updates:
|
10
|
+
// - Added support for Tizen: variable and DetectTizen().
|
11
|
+
// - Added support for Meego: variable and DetectMeego().
|
12
|
+
// - Added support for Windows Phone 8: variable and DetectWindowsPhone8().
|
13
|
+
// - Added a generic Windows Phone method: DetectWindowsPhone().
|
14
|
+
// - Added support for BlackBerry 10 OS: variable and DetectBlackBerry10Phone().
|
15
|
+
// - Added support for PlayStation Vita handheld: variable and DetectGamingHandheld().
|
16
|
+
// - Updated DetectTierIphone(). Added Tizen; updated the Windows Phone, BB10, and PS Vita support.
|
17
|
+
// - Updated DetectWindowsMobile(). Uses generic DetectWindowsPhone() method rather than WP7.
|
18
|
+
// - Updated DetectSmartphone(). Uses the detectTierIphone() method.
|
19
|
+
// - Updated DetectSonyMylo() with more efficient code.
|
20
|
+
// - Removed DetectGarminNuvifone() from DetectTierIphone(). How many are left in market in 2013? It is detected as a RichCSS Tier device.
|
21
|
+
// - Removed the deviceXoom variable. It was unused.
|
22
|
+
// - Added detection support for the Obigo mobile browser to DetectMobileQuick().
|
13
23
|
//
|
14
|
-
// File version date: April 11, 2012
|
15
|
-
// Update:
|
16
|
-
// - Added a new variable for the new BlackBerry Curve Touch (9380): deviceBBCurveTouch.
|
17
|
-
// - Updated DetectBlackBerryTouch() to support the new BlackBerry Curve Touch (9380).
|
18
|
-
//
|
19
|
-
// File version date: January 21, 2012
|
20
|
-
// Update:
|
21
|
-
// - Moved Windows Phone 7 to the iPhone Tier. WP7.5's IE 9-based browser is good enough now.
|
22
|
-
// - Added a new variable for 2 versions of the new BlackBerry Bold Touch (9900 and 9930): deviceBBBoldTouch.
|
23
|
-
// - Updated DetectBlackBerryTouch() to support the 2 versions of the new BlackBerry Bold Touch (9900 and 9930).
|
24
|
-
// - Updated DetectKindle() to focus on eInk devices only. The Kindle Fire should be detected as a regular Android device.
|
25
|
-
//
|
26
|
-
// File version date: August 22, 2011
|
27
|
-
// Update:
|
28
|
-
// - Updated DetectAndroidTablet() to fix a bug I introduced in the last fix!
|
29
|
-
//
|
30
|
-
// File version date: August 16, 2011
|
31
|
-
// Update:
|
32
|
-
// - Updated DetectAndroidTablet() to exclude Opera Mini, which was falsely reporting as running on a tablet device when on a phone.
|
33
24
|
//
|
34
25
|
//
|
35
26
|
// LICENSE INFORMATION
|
@@ -74,12 +65,16 @@ public class UAgentInfo {
|
|
74
65
|
private String httpAccept = "";
|
75
66
|
|
76
67
|
// Let's store values for quickly accessing the same info multiple times.
|
77
|
-
public boolean
|
78
|
-
public boolean
|
79
|
-
public boolean
|
80
|
-
public boolean
|
81
|
-
public boolean
|
82
|
-
public boolean
|
68
|
+
public boolean initCompleted = false;
|
69
|
+
public boolean isWebkit = false; //Stores the result of DetectWebkit()
|
70
|
+
public boolean isMobilePhone = false; //Stores the result of DetectMobileQuick()
|
71
|
+
public boolean isIphone = false; //Stores the result of DetectIphone()
|
72
|
+
public boolean isAndroid = false; //Stores the result of DetectAndroid()
|
73
|
+
public boolean isAndroidPhone = false; //Stores the result of DetectAndroidPhone()
|
74
|
+
public boolean isTierTablet = false; //Stores the result of DetectTierTablet()
|
75
|
+
public boolean isTierIphone = false; //Stores the result of DetectTierIphone()
|
76
|
+
public boolean isTierRichCss = false; //Stores the result of DetectTierRichCss()
|
77
|
+
public boolean isTierGenericMobile = false; //Stores the result of DetectTierOtherPhones()
|
83
78
|
|
84
79
|
// Initialize some initial smartphone string variables.
|
85
80
|
public static final String engineWebKit = "webkit";
|
@@ -91,16 +86,10 @@ public class UAgentInfo {
|
|
91
86
|
|
92
87
|
public static final String deviceAndroid = "android";
|
93
88
|
public static final String deviceGoogleTV = "googletv";
|
94
|
-
public static final String deviceXoom = "xoom"; //Motorola Xoom
|
95
89
|
public static final String deviceHtcFlyer = "htc_flyer"; //HTC Flyer
|
96
90
|
|
97
|
-
public static final String deviceSymbian = "symbian";
|
98
|
-
public static final String deviceS60 = "series60";
|
99
|
-
public static final String deviceS70 = "series70";
|
100
|
-
public static final String deviceS80 = "series80";
|
101
|
-
public static final String deviceS90 = "series90";
|
102
|
-
|
103
91
|
public static final String deviceWinPhone7 = "windows phone os 7";
|
92
|
+
public static final String deviceWinPhone8 = "windows phone 8";
|
104
93
|
public static final String deviceWinMob = "windows ce";
|
105
94
|
public static final String deviceWindows = "windows";
|
106
95
|
public static final String deviceIeMob = "iemobile";
|
@@ -108,6 +97,7 @@ public class UAgentInfo {
|
|
108
97
|
public static final String enginePie = "wm5 pie"; //An old Windows Mobile
|
109
98
|
|
110
99
|
public static final String deviceBB = "blackberry";
|
100
|
+
public static final String deviceBB10 = "bb10"; //For the new BB 10 OS
|
111
101
|
public static final String vndRIM = "vnd.rim"; //Detectable when BB devices emulate IE or Firefox
|
112
102
|
public static final String deviceBBStorm = "blackberry95"; //Storm 1 and 2
|
113
103
|
public static final String deviceBBBold = "blackberry97"; //Bold 97x0 (non-touch)
|
@@ -118,17 +108,25 @@ public class UAgentInfo {
|
|
118
108
|
public static final String deviceBBTorch = "blackberry 98"; //Torch
|
119
109
|
public static final String deviceBBPlaybook = "playbook"; //PlayBook tablet
|
120
110
|
|
111
|
+
public static final String deviceSymbian = "symbian";
|
112
|
+
public static final String deviceS60 = "series60";
|
113
|
+
public static final String deviceS70 = "series70";
|
114
|
+
public static final String deviceS80 = "series80";
|
115
|
+
public static final String deviceS90 = "series90";
|
116
|
+
|
121
117
|
public static final String devicePalm = "palm";
|
122
118
|
public static final String deviceWebOS = "webos"; //For Palm's line of WebOS devices
|
123
119
|
public static final String deviceWebOShp = "hpwos"; //For HP's line of WebOS devices
|
124
|
-
|
125
120
|
public static final String engineBlazer = "blazer"; //Old Palm
|
126
121
|
public static final String engineXiino = "xiino"; //Another old Palm
|
127
122
|
|
128
|
-
public static final String deviceKindle = "kindle"; //Amazon Kindle, eInk one
|
129
|
-
public static final String engineSilk = "silk"; //Amazon's accelerated Silk browser for Kindle Fire
|
130
|
-
|
131
123
|
public static final String deviceNuvifone = "nuvifone"; //Garmin Nuvifone
|
124
|
+
public static final String deviceBada = "bada"; //Samsung's Bada OS
|
125
|
+
public static final String deviceTizen = "tizen"; //Tizen OS
|
126
|
+
public static final String deviceMeego = "meego"; //Meego OS
|
127
|
+
|
128
|
+
public static final String deviceKindle = "kindle"; //Amazon Kindle, eInk one
|
129
|
+
public static final String engineSilk = "silk-accelerated"; //Amazon's accelerated Silk browser for Kindle Fire
|
132
130
|
|
133
131
|
//Initialize variables for mobile-specific content.
|
134
132
|
public static final String vndwap = "vnd.wap";
|
@@ -140,6 +138,7 @@ public class UAgentInfo {
|
|
140
138
|
public static final String deviceDanger = "danger";
|
141
139
|
public static final String deviceHiptop = "hiptop";
|
142
140
|
public static final String devicePlaystation = "playstation";
|
141
|
+
public static final String devicePlaystationVita = "vita";
|
143
142
|
public static final String deviceNintendoDs = "nitro";
|
144
143
|
public static final String deviceNintendo = "nintendo";
|
145
144
|
public static final String deviceWii = "wii";
|
@@ -153,6 +152,8 @@ public class UAgentInfo {
|
|
153
152
|
public static final String deviceMidp = "midp"; //a mobile Java technology
|
154
153
|
public static final String uplink = "up.link";
|
155
154
|
public static final String engineTelecaQ = "teleca q"; //a modern feature phone browser
|
155
|
+
public static final String engineObigo = "obigo"; //W 10 is a modern feature phone browser
|
156
|
+
|
156
157
|
public static final String devicePda = "pda"; //some devices report themselves as PDAs
|
157
158
|
public static final String mini = "mini"; //Some mobile browsers put "mini" in their names.
|
158
159
|
public static final String mobile = "mobile"; //Some mobile browsers put "mobile" in their user agent strings.
|
@@ -169,7 +170,7 @@ public class UAgentInfo {
|
|
169
170
|
public static final String manuericsson = "ericsson";
|
170
171
|
public static final String manuSamsung1 = "sec-sgh";
|
171
172
|
public static final String manuSony = "sony";
|
172
|
-
public static final String manuHtc = "htc";
|
173
|
+
public static final String manuHtc = "htc";
|
173
174
|
|
174
175
|
//In some UserAgents, the only clue is the operator.
|
175
176
|
public static final String svcDocomo = "docomo";
|
@@ -258,12 +259,22 @@ public class UAgentInfo {
|
|
258
259
|
* Initialize Key Stored Values.
|
259
260
|
*/
|
260
261
|
public void initDeviceScan() {
|
261
|
-
|
262
|
+
//Save these properties to speed processing
|
263
|
+
this.isWebkit = detectWebkit();
|
264
|
+
this.isIphone = detectIphone();
|
265
|
+
this.isAndroid = detectAndroid();
|
262
266
|
this.isAndroidPhone = detectAndroidPhone();
|
267
|
+
|
268
|
+
//Generally, these tiers are the most useful for web development
|
269
|
+
this.isMobilePhone = detectMobileQuick();
|
263
270
|
this.isTierTablet = detectTierTablet();
|
264
271
|
this.isTierIphone = detectTierIphone();
|
272
|
+
|
273
|
+
//Optional: Comment these out if you NEVER use them
|
265
274
|
this.isTierRichCss = detectTierRichCss();
|
266
275
|
this.isTierGenericMobile = detectTierOtherPhones();
|
276
|
+
|
277
|
+
this.initCompleted = true;
|
267
278
|
}
|
268
279
|
|
269
280
|
/**
|
@@ -271,6 +282,10 @@ public class UAgentInfo {
|
|
271
282
|
* @return detection of an iPhone
|
272
283
|
*/
|
273
284
|
public boolean detectIphone() {
|
285
|
+
if ((this.initCompleted == true) ||
|
286
|
+
(this.isIphone == true))
|
287
|
+
return this.isIphone;
|
288
|
+
|
274
289
|
// The iPad and iPod touch say they're an iPhone! So let's disambiguate.
|
275
290
|
if (userAgent.indexOf(deviceIphone) != -1 &&
|
276
291
|
!detectIpad() &&
|
@@ -334,6 +349,10 @@ public class UAgentInfo {
|
|
334
349
|
* @return detection of an Android device
|
335
350
|
*/
|
336
351
|
public boolean detectAndroid() {
|
352
|
+
if ((this.initCompleted == true) ||
|
353
|
+
(this.isAndroid == true))
|
354
|
+
return this.isAndroid;
|
355
|
+
|
337
356
|
if ((userAgent.indexOf(deviceAndroid) != -1) ||
|
338
357
|
detectGoogleTV())
|
339
358
|
return true;
|
@@ -351,6 +370,10 @@ public class UAgentInfo {
|
|
351
370
|
* @return detection of an Android phone
|
352
371
|
*/
|
353
372
|
public boolean detectAndroidPhone() {
|
373
|
+
if ((this.initCompleted == true) ||
|
374
|
+
(this.isAndroidPhone == true))
|
375
|
+
return this.isAndroidPhone;
|
376
|
+
|
354
377
|
if (detectAndroid() && (userAgent.indexOf(mobile) != -1))
|
355
378
|
return true;
|
356
379
|
//Special check for Android phones with Opera Mobile. They should report here.
|
@@ -414,51 +437,45 @@ public class UAgentInfo {
|
|
414
437
|
* @return detection of a WebKit browser
|
415
438
|
*/
|
416
439
|
public boolean detectWebkit() {
|
440
|
+
if ((this.initCompleted == true) ||
|
441
|
+
(this.isWebkit == true))
|
442
|
+
return this.isWebkit;
|
443
|
+
|
417
444
|
if (userAgent.indexOf(engineWebKit) != -1) {
|
418
445
|
return true;
|
419
446
|
}
|
420
447
|
return false;
|
421
448
|
}
|
422
449
|
|
450
|
+
|
423
451
|
/**
|
424
|
-
* Detects if the current browser is
|
425
|
-
* @return detection of
|
452
|
+
* Detects if the current browser is EITHER a Windows Phone 7.x OR 8 device
|
453
|
+
* @return detection of Windows Phone 7.x OR 8
|
426
454
|
*/
|
427
|
-
public boolean
|
428
|
-
|
429
|
-
if (detectWebkit()
|
430
|
-
&& (userAgent.indexOf(deviceSymbian) != -1
|
431
|
-
|| userAgent.indexOf(deviceS60) != -1)) {
|
455
|
+
public boolean detectWindowsPhone() {
|
456
|
+
if (detectWindowsPhone7() || detectWindowsPhone8()) {
|
432
457
|
return true;
|
433
458
|
}
|
434
459
|
return false;
|
435
460
|
}
|
436
461
|
|
437
462
|
/**
|
438
|
-
*
|
439
|
-
*
|
440
|
-
* including older S60, Series 70, Series 80, Series 90, and UIQ,
|
441
|
-
* or other browsers running on these devices.
|
442
|
-
* @return detection of SymbianOS
|
463
|
+
* Detects a Windows Phone 7.x device (in mobile browsing mode).
|
464
|
+
* @return detection of Windows Phone 7
|
443
465
|
*/
|
444
|
-
public boolean
|
445
|
-
if (userAgent.indexOf(
|
446
|
-
|| userAgent.indexOf(deviceS60) != -1
|
447
|
-
|| userAgent.indexOf(deviceS70) != -1
|
448
|
-
|| userAgent.indexOf(deviceS80) != -1
|
449
|
-
|| userAgent.indexOf(deviceS90) != -1) {
|
466
|
+
public boolean detectWindowsPhone7() {
|
467
|
+
if (userAgent.indexOf(deviceWinPhone7) != -1) {
|
450
468
|
return true;
|
451
469
|
}
|
452
470
|
return false;
|
453
471
|
}
|
454
|
-
|
472
|
+
|
455
473
|
/**
|
456
|
-
* Detects
|
457
|
-
* Windows Phone
|
458
|
-
* @return detection of Windows Phone 7
|
474
|
+
* Detects a Windows Phone 8 device (in mobile browsing mode).
|
475
|
+
* @return detection of Windows Phone 8
|
459
476
|
*/
|
460
|
-
public boolean
|
461
|
-
if (userAgent.indexOf(
|
477
|
+
public boolean detectWindowsPhone8() {
|
478
|
+
if (userAgent.indexOf(deviceWinPhone8) != -1) {
|
462
479
|
return true;
|
463
480
|
}
|
464
481
|
return false;
|
@@ -466,13 +483,12 @@ public class UAgentInfo {
|
|
466
483
|
|
467
484
|
/**
|
468
485
|
* Detects if the current browser is a Windows Mobile device.
|
469
|
-
* Excludes Windows Phone 7 devices.
|
486
|
+
* Excludes Windows Phone 7.x and 8 devices.
|
470
487
|
* Focuses on Windows Mobile 6.xx and earlier.
|
471
488
|
* @return detection of Windows Mobile
|
472
489
|
*/
|
473
490
|
public boolean detectWindowsMobile() {
|
474
|
-
|
475
|
-
if (detectWindowsPhone7()) {
|
491
|
+
if (detectWindowsPhone()) {
|
476
492
|
return false;
|
477
493
|
}
|
478
494
|
//Most devices use 'Windows CE', but some report 'iemobile'
|
@@ -495,14 +511,31 @@ public class UAgentInfo {
|
|
495
511
|
return false;
|
496
512
|
}
|
497
513
|
|
514
|
+
|
498
515
|
/**
|
499
516
|
* Detects if the current browser is any BlackBerry.
|
500
|
-
* Includes the PlayBook.
|
517
|
+
* Includes BB10 OS, but excludes the PlayBook.
|
501
518
|
* @return detection of Blackberry
|
502
519
|
*/
|
503
520
|
public boolean detectBlackBerry() {
|
504
521
|
if (userAgent.indexOf(deviceBB) != -1 ||
|
505
|
-
httpAccept.indexOf(vndRIM) != -1)
|
522
|
+
httpAccept.indexOf(vndRIM) != -1)
|
523
|
+
return true;
|
524
|
+
|
525
|
+
if (detectBlackBerry10Phone())
|
526
|
+
return true;
|
527
|
+
|
528
|
+
return false;
|
529
|
+
}
|
530
|
+
|
531
|
+
/**
|
532
|
+
* Detects if the current browser is a BlackBerry 10 OS phone.
|
533
|
+
* Excludes tablets.
|
534
|
+
* @return detection of a Blackberry 10 device
|
535
|
+
*/
|
536
|
+
public boolean detectBlackBerry10Phone() {
|
537
|
+
if (userAgent.indexOf(deviceBB10) != -1 &&
|
538
|
+
userAgent.indexOf(mobile) != -1) {
|
506
539
|
return true;
|
507
540
|
}
|
508
541
|
return false;
|
@@ -527,10 +560,8 @@ public class UAgentInfo {
|
|
527
560
|
* @return detection of a Blackberry device with WebKit browser
|
528
561
|
*/
|
529
562
|
public boolean detectBlackBerryWebKit() {
|
530
|
-
if (detectBlackBerry() &&
|
531
|
-
userAgent.indexOf(engineWebKit) != -1) {
|
563
|
+
if (detectBlackBerry() && detectWebkit())
|
532
564
|
return true;
|
533
|
-
}
|
534
565
|
return false;
|
535
566
|
}
|
536
567
|
|
@@ -544,8 +575,8 @@ public class UAgentInfo {
|
|
544
575
|
(userAgent.indexOf(deviceBBStorm) != -1 ||
|
545
576
|
userAgent.indexOf(deviceBBTorch) != -1 ||
|
546
577
|
userAgent.indexOf(deviceBBBoldTouch) != -1 ||
|
547
|
-
|
548
|
-
|
578
|
+
userAgent.indexOf(deviceBBCurveTouch) != -1 )) {
|
579
|
+
return true;
|
549
580
|
}
|
550
581
|
return false;
|
551
582
|
}
|
@@ -595,21 +626,54 @@ public class UAgentInfo {
|
|
595
626
|
}
|
596
627
|
}
|
597
628
|
|
629
|
+
|
630
|
+
/**
|
631
|
+
* Detects if the current browser is the Symbian S60 Open Source Browser.
|
632
|
+
* @return detection of Symbian S60 Browser
|
633
|
+
*/
|
634
|
+
public boolean detectS60OssBrowser() {
|
635
|
+
//First, test for WebKit, then make sure it's either Symbian or S60.
|
636
|
+
if (detectWebkit()
|
637
|
+
&& (userAgent.indexOf(deviceSymbian) != -1
|
638
|
+
|| userAgent.indexOf(deviceS60) != -1)) {
|
639
|
+
return true;
|
640
|
+
}
|
641
|
+
return false;
|
642
|
+
}
|
643
|
+
|
644
|
+
/**
|
645
|
+
*
|
646
|
+
* Detects if the current device is any Symbian OS-based device,
|
647
|
+
* including older S60, Series 70, Series 80, Series 90, and UIQ,
|
648
|
+
* or other browsers running on these devices.
|
649
|
+
* @return detection of SymbianOS
|
650
|
+
*/
|
651
|
+
public boolean detectSymbianOS() {
|
652
|
+
if (userAgent.indexOf(deviceSymbian) != -1
|
653
|
+
|| userAgent.indexOf(deviceS60) != -1
|
654
|
+
|| userAgent.indexOf(deviceS70) != -1
|
655
|
+
|| userAgent.indexOf(deviceS80) != -1
|
656
|
+
|| userAgent.indexOf(deviceS90) != -1) {
|
657
|
+
return true;
|
658
|
+
}
|
659
|
+
return false;
|
660
|
+
}
|
661
|
+
|
662
|
+
|
598
663
|
/**
|
599
664
|
* Detects if the current browser is on a PalmOS device.
|
600
665
|
* @return detection of a PalmOS device
|
601
666
|
*/
|
602
667
|
public boolean detectPalmOS() {
|
668
|
+
//Make sure it's not WebOS first
|
669
|
+
if (detectPalmWebOS())
|
670
|
+
return false;
|
671
|
+
|
603
672
|
//Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
|
604
673
|
if (userAgent.indexOf(devicePalm) != -1
|
605
674
|
|| userAgent.indexOf(engineBlazer) != -1
|
606
675
|
|| userAgent.indexOf(engineXiino) != -1) {
|
607
|
-
//Make sure it's not WebOS first
|
608
|
-
if (detectPalmWebOS()) {
|
609
|
-
return false;
|
610
|
-
} else {
|
611
676
|
return true;
|
612
|
-
}
|
613
677
|
}
|
614
678
|
return false;
|
615
679
|
}
|
@@ -638,60 +702,6 @@ public class UAgentInfo {
|
|
638
702
|
return false;
|
639
703
|
}
|
640
704
|
|
641
|
-
/**
|
642
|
-
* Detects if the current browser is a
|
643
|
-
* Garmin Nuvifone.
|
644
|
-
* @return detection of a Garmin Nuvifone
|
645
|
-
*/
|
646
|
-
public boolean detectGarminNuvifone() {
|
647
|
-
if (userAgent.indexOf(deviceNuvifone) != -1) {
|
648
|
-
return true;
|
649
|
-
}
|
650
|
-
return false;
|
651
|
-
}
|
652
|
-
|
653
|
-
/**
|
654
|
-
* Check to see whether the device is any device
|
655
|
-
* in the 'smartphone' category.
|
656
|
-
* @return detection of a general smartphone device
|
657
|
-
*/
|
658
|
-
public boolean detectSmartphone() {
|
659
|
-
return (isIphone
|
660
|
-
|| isAndroidPhone
|
661
|
-
|| isTierIphone
|
662
|
-
|| detectS60OssBrowser()
|
663
|
-
|| detectSymbianOS()
|
664
|
-
|| detectWindowsMobile()
|
665
|
-
|| detectWindowsPhone7()
|
666
|
-
|| detectBlackBerry()
|
667
|
-
|| detectPalmWebOS()
|
668
|
-
|| detectPalmOS()
|
669
|
-
|| detectGarminNuvifone());
|
670
|
-
}
|
671
|
-
|
672
|
-
/**
|
673
|
-
* Detects whether the device is a Brew-powered device.
|
674
|
-
* @return detection of a Brew device
|
675
|
-
*/
|
676
|
-
public boolean detectBrewDevice() {
|
677
|
-
if (userAgent.indexOf(deviceBrew) != -1) {
|
678
|
-
return true;
|
679
|
-
}
|
680
|
-
return false;
|
681
|
-
}
|
682
|
-
|
683
|
-
/**
|
684
|
-
* Detects the Danger Hiptop device.
|
685
|
-
* @return detection of a Danger Hiptop
|
686
|
-
*/
|
687
|
-
public boolean detectDangerHiptop() {
|
688
|
-
if (userAgent.indexOf(deviceDanger) != -1
|
689
|
-
|| userAgent.indexOf(deviceHiptop) != -1) {
|
690
|
-
return true;
|
691
|
-
}
|
692
|
-
return false;
|
693
|
-
}
|
694
|
-
|
695
705
|
/**
|
696
706
|
* Detects Opera Mobile or Opera Mini.
|
697
707
|
* @return detection of an Opera browser for a mobile device
|
@@ -731,18 +741,6 @@ public class UAgentInfo {
|
|
731
741
|
return false;
|
732
742
|
}
|
733
743
|
|
734
|
-
/**
|
735
|
-
* Detects whether the device supports WAP or WML.
|
736
|
-
* @return detection of a WAP- or WML-capable device
|
737
|
-
*/
|
738
|
-
public boolean detectWapWml() {
|
739
|
-
if (httpAccept.indexOf(vndwap) != -1
|
740
|
-
|| httpAccept.indexOf(wml) != -1) {
|
741
|
-
return true;
|
742
|
-
}
|
743
|
-
return false;
|
744
|
-
}
|
745
|
-
|
746
744
|
/**
|
747
745
|
* Detects if the current device is an Amazon Kindle (eInk devices only).
|
748
746
|
* Note: For the Kindle Fire, use the normal Android methods.
|
@@ -769,55 +767,113 @@ public class UAgentInfo {
|
|
769
767
|
}
|
770
768
|
|
771
769
|
/**
|
772
|
-
*
|
773
|
-
*
|
774
|
-
*
|
775
|
-
* @return detection of any mobile device using the quicker method
|
770
|
+
* Detects if the current browser is a
|
771
|
+
* Garmin Nuvifone.
|
772
|
+
* @return detection of a Garmin Nuvifone
|
776
773
|
*/
|
777
|
-
public boolean
|
778
|
-
|
779
|
-
|
780
|
-
return false;
|
774
|
+
public boolean detectGarminNuvifone() {
|
775
|
+
if (userAgent.indexOf(deviceNuvifone) != -1) {
|
776
|
+
return true;
|
781
777
|
}
|
782
|
-
|
783
|
-
|
778
|
+
return false;
|
779
|
+
}
|
780
|
+
|
781
|
+
/**
|
782
|
+
* Detects a device running the Bada smartphone OS from Samsung.
|
783
|
+
* @return detection of a Bada device
|
784
|
+
*/
|
785
|
+
public boolean detectBada() {
|
786
|
+
if (userAgent.indexOf(deviceBada) != -1) {
|
784
787
|
return true;
|
785
788
|
}
|
789
|
+
return false;
|
790
|
+
}
|
786
791
|
|
787
|
-
|
788
|
-
|
789
|
-
|
792
|
+
/**
|
793
|
+
* Detects a device running the Tizen smartphone OS.
|
794
|
+
* @return detection of a Tizen device
|
795
|
+
*/
|
796
|
+
public boolean detectTizen() {
|
797
|
+
if (userAgent.indexOf(deviceTizen) != -1) {
|
790
798
|
return true;
|
791
799
|
}
|
800
|
+
return false;
|
801
|
+
}
|
792
802
|
|
793
|
-
|
794
|
-
|
795
|
-
|
803
|
+
/**
|
804
|
+
* Detects a device running the Meego OS.
|
805
|
+
* @return detection of a Meego device
|
806
|
+
*/
|
807
|
+
public boolean detectMeego() {
|
808
|
+
if (userAgent.indexOf(deviceMeego) != -1) {
|
796
809
|
return true;
|
797
810
|
}
|
811
|
+
return false;
|
812
|
+
}
|
798
813
|
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
814
|
+
/**
|
815
|
+
* Detects the Danger Hiptop device.
|
816
|
+
* @return detection of a Danger Hiptop
|
817
|
+
*/
|
818
|
+
public boolean detectDangerHiptop() {
|
819
|
+
if (userAgent.indexOf(deviceDanger) != -1
|
820
|
+
|| userAgent.indexOf(deviceHiptop) != -1) {
|
803
821
|
return true;
|
804
822
|
}
|
823
|
+
return false;
|
824
|
+
}
|
805
825
|
|
806
|
-
|
807
|
-
|
808
|
-
|
826
|
+
/**
|
827
|
+
* Detects if the current browser is a Sony Mylo device.
|
828
|
+
* @return detection of a Sony Mylo device
|
829
|
+
*/
|
830
|
+
public boolean detectSonyMylo() {
|
831
|
+
if (userAgent.indexOf(manuSony) != -1
|
832
|
+
&& (userAgent.indexOf(qtembedded) != -1
|
833
|
+
|| userAgent.indexOf(mylocom2) != -1)) {
|
809
834
|
return true;
|
810
835
|
}
|
811
|
-
|
836
|
+
return false;
|
837
|
+
}
|
838
|
+
|
839
|
+
/**
|
840
|
+
* Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
|
841
|
+
* @return detection of a Maemo OS tablet
|
842
|
+
*/
|
843
|
+
public boolean detectMaemoTablet() {
|
844
|
+
if (userAgent.indexOf(maemo) != -1) {
|
845
|
+
return true;
|
846
|
+
} else if (userAgent.indexOf(linux) != -1
|
847
|
+
&& userAgent.indexOf(deviceTablet) != -1
|
848
|
+
&& !detectWebOSTablet()
|
849
|
+
&& !detectAndroid()) {
|
812
850
|
return true;
|
813
851
|
}
|
852
|
+
return false;
|
853
|
+
}
|
814
854
|
|
815
|
-
|
816
|
-
|
817
|
-
|
855
|
+
/**
|
856
|
+
* Detects if the current device is an Archos media player/Internet tablet.
|
857
|
+
* @return detection of an Archos media player
|
858
|
+
*/
|
859
|
+
public boolean detectArchos() {
|
860
|
+
if (userAgent.indexOf(deviceArchos) != -1) {
|
818
861
|
return true;
|
819
862
|
}
|
863
|
+
return false;
|
864
|
+
}
|
820
865
|
|
866
|
+
/**
|
867
|
+
* Detects if the current device is an Internet-capable game console.
|
868
|
+
* Includes many handheld consoles.
|
869
|
+
* @return detection of any Game Console
|
870
|
+
*/
|
871
|
+
public boolean detectGameConsole() {
|
872
|
+
if (detectSonyPlaystation()
|
873
|
+
|| detectNintendo()
|
874
|
+
|| detectXbox()) {
|
875
|
+
return true;
|
876
|
+
}
|
821
877
|
return false;
|
822
878
|
}
|
823
879
|
|
@@ -832,6 +888,19 @@ public class UAgentInfo {
|
|
832
888
|
return false;
|
833
889
|
}
|
834
890
|
|
891
|
+
/**
|
892
|
+
* Detects if the current device is a handheld gaming device with
|
893
|
+
* a touchscreen and modern iPhone-class browser. Includes the Playstation Vita.
|
894
|
+
* @return detection of a handheld gaming device
|
895
|
+
*/
|
896
|
+
public boolean detectGamingHandheld() {
|
897
|
+
if ((userAgent.indexOf(devicePlaystation) != -1) &&
|
898
|
+
(userAgent.indexOf(devicePlaystationVita) != -1)) {
|
899
|
+
return true;
|
900
|
+
}
|
901
|
+
return false;
|
902
|
+
}
|
903
|
+
|
835
904
|
/**
|
836
905
|
* Detects if the current device is a Nintendo game device.
|
837
906
|
* @return detection of Nintendo
|
@@ -857,67 +926,109 @@ public class UAgentInfo {
|
|
857
926
|
}
|
858
927
|
|
859
928
|
/**
|
860
|
-
* Detects
|
861
|
-
* @return detection of
|
929
|
+
* Detects whether the device is a Brew-powered device.
|
930
|
+
* @return detection of a Brew device
|
862
931
|
*/
|
863
|
-
public boolean
|
864
|
-
if (
|
865
|
-
|| detectNintendo()
|
866
|
-
|| detectXbox()) {
|
932
|
+
public boolean detectBrewDevice() {
|
933
|
+
if (userAgent.indexOf(deviceBrew) != -1) {
|
867
934
|
return true;
|
868
935
|
}
|
869
936
|
return false;
|
870
937
|
}
|
871
938
|
|
872
939
|
/**
|
873
|
-
* Detects
|
874
|
-
* @return detection of a
|
940
|
+
* Detects whether the device supports WAP or WML.
|
941
|
+
* @return detection of a WAP- or WML-capable device
|
875
942
|
*/
|
876
|
-
public boolean
|
877
|
-
if (
|
878
|
-
|| httpAccept.indexOf(
|
943
|
+
public boolean detectWapWml() {
|
944
|
+
if (httpAccept.indexOf(vndwap) != -1
|
945
|
+
|| httpAccept.indexOf(wml) != -1) {
|
879
946
|
return true;
|
880
947
|
}
|
881
948
|
return false;
|
882
949
|
}
|
883
950
|
|
884
951
|
/**
|
885
|
-
* Detects if the current device
|
886
|
-
* @return detection of a
|
952
|
+
* Detects if the current device supports MIDP, a mobile Java technology.
|
953
|
+
* @return detection of a MIDP mobile Java-capable device
|
887
954
|
*/
|
888
|
-
public boolean
|
889
|
-
if (userAgent.indexOf(
|
890
|
-
|
891
|
-
} else if (userAgent.indexOf(linux) != -1
|
892
|
-
&& userAgent.indexOf(deviceTablet) != -1
|
893
|
-
&& !detectWebOSTablet()
|
894
|
-
&& !detectAndroid()) {
|
955
|
+
public boolean detectMidpCapable() {
|
956
|
+
if (userAgent.indexOf(deviceMidp) != -1
|
957
|
+
|| httpAccept.indexOf(deviceMidp) != -1) {
|
895
958
|
return true;
|
896
959
|
}
|
897
960
|
return false;
|
898
961
|
}
|
899
962
|
|
963
|
+
|
964
|
+
|
965
|
+
//*****************************
|
966
|
+
// Device Classes
|
967
|
+
//*****************************
|
968
|
+
|
900
969
|
/**
|
901
|
-
*
|
902
|
-
*
|
970
|
+
* Check to see whether the device is any device
|
971
|
+
* in the 'smartphone' category.
|
972
|
+
* @return detection of a general smartphone device
|
903
973
|
*/
|
904
|
-
public boolean
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
974
|
+
public boolean detectSmartphone() {
|
975
|
+
//Exclude duplicates from TierIphone
|
976
|
+
return (detectTierIphone()
|
977
|
+
|| detectS60OssBrowser()
|
978
|
+
|| detectSymbianOS()
|
979
|
+
|| detectWindowsMobile()
|
980
|
+
|| detectBlackBerry()
|
981
|
+
|| detectPalmOS());
|
909
982
|
}
|
910
983
|
|
911
984
|
/**
|
912
|
-
*
|
913
|
-
*
|
985
|
+
* Detects if the current device is a mobile device.
|
986
|
+
* This method catches most of the popular modern devices.
|
987
|
+
* Excludes Apple iPads and other modern tablets.
|
988
|
+
* @return detection of any mobile device using the quicker method
|
914
989
|
*/
|
915
|
-
public boolean
|
916
|
-
|
917
|
-
|
918
|
-
|
990
|
+
public boolean detectMobileQuick() {
|
991
|
+
//Let's exclude tablets
|
992
|
+
if (detectTierTablet())
|
993
|
+
return false;
|
994
|
+
|
995
|
+
if ((initCompleted == true) ||
|
996
|
+
(isMobilePhone == true))
|
997
|
+
return isMobilePhone;
|
998
|
+
|
999
|
+
//Most mobile browsing is done on smartphones
|
1000
|
+
if (detectSmartphone())
|
919
1001
|
return true;
|
920
|
-
|
1002
|
+
|
1003
|
+
if (detectWapWml()
|
1004
|
+
|| detectBrewDevice()
|
1005
|
+
|| detectOperaMobile())
|
1006
|
+
return true;
|
1007
|
+
|
1008
|
+
if ((userAgent.indexOf(engineObigo) != -1)
|
1009
|
+
|| (userAgent.indexOf(engineNetfront) != -1)
|
1010
|
+
|| (userAgent.indexOf(engineUpBrowser) != -1)
|
1011
|
+
|| (userAgent.indexOf(engineOpenWeb) != -1))
|
1012
|
+
return true;
|
1013
|
+
|
1014
|
+
if (detectDangerHiptop()
|
1015
|
+
|| detectMidpCapable()
|
1016
|
+
|| detectMaemoTablet()
|
1017
|
+
|| detectArchos())
|
1018
|
+
return true;
|
1019
|
+
|
1020
|
+
if ((userAgent.indexOf(devicePda) != -1) &&
|
1021
|
+
(userAgent.indexOf(disUpdate) < 0)) //no index found
|
1022
|
+
return true;
|
1023
|
+
|
1024
|
+
if (userAgent.indexOf(mobile) != -1)
|
1025
|
+
return true;
|
1026
|
+
|
1027
|
+
//We also look for Kindle devices
|
1028
|
+
if (detectKindle()
|
1029
|
+
|| detectAmazonSilk())
|
1030
|
+
return true;
|
1031
|
+
|
921
1032
|
return false;
|
922
1033
|
}
|
923
1034
|
|
@@ -938,28 +1049,21 @@ public class UAgentInfo {
|
|
938
1049
|
}
|
939
1050
|
|
940
1051
|
//detect older phones from certain manufacturers and operators.
|
941
|
-
if (userAgent.indexOf(uplink) != -1)
|
1052
|
+
if (userAgent.indexOf(uplink) != -1)
|
942
1053
|
return true;
|
943
|
-
|
944
|
-
if (userAgent.indexOf(manuSonyEricsson) != -1) {
|
1054
|
+
if (userAgent.indexOf(manuSonyEricsson) != -1)
|
945
1055
|
return true;
|
946
|
-
|
947
|
-
if (userAgent.indexOf(manuericsson) != -1) {
|
1056
|
+
if (userAgent.indexOf(manuericsson) != -1)
|
948
1057
|
return true;
|
949
|
-
|
950
|
-
if (userAgent.indexOf(manuSamsung1) != -1) {
|
1058
|
+
if (userAgent.indexOf(manuSamsung1) != -1)
|
951
1059
|
return true;
|
952
|
-
}
|
953
1060
|
|
954
|
-
if (userAgent.indexOf(svcDocomo) != -1)
|
1061
|
+
if (userAgent.indexOf(svcDocomo) != -1)
|
955
1062
|
return true;
|
956
|
-
|
957
|
-
if (userAgent.indexOf(svcKddi) != -1) {
|
1063
|
+
if (userAgent.indexOf(svcKddi) != -1)
|
958
1064
|
return true;
|
959
|
-
|
960
|
-
if (userAgent.indexOf(svcVodafone) != -1) {
|
1065
|
+
if (userAgent.indexOf(svcVodafone) != -1)
|
961
1066
|
return true;
|
962
|
-
}
|
963
1067
|
|
964
1068
|
return false;
|
965
1069
|
}
|
@@ -976,6 +1080,10 @@ public class UAgentInfo {
|
|
976
1080
|
* @return detection of any device in the Tablet Tier
|
977
1081
|
*/
|
978
1082
|
public boolean detectTierTablet() {
|
1083
|
+
if ((this.initCompleted == true) ||
|
1084
|
+
(this.isTierTablet == true))
|
1085
|
+
return this.isTierTablet;
|
1086
|
+
|
979
1087
|
if (detectIpad()
|
980
1088
|
|| detectAndroidTablet()
|
981
1089
|
|| detectBlackBerryTablet()
|
@@ -989,17 +1097,24 @@ public class UAgentInfo {
|
|
989
1097
|
* The quick way to detect for a tier of devices.
|
990
1098
|
* This method detects for devices which can
|
991
1099
|
* display iPhone-optimized web content.
|
992
|
-
* Includes iPhone, iPod Touch, Android, Windows Phone 7,
|
993
|
-
* @return detection of any device in the iPhone/Android/
|
1100
|
+
* Includes iPhone, iPod Touch, Android, Windows Phone 7 and 8, BB10, WebOS, Playstation Vita, etc.
|
1101
|
+
* @return detection of any device in the iPhone/Android/Windows Phone/BlackBerry/WebOS Tier
|
994
1102
|
*/
|
995
1103
|
public boolean detectTierIphone() {
|
996
|
-
|
997
|
-
|
1104
|
+
if ((this.initCompleted == true) ||
|
1105
|
+
(this.isTierIphone == true))
|
1106
|
+
return this.isTierIphone;
|
1107
|
+
|
1108
|
+
if (detectIphoneOrIpod()
|
1109
|
+
|| detectAndroidPhone()
|
1110
|
+
|| detectWindowsPhone()
|
1111
|
+
|| detectBlackBerry10Phone()
|
998
1112
|
|| (detectBlackBerryWebKit()
|
999
1113
|
&& detectBlackBerryTouch())
|
1000
|
-
|| detectWindowsPhone7()
|
1001
1114
|
|| detectPalmWebOS()
|
1002
|
-
||
|
1115
|
+
|| detectBada()
|
1116
|
+
|| detectTizen()
|
1117
|
+
|| detectGamingHandheld()) {
|
1003
1118
|
return true;
|
1004
1119
|
}
|
1005
1120
|
return false;
|
@@ -1014,12 +1129,17 @@ public class UAgentInfo {
|
|
1014
1129
|
* @return detection of any device in the 'Rich CSS' Tier
|
1015
1130
|
*/
|
1016
1131
|
public boolean detectTierRichCss() {
|
1132
|
+
if ((this.initCompleted == true) ||
|
1133
|
+
(this.isTierRichCss == true))
|
1134
|
+
return this.isTierRichCss;
|
1135
|
+
|
1017
1136
|
boolean result = false;
|
1137
|
+
|
1018
1138
|
//The following devices are explicitly ok.
|
1019
1139
|
//Note: 'High' BlackBerry devices ONLY
|
1020
1140
|
if (detectMobileQuick()) {
|
1021
1141
|
|
1022
|
-
|
1142
|
+
//Exclude iPhone Tier and e-Ink Kindle devices.
|
1023
1143
|
if (!detectTierIphone() && !detectKindle()) {
|
1024
1144
|
|
1025
1145
|
//The following devices are explicitly ok.
|
@@ -1029,12 +1149,11 @@ public class UAgentInfo {
|
|
1029
1149
|
|| detectS60OssBrowser()
|
1030
1150
|
|| detectBlackBerryHigh()
|
1031
1151
|
|| detectWindowsMobile()
|
1032
|
-
|| userAgent.indexOf(engineTelecaQ) !=
|
1033
|
-
-1) {
|
1152
|
+
|| userAgent.indexOf(engineTelecaQ) != -1) {
|
1034
1153
|
result= true;
|
1035
|
-
}
|
1036
|
-
}
|
1037
|
-
}
|
1154
|
+
}
|
1155
|
+
}
|
1156
|
+
}
|
1038
1157
|
return result;
|
1039
1158
|
}
|
1040
1159
|
|
@@ -1045,12 +1164,16 @@ public class UAgentInfo {
|
|
1045
1164
|
* @return detection of a mobile device in the less capable tier
|
1046
1165
|
*/
|
1047
1166
|
public boolean detectTierOtherPhones() {
|
1167
|
+
if ((this.initCompleted == true) ||
|
1168
|
+
(this.isTierGenericMobile == true))
|
1169
|
+
return this.isTierGenericMobile;
|
1170
|
+
|
1048
1171
|
//Exclude devices in the other 2 categories
|
1049
1172
|
if (detectMobileLong()
|
1050
1173
|
&& !detectTierIphone()
|
1051
|
-
&& !detectTierRichCss())
|
1174
|
+
&& !detectTierRichCss())
|
1052
1175
|
return true;
|
1053
|
-
|
1176
|
+
|
1054
1177
|
return false;
|
1055
1178
|
}
|
1056
1179
|
}
|