browser 4.2.0 → 5.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -1
  3. data/FUNDING.yml +3 -0
  4. data/README.md +97 -47
  5. data/bots.yml +1 -1
  6. data/lib/browser/base.rb +61 -6
  7. data/lib/browser/browser.rb +22 -2
  8. data/lib/browser/chrome.rb +7 -1
  9. data/lib/browser/device.rb +9 -2
  10. data/lib/browser/device/samsung.rb +33 -0
  11. data/lib/browser/device/unknown.rb +1 -1
  12. data/lib/browser/google_search_app.rb +21 -0
  13. data/lib/browser/huawei_browser.rb +21 -0
  14. data/lib/browser/maxthon.rb +21 -0
  15. data/lib/browser/miui_browser.rb +21 -0
  16. data/lib/browser/platform.rb +4 -4
  17. data/lib/browser/platform/ios.rb +1 -1
  18. data/lib/browser/platform/mac.rb +1 -1
  19. data/lib/browser/platform/{other.rb → unknown.rb} +3 -3
  20. data/lib/browser/platform/windows.rb +1 -1
  21. data/lib/browser/safari.rb +9 -1
  22. data/lib/browser/sougou_browser.rb +24 -0
  23. data/lib/browser/{generic.rb → unknown.rb} +3 -3
  24. data/lib/browser/version.rb +1 -1
  25. data/samsung.yml +138 -0
  26. data/test/browser_test.rb +37 -6
  27. data/test/ua.yml +16 -4
  28. data/test/unit/adobe_air_test.rb +1 -1
  29. data/test/unit/alipay_test.rb +6 -0
  30. data/test/unit/console_test.rb +2 -2
  31. data/test/unit/device_test.rb +29 -2
  32. data/test/unit/duck_duck_go_test.rb +2 -0
  33. data/test/unit/google_search_app_test.rb +54 -0
  34. data/test/unit/huawei_browser_test.rb +25 -0
  35. data/test/unit/maxthon_test.rb +25 -0
  36. data/test/unit/meta_test.rb +9 -0
  37. data/test/unit/miui_browser_test.rb +25 -0
  38. data/test/unit/opera_test.rb +1 -0
  39. data/test/unit/platform_test.rb +6 -6
  40. data/test/unit/qq_test.rb +12 -0
  41. data/test/unit/safari_test.rb +12 -7
  42. data/test/unit/sougou_browser_test.rb +41 -0
  43. metadata +26 -8
@@ -15,7 +15,7 @@ require_relative "firefox"
15
15
  require_relative "edge"
16
16
  require_relative "opera"
17
17
  require_relative "blackberry"
18
- require_relative "generic"
18
+ require_relative "unknown"
19
19
  require_relative "phantom_js"
20
20
  require_relative "uc_browser"
21
21
  require_relative "nokia"
@@ -32,6 +32,11 @@ require_relative "sputnik"
32
32
  require_relative "snapchat"
33
33
  require_relative "duck_duck_go"
34
34
  require_relative "samsung_browser"
35
+ require_relative "huawei_browser"
36
+ require_relative "miui_browser"
37
+ require_relative "maxthon"
38
+ require_relative "sougou_browser"
39
+ require_relative "google_search_app"
35
40
 
36
41
  require_relative "bot"
37
42
  require_relative "bot/empty_user_agent_matcher"
@@ -46,10 +51,20 @@ require_relative "meta"
46
51
  module Browser
47
52
  EMPTY_STRING = ""
48
53
 
54
+ Error = Class.new(StandardError)
55
+
49
56
  def self.root
50
57
  @root ||= Pathname.new(File.expand_path("../..", __dir__))
51
58
  end
52
59
 
60
+ class << self
61
+ attr_accessor :user_agent_size_limit
62
+ attr_accessor :accept_language_size_limit
63
+ end
64
+
65
+ self.user_agent_size_limit = 2048
66
+ self.accept_language_size_limit = 2048
67
+
53
68
  # Hold the list of browser matchers.
54
69
  # Order is important.
55
70
  def self.matchers
@@ -75,9 +90,14 @@ module Browser
75
90
  Sputnik, # must be placed before Chrome and Safari
76
91
  DuckDuckGo, # must be placed before Chrome and Safari
77
92
  SamsungBrowser, # must be placed before Chrome and Safari
