mobileesp_converted 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1f6ec4f7d1353886d6c451ee189e3ac4f4081553
4
+ data.tar.gz: cfe50ea1fe146820349401a82af6d8acbb29d90b
5
+ SHA512:
6
+ metadata.gz: 6943f9a52c3d3b5817a9cd43ac9f18753c9c28c33bc8d0ff29e5ea3e399b16d0ad725fe916005d6f5000d217aef94e3f0fed178c7f4166ae66d2a1adbf4fb0bf
7
+ data.tar.gz: 3362f43631324a082ae09f0efd154d840ff5a15f2c8c1789645ab546e784283145158b80d248a9925c9ec5d5c6c3e39556737537e7c307a0e55522c19149c6fa
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ task :default => [:test]
7
7
  desc "Download Java MobileESP source code to ./tmp directory."
8
8
  task :download_source do
9
9
  `mkdir -p java_source`
10
- `cd java_source; rm UAgentInfo.java; wget http://mobileesp.googlecode.com/svn/Java/UAgentInfo.java`
10
+ `cd java_source; rm UAgentInfo.java; wget https://raw.githubusercontent.com/ahand/mobileesp/master/Java/UAgentInfo.java`
11
11
  end
12
12
 
13
13
  Rake::TestTask.new do |t|
@@ -1,25 +1,42 @@
1
1
  /* *******************************************
2
- // Copyright 2010-2013, Anthony Hand
2
+ // Copyright 2010-2015, Anthony Hand
3
3
  //
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
4
  //
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().
5
+ // File version 2015.05.13 (May 13, 2015)
6
+ // Updates:
7
+ // - Moved MobileESP to GitHub. https://github.com/ahand/mobileesp
8
+ // - Opera Mobile/Mini browser has the same UA string on multiple platforms and doesn't differentiate phone vs. tablet.
9
+ // - Removed DetectOperaAndroidPhone(). This method is no longer reliable.
10
+ // - Removed DetectOperaAndroidTablet(). This method is no longer reliable.
11
+ // - Added support for Windows Phone 10: variable and DetectWindowsPhone10()
12
+ // - Updated DetectWindowsPhone() to include WP10.
13
+ // - Added support for Firefox OS.
14
+ // - A variable plus DetectFirefoxOS(), DetectFirefoxOSPhone(), DetectFirefoxOSTablet()
15
+ // - NOTE: Firefox doesn't add UA tokens to definitively identify Firefox OS vs. their browsers on other mobile platforms.
16
+ // - Added support for Sailfish OS. Not enough info to add a tablet detection method at this time.
17
+ // - A variable plus DetectSailfish(), DetectSailfishPhone()
18
+ // - Added support for Ubuntu Mobile OS.
19
+ // - DetectUbuntu(), DetectUbuntuPhone(), DetectUbuntuTablet()
20
+ // - Added support for 2 smart TV OSes. They lack browsers but do have WebViews for use by HTML apps.
21
+ // - One variable for Samsung Tizen TVs, plus DetectTizenTV()
22
+ // - One variable for LG WebOS TVs, plus DetectWebOSTV()
23
+ // - Updated DetectTizen(). Now tests for "mobile" to disambiguate from Samsung Smart TVs
24
+ // - Removed variables for obsolete devices: deviceHtcFlyer, deviceXoom.
25
+ // - Updated DetectAndroid(). No longer has a special test case for the HTC Flyer tablet.
26
+ // - Updated DetectAndroidPhone().
27
+ // - Updated internal detection code for Android.
28
+ // - No longer has a special test case for the HTC Flyer tablet.
29
+ // - Checks against DetectOperaMobile() on Android and reports here if relevant.
30
+ // - Updated DetectAndroidTablet().
31
+ // - No longer has a special test case for the HTC Flyer tablet.
32
+ // - Checks against DetectOperaMobile() on Android to exclude it from here.
33
+ // - DetectMeego(): Changed definition for this method. Now detects any Meego OS device, not just phones.
34
+ // - DetectMeegoPhone(): NEW. For Meego phones. Ought to detect Opera browsers on Meego, as well.
35
+ // - DetectTierIphone(): Added support for phones running Sailfish, Ubuntu and Firefox Mobile.
36
+ // - DetectTierTablet(): Added support for tablets running Ubuntu and Firefox Mobile.
37
+ // - DetectSmartphone(): Added support for Meego phones.
38
+ // - Refactored the detection logic in DetectMobileQuick() and DetectMobileLong().
39
+ // - Moved a few detection tests for older browsers to Long.
23
40
  //
24
41
  //
25
42
  //
@@ -39,7 +56,7 @@
39
56
  // Project Owner: Anthony Hand
40
57
  // Email: anthony.hand@gmail.com
41
58
  // Web Site: http://www.mobileesp.com
42
- // Source Files: http://code.google.com/p/mobileesp/
59
+ // Source Files: https://github.com/ahand/mobileesp
43
60
  //
44
61
  // Versions of this code are available for:
45
62
  // PHP, JavaScript, Java, ASP.NET (C#), and Ruby
@@ -86,10 +103,10 @@ public class UAgentInfo {
86
103
 
87
104
  public static final String deviceAndroid = "android";
88
105
  public static final String deviceGoogleTV = "googletv";
89
- public static final String deviceHtcFlyer = "htc_flyer"; //HTC Flyer
90
106
 
91
107
  public static final String deviceWinPhone7 = "windows phone os 7";
92
108
  public static final String deviceWinPhone8 = "windows phone 8";
109
+ public static final String deviceWinPhone10 = "windows phone 10";
93
110
  public static final String deviceWinMob = "windows ce";
94
111
  public static final String deviceWindows = "windows";
95
112
  public static final String deviceIeMob = "iemobile";
@@ -115,19 +132,23 @@ public class UAgentInfo {
115
132
  public static final String deviceS90 = "series90";
116
133
 
117
134
  public static final String devicePalm = "palm";
118
- public static final String deviceWebOS = "webos"; //For Palm's line of WebOS devices
135
+ public static final String deviceWebOS = "webos"; //For Palm devices
136
+ public static final String deviceWebOStv = "web0s"; //For LG TVs
119
137
  public static final String deviceWebOShp = "hpwos"; //For HP's line of WebOS devices
120
- public static final String engineBlazer = "blazer"; //Old Palm
121
- public static final String engineXiino = "xiino"; //Another old Palm
122
138
 
123
139
  public static final String deviceNuvifone = "nuvifone"; //Garmin Nuvifone
124
140
  public static final String deviceBada = "bada"; //Samsung's Bada OS
125
141
  public static final String deviceTizen = "tizen"; //Tizen OS
126
142
  public static final String deviceMeego = "meego"; //Meego OS
143
+ public static final String deviceSailfish = "sailfish"; //Sailfish OS
144
+ public static final String deviceUbuntu = "ubuntu"; //Ubuntu Mobile OS
127
145
 
128
146
  public static final String deviceKindle = "kindle"; //Amazon Kindle, eInk one
129
147
  public static final String engineSilk = "silk-accelerated"; //Amazon's accelerated Silk browser for Kindle Fire
130
148
 
149
+ public static final String engineBlazer = "blazer"; //Old Palm
150
+ public static final String engineXiino = "xiino"; //Another old Palm
151
+
131
152
  //Initialize variables for mobile-specific content.
132
153
  public static final String vndwap = "vnd.wap";
133
154
  public static final String wml = "wml";
@@ -145,6 +166,7 @@ public class UAgentInfo {
145
166
  public static final String deviceXbox = "xbox";
146
167
  public static final String deviceArchos = "archos";
147
168
 
169
+ public static final String engineFirefox = "firefox"; //For Firefox OS
148
170
  public static final String engineOpera = "opera"; //Popular browser
149
171
  public static final String engineNetfront = "netfront"; //Common embedded OS browser
150
172
  public static final String engineUpBrowser = "up.browser"; //common on some phones
@@ -152,13 +174,15 @@ public class UAgentInfo {
152
174
  public static final String deviceMidp = "midp"; //a mobile Java technology
153
175
  public static final String uplink = "up.link";
154
176
  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
-
157
177
  public static final String devicePda = "pda"; //some devices report themselves as PDAs
158
178
  public static final String mini = "mini"; //Some mobile browsers put "mini" in their names.
159
179
  public static final String mobile = "mobile"; //Some mobile browsers put "mobile" in their user agent strings.
160
180
  public static final String mobi = "mobi"; //Some mobile browsers put "mobi" in their user agent strings.
161
181
 
182
+ //Smart TV strings
183
+ public static final String smartTV1 = "smart-tv"; //Samsung Tizen smart TVs
184
+ public static final String smartTV2 = "smarttv"; //LG WebOS smart TVs
185
+
162
186
  //Use Maemo, Tablet, and Linux to test for Nokia"s Internet Tablets.
163
187
  public static final String maemo = "maemo";
164
188
  public static final String linux = "linux";
@@ -170,7 +194,7 @@ public class UAgentInfo {
170
194
  public static final String manuericsson = "ericsson";
171
195
  public static final String manuSamsung1 = "sec-sgh";
172
196
  public static final String manuSony = "sony";
173
- public static final String manuHtc = "htc";
197
+ public static final String manuHtc = "htc"; //Popular Android and WinMo manufacturer
174
198
 
175
199
  //In some UserAgents, the only clue is the operator.
176
200
  public static final String svcDocomo = "docomo";
@@ -282,10 +306,6 @@ public class UAgentInfo {
282
306
  * @return detection of an iPhone
283
307
  */
