From e42a146e4f074a3fcaf87f1fe410a0e235664fc0 Mon Sep 17 00:00:00 2001
From: Rodrigo Nascimento <rodrigoknascimento@gmail.com>
Date: Mon, 11 Dec 2017 18:37:33 -0200
Subject: [PATCH] Improve acessibility (#135)

---
 .eslintrc.js                                  |   1 +
 __tests__/__snapshots__/RoomItem.js.snap      |  78 +++------
 .../__snapshots__/Storyshots.test.js.snap     | 162 +++++++-----------
 app/containers/Avatar.js                      |   2 +-
 app/containers/MessageBox/index.js            |  26 ++-
 app/containers/message/index.js               |   4 +
 app/containers/routes/AuthRoutes.js           |   6 +-
 app/containers/routes/PublicRoutes.js         |   6 +-
 app/presentation/RoomItem.js                  |  33 ++--
 app/views/ForgotPasswordView.js               |   4 +-
 app/views/ListServerView.js                   |   1 +
 app/views/LoginView.js                        |  14 +-
 app/views/RegisterView.js                     |   1 +
 app/views/RoomView/Header/index.js            |  17 +-
 app/views/RoomsListView/Header/index.js       |  53 ++++--
 app/views/Styles.js                           |   6 +-
 package-lock.json                             | 127 +++++++++-----
 17 files changed, 296 insertions(+), 245 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index f7cb61726..d25494a16 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -37,6 +37,7 @@ module.exports = {
 		"jsx-quotes": [2, "prefer-single"],
 		"jsx-a11y/href-no-hash": 0,
 		"import/prefer-default-export": 0,
+		"camelcase": 0,
 		"no-underscore-dangle": 0,
 		"no-return-assign": 0,
 		"no-param-reassign": 0,
diff --git a/__tests__/__snapshots__/RoomItem.js.snap b/__tests__/__snapshots__/RoomItem.js.snap
index 3eee42a6f..17d244018 100644
--- a/__tests__/__snapshots__/RoomItem.js.snap
+++ b/__tests__/__snapshots__/RoomItem.js.snap
@@ -4,8 +4,8 @@ exports[`render channel 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="general, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -22,10 +22,9 @@ exports[`render channel 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -98,8 +97,6 @@ exports[`render channel 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -117,7 +114,6 @@ exports[`render channel 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
@@ -132,8 +128,8 @@ exports[`render no icon 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="name, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -150,10 +146,9 @@ exports[`render no icon 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -226,8 +221,6 @@ exports[`render no icon 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -245,7 +238,6 @@ exports[`render no icon 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
@@ -260,8 +252,8 @@ exports[`render private group 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="private-group, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -278,10 +270,9 @@ exports[`render private group 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -354,8 +345,6 @@ exports[`render private group 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -373,7 +362,6 @@ exports[`render private group 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
@@ -389,8 +377,8 @@ exports[`render unread +999 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="name, 1000 alerts, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -407,10 +395,9 @@ exports[`render unread +999 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -436,7 +423,7 @@ exports[`render unread +999 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -472,8 +459,6 @@ exports[`render unread +999 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -491,7 +476,6 @@ exports[`render unread +999 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
@@ -526,8 +510,8 @@ exports[`render unread 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="name, 1 alert, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -544,10 +528,9 @@ exports[`render unread 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -573,7 +556,7 @@ exports[`render unread 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -609,8 +592,6 @@ exports[`render unread 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -628,7 +609,6 @@ exports[`render unread 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
@@ -663,8 +643,8 @@ exports[`renders correctly 1`] = `
 <View>
   <View
     accessibilityComponentType={undefined}
-    accessibilityLabel={undefined}
-    accessibilityTraits={undefined}
+    accessibilityLabel="name, last message Nov 10"
+    accessibilityTraits="selected"
     accessible={true}
     collapsable={undefined}
     hitSlop={undefined}
@@ -681,10 +661,9 @@ exports[`renders correctly 1`] = `
       Object {
         "alignItems": "center",
         "flexDirection": "row",
-        "height": 56,
         "opacity": 1,
-        "paddingLeft": 16,
-        "paddingRight": 16,
+        "paddingHorizontal": 16,
+        "paddingVertical": 10,
       }
     }
     testID={undefined}
@@ -710,7 +689,7 @@ exports[`renders correctly 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -746,8 +725,6 @@ exports[`renders correctly 1`] = `
               "color": "#444",
               "flex": 1,
               "fontSize": 16,
-              "height": 16,
-              "paddingTop": 10,
             },
             undefined,
           ]
@@ -765,7 +742,6 @@ exports[`renders correctly 1`] = `
             "color": "#888",
             "flex": 1,
             "fontSize": 10,
-            "height": 10,
           }
         }
       >
diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap
index 325faeffe..b51b4c8b9 100644
--- a/__tests__/__snapshots__/Storyshots.test.js.snap
+++ b/__tests__/__snapshots__/Storyshots.test.js.snap
@@ -23,7 +23,7 @@ exports[`Storyshots Avatar avatar 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -59,7 +59,7 @@ exports[`Storyshots Avatar avatar 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -95,7 +95,7 @@ exports[`Storyshots Avatar avatar 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -131,7 +131,7 @@ exports[`Storyshots Avatar avatar 1`] = `
     >
       <Text
         accessible={true}
-        allowFontScaling={true}
+        allowFontScaling={false}
         ellipsizeMode="tail"
         style={
           Array [
@@ -156,8 +156,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
   <View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="rocket.cat, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -174,10 +174,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -203,7 +202,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -239,8 +238,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -258,7 +255,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -268,8 +264,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="rocket.cat, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -286,10 +282,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -315,7 +310,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -351,8 +346,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               Object {
                 "fontWeight": "bold",
@@ -372,7 +365,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -382,8 +374,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="rocket.cat, 1 alert, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -400,10 +392,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -429,7 +420,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -465,8 +456,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -484,7 +473,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -514,8 +502,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 9 alerts, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -532,10 +520,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -561,7 +548,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -597,8 +584,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               Object {
                 "fontWeight": "bold",
@@ -618,7 +603,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -648,8 +632,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 99 alerts, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -666,10 +650,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -695,7 +678,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -731,8 +714,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -750,7 +731,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -780,8 +760,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100 alerts, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -798,10 +778,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -827,7 +806,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -863,8 +842,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -882,7 +859,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -912,8 +888,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100000 alerts, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -930,10 +906,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -959,7 +934,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -995,8 +970,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -1014,7 +987,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -1044,8 +1016,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, 100000 alerts, you were mentioned, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -1062,10 +1034,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -1091,7 +1062,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -1127,8 +1098,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -1146,7 +1115,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -1176,8 +1144,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="W, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -1194,10 +1162,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -1223,7 +1190,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -1259,8 +1226,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -1278,7 +1243,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -1288,8 +1252,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel="WW, last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -1306,10 +1270,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -1335,7 +1298,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -1371,8 +1334,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -1390,7 +1351,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
@@ -1400,8 +1360,8 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
     </View>
     <View
       accessibilityComponentType={undefined}
-      accessibilityLabel={undefined}
-      accessibilityTraits={undefined}
+      accessibilityLabel=", last message Nov 10"
+      accessibilityTraits="selected"
       accessible={true}
       collapsable={undefined}
       hitSlop={undefined}
@@ -1418,10 +1378,9 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
         Object {
           "alignItems": "center",
           "flexDirection": "row",
-          "height": 56,
           "opacity": 1,
-          "paddingLeft": 16,
-          "paddingRight": 16,
+          "paddingHorizontal": 16,
+          "paddingVertical": 10,
         }
       }
       testID={undefined}
@@ -1447,7 +1406,7 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
       >
         <Text
           accessible={true}
-          allowFontScaling={true}
+          allowFontScaling={false}
           ellipsizeMode="tail"
           style={
             Array [
@@ -1483,8 +1442,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
                 "color": "#444",
                 "flex": 1,
                 "fontSize": 16,
-                "height": 16,
-                "paddingTop": 10,
               },
               undefined,
             ]
@@ -1502,7 +1459,6 @@ exports[`Storyshots Channel Cell Direct Messages 1`] = `
               "color": "#888",
               "flex": 1,
               "fontSize": 10,
-              "height": 10,
             }
           }
         >
diff --git a/app/containers/Avatar.js b/app/containers/Avatar.js
index 7fe9b5ae6..4ce3e0bca 100644
--- a/app/containers/Avatar.js
+++ b/app/containers/Avatar.js
@@ -58,7 +58,7 @@ class Avatar extends React.PureComponent {
 			);
 			return (
 				<View style={[styles.iconContainer, iconContainerStyle, style]}>
-					<Text style={[styles.avatarInitials, avatarInitialsStyle]}>{initials}</Text>
+					<Text style={[styles.avatarInitials, avatarInitialsStyle]} allowFontScaling={false}>{initials}</Text>
 					{image}
 				</View>);
 		}
diff --git a/app/containers/MessageBox/index.js b/app/containers/MessageBox/index.js
index 1c585a840..6aadc3870 100644
--- a/app/containers/MessageBox/index.js
+++ b/app/containers/MessageBox/index.js
@@ -54,9 +54,27 @@ export default class MessageBox extends React.Component {
 	get leftButtons() {
 		const { editing } = this.props;
 		if (editing) {
-			return <Icon style={styles.actionButtons} name='ios-close' onPress={() => this.editCancel()} />;
+			return (<Icon
+				style={styles.actionButtons}
+				name='ios-close'
+				accessibilityLabel='Cancel editing'
+				accessibilityTraits='button'
+				onPress={() => this.editCancel()}
+			/>);
 		}
-		return !this.state.emoji ? <Icon style={styles.actionButtons} onPress={() => this.openEmoji()} name='md-happy' /> : <Icon onPress={() => this.openEmoji()} style={styles.actionButtons} name='md-sad' />;
+		return !this.state.emoji ? (<Icon
+			style={styles.actionButtons}
+			onPress={() => this.openEmoji()}
+			accessibilityLabel='Open emoji selector'
+			accessibilityTraits='button'
+			name='md-happy'
+		/>) : (<Icon
+			onPress={() => this.openEmoji()}
+			style={styles.actionButtons}
+			accessibilityLabel='Close emoji selector'
+			accessibilityTraits='button'
+			name='md-sad'
+		/>);
 	}
 	get rightButtons() {
 		const icons = [];
@@ -66,6 +84,8 @@ export default class MessageBox extends React.Component {
 				style={[styles.actionButtons, { color: '#1D74F5' }]}
 				name='send'
 				key='sendIcon'
+				accessibilityLabel='Send message'
+				accessibilityTraits='button'
 				onPress={() => this.submit(this.component._lastNativeText)}
 			/>);
 		}
@@ -73,6 +93,8 @@ export default class MessageBox extends React.Component {
 			style={[styles.actionButtons, { color: '#2F343D', fontSize: 16 }]}
 			name='plus'
 			key='fileIcon'
+			accessibilityLabel='Message actions'
+			accessibilityTraits='button'
 			onPress={() => this.addFile()}
 		/>);
 		return icons;
diff --git a/app/containers/message/index.js b/app/containers/message/index.js
index 9f4d8b9d6..f5b35e819 100644
--- a/app/containers/message/index.js
+++ b/app/containers/message/index.js
@@ -2,6 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { View, StyleSheet, TouchableOpacity, Text } from 'react-native';
 import { connect } from 'react-redux';
+import moment from 'moment';
 
 import { actionsShow } from '../../actions/messages';
 import Image from './Image';
@@ -114,11 +115,14 @@ export default class Message extends React.Component {
 		const username = item.alias || item.u.username;
 		const isEditing = message._id === item._id && editing;
 
+		const accessibilityLabel = `Message from ${ item.alias || item.u.username } at ${ moment(item.ts).format(this.props.Message_TimeFormat) }, ${ this.props.item.msg }`;
+
 		return (
 			<TouchableOpacity
 				onLongPress={() => this.onLongPress()}
 				disabled={this.isDeleted()}
 				style={[styles.message, extraStyle, isEditing ? styles.editing : null]}
+				accessibilityLabel={accessibilityLabel}
 			>
 				<Avatar
 					style={{ marginRight: 10 }}
diff --git a/app/containers/routes/AuthRoutes.js b/app/containers/routes/AuthRoutes.js
index a5ab0837d..eaf7e4452 100644
--- a/app/containers/routes/AuthRoutes.js
+++ b/app/containers/routes/AuthRoutes.js
@@ -28,7 +28,11 @@ const AuthRoutes = StackNavigator(
 			}
 		}
 	},
-	{}
+	{
+		navigationOptions: {
+			headerTitleAllowFontScaling: false
+		}
+	}
 );
 
 const Routes = DrawerNavigator(
diff --git a/app/containers/routes/PublicRoutes.js b/app/containers/routes/PublicRoutes.js
index 41c267173..50ffc4da3 100644
--- a/app/containers/routes/PublicRoutes.js
+++ b/app/containers/routes/PublicRoutes.js
@@ -23,6 +23,8 @@ const PublicRoutes = StackNavigator(
 						<TouchableOpacity
 							onPress={() => navigation.navigate('AddServer')}
 							style={{ width: 50, alignItems: 'center' }}
+							accessibilityLabel='Add server'
+							accessibilityTraits='button'
 						>
 							<Icon name='plus' size={16} />
 						</TouchableOpacity>
@@ -68,7 +70,9 @@ const PublicRoutes = StackNavigator(
 		}
 	},
 	{
-
+		navigationOptions: {
+			headerTitleAllowFontScaling: false
+		}
 	}
 );
 
diff --git a/app/presentation/RoomItem.js b/app/presentation/RoomItem.js
index 3cf02dd65..573e79f7c 100644
--- a/app/presentation/RoomItem.js
+++ b/app/presentation/RoomItem.js
@@ -6,11 +6,9 @@ import Avatar from '../containers/Avatar';
 
 const styles = StyleSheet.create({
 	container: {
-		// flex: 1,
 		flexDirection: 'row',
-		paddingLeft: 16,
-		paddingRight: 16,
-		height: 56,
+		paddingHorizontal: 16,
+		paddingVertical: 10,
 		alignItems: 'center'
 	},
 	number: {
@@ -30,10 +28,8 @@ const styles = StyleSheet.create({
 		marginRight: 4
 	},
 	roomName: {
-		paddingTop: 10,
 		flex: 1,
 		fontSize: 16,
-		height: 16,
 		color: '#444'
 	},
 	alert: {
@@ -45,7 +41,7 @@ const styles = StyleSheet.create({
 	update: {
 		flex: 1,
 		fontSize: 10,
-		height: 10,
+		// height: 10,
 		color: '#888'
 	}
 });
@@ -69,8 +65,8 @@ export default class RoomItem extends React.PureComponent {
 	}
 
 	formatDate = date => moment(date).calendar(null, {
-		lastDay: 'dddd',
-		sameDay: 'HH:mm',
+		lastDay: '[Yesterday]',
+		sameDay: 'h:mm A',
 		lastWeek: 'dddd',
 		sameElse: 'MMM D'
 	})
@@ -100,12 +96,27 @@ export default class RoomItem extends React.PureComponent {
 			favorite, alert, unread, userMentions, name, _updatedAt
 		} = this.props;
 
+		const date = this.formatDate(_updatedAt);
+
+		let accessibilityLabel = name;
+		if (unread === 1) {
+			accessibilityLabel += `, ${ unread } alert`;
+		} else if (unread > 1) {
+			accessibilityLabel += `, ${ unread } alerts`;
+		}
+
+		if (userMentions > 0) {
+			accessibilityLabel += ', you were mentioned';
+		}
+
+		accessibilityLabel += `, last message ${ date }`;
+
 		return (
-			<TouchableOpacity onPress={this.props.onPress} style={[styles.container, favorite && styles.favorite]}>
+			<TouchableOpacity onPress={this.props.onPress} style={[styles.container, favorite && styles.favorite]} accessibilityLabel={accessibilityLabel} accessibilityTraits='selected'>
 				{this.icon}
 				<View style={styles.roomNameView}>
 					<Text style={[styles.roomName, alert && styles.alert]} ellipsizeMode='tail' numberOfLines={1}>{ name }</Text>
-					{_updatedAt ? <Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ this.formatDate(_updatedAt) }</Text> : null}
+					{_updatedAt ? <Text style={styles.update} ellipsizeMode='tail' numberOfLines={1}>{ date }</Text> : null}
 				</View>
 				{this.renderNumber(unread, userMentions)}
 			</TouchableOpacity>
diff --git a/app/views/ForgotPasswordView.js b/app/views/ForgotPasswordView.js
index 92f28cbce..2f40ee9eb 100644
--- a/app/views/ForgotPasswordView.js
+++ b/app/views/ForgotPasswordView.js
@@ -88,11 +88,11 @@ class ForgotPasswordView extends React.Component {
 							/>
 
 							<TouchableOpacity style={styles.buttonContainer} onPress={this.resetPassword}>
-								<Text style={styles.button}>RESET PASSWORD</Text>
+								<Text style={styles.button} accessibilityTraits='button'>RESET PASSWORD</Text>
 							</TouchableOpacity>
 
 							<TouchableOpacity style={styles.buttonContainer} onPress={this.backLogin}>
-								<Text style={styles.button}>BACK TO LOGIN</Text>
+								<Text style={styles.button} accessibilityTraits='button'>BACK TO LOGIN</Text>
 							</TouchableOpacity>
 
 							{this.props.login.failure && <Text style={styles.error}>{this.props.login.error.reason}</Text>}
diff --git a/app/views/ListServerView.js b/app/views/ListServerView.js
index 90e4d99e4..30bf7ea43 100644
--- a/app/views/ListServerView.js
+++ b/app/views/ListServerView.js
@@ -158,6 +158,7 @@ export default class ListServerView extends React.Component {
 			<Text
 				style={[styles.listItem]}
 				onPress={() => { this.onPressItem(item); }}
+				adjustsFontSizeToFit
 			>
 				{item.id}
 			</Text>
diff --git a/app/views/LoginView.js b/app/views/LoginView.js
index ccff7a763..f1f213ca8 100644
--- a/app/views/LoginView.js
+++ b/app/views/LoginView.js
@@ -3,7 +3,7 @@ import React from 'react';
 import Spinner from 'react-native-loading-spinner-overlay';
 
 import PropTypes from 'prop-types';
-import { Keyboard, Text, TextInput, View, TouchableOpacity, SafeAreaView } from 'react-native';
+import { Keyboard, Text, TextInput, View, ScrollView, TouchableOpacity, SafeAreaView } from 'react-native';
 import { connect } from 'react-redux';
 import { bindActionCreators } from 'redux';
 // import * as actions from '../actions';
@@ -88,7 +88,7 @@ class LoginView extends React.Component {
 				contentContainerStyle={styles.container}
 				keyboardVerticalOffset={128}
 			>
-				<View style={styles.loginView}>
+				<ScrollView style={styles.loginView}>
 					<SafeAreaView>
 						<View style={styles.formContainer}>
 							<TextInput
@@ -121,21 +121,21 @@ class LoginView extends React.Component {
 								style={styles.buttonContainer}
 								onPress={this.submit}
 							>
-								<Text style={styles.button}>LOGIN</Text>
+								<Text style={styles.button} accessibilityTraits='button'>LOGIN</Text>
 							</TouchableOpacity>
 
 							<View style={styles.loginSecondaryButtons}>
 								<TouchableOpacity style={styles.buttonContainer_inverted} onPress={this.register}>
-									<Text style={styles.button_inverted}>REGISTER</Text>
+									<Text style={styles.button_inverted} accessibilityTraits='button'>REGISTER</Text>
 								</TouchableOpacity>
 
 								<TouchableOpacity style={styles.buttonContainer_inverted} onPress={this.forgotPassword}>
-									<Text style={styles.button_inverted}>FORGOT MY PASSWORD</Text>
+									<Text style={styles.button_inverted} accessibilityTraits='button'>FORGOT MY PASSWORD</Text>
 								</TouchableOpacity>
 							</View>
 
 							<TouchableOpacity>
-								<Text style={styles.loginTermsText}>
+								<Text style={styles.loginTermsText} accessibilityTraits='button'>
 									By proceeding you are agreeing to our
 									<Text style={styles.link} onPress={this.termsService}> Terms of Service </Text>
 									and
@@ -146,7 +146,7 @@ class LoginView extends React.Component {
 						</View>
 						<Spinner visible={this.props.login.isFetching} textContent='Loading...' textStyle={{ color: '#FFF' }} />
 					</SafeAreaView>
-				</View>
+				</ScrollView>
 			</KeyboardView>
 		);
 	}
diff --git a/app/views/RegisterView.js b/app/views/RegisterView.js
index ed2625869..7f97e48d7 100644
--- a/app/views/RegisterView.js
+++ b/app/views/RegisterView.js
@@ -133,6 +133,7 @@ class RegisterView extends React.Component {
 						style={[styles.button, this._valid() ? {}
 							: { color: placeholderTextColor }
 						]}
+						accessibilityTraits='button'
 					>REGISTER
 					</Text>
 				</TouchableOpacity>
diff --git a/app/views/RoomView/Header/index.js b/app/views/RoomView/Header/index.js
index 85485ac61..14492449a 100644
--- a/app/views/RoomView/Header/index.js
+++ b/app/views/RoomView/Header/index.js
@@ -57,14 +57,21 @@ export default class extends React.Component {
 
 	isDirect = () => this.state.room && this.state.room.t === 'd';
 
-	renderLeft = () => <HeaderBackButton onPress={() => this.props.navigation.goBack(null)} tintColor='#292E35' />;
+	renderLeft = () => <HeaderBackButton onPress={() => this.props.navigation.goBack(null)} tintColor='#292E35' title='Back' titleStyle={{ display: 'none' }} />;
 
 	renderTitle() {
 		if (!this.state.roomName) {
 			return null;
 		}
+
+		let accessibilityLabel = this.state.roomName;
+
+		if (this.isDirect()) {
+			accessibilityLabel += `, ${ this.getUserStatusLabel() }`;
+		}
+
 		return (
-			<TouchableOpacity style={styles.titleContainer}>
+			<TouchableOpacity style={styles.titleContainer} accessibilityLabel={accessibilityLabel} accessibilityTraits='header'>
 				{this.isDirect() ?
 					<View style={[styles.status, { backgroundColor: STATUS_COLORS[this.getUserStatus()] }]} />
 					: null
@@ -77,9 +84,9 @@ export default class extends React.Component {
 					type={this.state.room.t}
 				/>
 				<View style={{ flexDirection: 'column' }}>
-					<Text style={styles.title}>{this.state.roomName}</Text>
+					<Text style={styles.title} allowFontScaling={false}>{this.state.roomName}</Text>
 					{this.isDirect() ?
-						<Text style={styles.userStatus}>{this.getUserStatusLabel()}</Text>
+						<Text style={styles.userStatus} allowFontScaling={false}>{this.getUserStatusLabel()}</Text>
 						: null
 					}
 				</View>
@@ -92,6 +99,8 @@ export default class extends React.Component {
 			<TouchableOpacity
 				style={styles.headerButton}
 				onPress={() => {}}
+				accessibilityLabel='Room actions'
+				accessibilityTraits='button'
 			>
 				<Icon
 					name={Platform.OS === 'ios' ? 'ios-more' : 'md-more'}
diff --git a/app/views/RoomsListView/Header/index.js b/app/views/RoomsListView/Header/index.js
index 302fce5fe..1e5f1a4ed 100644
--- a/app/views/RoomsListView/Header/index.js
+++ b/app/views/RoomsListView/Header/index.js
@@ -56,6 +56,15 @@ export default class extends React.Component {
 		});
 	}
 
+	getUserStatus() {
+		return this.props.user.status || 'offline';
+	}
+
+	getUserStatusLabel() {
+		const status = this.getUserStatus();
+		return status.charAt(0).toUpperCase() + status.slice(1);
+	}
+
 	showModal() {
 		this.setState({ isModalVisible: true });
 	}
@@ -69,8 +78,12 @@ export default class extends React.Component {
 	}
 
 	renderLeft() {
+		if (this.state.searching) {
+			return null;
+		}
+
 		return (
-			<View style={styles.left}>
+			<View style={styles.left} accessible accessibilityLabel="Server's list" accessibilityTraits='button'>
 				<TouchableOpacity
 					style={styles.headerButton}
 					onPress={() => this.props.navigation.navigate('DrawerOpen')}
@@ -85,30 +98,43 @@ export default class extends React.Component {
 	}
 
 	renderTitle() {
+		if (this.state.searching) {
+			return null;
+		}
+
 		if (!this.props.user.username) {
 			return null;
 		}
+
+		const accessibilityLabel = `${ this.props.user.username }, ${ this.getUserStatusLabel() }, double tap to change status`;
+
 		return (
-			<TouchableOpacity style={styles.titleContainer} onPress={() => this.showModal()}>
-				<View style={[styles.status, { backgroundColor: STATUS_COLORS[this.props.user.status || 'offline'] }]} />
+			<TouchableOpacity style={styles.titleContainer} onPress={() => this.showModal()} accessibilityLabel={accessibilityLabel} accessibilityTraits='header'>
+				<View style={[styles.status, { backgroundColor: STATUS_COLORS[this.getUserStatus()] }]} />
 				<Avatar
 					text={this.props.user.username}
 					size={24}
 					style={{ marginRight: 5 }}
 					baseUrl={this.props.baseUrl}
 				/>
-				<Text style={styles.title}>{this.props.user.username}</Text>
+				<Text accessible={false} style={styles.title} ellipsizeMode='tail' numberOfLines={1} allowFontScaling={false}>{this.props.user.username}</Text>
 			</TouchableOpacity>
 		);
 	}
 
 	renderRight() {
+		if (this.state.searching) {
+			return null;
+		}
+
 		return (
 			<View style={styles.right}>
 				{Platform.OS === 'android' ?
 					<TouchableOpacity
 						style={styles.headerButton}
 						onPress={() => this.onPressSearchButton()}
+						accessibilityLabel='Search'
+						accessibilityTraits='button'
 					>
 						<Icon
 							name='md-search'
@@ -121,6 +147,8 @@ export default class extends React.Component {
 					<TouchableOpacity
 						style={styles.headerButton}
 						onPress={() => this.createChannel()}
+						accessibilityLabel='Create channel'
+						accessibilityTraits='button'
 					>
 						<Icon
 							name='ios-add'
@@ -149,19 +177,6 @@ export default class extends React.Component {
 		);
 	};
 
-	renderHeader() {
-		if (this.state.searching) {
-			return null;
-		}
-		return (
-			<View style={styles.header}>
-				{this.renderLeft()}
-				{this.renderTitle()}
-				{this.renderRight()}
-			</View>
-		);
-	}
-
 	renderSearch() {
 		if (!this.state.searching) {
 			return null;
@@ -188,7 +203,9 @@ export default class extends React.Component {
 	render() {
 		return (
 			<View style={styles.header}>
-				{this.renderHeader()}
+				{this.renderLeft()}
+				{this.renderTitle()}
+				{this.renderRight()}
 				{this.renderSearch()}
 				<Modal
 					isVisible={this.state.isModalVisible}
diff --git a/app/views/Styles.js b/app/views/Styles.js
index 1bf8d7d1f..728b9e7c4 100644
--- a/app/views/Styles.js
+++ b/app/views/Styles.js
@@ -73,7 +73,7 @@ export default StyleSheet.create({
 		color: 'white'
 	},
 	input_white: {
-		height: 45,
+		paddingVertical: 12,
 		marginBottom: 20,
 		borderRadius: 2,
 		// padding: 14,
@@ -154,7 +154,7 @@ export default StyleSheet.create({
 	},
 	loginSecondaryButtons: {
 		flexDirection: 'row',
-		justifyContent: 'space-around',
-		alignItems: 'center'
+		flexWrap: 'wrap',
+		justifyContent: 'space-around'
 	}
 });
diff --git a/package-lock.json b/package-lock.json
index 6f0fe7b99..0b0350b4b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4545,9 +4545,9 @@
       }
     },
     "eslint": {
-      "version": "4.11.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz",
-      "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==",
+      "version": "4.13.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.0.tgz",
+      "integrity": "sha512-1l2aVrEz9yiWsEQdL3XZEzTovHQJFZaTeIhOOilKQRiYNn1dVALoYOtn06iPoxhEwFukBPX4Ff8WoGD4r/7D2A==",
       "dev": true,
       "requires": {
         "ajv": "5.3.0",
@@ -4556,7 +4556,7 @@
         "concat-stream": "1.6.0",
         "cross-spawn": "5.1.0",
         "debug": "3.1.0",
-        "doctrine": "2.0.0",
+        "doctrine": "2.0.2",
         "eslint-scope": "3.7.1",
         "espree": "3.5.2",
         "esquery": "1.0.0",
@@ -4565,7 +4565,7 @@
         "file-entry-cache": "2.0.0",
         "functional-red-black-tree": "1.0.1",
         "glob": "7.1.2",
-        "globals": "9.18.0",
+        "globals": "11.1.0",
         "ignore": "3.3.7",
         "imurmurhash": "0.1.4",
         "inquirer": "3.3.0",
@@ -4618,12 +4618,27 @@
             "ms": "2.0.0"
           }
         },
+        "doctrine": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz",
+          "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==",
+          "dev": true,
+          "requires": {
+            "esutils": "2.0.2"
+          }
+        },
         "esprima": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
           "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
           "dev": true
         },
+        "globals": {
+          "version": "11.1.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz",
+          "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==",
+          "dev": true
+        },
         "js-yaml": {
           "version": "3.10.0",
           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
@@ -4765,9 +4780,9 @@
       }
     },
     "eslint-plugin-react": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz",
-      "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==",
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz",
+      "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==",
       "dev": true,
       "requires": {
         "doctrine": "2.0.0",
@@ -4788,9 +4803,9 @@
       }
     },
     "eslint-plugin-react-native": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.1.0.tgz",
-      "integrity": "sha1-A/lflZv/eoJntUcsuH0BDjRvciQ=",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-native/-/eslint-plugin-react-native-3.2.0.tgz",
+      "integrity": "sha512-b/VrvsLM17FCul+RTXi4owZaP/u3Xo0IWv2ZTxgGGAyaNKscGbTvvoV/MxhYxRSuDmG7uAM9l7DN6wTGyC2U+Q==",
       "dev": true
     },
     "eslint-restricted-globals": {
@@ -8389,6 +8404,11 @@
       "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz",
       "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo="
     },
+    "keymirror": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz",
+      "integrity": "sha1-kYiJ6hP40KQufFVyUO7nE63JXDU="
+    },
     "kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -9826,9 +9846,9 @@
       "integrity": "sha1-zz2C0YwMp/RY2PKiQIF7PcflSgE="
     },
     "moment": {
-      "version": "2.19.2",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
-      "integrity": "sha512-Rf6jiHPEfxp9+dlzxPTmRHbvoFXsh2L/U8hOupUMpnuecHQmI6cF6lUbJl3QqKPko1u6ujO+FxtcajLVfLpAtA=="
+      "version": "2.19.4",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.4.tgz",
+      "integrity": "sha512-1xFTAknSLfc47DIxHDUbnJWC+UwgWxATmymaxIPQpmMh7LBm7ZbwVEsuushqwL2GYZU0jie4xO+TK44hJPjNSQ=="
     },
     "morgan": {
       "version": "1.6.1",
@@ -12038,9 +12058,9 @@
       }
     },
     "react": {
-      "version": "16.1.1",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.1.1.tgz",
-      "integrity": "sha512-FQfiFfk2z2Fk87OngNJHT05KyC9DOVn8LPeB7ZX+9u5+yU1JK6o5ozRlU3PeOMr0IFkWNvgn9jU8/IhRxR1F0g==",
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz",
+      "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==",
       "requires": {
         "fbjs": "0.8.16",
         "loose-envify": "1.3.1",
@@ -12084,9 +12104,9 @@
       }
     },
     "react-dom": {
-      "version": "16.1.1",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.1.1.tgz",
-      "integrity": "sha512-q06jiwST8SEPAMIEkAsu7BgynEZtqF87VrTc70XsW7nxVhWEu2Y4MF5UfxxHQO/mNtQHQWP0YcFxmwm9oMrMaQ==",
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz",
+      "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==",
       "dev": true,
       "requires": {
         "fbjs": "0.8.16",
@@ -12161,9 +12181,9 @@
       }
     },
     "react-native": {
-      "version": "0.50.3",
-      "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.50.3.tgz",
-      "integrity": "sha1-kSgr1TVsx9eUlpzcRDzHZDibmvQ=",
+      "version": "0.50.4",
+      "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.50.4.tgz",
+      "integrity": "sha1-GU9dpJOQh7Os7nEqUDR19JQtyn4=",
       "requires": {
         "absolute-path": "0.0.0",
         "art": "0.10.1",
@@ -12232,9 +12252,9 @@
       }
     },
     "react-native-action-button": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/react-native-action-button/-/react-native-action-button-2.8.1.tgz",
-      "integrity": "sha512-u5DWS2ZorgRGNNhh3H8+PKq0KHQqOIk6jr/w/qGaTrPpX4Fvg0t5WsqlSjDa4J6xrgWJ712OX3rhc56wLLSI3g==",
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/react-native-action-button/-/react-native-action-button-2.8.3.tgz",
+      "integrity": "sha512-Nh8EOQ8IxZPLTc2qHC8FkfbbCI4rmo9nOOs+GV7bLY4NjCGvQ/Nr92VEXIyjyeMhek+05KMKDOusF3ifTub5vQ==",
       "requires": {
         "prop-types": "15.6.0"
       }
@@ -12252,11 +12272,6 @@
         "prop-types": "15.6.0"
       }
     },
-    "react-native-card-view": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/react-native-card-view/-/react-native-card-view-0.0.3.tgz",
-      "integrity": "sha1-jbmsSj8B0I+L2feTQwgth/3wmQc="
-    },
     "react-native-compat": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/react-native-compat/-/react-native-compat-1.0.0.tgz",
@@ -12406,6 +12421,14 @@
       "resolved": "https://registry.npmjs.org/react-native-push-notification/-/react-native-push-notification-3.0.1.tgz",
       "integrity": "sha1-DiPbMC0Du0o/KNwHLcryqaEXjtg="
     },
+    "react-native-slider": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/react-native-slider/-/react-native-slider-0.11.0.tgz",
+      "integrity": "sha512-jV9K87eu9uWr0uJIyrSpBLnCKvVlOySC2wynq9TFCdV9oGgjt7Niq8Q1A8R8v+5GHsuBw/s8vEj1AAkkUi+u+w==",
+      "requires": {
+        "prop-types": "15.6.0"
+      }
+    },
     "react-native-svg": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-6.0.0.tgz",
@@ -12464,6 +12487,23 @@
         }
       }
     },
+    "react-native-video": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-2.0.0.tgz",
+      "integrity": "sha1-8z+m+35+PJOrV4eUTO/Vi/c1WGc=",
+      "requires": {
+        "keymirror": "0.1.1",
+        "prop-types": "15.6.0"
+      }
+    },
+    "react-native-video-controls": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/react-native-video-controls/-/react-native-video-controls-2.0.0.tgz",
+      "integrity": "sha512-dejwvoR0mL3DQtP6BSO/tlGaUzOXfGlj3kWkBJm7q3pTGsHWDGJmEtpwVhyVtJBg95O8Fb5Nz15JwRqsjonagg==",
+      "requires": {
+        "lodash": "4.17.4"
+      }
+    },
     "react-native-zeroconf": {
       "version": "0.8.3",
       "resolved": "https://registry.npmjs.org/react-native-zeroconf/-/react-native-zeroconf-0.8.3.tgz",
@@ -12560,9 +12600,9 @@
       }
     },
     "react-test-renderer": {
-      "version": "16.1.1",
-      "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.1.1.tgz",
-      "integrity": "sha512-RV0Krfuc6wDnlv5C/BJzW3e2/s7ZTMZ25gfVjdXdT3hhXNDCQlZucP83HMD8mVh1XScGx9hRaXnIRJ7mE+2N6A==",
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.2.0.tgz",
+      "integrity": "sha512-Kd4gJFtpNziR9ElOE/C23LeflKLZPRpNQYWP3nQBY43SJ5a+xyEGSeMrm2zxNKXcnCbBS/q1UpD9gqd5Dv+rew==",
       "dev": true,
       "requires": {
         "fbjs": "0.8.16",
@@ -12718,14 +12758,14 @@
       }
     },
     "realm": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/realm/-/realm-2.0.7.tgz",
-      "integrity": "sha1-1SbWxzksVklafHgASDwG61hcbdY=",
+      "version": "2.0.13",
+      "resolved": "https://registry.npmjs.org/realm/-/realm-2.0.13.tgz",
+      "integrity": "sha1-rE9x23J2OfZ2NjXV0wFLjGPACZo=",
       "requires": {
         "command-line-args": "4.0.7",
         "decompress": "4.2.0",
         "decompress-tarxz": "2.1.1",
-        "fs-extra": "4.0.2",
+        "fs-extra": "4.0.3",
         "ini": "1.3.4",
         "nan": "2.7.0",
         "node-fetch": "1.7.3",
@@ -12739,9 +12779,9 @@
       },
       "dependencies": {
         "fs-extra": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
-          "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+          "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
           "requires": {
             "graceful-fs": "4.1.11",
             "jsonfile": "4.0.0",
@@ -12823,6 +12863,11 @@
         "symbol-observable": "1.0.4"
       }
     },
+    "redux-enhancer-react-native-appstate": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/redux-enhancer-react-native-appstate/-/redux-enhancer-react-native-appstate-0.3.0.tgz",
+      "integrity": "sha1-+5Fwk3WM4J9DLNCytWPRNh6PV28="
+    },
     "redux-immutable-state-invariant": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/redux-immutable-state-invariant/-/redux-immutable-state-invariant-2.1.0.tgz",
-- 
GitLab