93
+ HuaweiBrowser, # must be placed before Chrome and Safari
94
+ MiuiBrowser, # must be placed before Chrome and Safari
95
+ Maxthon, # must be placed before Chrome and Safari
96
+ SougouBrowser, # must be placed before Chrome and Safari
97
+ GoogleSearchApp, # must be placed before Chrome and Safari
78
98
  Chrome,
79
99
  Safari,
80
- Generic
100
+ Unknown
81
101
  ]
82
102
  end
83
103
 
@@ -27,7 +27,13 @@ module Browser
27
27
  !duck_duck_go? &&
28
28
  !yandex? &&
29
29
  !sputnik? &&
30
- !samsung_browser?
30
+ !samsung_browser? &&
31
+ !huawei_browser? &&
32
+ !miui_browser? &&
33
+ !maxthon? &&
34
+ !qq? &&
35
+ !sougou_browser? &&
36
+ !google_search_app?
31
37
  end
32
38
  end
33
39
  end
@@ -20,6 +20,7 @@ require_relative "device/switch"
20
20
  require_relative "device/tv"
21
21
  require_relative "device/xbox_one"
22
22
  require_relative "device/xbox_360"
23
+ require_relative "device/samsung"
23
24
 
24
25
  module Browser
25
26
  class Device
@@ -29,6 +30,7 @@ module Browser
29
30
  # Order is important.
30
31
  def self.matchers
31
32
  @matchers ||= [
33
+ Samsung,
32
34
  XboxOne,
33
35
  Xbox360,
34
36
  Surface,
@@ -88,7 +90,7 @@ module Browser
88
90
  end
89
91
 
90
92
  def unknown?
91
- id == :unknown
93
+ id == :unknown_device
92
94
  end
93
95
 
94
96
  def ipod_touch?
@@ -191,13 +193,18 @@ module Browser
191
193
  xbox? || playstation? || nintendo?
192
194
  end
193
195
 
196
+ # Detect if device is a Samsung.
197
+ def samsung?
198
+ id == :samsung
199
+ end
200
+
194
201
  # Regex taken from http://detectmobilebrowsers.com
195
202
  # rubocop:disable Layout/LineLength
196
203
  private def detect_mobile?
197
204
  psp? ||
198
205
  /zunewp7/i.match(ua) ||
199
206
  %r{(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino}i.match(ua) ||
200
- %r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-}i.match(ua[0..3])
207
+ %r{1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-}i.match(ua[0..3])
201
208
  end
202
209
  # rubocop:enable Layout/LineLength
203
210
 
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Device
5
+ class Samsung < Base
6
+ REGEX = /\(Linux.*?; Android.*?; (SAMSUNG )?(SM-[A-Z0-9]+).*?\)/i.freeze
7
+
8
+ def self.names
9
+ @names ||= YAML.load_file(Browser.root.join("samsung.yml").to_s)
10
+ end
11
+
12
+ def id
13
+ :samsung
14
+ end
15
+
16
+ def name
17
+ "Samsung #{self.class.names[code] || code}"
18
+ end
19
+
20
+ def code
21
+ matches && matches[2]
22
+ end
23
+
24
+ def matches
25
+ @matches ||= ua.match(REGEX)
26
+ end
27
+
28
+ def match?
29
+ !!matches
30
+ end
31
+ end
32
+ end
33
+ end
@@ -4,7 +4,7 @@ module Browser
4
4
  class Device
5
5
  class Unknown < Base
6
6
  def id
7
- :unknown
7
+ :unknown_device
8
8
  end
9
9
 
10
10
  def name
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class GoogleSearchApp < Chrome
5
+ def id
6
+ :google_search_app
7
+ end
8
+
9
+ def name
10
+ "Google Search App"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r{GSA/([\d.]+\d)}, 1] || super
15
+ end
16
+
17
+ def match?
18
+ ua =~ /GSA/
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class HuaweiBrowser < Base
5
+ def id
6
+ :huawei_browser
7
+ end
8
+
9
+ def name
10
+ "Huawei Browser"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r{(?:HuaweiBrowser)/([\d.]+)}i, 1] || "0.0"
15
+ end
16
+
17
+ def match?
18
+ ua =~ /HuaweiBrowser/i
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class Maxthon < Base
5
+ def id
6
+ :maxthon
7
+ end
8
+
9
+ def name
10
+ "Maxthon"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r{(?:Maxthon)/([\d.]+)}i, 1] || "0.0"
15
+ end
16
+
17
+ def match?
18
+ ua =~ /Maxthon/i
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class MiuiBrowser < Base
5
+ def id
6
+ :miui_browser
7
+ end
8
+
9
+ def name
10
+ "Miui Browser"
11
+ end
12
+
13
+ def full_version
14
+ ua[%r{MiuiBrowser/([\d.]+)}, 1] || "0.0"
15
+ end
16
+
17
+ def match?
18
+ ua =~ /MiuiBrowser/
19
+ end
20
+ end
21
+ end
@@ -10,7 +10,7 @@ require_relative "platform/windows_mobile"
10
10
  require_relative "platform/firefox_os"
