mobileesp_converted 0.1.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,1086 @@
1
+ # This file has been automatically converted to Ruby from Java source code.
2
+ #
3
+ #
4
+ #
5
+ =begin
6
+ *******************************************
7
+ # Copyright 2010-2012, Anthony Hand
8
+ #
9
+ # File version date: January 21, 2012
10
+ # Update:
11
+ # - Moved Windows Phone 7 to the iPhone Tier. WP7.5's IE 9-based browser is good enough now.
12
+ # - Added a new variable for 2 versions of the new BlackBerry Bold Touch (9900 and 9930): deviceBBBoldTouch.
13
+ # - Updated DetectBlackBerryTouch() to support the 2 versions of the new BlackBerry Bold Touch (9900 and 9930).
14
+ # - Updated DetectKindle() to focus on eInk devices only. The Kindle Fire should be detected as a regular Android device.
15
+ #
16
+ # File version date: August 22, 2011
17
+ # Update:
18
+ # - Updated DetectAndroidTablet() to fix a bug I introduced in the last fix!
19
+ #
20
+ # File version date: August 16, 2011
21
+ # Update:
22
+ # - Updated DetectAndroidTablet() to exclude Opera Mini, which was falsely reporting as running on a tablet device when on a phone.
23
+ #
24
+ # File version date: August 7, 2011
25
+ # Update:
26
+ # - The Opera for Android browser doesn't follow Google's recommended useragent string guidelines, so some fixes were needed.
27
+ # - Updated DetectAndroidPhone() and DetectAndroidTablet() to properly detect devices running Opera Mobile.
28
+ # - Created 2 new methods: DetectOperaAndroidPhone() and DetectOperaAndroidTablet().
29
+ # - Updated DetectTierIphone(). Removed the call to DetectMaemoTablet(), an obsolete mobile OS.
30
+ #
31
+ #
32
+ # LICENSE INFORMATION
33
+ # Licensed under the Apache License, Version 2.0 (the "License")
34
+ # you may not use this file except in compliance with the License.
35
+ # You may obtain a copy of the License at
36
+ # http:
37
+ # Unless required by applicable law or agreed to in writing,
38
+ # software distributed under the License is distributed on an
39
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
40
+ # either express or implied. See the License for the specific
41
+ # language governing permissions and limitations under the License.
42
+ #
43
+ #
44
+ # ABOUT THIS PROJECT
45
+ # Project Owner: Anthony Hand
46
+ # Email: anthony.hand@gmail.com
47
+ # Web Site: http:
48
+ # Source Files: http:
49
+ #
50
+ # Versions of this code are available for:
51
+ # PHP, JavaScript, Java, ASP.NET (C#), and Ruby
52
+ #
53
+ # *******************************************
54
+
55
+ =end
56
+
57
+
58
+ =begin
59
+ *
60
+ * The DetectSmartPhone class encapsulates information about
61
+ * a browser's connection to your web site.
62
+ * You can use it to find out whether the browser asking for
63
+ * your site's content is probably running on a mobile device.
64
+ * The methods were written so you can be as granular as you want.
65
+ * For example, enquiring whether it's as specific as an iPod Touch or
66
+ * as general as a smartphone class device.
67
+ * The object's methods return true, or false.
68
+
69
+ =end
70
+ module MobileESPConverted
71
+ class UAgentInfo
72
+
73
+
74
+ attr_reader :user_agent
75
+ attr_reader :http_accept
76
+
77
+
78
+ attr_reader :is_iphone
79
+ attr_reader :is_android_phone
80
+ attr_reader :is_tier_tablet
81
+ attr_reader :is_tier_iphone
82
+ attr_reader :is_tier_rich_css
83
+ attr_reader :is_tier_generic_mobile
84
+
85
+
86
+ ENGINE_WEB_KIT = "webkit"
87
+
88
+ DEVICE_IPHONE = "iphone"
89
+ DEVICE_IPOD = "ipod"
90
+ DEVICE_IPAD = "ipad"
91
+ DEVICE_MAC_PPC = "macintosh"
92
+
93
+ DEVICE_ANDROID = "android"
94
+ DEVICE_GOOGLE_T_V = "googletv"
95
+ DEVICE_XOOM = "xoom"
96
+ DEVICE_HTC_FLYER = "htc_flyer"
97
+
98
+ DEVICE_SYMBIAN = "symbian"
99
+ DEVICE_S60 = "series60"
100
+ DEVICE_S70 = "series70"
101
+ DEVICE_S80 = "series80"
102
+ DEVICE_S90 = "series90"
103
+
104
+ DEVICE_WIN_PHONE7 = "windows phone os 7"
105
+ DEVICE_WIN_MOB = "windows ce"
106
+ DEVICE_WINDOWS = "windows"
107
+ DEVICE_IE_MOB = "iemobile"
108
+ DEVICE_PPC = "ppc"
109
+ ENGINE_PIE = "wm5 pie"
110
+
111
+ DEVICE_B_B = "blackberry"
112
+ VND_R_I_M = "vnd.rim"
113
+ DEVICE_B_B_STORM = "blackberry95"
114
+ DEVICE_B_B_BOLD = "blackberry97"
115
+ DEVICE_B_B_BOLD_TOUCH = "blackberry 99"
116
+ DEVICE_B_B_TOUR = "blackberry96"
117
+ DEVICE_B_B_CURVE = "blackberry89"
118
+ DEVICE_B_B_TORCH = "blackberry 98"
119
+ DEVICE_B_B_PLAYBOOK = "playbook"
120
+
121
+ DEVICE_PALM = "palm"
122
+ DEVICE_WEB_O_S = "webos"
123
+ DEVICE_WEB_O_SHP = "hpwos"
124
+
125
+ ENGINE_BLAZER = "blazer"
126
+ ENGINE_XIINO = "xiino"
127
+
128
+ DEVICE_KINDLE = "kindle"
129
+
130
+ DEVICE_NUVIFONE = "nuvifone"
131
+
132
+
133
+ VNDWAP = "vnd.wap"
134
+ WML = "wml"
135
+
136
+
137
+ DEVICE_TABLET = "tablet"
138
+ DEVICE_BREW = "brew"
139
+ DEVICE_DANGER = "danger"
140
+ DEVICE_HIPTOP = "hiptop"
141
+ DEVICE_PLAYSTATION = "playstation"
142
+ DEVICE_NINTENDO_DS = "nitro"
143
+ DEVICE_NINTENDO = "nintendo"
144
+ DEVICE_WII = "wii"
145
+ DEVICE_XBOX = "xbox"
146
+ DEVICE_ARCHOS = "archos"
147
+
148
+ ENGINE_OPERA = "opera"
149
+ ENGINE_NETFRONT = "netfront"
150
+ ENGINE_UP_BROWSER = "up.browser"
151
+ ENGINE_OPEN_WEB = "openweb"
152
+ DEVICE_MIDP = "midp"
153
+ UPLINK = "up.link"
154
+ ENGINE_TELECA_Q = "teleca q"
155
+ DEVICE_PDA = "pda"
156
+ MINI = "mini"
157
+ MOBILE = "mobile"
158
+ MOBI = "mobi"
159
+
160
+
161
+ MAEMO = "maemo"
162
+ LINUX = "linux"
163
+ QTEMBEDDED = "qt embedded"
164
+ MYLOCOM2 = "com2"
165
+
166
+
167
+ MANU_SONY_ERICSSON = "sonyericsson"
168
+ MANUERICSSON = "ericsson"
169
+ MANU_SAMSUNG1 = "sec-sgh"
170
+ MANU_SONY = "sony"
171
+ MANU_HTC = "htc"
172
+
173
+
174
+ SVC_DOCOMO = "docomo"
175
+ SVC_KDDI = "kddi"
176
+ SVC_VODAFONE = "vodafone"
177
+
178
+
179
+ DIS_UPDATE = "update"
180
+
181
+
182
+ =begin
183
+ *
184
+ * Initialize the user_agent and http_accept variables
185
+ *
186
+ * @param user_agent the User-Agent header
187
+ * @param http_accept the Accept header
188
+
189
+ =end
190
+ def initialize(user_agent, http_accept)
191
+ if (user_agent != nil)
192
+ @user_agent = user_agent.downcase
193
+ end
194
+ if (http_accept != nil)
195
+ @http_accept = http_accept.downcase
196
+ end
197
+
198
+
199
+ init_device_scan()
200
+ end
201
+
202
+ =begin
203
+ *
204
+ * Return the lower case HTTP_USER_AGENT
205
+ * @return user_agent
206
+
207
+ =end
208
+ def get_user_agent()
209
+ return user_agent
210
+ end
211
+
212
+ =begin
213
+ *
214
+ * Return the lower case HTTP_ACCEPT
215
+ * @return http_accept
216
+
217
+ =end
218
+ def get_http_accept()
219
+ return http_accept
220
+ end
221
+
222
+ =begin
223
+ *
224
+ * Return whether the device is an Iphone or iPod Touch
225
+ * @return is_iphone
226
+
227
+ =end
228
+ def get_is_iphone()
229
+ return is_iphone
230
+ end
231
+
232
+ =begin
233
+ *
234
+ * Return whether the device is in the Tablet Tier.
235
+ * @return is_tier_tablet
236
+
237
+ =end
238
+ def get_is_tier_tablet()
239
+ return is_tier_tablet
240
+ end
241
+
242
+ =begin
243
+ *
244
+ * Return whether the device is in the Iphone Tier.
245
+ * @return is_tier_iphone
246
+
247
+ =end
248
+ def get_is_tier_iphone()
249
+ return is_tier_iphone
250
+ end
251
+
252
+ =begin
253
+ *
254
+ * Return whether the device is in the 'Rich CSS' tier of mobile devices.
255
+ * @return is_tier_rich_css
256
+
257
+ =end
258
+ def get_is_tier_rich_css()
259
+ return is_tier_rich_css
260
+ end
261
+
262
+ =begin
263
+ *
264
+ * Return whether the device is a generic, less-capable mobile device.
265
+ * @return is_tier_generic_mobile
266
+
267
+ =end
268
+ def get_is_tier_generic_mobile()
269
+ return is_tier_generic_mobile
270
+ end
271
+
272
+ =begin
273
+ *
274
+ * Initialize Key Stored Values.
275
+
276
+ =end
277
+ def init_device_scan()
278
+ @is_iphone = detect_iphone_or_ipod()
279
+ @is_android_phone = detect_android_phone()
280
+ @is_tier_tablet = detect_tier_tablet()
281
+ @is_tier_iphone = detect_tier_iphone()
282
+ @is_tier_rich_css = detect_tier_rich_css()
283
+ @is_tier_generic_mobile = detect_tier_other_phones()
284
+ end
285
+
286
+ =begin
287
+ *
288
+ * Detects if the current device is an iPhone.
289
+ * @return detection of an iPhone
290
+
291
+ =end
292
+ def detect_iphone()
293
+
294
+ if (user_agent.include?(DEVICE_IPHONE) &&
295
+ !detect_ipad() &&
296
+ !detect_ipod())
297
+ return true
298
+ end
299
+ return false
300
+ end
301
+
302
+ =begin
303
+ *
304
+ * Detects if the current device is an iPod Touch.
305
+ * @return detection of an iPod Touch
306
+
307
+ =end
308
+ def detect_ipod()
309
+ if (user_agent.include?(DEVICE_IPOD))
310
+ return true
311
+ end
312
+ return false
313
+ end
314
+
315
+ =begin
316
+ *
317
+ * Detects if the current device is an iPad tablet.
318
+ * @return detection of an iPad
319
+
320
+ =end
321
+ def detect_ipad()
322
+ if (user_agent.include?(DEVICE_IPAD) && detect_webkit())
323
+ return true
324
+ end
325
+ return false
326
+ end
327
+
328
+ =begin
329
+ *
330
+ * Detects if the current device is an iPhone or iPod Touch.
331
+ * @return detection of an iPhone or iPod Touch
332
+
333
+ =end
334
+ def detect_iphone_or_ipod()
335
+
336
+ if (detect_iphone() || user_agent.include?(DEVICE_IPOD))
337
+ return true
338
+ end
339
+ return false
340
+ end
341
+
342
+ =begin
343
+ *
344
+ * Detects *any* iOS device: iPhone, iPod Touch, iPad.
345
+ * @return detection of an Apple iOS device
346
+
347
+ =end
348
+ def detect_ios()
349
+ if (detect_iphone_or_ipod() || detect_ipad())
350
+ return true
351
+ end
352
+ return false
353
+ end
354
+
355
+
356
+ =begin
357
+ *
358
+ * Detects *any* Android OS-based device: phone, tablet, and multi-media player.
359
+ * Also detects Google TV.
360
+ * @return detection of an Android device
361
+
362
+ =end
363
+ def detect_android()
364
+ if ((user_agent.include?(DEVICE_ANDROID)) ||
365
+ detect_google_t_v())
366
+ return true
367
+ end
368
+
369
+ if (user_agent.include?(DEVICE_HTC_FLYER))
370
+ return true
371
+ end
372
+ return false
373
+ end
374
+
375
+ =begin
376
+ *
377
+ * Detects if the current device is a (small-ish) Android OS-based device
378
+ * used for calling and/or multi-media (like a Samsung Galaxy Player).
379
+ * Google says these devices will have 'Android' AND 'mobile' in user agent.
380
+ * Ignores tablets (Honeycomb and later).
381
+ * @return detection of an Android phone
382
+
383
+ =end
384
+ def detect_android_phone()
385
+ if (detect_android() && (user_agent.include?(MOBILE)))
386
+ return true
387
+ end
388
+
389
+ if (detect_opera_android_phone())
390
+ return true
391
+ end
392
+
393
+ if (user_agent.include?(DEVICE_HTC_FLYER))
394
+ return true
395
+ end
396
+ return false
397
+ end
398
+
399
+ =begin
400
+ *
401
+ * Detects if the current device is a (self-reported) Android tablet.
402
+ * Google says these devices will have 'Android' and NOT 'mobile' in their user agent.
403
+ * @return detection of an Android tablet
404
+
405
+ =end
406
+ def detect_android_tablet()
407
+
408
+ if (!detect_android())
409
+ return false
410
+ end
411
+
412
+
413
+ if (detect_opera_mobile())
414
+ return false
415
+ end
416
+
417
+ if (user_agent.include?(DEVICE_HTC_FLYER))
418
+ return false
419
+ end
420
+
421
+
422
+ if ((user_agent.include?(MOBILE)))
423
+ return false
424
+ else
425
+ return true
426
+ end
427
+ end
428
+
429
+ =begin
430
+ *
431
+ * Detects if the current device is an Android OS-based device and
432
+ * the browser is based on WebKit.
433
+ * @return detection of an Android WebKit browser
434
+
435
+ =end
436
+ def detect_android_web_kit()
437
+ if (detect_android() && detect_webkit())
438
+ return true
439
+ end
440
+ return false
441
+ end
442
+
443
+ =begin
444
+ *
445
+ * Detects if the current device is a GoogleTV.
446
+ * @return detection of GoogleTV
447
+
448
+ =end
449
+ def detect_google_t_v()
450
+ if (user_agent.include?(DEVICE_GOOGLE_T_V))
451
+ return true
452
+ end
453
+ return false
454
+ end
455
+
456
+ =begin
457
+ *
458
+ * Detects if the current browser is based on WebKit.
459
+ * @return detection of a WebKit browser
460
+
461
+ =end
462
+ def detect_webkit()
463
+ if (user_agent.include?(ENGINE_WEB_KIT))
464
+ return true
465
+ end
466
+ return false
467
+ end
468
+
469
+ =begin
470
+ *
471
+ * Detects if the current browser is the Symbian S60 Open Source Browser.
472
+ * @return detection of Symbian S60 Browser
473
+
474
+ =end
475
+ def detect_s60_oss_browser()
476
+
477
+ if (detect_webkit() && (user_agent.include?(DEVICE_SYMBIAN) || user_agent.include?(DEVICE_S60)))
478
+ return true
479
+ end
480
+ return false
481
+ end
482
+
483
+ =begin
484
+ *
485
+ *
486
+ * Detects if the current device is any Symbian OS-based device,
487
+ * including older S60, Series 70, Series 80, Series 90, and UIQ,
488
+ * or other browsers running on these devices.
489
+ * @return detection of SymbianOS
490
+
491
+ =end
492
+ def detect_symbian_o_s()
493
+ if (user_agent.include?(DEVICE_SYMBIAN) || user_agent.include?(DEVICE_S60) || user_agent.include?(DEVICE_S70) || user_agent.include?(DEVICE_S80) || user_agent.include?(DEVICE_S90))
494
+ return true
495
+ end
496
+ return false
497
+ end
498
+
499
+ =begin
500
+ *
501
+ * Detects if the current browser is a
502
+ * Windows Phone 7 device.
503
+ * @return detection of Windows Phone 7
504
+
505
+ =end
506
+ def detect_windows_phone7()
507
+ if (user_agent.include?(DEVICE_WIN_PHONE7))
508
+ return true
509
+ end
510
+ return false
511
+ end
512
+
513
+ =begin
514
+ *
515
+ * Detects if the current browser is a Windows Mobile device.
516
+ * Excludes Windows Phone 7 devices.
517
+ * Focuses on Windows Mobile 6.xx and earlier.
518
+ * @return detection of Windows Mobile
519
+
520
+ =end
521
+ def detect_windows_mobile()
522
+
523
+ if (detect_windows_phone7())
524
+ return false
525
+ end
526
+
527
+
528
+
529
+ if (user_agent.include?(DEVICE_WIN_MOB) || user_agent.include?(DEVICE_WIN_MOB) || user_agent.include?(DEVICE_IE_MOB) || user_agent.include?(ENGINE_PIE) || (user_agent.include?(MANU_HTC) && user_agent.include?(DEVICE_WINDOWS)) || (detect_wap_wml() && user_agent.include?(DEVICE_WINDOWS)))
530
+ return true
531
+ end
532
+
533
+
534
+ if (user_agent.include?(DEVICE_PPC) &&
535
+ !(user_agent.include?(DEVICE_MAC_PPC)))
536
+ return true
537
+ end
538
+
539
+ return false
540
+ end
541
+
542
+ =begin
543
+ *
544
+ * Detects if the current browser is any BlackBerry.
545
+ * Includes the PlayBook.
546
+ * @return detection of Blackberry
547
+
548
+ =end
549
+ def detect_black_berry()
550
+ if (user_agent.include?(DEVICE_B_B) ||
551
+ http_accept.include?(VND_R_I_M))
552
+ return true
553
+ end
554
+ return false
555
+ end
556
+
557
+ =begin
558
+ *
559
+ * Detects if the current browser is on a BlackBerry tablet device.
560
+ * Example: PlayBook
561
+ * @return detection of a Blackberry Tablet
562
+
563
+ =end
564
+ def detect_black_berry_tablet()
565
+ if (user_agent.include?(DEVICE_B_B_PLAYBOOK))
566
+ return true
567
+ end
568
+ return false
569
+ end
570
+
571
+ =begin
572
+ *
573
+ * Detects if the current browser is a BlackBerry device AND uses a
574
+ * WebKit-based browser. These are signatures for the new BlackBerry OS 6.
575
+ * Examples: Torch. Includes the Playbook.
576
+ * @return detection of a Blackberry device with WebKit browser
577
+
578
+ =end
579
+ def detect_black_berry_web_kit()
580
+ if (detect_black_berry() &&
581
+ user_agent.include?(ENGINE_WEB_KIT))
582
+ return true
583
+ end
584
+ return false
585
+ end
586
+
587
+ =begin
588
+ *
589
+ * Detects if the current browser is a BlackBerry Touch
590
+ * device, such as the Storm, Torch, and Bold Touch. Excludes the Playbook.
591
+ * @return detection of a Blackberry touchscreen device
592
+
593
+ =end
594
+ def detect_black_berry_touch()
595
+ if (detect_black_berry() &&
596
+ (user_agent.include?(DEVICE_B_B_STORM) ||
597
+ user_agent.include?(DEVICE_B_B_TORCH) ||
598
+ user_agent.include?(DEVICE_B_B_BOLD_TOUCH)))
599
+ return true
600
+ end
601
+ return false
602
+ end
603
+
604
+ =begin
605
+ *
606
+ * Detects if the current browser is a BlackBerry device AND
607
+ * has a more capable recent browser. Excludes the Playbook.
608
+ * Examples, Storm, Bold, Tour, Curve2
609
+ * Excludes the new BlackBerry OS 6 and 7 browser!!
610
+ * @return detection of a Blackberry device with a better browser
611
+
612
+ =end
613
+ def detect_black_berry_high()
614
+
615
+ if (detect_black_berry_web_kit())
616
+ return false
617
+ end
618
+ if (detect_black_berry())
619
+ if (detect_black_berry_touch() || user_agent.include?(DEVICE_B_B_BOLD) || user_agent.include?(DEVICE_B_B_TOUR) || user_agent.include?(DEVICE_B_B_CURVE))
620
+ return true
621
+ else
622
+ return false
623
+ end
624
+ else
625
+ return false
626
+ end
627
+ end
628
+
629
+ =begin
630
+ *
631
+ * Detects if the current browser is a BlackBerry device AND
632
+ * has an older, less capable browser.
633
+ * Examples: Pearl, 8800, Curve1
634
+ * @return detection of a Blackberry device with a poorer browser
635
+
636
+ =end
637
+ def detect_black_berry_low()
638
+ if (detect_black_berry())
639
+
640
+ if (detect_black_berry_high() || detect_black_berry_web_kit())
641
+ return false
642
+ else
643
+ return true
644
+ end
645
+ else
646
+ return false
647
+ end
648
+ end
649
+
650
+ =begin
651
+ *
652
+ * Detects if the current browser is on a PalmOS device.
653
+ * @return detection of a PalmOS device
654
+
655
+ =end
656
+ def detect_palm_o_s()
657
+
658
+ if (user_agent.include?(DEVICE_PALM) || user_agent.include?(ENGINE_BLAZER) || user_agent.include?(ENGINE_XIINO))
659
+
660
+ if (detect_palm_web_o_s())
661
+ return false
662
+ else
663
+ return true
664
+ end
665
+ end
666
+ return false
667
+ end
668
+
669
+ =begin
670
+ *
671
+ * Detects if the current browser is on a Palm device
672
+ * running the new WebOS.
673
+ * @return detection of a Palm WebOS device
674
+
675
+ =end
676
+ def detect_palm_web_o_s()
677
+ if (user_agent.include?(DEVICE_WEB_O_S))
678
+ return true
679
+ end
680
+ return false
681
+ end
682
+
683
+ =begin
684
+ *
685
+ * Detects if the current browser is on an HP tablet running WebOS.
686
+ * @return detection of an HP WebOS tablet
687
+
688
+ =end
689
+ def detect_web_o_s_tablet()
690
+ if (user_agent.include?(DEVICE_WEB_O_SHP) &&
691
+ user_agent.include?(DEVICE_TABLET))
692
+ return true
693
+ end
694
+ return false
695
+ end
696
+
697
+ =begin
698
+ *
699
+ * Detects if the current browser is a
700
+ * Garmin Nuvifone.
701
+ * @return detection of a Garmin Nuvifone
702
+
703
+ =end
704
+ def detect_garmin_nuvifone()
705
+ if (user_agent.include?(DEVICE_NUVIFONE))
706
+ return true
707
+ end
708
+ return false
709
+ end
710
+
711
+ =begin
712
+ *
713
+ * Check to see whether the device is any device
714
+ * in the 'smartphone' category.
715
+ * @return detection of a general smartphone device
716
+
717
+ =end
718
+ def detect_smartphone()
719
+ return (is_iphone || is_android_phone || is_tier_iphone || detect_s60_oss_browser() || detect_symbian_o_s() || detect_windows_mobile() || detect_windows_phone7() || detect_black_berry() || detect_palm_web_o_s() || detect_palm_o_s() || detect_garmin_nuvifone())
720
+ end
721
+
722
+ =begin
723
+ *
724
+ * Detects whether the device is a Brew-powered device.
725
+ * @return detection of a Brew device
726
+
727
+ =end
728
+ def detect_brew_device()
729
+ if (user_agent.include?(DEVICE_BREW))
730
+ return true
731
+ end
732
+ return false
733
+ end
734
+
735
+ =begin
736
+ *
737
+ * Detects the Danger Hiptop device.
738
+ * @return detection of a Danger Hiptop
739
+
740
+ =end
741
+ def detect_danger_hiptop()
742
+ if (user_agent.include?(DEVICE_DANGER) || user_agent.include?(DEVICE_HIPTOP))
743
+ return true
744
+ end
745
+ return false
746
+ end
747
+
748
+ =begin
749
+ *
750
+ * Detects Opera Mobile or Opera Mini.
751
+ * @return detection of an Opera browser for a mobile device
752
+
753
+ =end
754
+ def detect_opera_mobile()
755
+ if (user_agent.include?(ENGINE_OPERA) && (user_agent.include?(MINI) || user_agent.include?(MOBI)))
756
+ return true
757
+ end
758
+ return false
759
+ end
760
+
761
+ =begin
762
+ *
763
+ * Detects Opera Mobile on an Android phone.
764
+ * @return detection of an Opera browser on an Android phone
765
+
766
+ =end
767
+ def detect_opera_android_phone()
768
+ if (user_agent.include?(ENGINE_OPERA) && (user_agent.include?(DEVICE_ANDROID) && user_agent.include?(MOBI)))
769
+ return true
770
+ end
771
+ return false
772
+ end
773
+
774
+ =begin
775
+ *
776
+ * Detects Opera Mobile on an Android tablet.
777
+ * @return detection of an Opera browser on an Android tablet
778
+
779
+ =end
780
+ def detect_opera_android_tablet()
781
+ if (user_agent.include?(ENGINE_OPERA) && (user_agent.include?(DEVICE_ANDROID) && user_agent.include?(DEVICE_TABLET)))
782
+ return true
783
+ end
784
+ return false
785
+ end
786
+
787
+ =begin
788
+ *
789
+ * Detects whether the device supports WAP or WML.
790
+ * @return detection of a WAP- or WML-capable device
791
+
792
+ =end
793
+ def detect_wap_wml()
794
+ if (http_accept.include?(VNDWAP) || http_accept.include?(WML))
795
+ return true
796
+ end
797
+ return false
798
+ end
799
+
800
+ =begin
801
+ *
802
+ * Detects if the current device is an Amazon Kindle (eInk devices only).
803
+ * Note: For the Kindle Fire, use the normal Android methods.
804
+ * @return detection of a Kindle
805
+
806
+ =end
807
+ def detect_kindle()
808
+ if (user_agent.include?(DEVICE_KINDLE) &&
809
+ !detect_android())
810
+ return true
811
+ end
812
+ return false
813
+ end
814
+
815
+ =begin
816
+ *
817
+ * Detects if the current device is a mobile device.
818
+ * This method catches most of the popular modern devices.
819
+ * Excludes Apple iPads and other modern tablets.
820
+ * @return detection of any mobile device using the quicker method
821
+
822
+ =end
823
+ def detect_mobile_quick()
824
+
825
+ if (is_tier_tablet)
826
+ return false
827
+ end
828
+
829
+ if (detect_smartphone())
830
+ return true
831
+ end
832
+
833
+ if (detect_wap_wml() || detect_brew_device() || detect_opera_mobile())
834
+ return true
835
+ end
836
+
837
+ if ((user_agent.include?(ENGINE_NETFRONT)) || (user_agent.include?(ENGINE_UP_BROWSER)) || (user_agent.include?(ENGINE_OPEN_WEB)))
838
+ return true
839
+ end
840
+
841
+ if (detect_danger_hiptop() || detect_midp_capable() || detect_maemo_tablet() || detect_archos())
842
+ return true
843
+ end
844
+
845
+ if ((user_agent.include?(DEVICE_PDA)) &&
846
+ (!user_agent.include?(DIS_UPDATE)))
847
+ return true
848
+ end
849
+ if (user_agent.include?(MOBILE))
850
+ return true
851
+ end
852
+
853
+ return false
854
+ end
855
+
856
+ =begin
857
+ *
858
+ * Detects if the current device is a Sony Playstation.
859
+ * @return detection of Sony Playstation
860
+
861
+ =end
862
+ def detect_sony_playstation()
863
+ if (user_agent.include?(DEVICE_PLAYSTATION))
864
+ return true
865
+ end
866
+ return false
867
+ end
868
+
869
+ =begin
870
+ *
871
+ * Detects if the current device is a Nintendo game device.
872
+ * @return detection of Nintendo
873
+
874
+ =end
875
+ def detect_nintendo()
876
+ if (user_agent.include?(DEVICE_NINTENDO) || user_agent.include?(DEVICE_WII) || user_agent.include?(DEVICE_NINTENDO_DS))
877
+ return true
878
+ end
879
+ return false
880
+ end
881
+
882
+ =begin
883
+ *
884
+ * Detects if the current device is a Microsoft Xbox.
885
+ * @return detection of Xbox
886
+
887
+ =end
888
+ def detect_xbox()
889
+ if (user_agent.include?(DEVICE_XBOX))
890
+ return true
891
+ end
892
+ return false
893
+ end
894
+
895
+ =begin
896
+ *
897
+ * Detects if the current device is an Internet-capable game console.
898
+ * @return detection of any Game Console
899
+
900
+ =end
901
+ def detect_game_console()
902
+ if (detect_sony_playstation() || detect_nintendo() || detect_xbox())
903
+ return true
904
+ end
905
+ return false
906
+ end
907
+
908
+ =begin
909
+ *
910
+ * Detects if the current device supports MIDP, a mobile Java technology.
911
+ * @return detection of a MIDP mobile Java-capable device
912
+
913
+ =end
914
+ def detect_midp_capable()
915
+ if (user_agent.include?(DEVICE_MIDP) || http_accept.include?(DEVICE_MIDP))
916
+ return true
917
+ end
918
+ return false
919
+ end
920
+
921
+ =begin
922
+ *
923
+ * Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
924
+ * @return detection of a Maemo OS tablet
925
+
926
+ =end
927
+ def detect_maemo_tablet()
928
+ if (user_agent.include?(MAEMO))
929
+ return true
930
+ elsif (user_agent.include?(LINUX) && user_agent.include?(DEVICE_TABLET) && !detect_web_o_s_tablet() && !detect_android())
931
+ return true
932
+ end
933
+ return false
934
+ end
935
+
936
+ =begin
937
+ *
938
+ * Detects if the current device is an Archos media player/Internet tablet.
939
+ * @return detection of an Archos media player
940
+
941
+ =end
942
+ def detect_archos()
943
+ if (user_agent.include?(DEVICE_ARCHOS))
944
+ return true
945
+ end
946
+ return false
947
+ end
948
+
949
+ =begin
950
+ *
951
+ * Detects if the current browser is a Sony Mylo device.
952
+ * @return detection of a Sony Mylo device
953
+
954
+ =end
955
+ def detect_sony_mylo()
956
+ if (user_agent.include?(MANU_SONY) && (user_agent.include?(QTEMBEDDED) || user_agent.include?(MYLOCOM2)))
957
+ return true
958
+ end
959
+ return false
960
+ end
961
+
962
+ =begin
963
+ *
964
+ * The longer and more thorough way to detect for a mobile device.
965
+ * Will probably detect most feature phones,
966
+ * smartphone-class devices, Internet Tablets,
967
+ * Internet-enabled game consoles, etc.
968
+ * This ought to catch a lot of the more obscure and older devices, also --
969
+ * but no promises on thoroughness!
970
+ * @return detection of any mobile device using the more thorough method
971
+
972
+ =end
973
+ def detect_mobile_long()
974
+ if (detect_mobile_quick() || detect_game_console() || detect_sony_mylo())
975
+ return true
976
+ end
977
+
978
+
979
+ if (user_agent.include?(UPLINK))
980
+ return true
981
+ end
982
+ if (user_agent.include?(MANU_SONY_ERICSSON))
983
+ return true
984
+ end
985
+ if (user_agent.include?(MANUERICSSON))
986
+ return true
987
+ end
988
+ if (user_agent.include?(MANU_SAMSUNG1))
989
+ return true
990
+ end
991
+
992
+ if (user_agent.include?(SVC_DOCOMO))
993
+ return true
994
+ end
995
+ if (user_agent.include?(SVC_KDDI))
996
+ return true
997
+ end
998
+ if (user_agent.include?(SVC_VODAFONE))
999
+ return true
1000
+ end
1001
+
1002
+ return false
1003
+ end
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+ =begin
1010
+ *
1011
+ * The quick way to detect for a tier of devices.
1012
+ * This method detects for the new generation of
1013
+ * HTML 5 capable, larger screen tablets.
1014
+ * Includes iPad, Android (e.g., Xoom), BB Playbook, WebOS, etc.
1015
+ * @return detection of any device in the Tablet Tier
1016
+
1017
+ =end
1018
+ def detect_tier_tablet()
1019
+ if (detect_ipad() || detect_android_tablet() || detect_black_berry_tablet() || detect_web_o_s_tablet())
1020
+ return true
1021
+ end
1022
+ return false
1023
+ end
1024
+
1025
+ =begin
1026
+ *
1027
+ * The quick way to detect for a tier of devices.
1028
+ * This method detects for devices which can
1029
+ * display iPhone-optimized web content.
1030
+ * Includes iPhone, iPod Touch, Android, Windows Phone 7, Palm WebOS, etc.
1031
+ * @return detection of any device in the iPhone/Android/WP7/WebOS Tier
1032
+
1033
+ =end
1034
+ def detect_tier_iphone()
1035
+ if (is_iphone || is_android_phone || (detect_black_berry_web_kit() && detect_black_berry_touch()) || detect_windows_phone7() || detect_palm_web_o_s() || detect_garmin_nuvifone())
1036
+ return true
1037
+ end
1038
+ return false
1039
+ end
1040
+
1041
+ =begin
1042
+ *
1043
+ * The quick way to detect for a tier of devices.
1044
+ * This method detects for devices which are likely to be capable
1045
+ * of viewing CSS content optimized for the iPhone,
1046
+ * but may not necessarily support JavaScript.
1047
+ * Excludes all iPhone Tier devices.
1048
+ * @return detection of any device in the 'Rich CSS' Tier
1049
+
1050
+ =end
1051
+ def detect_tier_rich_css()
1052
+ result = false
1053
+
1054
+
1055
+ if (detect_mobile_quick())
1056
+
1057
+ if (!detect_tier_iphone())
1058
+
1059
+
1060
+
1061
+
1062
+ if (detect_webkit() || detect_s60_oss_browser() || detect_black_berry_high() || detect_windows_mobile() || user_agent.include?(ENGINE_TELECA_Q))
1063
+ result= true
1064
+ end
1065
+ end
1066
+ end
1067
+ return result
1068
+ end
1069
+
1070
+ =begin
1071
+ *
1072
+ * The quick way to detect for a tier of devices.
1073
+ * This method detects for all other types of phones,
1074
+ * but excludes the iPhone and RichCSS Tier devices.
1075
+ * @return detection of a mobile device in the less capable tier
1076
+
1077
+ =end
1078
+ def detect_tier_other_phones()
1079
+
1080
+ if (detect_mobile_long() && !detect_tier_iphone() && !detect_tier_rich_css())
1081
+ return true
1082
+ end
1083
+ return false
1084
+ end
1085
+ end
1086
+ end