284
308
  public boolean detectIphone() {
285
- if ((this.initCompleted == true) ||
286
- (this.isIphone == true))
287
- return this.isIphone;
288
-
289
309
  // The iPad and iPod touch say they're an iPhone! So let's disambiguate.
290
310
  if (userAgent.indexOf(deviceIphone) != -1 &&
291
311
  !detectIpad() &&
@@ -349,16 +369,10 @@ public class UAgentInfo {
349
369
  * @return detection of an Android device
350
370
  */
351
371
  public boolean detectAndroid() {
352
- if ((this.initCompleted == true) ||
353
- (this.isAndroid == true))
354
- return this.isAndroid;
355
-
356
372
  if ((userAgent.indexOf(deviceAndroid) != -1) ||
357
373
  detectGoogleTV())
358
374
  return true;
359
- //Special check for the HTC Flyer 7" tablet. It should report here.
360
- if (userAgent.indexOf(deviceHtcFlyer) != -1)
361
- return true;
375
+
362
376
  return false;
363
377
  }
364
378
 
@@ -370,18 +384,18 @@ public class UAgentInfo {
370
384
  * @return detection of an Android phone
371
385
  */
372
386
  public boolean detectAndroidPhone() {
373
- if ((this.initCompleted == true) ||
374
- (this.isAndroidPhone == true))
375
- return this.isAndroidPhone;
387
+ //First, let's make sure we're on an Android device.
388
+ if (!detectAndroid())
389
+ return false;
376
390
 
377
- if (detectAndroid() && (userAgent.indexOf(mobile) != -1))
378
- return true;
379
- //Special check for Android phones with Opera Mobile. They should report here.
380
- if (detectOperaAndroidPhone())
391
+ //If it's Android and has 'mobile' in it, Google says it's a phone.
392
+ if (userAgent.indexOf(mobile) != -1)
381
393
  return true;
382
- //Special check for the HTC Flyer 7" tablet. It should report here.
383
- if (userAgent.indexOf(deviceHtcFlyer) != -1)
394
+
395
+ //Special check for Android devices with Opera Mobile/Mini. They should report here.
396
+ if (detectOperaMobile())
384
397
  return true;
398
+
385
399
  return false;
386
400
  }
387
401
 
@@ -395,12 +409,9 @@ public class UAgentInfo {
395
409
  if (!detectAndroid())
396
410
  return false;
397
411
 
398
- //Special check for Opera Android Phones. They should NOT report here.
412
+ //Special check for Android devices with Opera Mobile/Mini. They should NOT report here.
399
413
  if (detectOperaMobile())
400
414
  return false;
401
- //Special check for the HTC Flyer 7" tablet. It should NOT report here.
402
- if (userAgent.indexOf(deviceHtcFlyer) != -1)
403
- return false;
404
415
 
405
416
  //Otherwise, if it's Android and does NOT have 'mobile' in it, Google says it's a tablet.
406
417
  if ((userAgent.indexOf(mobile) > -1))
@@ -437,30 +448,59 @@ public class UAgentInfo {
437
448
  * @return detection of a WebKit browser
438
449
  */
439
450
  public boolean detectWebkit() {
440
- if ((this.initCompleted == true) ||
441
- (this.isWebkit == true))
442
- return this.isWebkit;
443
-
444
451
  if (userAgent.indexOf(engineWebKit) != -1) {
445
452
  return true;
446
453
  }
447
454
  return false;
448
455
  }
449
456
 
457
+ /**
458
+ * Detects if the current browser is the Symbian S60 Open Source Browser.
459
+ * @return detection of Symbian S60 Browser
460
+ */
461
+ public boolean detectS60OssBrowser() {
462
+ //First, test for WebKit, then make sure it's either Symbian or S60.
463
+ if (detectWebkit()
464
+ && (userAgent.indexOf(deviceSymbian) != -1
465
+ || userAgent.indexOf(deviceS60) != -1)) {
466
+ return true;
467
+ }
468
+ return false;
469
+ }
450
470
 
451
471
  /**
452
- * Detects if the current browser is EITHER a Windows Phone 7.x OR 8 device
472
+ *
473
+ * Detects if the current device is any Symbian OS-based device,
474
+ * including older S60, Series 70, Series 80, Series 90, and UIQ,
475
+ * or other browsers running on these devices.
476
+ * @return detection of SymbianOS
477
+ */
478
+ public boolean detectSymbianOS() {
479
+ if (userAgent.indexOf(deviceSymbian) != -1
480
+ || userAgent.indexOf(deviceS60) != -1
481
+ || userAgent.indexOf(deviceS70) != -1
482
+ || userAgent.indexOf(deviceS80) != -1
483
+ || userAgent.indexOf(deviceS90) != -1) {
484
+ return true;
485
+ }
486
+ return false;
487
+ }
488
+
489
+ /**
490
+ * Detects if the current browser is a Windows Phone 7.x, 8, or 10 device
453
491
  * @return detection of Windows Phone 7.x OR 8
454
492
  */
455
493
  public boolean detectWindowsPhone() {
456
- if (detectWindowsPhone7() || detectWindowsPhone8()) {
494
+ if (detectWindowsPhone7()
495
+ || detectWindowsPhone8()
496
+ || detectWindowsPhone10()) {
457
497
  return true;
458
498
  }
459
499
  return false;
460
500
  }
461
501
 
462
502
  /**
463
- * Detects a Windows Phone 7.x device (in mobile browsing mode).
503
+ * Detects a Windows Phone 7 device (in mobile browsing mode).
464
504
  * @return detection of Windows Phone 7
465
505
  */
466
506
  public boolean detectWindowsPhone7() {
@@ -481,6 +521,17 @@ public class UAgentInfo {
481
521
  return false;
482
522
  }
483
523
 
524
+ /**
525
+ * Detects a Windows Phone 10 device (in mobile browsing mode).
526
+ * @return detection of Windows Phone 10
527
+ */
528
+ public boolean detectWindowsPhone10() {
529
+ if (userAgent.indexOf(deviceWinPhone10) != -1) {
530
+ return true;
531
+ }
532
+ return false;
533
+ }
534
+
484
535
  /**
485
536
  * Detects if the current browser is a Windows Mobile device.
486
537
  * Excludes Windows Phone 7.x and 8 devices.
@@ -511,7 +562,6 @@ public class UAgentInfo {
511
562
  return false;
512
563
  }
513
564
 
514
-
515
565
  /**
516
566
  * Detects if the current browser is any BlackBerry.
517
567
  * Includes BB10 OS, but excludes the PlayBook.
@@ -560,8 +610,10 @@ public class UAgentInfo {
560
610
  * @return detection of a Blackberry device with WebKit browser
561
611
  */
562
612
  public boolean detectBlackBerryWebKit() {
563
- if (detectBlackBerry() && detectWebkit())
613
+ if (detectBlackBerry() &&
614
+ userAgent.indexOf(engineWebKit) != -1) {
564
615
  return true;
616
+ }
565
617
  return false;
566
618
  }
567
619
 
@@ -575,8 +627,8 @@ public class UAgentInfo {
575
627
  (userAgent.indexOf(deviceBBStorm) != -1 ||
576
628
  userAgent.indexOf(deviceBBTorch) != -1 ||
577
629
  userAgent.indexOf(deviceBBBoldTouch) != -1 ||
578
- userAgent.indexOf(deviceBBCurveTouch) != -1 )) {
579
- return true;
630
+ userAgent.indexOf(deviceBBCurveTouch) != -1 )) {
631
+ return true;
580
632
  }
581
633
  return false;
582
634
  }
@@ -626,54 +678,21 @@ public class UAgentInfo {
626
678
  }
627
679
  }
628
680
 
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
-
663
681
  /**
664
682
  * Detects if the current browser is on a PalmOS device.
665
683
  * @return detection of a PalmOS device
666
684
  */
667
685
  public boolean detectPalmOS() {
668
- //Make sure it's not WebOS first
669
- if (detectPalmWebOS())
670
- return false;
671
-
672
686
  //Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
673
687
  if (userAgent.indexOf(devicePalm) != -1
674
688
  || userAgent.indexOf(engineBlazer) != -1
675
689
  || userAgent.indexOf(engineXiino) != -1) {
690
+ //Make sure it's not WebOS first
691
+ if (detectPalmWebOS()) {
692
+ return false;
693
+ } else {
676
694
  return true;
695
+ }
677
696
  }
678
697
  return false;
679
698
  }
@@ -703,39 +722,25 @@ public class UAgentInfo {
703
722
  }
704
723
 
705
724
  /**
706
- * Detects Opera Mobile or Opera Mini.
707
- * @return detection of an Opera browser for a mobile device
725
+ * Detects if the current browser is on a WebOS smart TV.
726
+ * @return detection of a WebOS smart TV
708
727
  */
709
- public boolean detectOperaMobile() {
710
- if (userAgent.indexOf(engineOpera) != -1
711
- && (userAgent.indexOf(mini) != -1
712
- || userAgent.indexOf(mobi) != -1)) {
713
- return true;
714
- }
715
- return false;
716
- }
717
-
718
- /**
719
- * Detects Opera Mobile on an Android phone.
720
- * @return detection of an Opera browser on an Android phone
721
- */
722
- public boolean detectOperaAndroidPhone() {
723
- if (userAgent.indexOf(engineOpera) != -1
724
- && (userAgent.indexOf(deviceAndroid) != -1
725
- && userAgent.indexOf(mobi) != -1)) {
728
+ public boolean detectWebOSTV() {
729
+ if (userAgent.indexOf(deviceWebOStv) != -1 &&
730
+ userAgent.indexOf(smartTV2) != -1) {
726
731
  return true;
727
732
  }
728
733
  return false;
729
734
  }
730
735
 
731
736
  /**
732
- * Detects Opera Mobile on an Android tablet.
733
- * @return detection of an Opera browser on an Android tablet
737
+ * Detects Opera Mobile or Opera Mini.
738
+ * @return detection of an Opera browser for a mobile device
734
739
  */
735
- public boolean detectOperaAndroidTablet() {
740
+ public boolean detectOperaMobile() {
736
741
  if (userAgent.indexOf(engineOpera) != -1
737
- && (userAgent.indexOf(deviceAndroid) != -1
738
- && userAgent.indexOf(deviceTablet) != -1)) {
742
+ && (userAgent.indexOf(mini) != -1
743
+ || userAgent.indexOf(mobi) != -1)) {
739
744
  return true;
740
745
  }
741
746
  return false;
@@ -779,7 +784,7 @@ public class UAgentInfo {
779
784
  }
780
785
 
781
786
  /**
782
- * Detects a device running the Bada smartphone OS from Samsung.
787
+ * Detects a device running the Bada OS from Samsung.
783
788
  * @return detection of a Bada device
784
789
  */
785
790
  public boolean detectBada() {
@@ -794,7 +799,20 @@ public class UAgentInfo {
794
799
  * @return detection of a Tizen device
795
800
  */
796
801
  public boolean detectTizen() {
797
- if (userAgent.indexOf(deviceTizen) != -1) {
802
+ if (userAgent.indexOf(deviceTizen) != -1 &&
803
+ userAgent.indexOf(mobile) != -1) {
804
+ return true;
805
+ }
806
+ return false;
807
+ }
808
+
809
+ /**
810
+ * Detects if the current browser is on a Tizen smart TV.
811
+ * @return detection of a Tizen smart TV
812
+ */
813
+ public boolean detectTizenTV() {
814
+ if (userAgent.indexOf(deviceTizen) != -1 &&
815
+ userAgent.indexOf(smartTV1) != -1) {
798
816
  return true;
799
817
  }
800
818
  return false;
@@ -811,6 +829,123 @@ public class UAgentInfo {
811
829
  return false;
812
830
  }
813
831
 
832
+ /**
833
+ * Detects a phone running the Meego OS.
834
+ * @return detection of a Meego phone
835
+ */
836
+ public boolean detectMeegoPhone() {
837
+ if (userAgent.indexOf(deviceMeego) != -1 &&
838
+ userAgent.indexOf(mobi) != -1) {
839
+ return true;
840
+ }
841
+ return false;
842
+ }
843
+
844
+ /**
845
+ * Detects a mobile device (probably) running the Firefox OS.
846
+ * @return detection of a Firefox OS mobile device
847
+ */
848
+ public boolean detectFirefoxOS() {
849
+ if (detectFirefoxOSPhone() || detectFirefoxOSTablet())
850
+ return true;
851
+
852
+ return false;
853
+ }
854
+
855
+ /**
856
+ * Detects a phone (probably) running the Firefox OS.
857
+ * @return detection of a Firefox OS phone
858
+ */
859
+ public boolean detectFirefoxOSPhone() {
860
+ //First, let's make sure we're NOT on another major mobile OS.
861
+ if (detectIos()
862
+ || detectAndroid()
863
+ || detectSailfish())
864
+ return false;
865
+
866
+ if ((userAgent.indexOf(engineFirefox) != -1)
867
+ && (userAgent.indexOf(mobile) != -1))
868
+ return true;
869
+
870
+ return false;
871
+ }
872
+
873
+ /**
874
+ * Detects a tablet (probably) running the Firefox OS.
875
+ * @return detection of a Firefox OS tablet
876
+ */
877
+ public boolean detectFirefoxOSTablet() {
878
+ //First, let's make sure we're NOT on another major mobile OS.
879
+ if (detectIos()
880
+ || detectAndroid()
881
+ || detectSailfish())
882
+ return false;
883
+
884
+ if ((userAgent.indexOf(engineFirefox) != -1)
885
+ && (userAgent.indexOf(deviceTablet) != -1))
886
+ return true;
887
+
888
+ return false;
889
+ }
890
+
891
+ /**
892
+ * Detects a device running the Sailfish OS.
893
+ * @return detection of a Sailfish device
894
+ */
895
+ public boolean detectSailfish() {
896
+ if (userAgent.indexOf(deviceSailfish) != -1) {
897
+ return true;
898
+ }
899
+ return false;
900
+ }
901
+
902
+ /**
903
+ * Detects a phone running the Sailfish OS.
904
+ * @return detection of a Sailfish phone
905
+ */
906
+ public boolean detectSailfishPhone() {
907
+ if (detectSailfish() && (userAgent.indexOf(mobile) != -1))
908
+ return true;
909
+
910
+ return false;
911
+ }
912
+
913
+ /**
914
+ * Detects a mobile device running the Ubuntu Mobile OS.
915
+ * @return detection of an Ubuntu Mobile OS mobile device
916
+ */
917
+ public boolean detectUbuntu() {
918
+ if (detectUbuntuPhone() || detectUbuntuTablet())
919
+ return true;
920
+
921
+ return false;
922
+ }
923
+
924
+ /**
925
+ * Detects a phone running the Ubuntu Mobile OS.
926
+ * @return detection of an Ubuntu Mobile OS phone
927
+ */
928
+ public boolean detectUbuntuPhone() {
929
+ if ((userAgent.indexOf(deviceUbuntu) != -1)
930
+ && (userAgent.indexOf(mobile) != -1))
931
+ return true;
932
+
933
+ return false;
934
+ }
935
+
936
+ /**
937
+ * Detects a tablet running the Ubuntu Mobile OS.
938
+ * @return detection of an Ubuntu Mobile OS tablet
939
+ */
940
+ public boolean detectUbuntuTablet() {
941
+ if ((userAgent.indexOf(deviceUbuntu) != -1)
942
+ && (userAgent.indexOf(deviceTablet) != -1))
943
+ return true;
944
+
945
+ return false;
946
+ }
947
+
948
+
814
949
  /**
815
950
  * Detects the Danger Hiptop device.
816
951
  * @return detection of a Danger Hiptop
@@ -978,6 +1113,7 @@ public class UAgentInfo {
978
1113
  || detectSymbianOS()
979
1114
  || detectWindowsMobile()
980
1115
  || detectBlackBerry()
1116
+ || detectMeegoPhone()
981
1117
  || detectPalmOS());
982
1118
  }
983
1119
 
@@ -989,45 +1125,39 @@ public class UAgentInfo {
989
1125
  */
990
1126
  public boolean detectMobileQuick() {
991
1127
  //Let's exclude tablets
992
- if (detectTierTablet())
1128
+ if (isTierTablet) {
993
1129
  return false;
994
-
995
- if ((initCompleted == true) ||
996
- (isMobilePhone == true))
997
- return isMobilePhone;
998
-
1130
+ }
999
1131
  //Most mobile browsing is done on smartphones
1000
- if (detectSmartphone())
1132
+ if (detectSmartphone()) {
1001
1133
  return true;
1134
+ }
1002
1135
 
1003
- if (detectWapWml()
1004
- || detectBrewDevice()
1005
- || detectOperaMobile())
1136
+ //Catch-all for many mobile devices
1137
+ if (userAgent.indexOf(mobile) != -1) {
1006
1138
  return true;
1139
+ }
1007
1140
 
1008
- if ((userAgent.indexOf(engineObigo) != -1)
1009
- || (userAgent.indexOf(engineNetfront) != -1)
1010
- || (userAgent.indexOf(engineUpBrowser) != -1)
1011
- || (userAgent.indexOf(engineOpenWeb) != -1))
1141
+ if (detectOperaMobile()) {
1012
1142
  return true;
1143
+ }
1013
1144
 
1014
- if (detectDangerHiptop()
1015
- || detectMidpCapable()
1016
- || detectMaemoTablet()
1017
- || detectArchos())
1145
+ //We also look for Kindle devices
1146
+ if (detectKindle()
1147
+ || detectAmazonSilk()) {
1018
1148
  return true;
1149
+ }
1019
1150
 
1020
- if ((userAgent.indexOf(devicePda) != -1) &&
1021
- (userAgent.indexOf(disUpdate) < 0)) //no index found
1022
- return true;
1023
-
1024
- if (userAgent.indexOf(mobile) != -1)
1151
+ if (detectWapWml()
1152
+ || detectMidpCapable()
1153
+ || detectBrewDevice()) {
1025
1154
  return true;
1155
+ }
1026
1156
 
1027
- //We also look for Kindle devices
1028
- if (detectKindle()
1029
- || detectAmazonSilk())
1157
+ if ((userAgent.indexOf(engineNetfront) != -1)
1158
+ || (userAgent.indexOf(engineUpBrowser) != -1)) {
1030
1159
  return true;
1160
+ }
1031
1161
 
1032
1162
  return false;
1033
1163
  }
@@ -1043,28 +1173,36 @@ public class UAgentInfo {
1043
1173
  */
1044
1174
  public boolean detectMobileLong() {
1045
1175
  if (detectMobileQuick()
1046
- || detectGameConsole()
1047
- || detectSonyMylo()) {
1176
+ || detectGameConsole()) {
1048
1177
  return true;
1049
1178
  }
1050
1179
 
1051
- //detect older phones from certain manufacturers and operators.
1052
- if (userAgent.indexOf(uplink) != -1)
1053
- return true;
1054
- if (userAgent.indexOf(manuSonyEricsson) != -1)
1055
- return true;
1056
- if (userAgent.indexOf(manuericsson) != -1)
1057
- return true;
1058
- if (userAgent.indexOf(manuSamsung1) != -1)
1180
+ if (detectDangerHiptop()
1181
+ || detectMaemoTablet()
1182
+ || detectSonyMylo()
1183
+ || detectArchos()) {
1059
1184
  return true;
1185
+ }
1060
1186
 
1061
- if (userAgent.indexOf(svcDocomo) != -1)
1062
- return true;
1063
- if (userAgent.indexOf(svcKddi) != -1)
1064
- return true;
1065
- if (userAgent.indexOf(svcVodafone) != -1)
1187
+ if ((userAgent.indexOf(devicePda) != -1) &&
1188
+ (userAgent.indexOf(disUpdate) < 0)) //no index found
1189
+ {
1066
1190
  return true;
1191
+ }
1067
1192
 
1193
+ //Detect older phones from certain manufacturers and operators.
1194
+ if ((userAgent.indexOf(uplink) != -1)
1195
+ || (userAgent.indexOf(engineOpenWeb) != -1)
1196
+ || (userAgent.indexOf(manuSamsung1) != -1)
1197
+ || (userAgent.indexOf(manuSonyEricsson) != -1)
1198
+ || (userAgent.indexOf(manuericsson) != -1)
1199
+ || (userAgent.indexOf(svcDocomo) != -1)
1200
+ || (userAgent.indexOf(svcKddi) != -1)
1201
+ || (userAgent.indexOf(svcVodafone) != -1))
1202
+ {
1203
+ return true;
1204
+ }
1205
+
1068
1206
  return false;
1069
1207
  }
1070
1208
 
@@ -1080,13 +1218,11 @@ public class UAgentInfo {
1080
1218
  * @return detection of any device in the Tablet Tier
1081
1219
  */
1082
1220
  public boolean detectTierTablet() {
1083
- if ((this.initCompleted == true) ||
1084
- (this.isTierTablet == true))
1085
- return this.isTierTablet;
1086
-
1087
1221
  if (detectIpad()
1088
1222
  || detectAndroidTablet()
1089
1223
  || detectBlackBerryTablet()
1224
+ || detectFirefoxOSTablet()
1225
+ || detectUbuntuTablet()
1090
1226
  || detectWebOSTablet()) {
1091
1227
  return true;
1092
1228
  }
@@ -1101,10 +1237,6 @@ public class UAgentInfo {
1101
1237
  * @return detection of any device in the iPhone/Android/Windows Phone/BlackBerry/WebOS Tier
1102
1238
  */
1103
1239
  public boolean detectTierIphone() {
1104
- if ((this.initCompleted == true) ||
1105
- (this.isTierIphone == true))
1106
- return this.isTierIphone;
1107
-
1108
1240
  if (detectIphoneOrIpod()
1109
1241
  || detectAndroidPhone()
1110
1242
  || detectWindowsPhone()
@@ -1114,6 +1246,9 @@ public class UAgentInfo {
1114
1246
  || detectPalmWebOS()
1115
1247
  || detectBada()
1116
1248
  || detectTizen()
1249
+ || detectFirefoxOSPhone()
1250
+ || detectSailfishPhone()
1251
+ || detectUbuntuPhone()
1117
1252
  || detectGamingHandheld()) {
1118
1253
  return true;
1119
1254
  }
@@ -1129,12 +1264,7 @@ public class UAgentInfo {
1129
1264
  * @return detection of any device in the 'Rich CSS' Tier
1130
1265
  */
1131
1266
  public boolean detectTierRichCss() {
1132
- if ((this.initCompleted == true) ||
1133
- (this.isTierRichCss == true))
1134
- return this.isTierRichCss;
1135
-
1136
1267
  boolean result = false;
1137
-
1138
1268
  //The following devices are explicitly ok.
1139
1269
  //Note: 'High' BlackBerry devices ONLY
1140
1270
  if (detectMobileQuick()) {
@@ -1151,9 +1281,9 @@ public class UAgentInfo {
1151
1281
  || detectWindowsMobile()
1152
1282
  || userAgent.indexOf(engineTelecaQ) != -1) {
1153
1283
  result= true;
1154
- }
1155
- }
1156
- }
1284
+ } // if detectWebkit()
1285
+ } //if !detectTierIphone()
1286
+ } //if detectMobileQuick()
1157
1287
  return result;
1158
1288
  }
1159
1289
 
@@ -1164,16 +1294,12 @@ public class UAgentInfo {
1164
1294
  * @return detection of a mobile device in the less capable tier
1165
1295
  */
1166
1296
  public boolean detectTierOtherPhones() {
1167
- if ((this.initCompleted == true) ||
1168
- (this.isTierGenericMobile == true))
1169
- return this.isTierGenericMobile;
1170
-
1171
1297
  //Exclude devices in the other 2 categories
1172
1298
  if (detectMobileLong()
1173
1299
  && !detectTierIphone()
1174
- && !detectTierRichCss())
1300
+ && !detectTierRichCss()) {
1175
1301
  return true;
1176
-
1302
+ }
1177
1303
  return false;
1178
1304
  }
1179
- }
1305
+ }