11
11
  require_relative "platform/blackberry"
12
12
  require_relative "platform/android"
13
- require_relative "platform/other"
13
+ require_relative "platform/unknown"
14
14
  require_relative "platform/chrome_os"
15
15
  require_relative "platform/adobe_air"
16
16
 
@@ -35,7 +35,7 @@ module Browser
35
35
  FirefoxOS,
36
36
  Windows,
37
37
  Linux,
38
- Other
38
+ Unknown
39
39
  ]
40
40
  end
41
41
 
@@ -61,8 +61,8 @@ module Browser
61
61
  id == :android && detect_version?(version, expected_version)
62
62
  end
63
63
 
64
- def other?
65
- id == :other
64
+ def unknown?
65
+ id == :unknown_platform
66
66
  end
67
67
 
68
68
  def linux?
@@ -5,7 +5,7 @@ module Browser
5
5
  class IOS < Base
6
6
  MATCHER = /(iPhone|iPad|iPod)/.freeze
7
7
  VERSION_MATCHER =
8
- /OS ((?<major>\d+)_(?<minor>\d+)_?(?<patch>\d+)?)/.freeze
8
+ /OS (?<major>\d+)_(?<minor>\d+)_?(?<patch>\d+)?/.freeze
9
9
 
10
10
  def version
11
11
  matches = VERSION_MATCHER.match(ua)
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class Mac < Base
6
6
  def version
7
- (ua[/Mac OS X\s*([0-9_\.]+)?/, 1] || "0").tr("_", ".")
7
+ (ua[/Mac OS X\s*([0-9_.]+)?/, 1] || "0").tr("_", ".")
8
8
  end
9
9
 
10
10
  def name
@@ -2,17 +2,17 @@
2
2
 
3
3
  module Browser
4
4
  class Platform
5
- class Other < Base
5
+ class Unknown < Base
6
6
  def version
7
7
  "0"
8
8
  end
9
9
 
10
10
  def name
11
- "Other"
11
+ "Unknown"
12
12
  end
13
13
 
14
14
  def id
15
- :other
15
+ :unknown_platform
16
16
  end
17
17
 
18
18
  def match?
@@ -4,7 +4,7 @@ module Browser
4
4
  class Platform
5
5
  class Windows < Base
6
6
  def version
7
- ua[/Windows NT\s*([0-9_\.]+)?/, 1] || "0"
7
+ ua[/Windows NT\s*([0-9_.]+)?/, 1] || "0"
8
8
  end
9
9
 
10
10
  def name
@@ -22,10 +22,18 @@ module Browser
22
22
  ua !~ /PhantomJS|FxiOS/ &&
23
23
  !edge? &&
24
24
  !chrome? &&
25
+ !opera? &&
25
26
  !samsung_browser? &&
27
+ !huawei_browser? &&
28
+ !miui_browser? &&
26
29
  !duck_duck_go? &&
27
30
  !yandex? &&
28
- !sputnik?
31
+ !sputnik? &&
32
+ !maxthon? &&
33
+ !qq? &&
34
+ !alipay? &&
35
+ !sougou_browser? &&
36
+ !google_search_app?
29
37
  end
30
38
  end
