--- ../user_agents/parsers.py	2025-11-08 14:26:29.401053699 +0200
+++ ../user_agents/parsers.py	2025-11-08 14:26:34.011561556 +0200
@@ -50,6 +50,10 @@
     'Dell Streak',
 )
 
+TABLET_DEVICE_BRANDS = (
+    'Generic_Android_Tablet',
+)
+
 TOUCH_CAPABLE_OS_FAMILIES = (
     'iOS',
     'Android',
@@ -63,7 +67,10 @@
 TOUCH_CAPABLE_DEVICE_FAMILIES = (
     'BlackBerry Playbook',
     'Blackberry Playbook',
+    'Generic Smartphone',
+    'iPad',
     'Kindle Fire',
+    'Kindle'
 )
 
 EMAIL_PROGRAM_FAMILIES = set((
@@ -152,10 +159,8 @@
     def _is_android_tablet(self):
         # Newer Android tablets don't have "Mobile" in their user agent string,
         # older ones like Galaxy Tab still have "Mobile" though they're not
-        if ('Mobile Safari' not in self.ua_string and
-                self.browser.family != "Firefox Mobile"):
-            return True
-        return False
+        return ('Mobile Safari' not in self.ua_string and
+                self.browser.family != "Firefox Mobile")
 
     def _is_blackberry_touch_capable_device(self):
         # A helper to determine whether a BB phone has touch capabilities
@@ -179,6 +184,10 @@
     def is_tablet(self):
         if self.device.family in TABLET_DEVICE_FAMILIES:
             return True
+        if self.device.brand in TABLET_DEVICE_BRANDS:
+            return True
+        if self.device.family in MOBILE_DEVICE_FAMILIES:
+            return False
         if (self.os.family == 'Android' and self._is_android_tablet()):
             return True
         if self.os.family == 'Windows' and self.os.version_string.startswith('RT'):
@@ -192,14 +201,13 @@
         # First check for mobile device and mobile browser families
         if self.device.family in MOBILE_DEVICE_FAMILIES:
             return True
+        if self.is_tablet or self.is_pc:
+            return False
         if self.browser.family in MOBILE_BROWSER_FAMILIES:
             return True
         # Device is considered Mobile OS is Android and not tablet
         # This is not fool proof but would have to suffice for now
-        if ((self.os.family == 'Android' or self.os.family == 'Firefox OS')
-            and not self.is_tablet):
-            return True
-        if self.os.family == 'BlackBerry OS' and self.device.family != 'Blackberry Playbook':
+        if self.os.family in ['Android', 'Firefox OS', 'BlackBerry OS']:
             return True
         if self.os.family in MOBILE_OS_FAMILIES:
             return True
@@ -237,6 +245,10 @@
 
     @property
     def is_pc(self):
+        if self.device.family in MOBILE_DEVICE_FAMILIES or \
+           self.device.family in TABLET_DEVICE_FAMILIES or \
+           self.device.brand in TABLET_DEVICE_BRANDS:
+            return False
         # Returns True for "PC" devices (Windows, Mac and Linux)
         if 'Windows NT' in self.ua_string or self.os.family in PC_OS_FAMILIES or \
            self.os.family == 'Windows' and self.os.version_string == 'ME':
@@ -249,19 +261,19 @@
             return False
         if 'Chrome OS' in self.os.family:
             return True
+        if 'Chromecast' in self.os.family:
+            return False
         if 'Linux' in self.ua_string and 'X11' in self.ua_string:
             return True
         return False
 
     @property
     def is_bot(self):
-        return True if self.device.family == 'Spider' else False
+        return self.device.family == 'Spider'
 
     @property
     def is_email_client(self):
-        if self.browser.family in EMAIL_PROGRAM_FAMILIES:
-            return True
-        return False
+        return self.browser.family in EMAIL_PROGRAM_FAMILIES
 
 
 def parse(user_agent_string):