31
39
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Browser
4
+ class SougouBrowser < Base
5
+ def id
6
+ :sougou_browser
7
+ end
8
+
9
+ def name
10
+ "Sougou Browser"
11
+ end
12
+
13
+ # We can't get the real version on desktop device from the ua string
14
+ def full_version
15
+ ua[%r{(?:SogouMobileBrowser)/([\d.]+)}, 1] || "0.0"
16
+ end
17
+
18
+ # SogouMobileBrowser for mobile device
19
+ # SE for desktop device
20
+ def match?
21
+ ua =~ /SogouMobileBrowser/i || ua =~ / SE /
22
+ end
23
+ end
24
+ end
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browser
4
- class Generic < Base
4
+ class Unknown < Base
5
5
  NAMES = {
6
6
  "QuickTime" => "QuickTime",
7
7
  "CoreMedia" => "Apple CoreMedia"
8
8
  }.freeze
9
9
 
10
10
  def id
11
- :generic
11
+ :unknown_browser
12
12
  end
13
13
 
14
14
  def name
15
- infer_name || "Generic Browser"
15
+ infer_name || "Unknown Browser"
16
16
  end
17
17
 
18
18
  def full_version
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Browser
4
- VERSION = "4.2.0"
4
+ VERSION = "5.1.0"
5
5
  end
@@ -0,0 +1,138 @@
1
+ # Source: https://en.wikipedia.org/wiki/Samsung_Galaxy
2
+ SM-G900H: Galaxy S5 Exynos
3
+ SM-A320FL: Galaxy A3
4
+ SM-G780F: Galaxy S20 Fan Edition
5
+ SM-G781B: Galaxy S20 Fan Edition
6
+ SM-F196B: Galaxy Z Fold2 5G
7
+ SM-G928A: Galaxy S6 Edge+
8
+ SM-G928AZ: Galaxy S6 Edge+
9
+ SM-G928D: Galaxy S6 Edge+
10
+ SM-G928F: Galaxy S6 Edge+
11
+ SM-G928FD: Galaxy S6 Edge+
12
+ SM-G928I: Galaxy S6 Edge+
13
+ SM-G928K: Galaxy S6 Edge+
14
+ SM-G928L: Galaxy S6 Edge+
15
+ SM-G928P: Galaxy S6 Edge+
16
+ SM-G928PZ: Galaxy S6 Edge+
17
+ SM-G928R4: Galaxy S6 Edge+
18
+ SM-G928R7: Galaxy S6 Edge+
19
+ SM-G928S: Galaxy S6 Edge+
20
+ SM-G928T: Galaxy S6 Edge+
21
+ SM-G928T1: Galaxy S6 Edge+
22
+ SM-G928TR: Galaxy S6 Edge+
23
+ SM-G928V: Galaxy S6 Edge+
24
+ SM-G9280: Galaxy S6 Edge+
25
+ SM-G9288: Galaxy S6 Edge+
26
+ SM-G9289: Galaxy S6 Edge+
27
+ SM-A8000: Galaxy A8
28
+ SM-A800F: Galaxy A8
29
+ SM-A800I: Galaxy A8
30
+ SM-A800S: Galaxy A8
31
+ SM-A800Y: Galaxy A8
32
+ SM-N9200: Galaxy Note 5
33
+ SM-N920C: Galaxy Note 5
34
+ SM-N920T: Galaxy Note 5
35
+ SM-N920A: Galaxy Note 5
36
+ SM-N920I: Galaxy Note 5
37
+ SM-N9208: Galaxy Note 5
38
+ SM-G903FP: Galaxy S5 Neo
39
+ SM-G903WP: Galaxy S5 Neo
40
+ SM-G925A: Galaxy S6 Edge
41
+ SM-G925AZ: Galaxy S6 Edge
42
+ SM-G925F: Galaxy S6 Edge
43
+ SM-G925I: Galaxy S6 Edge
44
+ SM-G925K: Galaxy S6 Edge
45
+ SM-G925L: Galaxy S6 Edge
46
+ SM-G925P: Galaxy S6 Edge
47
+ SM-G925PZ: Galaxy S6 Edge
48
+ SM-G925R4: Galaxy S6 Edge
49
+ SM-G925R7: Galaxy S6 Edge
50
+ SM-G925S: Galaxy S6 Edge
51
+ SM-G925T: Galaxy S6 Edge
52
+ SM-G925T1: Galaxy S6 Edge
53
+ SM-G925TR: Galaxy S6 Edge
54
+ SM-G925V: Galaxy S6 Edge
55
+ SM-G9250: Galaxy S6 Edge
56
+ SM-G9258: Galaxy S6 Edge
57
+ SM-G9259: Galaxy S6 Edge
58
+ SM-G920A: Galaxy S6
59
+ SM-G920AZ: Galaxy S6
60
+ SM-G920D: Galaxy S6
61
+ SM-G920F: Galaxy S6
62
+ SM-G920FD: Galaxy S6
63
+ SM-G920I: Galaxy S6
64
+ SM-G920K: Galaxy S6
65
+ SM-G920L: Galaxy S6
66
+ SM-G920P: Galaxy S6
67
+ SM-G920PZ: Galaxy S6
68
+ SM-G920R4: Galaxy S6
69
+ SM-G920R7: Galaxy S6
70
+ SM-G920S: Galaxy S6
71
+ SM-G920T: Galaxy S6
72
+ SM-G920T1: Galaxy S6
73
+ SM-G920TR: Galaxy S6
74
+ SM-G920V: Galaxy S6
75
+ SM-G9200: Galaxy S6
76
+ SM-G9208: Galaxy S6
77
+ SM-G9209: Galaxy S6
78
+ SM-A700F: Galaxy A7
79
+ SM-A700FD: Galaxy A7
80
+ SM-A700FQ: Galaxy A7
81
+ SM-A700H: Galaxy A7
82
+ SM-A700K: Galaxy A7
83
+ SM-A700L: Galaxy A7
84
+ SM-A700M: Galaxy A7
85
+ SM-A700S: Galaxy A7
86
+ SM-A700X: Galaxy A7
87
+ SM-A700YD: Galaxy A7
88
+ SM-A700YZ: Galaxy A7
89
+ SM-A7000: Galaxy A7
90
+ SM-A7009: Galaxy A7
91
+ SM-A7009W: Galaxy A7
92
+ SM-G530BT: Galaxy Grand Prime
93
+ SM-G530F: Galaxy Grand Prime
94
+ SM-G530FQ: Galaxy Grand Prime
95
+ SM-G530FZ: Galaxy Grand Prime
96
+ SM-G530H: Galaxy Grand Prime
97
+ SM-G530M: Galaxy Grand Prime
98
+ SM-G530MU: Galaxy Grand Prime
99
+ SM-G530P: Galaxy Grand Prime
100
+ SM-G530R4: Galaxy Grand Prime
101
+ SM-G530R7: Galaxy Grand Prime
102
+ SM-G530T: Galaxy Grand Prime
103
+ SM-G530W: Galaxy Grand Prime
104
+ SM-G530Y: Galaxy Grand Prime
105
+ SM-G5306W: Galaxy Grand Prime
106
+ SM-G5308W: Galaxy Grand Prime
107
+ SM-G5309W: Galaxy Grand Prime
108
+ SM-J7109: Galaxy J7
109
+ SM-J710F: Galaxy J7
110
+ SM-J710FN: Galaxy J7
111
+ SM-J710H: Galaxy J7
112
+ SM-J710MN: Galaxy J7
113
+ SM-J710FQ: Galaxy J7
114
+ SM-J710K: Galaxy J7
115
+ SM-J710K: Galaxy J7
116
+ SM-J710GN: Galaxy J7
117
+ SM-J5109: Galaxy J5
118
+ SM-J510F: Galaxy J5
119
+ SM-J510FN: Galaxy J5
120
+ SM-J510H: Galaxy J5
121
+ SM-J510G: Galaxy J5
122
+ SM-J510MN: Galaxy J5
123
+ SM-J510Y: Galaxy J5
124
+ SM-J5108: Galaxy J5
125
+ SM-J510K: Galaxy J5
126
+ SM-J510L: Galaxy J5
127
+ SM-J510S: Galaxy J5
128
+ SM-J510UN: Galaxy J5
129
+ SM-G570F: Galaxy J2 Prime
130
+ SM-G570M: Galaxy J2 Prime
131
+ SM-G532F: Galaxy J2 Prime
132
+ SM-G532M: Galaxy J2 Prime
133
+ SM-G532G: Galaxy J2 Prime
134
+ SM-G610F: Galaxy J7 Prime
135
+ SM-G610M: Galaxy J7 Prime
136
+ SM-G975F: Galaxy S10+
137
+ SM-G960F: Galaxy S9
138
+ SM-F700F: Galaxy Z Flip