diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap index 0ad82c0d0..8b5073224 100644 --- a/__tests__/__snapshots__/Storyshots.test.js.snap +++ b/__tests__/__snapshots__/Storyshots.test.js.snap @@ -12,6 +12,7 @@ exports[`Storyshots Avatar Avatar by path 1`] = ` undefined, ] } + testID="avatar" > - - Read -  - - Favorite -  - - Hide - @@ -50501,13 +50573,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -50517,7 +50589,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -50563,421 +50637,15 @@ exports[`Storyshots Room Item Alerts 1`] = ` > rocket.cat - - - - - - - - - - - - -  - - - Read - - - - - - - -  - - - Favorite - - - - -  - - - Hide - - - - - - - - - - - - - -  - - - unread - - 1 + 10:00 @@ -51044,13 +50723,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -51330,13 +50960,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -51346,7 +50976,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -51394,25 +51026,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - +999 + 10:00 + + + 1 + + @@ -51479,13 +51151,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -51765,13 +51388,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -51781,7 +51404,437 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, + ], + Object { + "color": "#cbced1", + }, + ], + ], + Object { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + Object {}, + ] + } + > +  + + + unread + + + + 10:00 + + + + +999 + + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + + + + + + - 1 + 10:00 + + + 1 + + @@ -51914,13 +52007,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -52200,13 +52244,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -52216,7 +52260,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -52264,25 +52310,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -52349,13 +52435,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -52635,13 +52672,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -52651,7 +52688,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -52699,25 +52738,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -52784,13 +52863,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -53070,13 +53100,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -53086,7 +53116,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -53134,25 +53166,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -53219,13 +53291,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -53505,13 +53528,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -53521,7 +53544,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -53569,25 +53594,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -53654,13 +53719,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -53940,13 +53956,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -53956,7 +53972,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -54004,25 +54022,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -54089,13 +54147,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -54375,13 +54384,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -54391,7 +54400,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -54439,25 +54450,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -54524,13 +54575,16 @@ exports[`Storyshots Room Item Alerts 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -54810,13 +54812,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -54826,7 +54828,9 @@ exports[`Storyshots Room Item Alerts 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -54874,25 +54878,13 @@ exports[`Storyshots Room Item Alerts 1`] = ` - 1 + 10:00 + + + 1 + + @@ -54972,13 +55016,16 @@ exports[`Storyshots Room Item Basic 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -55258,13 +55253,13 @@ exports[`Storyshots Room Item Basic 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -55274,7 +55269,9 @@ exports[`Storyshots Room Item Basic 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -55315,6 +55312,3631 @@ exports[`Storyshots Room Item Basic 1`] = ` > rocket.cat + + + 10:00 + + + + + + + + + + +`; + +exports[`Storyshots Room Item Condensed Room Item 1`] = ` + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + + + + + + +  + + + rocket.cat + + + + 10:00 + + + + 1 + + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + + + + + + +  + + + unread + + + + 10:00 + + + + +999 + + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + + + + + + +  + + + rocket.cat + + + + Auto-join + + + + + 10:00 + + + + + + + + + + +`; + +exports[`Storyshots Room Item Condensed Room Item without Avatar 1`] = ` + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + +  + + + rocket.cat + + + + 10:00 + + + + 1 + + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + +  + + + rocket.cat + + + + 10:00 + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + + +  + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 + + + + Auto-join + + + + + 10:00 + + + + + + + + + + +`; + +exports[`Storyshots Room Item Expanded Room Item without Avatar 1`] = ` + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + +  + + + + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 + + + + 1 + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + +  + + + + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 + + + + 1 + + + + + + + + + + + + + + +  + + + + + + + +  + + + + +  + + + + + + + +  + + + + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 + @@ -55374,13 +58996,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -55773,6 +59346,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > No Message @@ -55822,13 +59396,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -56221,6 +59746,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > 2 @@ -56270,13 +59796,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -56669,6 +60146,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > You: 1 @@ -56718,13 +60196,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -57117,6 +60546,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 @@ -57166,13 +60596,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -57580,6 +60961,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 @@ -57670,13 +61052,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -58084,6 +61417,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 @@ -58174,13 +61508,16 @@ exports[`Storyshots Room Item Last Message 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -58588,6 +61873,7 @@ exports[`Storyshots Room Item Last Message 1`] = ` }, ] } + testID="room-item-last-message" > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 @@ -58691,13 +61977,16 @@ exports[`Storyshots Room Item Tag 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -58977,13 +62214,13 @@ exports[`Storyshots Room Item Tag 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -58993,7 +62230,9 @@ exports[`Storyshots Room Item Tag 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -59070,6 +62309,36 @@ exports[`Storyshots Room Item Tag 1`] = ` Auto-join + + + 10:00 + + @@ -59116,13 +62385,16 @@ exports[`Storyshots Room Item Tag 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -59552,6 +62772,7 @@ exports[`Storyshots Room Item Tag 1`] = ` }, ] } + testID="room-item-last-message" > No Message @@ -59601,13 +62822,16 @@ exports[`Storyshots Room Item Tag 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -59887,13 +63059,13 @@ exports[`Storyshots Room Item Tag 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -59903,7 +63075,9 @@ exports[`Storyshots Room Item Tag 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -59980,6 +63154,36 @@ exports[`Storyshots Room Item Tag 1`] = ` Auto-join + + + 10:00 + + @@ -60026,13 +63230,16 @@ exports[`Storyshots Room Item Tag 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -60462,6 +63617,7 @@ exports[`Storyshots Room Item Tag 1`] = ` }, ] } + testID="room-item-last-message" > No Message @@ -60524,13 +63680,16 @@ exports[`Storyshots Room Item Touch 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -60810,13 +63917,13 @@ exports[`Storyshots Room Item Touch 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -60826,7 +63933,9 @@ exports[`Storyshots Room Item Touch 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -60867,6 +63976,36 @@ exports[`Storyshots Room Item Touch 1`] = ` > rocket.cat + + + 10:00 + + @@ -60926,13 +64065,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -61212,13 +64302,13 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -61228,7 +64318,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -61269,6 +64361,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -61315,13 +64437,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -61601,7 +64674,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -61610,7 +64683,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -61646,6 +64721,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -61692,13 +64797,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -61978,7 +65034,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -61987,7 +65043,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -62023,6 +65081,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -62069,13 +65157,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -62355,7 +65394,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -62364,7 +65403,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -62400,6 +65441,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -62446,13 +65517,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -62732,7 +65754,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -62741,7 +65763,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -62777,6 +65801,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -62823,13 +65877,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -63109,7 +66114,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -63118,7 +66123,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -63154,6 +66161,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -63200,13 +66237,16 @@ exports[`Storyshots Room Item Type 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -63486,7 +66474,7 @@ exports[`Storyshots Room Item Type 1`] = ` Array [ Object { "color": undefined, - "fontSize": 16, + "fontSize": 22, }, Array [ Object { @@ -63495,7 +66483,9 @@ exports[`Storyshots Room Item Type 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "fontFamily": "custom", @@ -63531,6 +66521,36 @@ exports[`Storyshots Room Item Type 1`] = ` > rocket.cat + + + 10:00 + + @@ -63590,13 +66610,16 @@ exports[`Storyshots Room Item User 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -63876,13 +66847,13 @@ exports[`Storyshots Room Item User 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -63892,7 +66863,9 @@ exports[`Storyshots Room Item User 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -63933,6 +66906,36 @@ exports[`Storyshots Room Item User 1`] = ` > diego.mello + + + 10:00 + + @@ -63979,13 +66982,16 @@ exports[`Storyshots Room Item User 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -64265,13 +67219,13 @@ exports[`Storyshots Room Item User 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -64281,7 +67235,9 @@ exports[`Storyshots Room Item User 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -64322,6 +67278,36 @@ exports[`Storyshots Room Item User 1`] = ` > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys 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 + + + 10:00 + + @@ -64381,13 +67367,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -64667,13 +67604,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#2de0a5", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -64683,7 +67620,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#2de0a5", @@ -64724,6 +67663,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -64770,13 +67739,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -65056,13 +67976,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#ffd21f", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -65072,7 +67992,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#ffd21f", @@ -65113,6 +68035,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -65159,13 +68111,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -65445,13 +68348,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#f5455c", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -65461,7 +68364,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#f5455c", @@ -65502,6 +68407,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -65548,13 +68483,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -65834,13 +68720,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -65850,7 +68736,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -65891,6 +68779,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -65937,13 +68855,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -66223,13 +69092,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#9ea2a8", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -66239,7 +69108,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#9ea2a8", @@ -66280,6 +69151,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -66326,13 +69227,16 @@ exports[`Storyshots Room Item User status 1`] = ` > - - Read -  - - Favorite -  - - Hide - @@ -66612,13 +69464,13 @@ exports[`Storyshots Room Item User status 1`] = ` Array [ Object { "color": "#cbced1", - "fontSize": 16, + "fontSize": 22, }, Array [ Object { - "height": 16, + "height": 22, "textAlignVertical": "center", - "width": 16, + "width": 22, }, Array [ Array [ @@ -66628,7 +69480,9 @@ exports[`Storyshots Room Item User status 1`] = ` Object { "color": "#0d0e12", }, - undefined, + Object { + "marginRight": 8, + }, ], Object { "color": "#cbced1", @@ -66669,6 +69523,36 @@ exports[`Storyshots Room Item User status 1`] = ` > rocket.cat + + + 10:00 + + @@ -72243,6 +75127,7 @@ exports[`Storyshots Thread Messages.Item badge 1`] = ` }, ] } + testID="avatar" > - getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); - packages.add(new WatermelonDBPackage()); packages.add(new RNCViewPagerPackage()); packages.add(new SSLPinningPackage()); List unimodules = Arrays.asList( @@ -52,6 +52,11 @@ public class MainApplication extends Application implements ReactApplication { return "index"; } + @Override + protected JSIModulePackage getJSIModulePackage() { + return new ReanimatedJSIModulePackage(); // <- add + } + @Override protected @Nullable String getBundleAssetName() { return "app.bundle"; diff --git a/android/build.gradle b/android/build.gradle index 8c987ef86..31650a07c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -10,8 +10,8 @@ buildscript { ext { buildToolsVersion = "29.0.3" minSdkVersion = 23 - compileSdkVersion = 29 - targetSdkVersion = 29 + compileSdkVersion = 30 + targetSdkVersion = 30 ndkVersion = "20.1.5948944" glideVersion = "4.11.0" kotlin_version = "1.3.50" @@ -68,10 +68,10 @@ subprojects { subproject -> afterEvaluate { if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion "29.0.3" defaultConfig { - targetSdkVersion 29 + targetSdkVersion 30 } variantFilter { variant -> def names = variant.flavors*.name diff --git a/android/settings.gradle b/android/settings.gradle index d50ac2137..98573a99f 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -2,8 +2,6 @@ apply from: '../node_modules/react-native-unimodules/gradle.groovy' includeUnimodulesProjects() rootProject.name = 'RocketChatRN' -include ':watermelondb' -project(':watermelondb').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android') include ':reactnativenotifications' project(':reactnativenotifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/android/app') include ':@react-native-community_viewpager' diff --git a/app/actions/actionsTypes.js b/app/actions/actionsTypes.js index fcf881fd3..852ce83ea 100644 --- a/app/actions/actionsTypes.js +++ b/app/actions/actionsTypes.js @@ -18,8 +18,6 @@ export const ROOMS = createRequestTypes('ROOMS', [ 'SET_SEARCH', 'CLOSE_SERVER_DROPDOWN', 'TOGGLE_SERVER_DROPDOWN', - 'CLOSE_SORT_DROPDOWN', - 'TOGGLE_SORT_DROPDOWN', 'OPEN_SEARCH_HEADER', 'CLOSE_SEARCH_HEADER' ]); diff --git a/app/actions/rooms.js b/app/actions/rooms.js index 63e095cea..0f708f8cf 100644 --- a/app/actions/rooms.js +++ b/app/actions/rooms.js @@ -45,18 +45,6 @@ export function toggleServerDropdown() { }; } -export function closeSortDropdown() { - return { - type: types.ROOMS.CLOSE_SORT_DROPDOWN - }; -} - -export function toggleSortDropdown() { - return { - type: types.ROOMS.TOGGLE_SORT_DROPDOWN - }; -} - export function openSearchHeader() { return { type: types.ROOMS.OPEN_SEARCH_HEADER diff --git a/app/constants/constantDisplayMode.js b/app/constants/constantDisplayMode.js new file mode 100644 index 000000000..d7d7e1d53 --- /dev/null +++ b/app/constants/constantDisplayMode.js @@ -0,0 +1,2 @@ +export const DISPLAY_MODE_CONDENSED = 'condensed'; +export const DISPLAY_MODE_EXPANDED = 'expanded'; diff --git a/app/containers/ActionSheet/ActionSheet.tsx b/app/containers/ActionSheet/ActionSheet.tsx index f926f01e7..35e69c700 100644 --- a/app/containers/ActionSheet/ActionSheet.tsx +++ b/app/containers/ActionSheet/ActionSheet.tsx @@ -3,7 +3,7 @@ import { Keyboard, Text } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { State, TapGestureHandler } from 'react-native-gesture-handler'; import ScrollBottomSheet from 'react-native-scroll-bottom-sheet'; -import Animated, { Easing, Extrapolate, Value, interpolate } from 'react-native-reanimated'; +import Animated, { Easing, Extrapolate, Value, interpolateNode } from 'react-native-reanimated'; import * as Haptics from 'expo-haptics'; import { useBackHandler } from '@react-native-community/hooks'; @@ -132,11 +132,12 @@ const ActionSheet = React.memo( const renderItem = ({ item }: any) => ; const animatedPosition = React.useRef(new Value(0)); - const opacity = interpolate(animatedPosition.current, { + // TODO: Similar to https://github.com/wcandillon/react-native-redash/issues/307#issuecomment-827442320 + const opacity = interpolateNode(animatedPosition.current, { inputRange: [0, 1], outputRange: [0, themes[theme].backdropOpacity], extrapolate: Extrapolate.CLAMP - }); + }) as any; return ( <> diff --git a/app/containers/Avatar/Avatar.tsx b/app/containers/Avatar/Avatar.tsx index e35f0f589..286bcc060 100644 --- a/app/containers/Avatar/Avatar.tsx +++ b/app/containers/Avatar/Avatar.tsx @@ -85,7 +85,7 @@ const Avatar = React.memo( } return ( - + {image} {children} diff --git a/app/containers/FormContainer.tsx b/app/containers/FormContainer.tsx index 522bf489e..46522508b 100644 --- a/app/containers/FormContainer.tsx +++ b/app/containers/FormContainer.tsx @@ -22,11 +22,11 @@ const styles = StyleSheet.create({ } }); -export const FormContainerInner = ({ children }: { children: JSX.Element }) => ( +export const FormContainerInner = ({ children }: { children: React.ReactNode }): JSX.Element => ( {children} ); -const FormContainer = ({ children, theme, testID, ...props }: IFormContainer) => ( +const FormContainer = ({ children, theme, testID, ...props }: IFormContainer): JSX.Element => ( // @ts-ignore + - + ); } @@ -105,14 +105,14 @@ export default class RCTextInput extends React.PureComponent + - + ); } diff --git a/app/ee/omnichannel/views/QueueListView.js b/app/ee/omnichannel/views/QueueListView.js index d22613445..defe9233f 100644 --- a/app/ee/omnichannel/views/QueueListView.js +++ b/app/ee/omnichannel/views/QueueListView.js @@ -51,7 +51,9 @@ class QueueListView extends React.Component { server: PropTypes.string, useRealName: PropTypes.bool, navigation: PropTypes.object, - theme: PropTypes.string + theme: PropTypes.string, + showAvatar: PropTypes.bool, + displayMode: PropTypes.string }; shouldComponentUpdate(nextProps) { @@ -95,7 +97,9 @@ class QueueListView extends React.Component { useRealName, theme, isMasterDetail, - width + width, + showAvatar, + displayMode } = this.props; const id = this.getUidDirectMessage(item); @@ -117,6 +121,8 @@ class QueueListView extends React.Component { getRoomAvatar={this.getRoomAvatar} visitor={item.v} swipeEnabled={false} + showAvatar={showAvatar} + displayMode={displayMode} /> ); }; @@ -151,6 +157,8 @@ const mapStateToProps = state => ({ isMasterDetail: state.app.isMasterDetail, server: state.server.server, useRealName: state.settings.UI_Use_Real_Name, - queued: getInquiryQueueSelector(state) + queued: getInquiryQueueSelector(state), + showAvatar: state.sortPreferences.showAvatar, + displayMode: state.sortPreferences.displayMode }); export default connect(mapStateToProps)(withDimensions(withTheme(QueueListView))); diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index d48c9ccb1..231b8154a 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -79,7 +79,6 @@ "error-user-registration-secret": "التسجيل مسموح به عبر عنوان الويب السري فقط", "error-you-are-last-owner": "أنت المالك الأخير. يرجى تعيين مالك جديد قبل مغادرة الغرفة", "Actions": "الإجراءات", - "activity": "نشاط", "Activity": "النشاط", "Add_Reaction": "إضافة تفاعل", "Add_Server": "إضافة خادم", @@ -224,7 +223,6 @@ "Everyone_can_access_this_channel": "يمكن للجميع الوصول إلى هذه القناة", "Error_uploading": "خطأ في الرفع", "Expiration_Days": "انتهاء (أيام)", - "Favorite": "مفضل", "Favorites": "مفضلات", "Files": "ملفات", "File_description": "وصف الملف", @@ -241,9 +239,6 @@ "Forward_to_user": "إعادة توجيه لمستخدم", "Full_table": "انقر لرؤية الجدول كاملاً", "Generate_New_Link": "إنشاء رابط جديد", - "Group_by_favorites": "جمع حسب المفضلة", - "Group_by_type": "جمع حسب النوع", - "Hide": "إخفاء", "Has_joined_the_channel": "انضم إلى القناة", "Has_joined_the_conversation": "انضم إلى المحادثة", "Has_left_the_channel": "غادر القناة", @@ -321,7 +316,6 @@ "My_servers": "الخوادم", "N_people_reacted": "{{n}} تفاعل الناس", "N_users": "{{n}} مستخدمين", - "name": "اسم", "Name": "اسم", "Navigation_history": "تاريخ التصفح", "Never": "أبداً", @@ -398,7 +392,6 @@ "Reactions_are_disabled": "التفاعل معطل", "Reactions_are_enabled": "التفاعل مفعل", "Reactions": "التفاعلات", - "Read": "قراءة", "Read_External_Permission_Message": "يحتاج Rocket.chat للوصول إلى الصور والملفات الموجودة على الجهاز", "Read_External_Permission": "صلاحية قراءة الوسائط", "Read_Only_Channel": "قناة للقراءة فقط", @@ -490,7 +483,6 @@ "Sign_in_your_server": "تسجيل الدخول إلى الخادم الخاص بك", "Sign_Up": "تسجيل جديد", "Some_field_is_invalid_or_empty": "بعض الحقول غير صالحة أو فارغة", - "Sorting_by": "فرز حسب {{key}}", "Sound": "الصوت", "Star_room": "تمييز الغرفة", "Star": "تمييز", @@ -529,7 +521,6 @@ "unarchive": "إلغاء الأرشفة", "UNARCHIVE": "إلغاء الأرشفة", "Unblock_user": "إلغاء حظر عن مستخدم", - "Unfavorite": "إزالة من المفضلة", "Unfollowed_thread": "موضوع غير متابع", "Unmute": "إلغاء كتم", "unmuted": "إلغاء كتم", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index 55b32c1fe..affe28905 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "Du bist der letzte Besitzer. Bitte setze einen neuen Besitzer, bevor du den Raum verlässt.", "error-status-not-allowed": "Unsichtbar-Status ist deaktiviert", "Actions": "Aktionen", - "activity": "Aktivität", "Activity": "Aktivität", "Add_Reaction": "Reaktion hinzufügen", "Add_Server": "Server hinzufügen", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Jeder kann auf dieses Team zugreifen", "Error_uploading": "Fehler beim Hochladen", "Expiration_Days": "läuft ab (Tage)", - "Favorite": "Favorisieren", "Favorites": "Favoriten", "Files": "Dateien", "File_description": "Dateibeschreibung", @@ -249,9 +247,6 @@ "Forward_to_user": "Weiterleiten an Benutzer", "Full_table": "Klicken um die ganze Tabelle anzuzeigen", "Generate_New_Link": "Neuen Link erstellen", - "Group_by_favorites": "Nach Favoriten gruppieren", - "Group_by_type": "Gruppieren nach Typ", - "Hide": "Ausblenden", "Has_joined_the_channel": "Ist dem Kanal beigetreten", "Has_joined_the_conversation": "Hat sich dem Gespräch angeschlossen", "Has_left_the_channel": "Hat den Kanal verlassen", @@ -334,7 +329,6 @@ "N_people_reacted": "{{n}} Leute haben reagiert", "N_users": "{{n}} Benutzer", "N_channels": "{{n}} Kanäle", - "name": "Name", "Name": "Name", "Navigation_history": "Navigations-Verlauf", "Never": "Niemals", @@ -412,7 +406,6 @@ "Reactions_are_disabled": "Reaktionen sind deaktiviert", "Reactions_are_enabled": "Reaktionen sind aktiviert", "Reactions": "Reaktionen", - "Read": "Gelesen", "Read_External_Permission_Message": "Rocket.Chat benötigt Zugriff auf deine Fotos, Medien und Dateien auf deinem Gerät", "Read_External_Permission": "Lese-Zugriff auf Medien", "Read_Only_Channel": "Nur-Lese-Kanal", @@ -507,7 +500,6 @@ "Sign_in_your_server": "Melde dich bei deinem Server an", "Sign_Up": "Anmelden", "Some_field_is_invalid_or_empty": "Ein Feld ist ungültig oder leer", - "Sorting_by": "Sortierung nach {{key}}", "Sound": "Ton", "Star_room": "Favorisierter Raum", "Star": "Favoriten", @@ -546,7 +538,6 @@ "unarchive": "wiederherstellen", "UNARCHIVE": "WIEDERHERSTELLEN", "Unblock_user": "Benutzer entsperren", - "Unfavorite": "Nicht mehr favorisieren", "Unfollowed_thread": "Thread nicht mehr folgen", "Unmute": "Stummschaltung aufheben", "unmuted": "Stummschaltung aufgehoben", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 8d409c1cc..f8982490d 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "You are the last owner. Please set new owner before leaving the room.", "error-status-not-allowed": "Invisible status is disabled", "Actions": "Actions", - "activity": "activity", "Activity": "Activity", "Add_Reaction": "Add Reaction", "Add_Server": "Add Server", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Everyone can access this team", "Error_uploading": "Error uploading", "Expiration_Days": "Expiration (Days)", - "Favorite": "Favorite", "Favorites": "Favorites", "Files": "Files", "File_description": "File description", @@ -249,9 +247,6 @@ "Forward_to_user": "Forward to user", "Full_table": "Click to see full table", "Generate_New_Link": "Generate New Link", - "Group_by_favorites": "Group favorites", - "Group_by_type": "Group by type", - "Hide": "Hide", "Has_joined_the_channel": "has joined the channel", "Has_joined_the_conversation": "has joined the conversation", "Has_left_the_channel": "has left the channel", @@ -334,7 +329,6 @@ "N_people_reacted": "{{n}} people reacted", "N_users": "{{n}} users", "N_channels": "{{n}} channels", - "name": "name", "Name": "Name", "Navigation_history": "Navigation history", "Never": "Never", @@ -412,7 +406,6 @@ "Reactions_are_disabled": "Reactions are disabled", "Reactions_are_enabled": "Reactions are enabled", "Reactions": "Reactions", - "Read": "Read", "Read_External_Permission_Message": "Rocket.Chat needs to access photos, media, and files on your device", "Read_External_Permission": "Read Media Permission", "Read_Only_Channel": "Read Only Channel", @@ -507,7 +500,6 @@ "Sign_in_your_server": "Sign in your server", "Sign_Up": "Sign Up", "Some_field_is_invalid_or_empty": "Some field is invalid or empty", - "Sorting_by": "Sorting by {{key}}", "Sound": "Sound", "Star_room": "Star room", "Star": "Star", @@ -546,7 +538,6 @@ "unarchive": "unarchive", "UNARCHIVE": "UNARCHIVE", "Unblock_user": "Unblock user", - "Unfavorite": "Unfavorite", "Unfollowed_thread": "Unfollowed thread", "Unmute": "Unmute", "unmuted": "unmuted", @@ -772,6 +763,13 @@ "Converting_Team_To_Channel": "Converting Team to Channel", "Select_Team_Channels_To_Delete": "Select the Team’s Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.", "You_are_converting_the_team": "You are converting this Team to a Channel", + "Display": "Display", + "Avatars": "Avatars", + "Sort_by": "Sort by", + "Group_by": "Group by", + "Types": "Types", + "Expanded": "Expanded", + "Condensed": "Condensed", "creating_discussion": "creating discussion", "Canned_Responses": "Canned Responses", "No_match_found": "No match found.", diff --git a/app/i18n/locales/es-ES.json b/app/i18n/locales/es-ES.json index faf9bca29..d4bff085b 100644 --- a/app/i18n/locales/es-ES.json +++ b/app/i18n/locales/es-ES.json @@ -76,7 +76,6 @@ "error-user-registration-secret": "El registro de usuarios sólo está permitido por URL secretas", "error-you-are-last-owner": "Eres el único propietario existente. Debes establecer un nuevo propietario antes de abandonar la sala.", "Actions": "Acciones", - "activity": "actividad", "Activity": "Actividad", "Add_Reaction": "Añadir reacción", "Add_Server": "Añadir servidor", @@ -176,7 +175,6 @@ "Enable_notifications": "Permitir notificaciones", "Everyone_can_access_this_channel": "Todos los usuarios pueden acceder a este canal", "Error_uploading": "Error en la subida", - "Favorite": "Favorito", "Favorites": "Favoritos", "Files": "Archivos", "File_description": "Descripción del archivo", @@ -188,9 +186,6 @@ "Forgot_password": "¿Ha olvidado su contraseña?", "Forgot_Password": "Olvidé la contraseña", "Full_table": "Click para ver la tabla completa", - "Group_by_favorites": "Agrupar por favoritos", - "Group_by_type": "Agrupar por tipo", - "Hide": "Ocultar", "Has_joined_the_channel": "se ha unido al canal", "Has_joined_the_conversation": "se ha unido a la conversación", "Has_left_the_channel": "ha dejado el canal", @@ -237,7 +232,6 @@ "My_servers": "Mis servidores", "N_people_reacted": "Han reaccionado {{n}} personas", "N_users": "{{n}} usuarios", - "name": "nombre", "Name": "Nombre", "New_Message": "Nuevo mensaje", "New_Password": "Nueva contraseña", @@ -292,7 +286,6 @@ "Reactions_are_disabled": "Las reacciones están desactivadas", "Reactions_are_enabled": "Las reacciones están activadas", "Reactions": "Reacciones", - "Read": "Leer", "Read_Only_Channel": "Canal de sólo lectura", "Read_Only": "Sólo lectura ", "Read_Receipt": "Comprobante de lectura", @@ -356,7 +349,6 @@ "Sign_in_your_server": "Accede a tu servidor", "Sign_Up": "Registrarse", "Some_field_is_invalid_or_empty": "Algún campo no es correcto o está vacío", - "Sorting_by": "Ordenado por {{key}}", "Sound": "Sonido", "Star_room": "Destacar sala", "Star": "Destacar", @@ -390,7 +382,6 @@ "unarchive": "desarchivar", "UNARCHIVE": "DESARCHIVAR", "Unblock_user": "Desbloquear usuario", - "Unfavorite": "Quitar favorito", "Unfollowed_thread": "Dejar de seguir el hilo", "Unmute": "Desmutear", "unmuted": "Desmuteado", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 242a3e277..ff24ace66 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "Vous êtes le dernier propriétaire. Veuillez définir un nouveau propriétaire avant de quitter le salon.", "error-status-not-allowed": "Le statut invisible est désactivé", "Actions": "Actions", - "activity": "activité", "Activity": "Activité", "Add_Reaction": "Ajouter une réaction", "Add_Server": "Ajouter un serveur", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Tout le monde peut accéder à cette équipe", "Error_uploading": "Erreur lors de l'envoi", "Expiration_Days": "Expiration (Jours)", - "Favorite": "Favori", "Favorites": "Favoris", "Files": "Fichiers", "File_description": "Description du fichier", @@ -249,9 +247,6 @@ "Forward_to_user": "Transmettre à l'utilisateur", "Full_table": "Cliquez pour voir le tableau complet", "Generate_New_Link": "Générer un nouveau lien", - "Group_by_favorites": "Grouper par favoris", - "Group_by_type": "Grouper par type", - "Hide": "Cacher", "Has_joined_the_channel": "a rejoint le canal", "Has_joined_the_conversation": "a rejoint la conversation", "Has_left_the_channel": "a quitté le canal", @@ -334,7 +329,6 @@ "N_people_reacted": "{{n}} personnes ont réagi", "N_users": "{{n}} utilisateurs", "N_channels": "{{n}} canaux", - "name": "nom", "Name": "Nom", "Navigation_history": "Historique de navigation", "Never": "Jamais", @@ -412,7 +406,6 @@ "Reactions_are_disabled": "Les réactions sont désactivées", "Reactions_are_enabled": "Les réactions sont activées", "Reactions": "Réactions", - "Read": "Lecture", "Read_External_Permission_Message": "Rocket.Chat doit accéder aux photos, aux médias et aux fichiers sur votre appareil", "Read_External_Permission": "Permission de lecture des fichiers", "Read_Only_Channel": "Canal en lecture seule", @@ -507,7 +500,6 @@ "Sign_in_your_server": "Connectez-vous à votre serveur", "Sign_Up": "S'inscrire", "Some_field_is_invalid_or_empty": "Certains champs sont invalides ou vides", - "Sorting_by": "Tri par {{key}}", "Sound": "Son", "Star_room": "Canal favoris", "Star": "Mettre en favoris", @@ -546,7 +538,6 @@ "unarchive": "désarchiver", "UNARCHIVE": "DÉSARCHIVER", "Unblock_user": "Débloquer l'utilisateur", - "Unfavorite": "Supprimer des favoris", "Unfollowed_thread": "Ne plus suivre ce fil", "Unmute": "Rendre la parole", "unmuted": "rendu la parole", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 87447244c..c9e1cdfc5 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -79,7 +79,6 @@ "error-user-registration-secret": "Registrazione utente permessa solo via URL segreto", "error-you-are-last-owner": "Sei l'ultimo proprietario rimasto. Imposta un nuovo proprietario prima di lasciare la stanza.", "Actions": "Azioni", - "activity": "attività", "Activity": "Attività", "Add_Reaction": "Aggiungi reazione", "Add_Server": "Aggiungi server", @@ -227,7 +226,6 @@ "Everyone_can_access_this_channel": "Tutti hanno accesso a questo canale", "Error_uploading": "Errore nel caricamento di", "Expiration_Days": "Scadenza (giorni)", - "Favorite": "Preferito", "Favorites": "Preferiti", "Files": "File", "File_description": "Descrizione file", @@ -244,9 +242,6 @@ "Forward_to_user": "Inoltra ad udente", "Full_table": "Clicca per la tabella completa", "Generate_New_Link": "Genera nuovo link", - "Group_by_favorites": "Raggruppa per preferiti", - "Group_by_type": "Raggruppa per tipo", - "Hide": "Nascondi", "Has_joined_the_channel": "si è unito al canale", "Has_joined_the_conversation": "si è unito alla conversazione", "Has_left_the_channel": "ha lasciato il canale", @@ -326,7 +321,6 @@ "My_servers": "I miei server", "N_people_reacted": "{{n}} persone hanno reagito", "N_users": "{{n}} utenti", - "name": "nome", "Name": "Nome", "Navigation_history": "Cronologia di navigazione", "Never": "Mai", @@ -404,7 +398,6 @@ "Reactions_are_disabled": "Le reazioni sono disabilitate", "Reactions_are_enabled": "Le reazioni sono abilitate", "Reactions": "Reazioni", - "Read": "Letto", "Read_External_Permission_Message": "Rocket.Chat deve accedere alle foto, media, e documenti sul tuo dispositivo", "Read_External_Permission": "Permesso di Lettura della Memoria", "Read_Only_Channel": "Canale in sola lettura", @@ -498,7 +491,6 @@ "Sign_in_your_server": "Accedi al tuo server", "Sign_Up": "Registrati", "Some_field_is_invalid_or_empty": "Un campo non è valido o è vuoto", - "Sorting_by": "Ordina per {{key}}", "Sound": "Suono", "Star_room": "Aggiungi stanza ai preferiti", "Star": "Aggiungi ai preferiti", @@ -537,7 +529,6 @@ "unarchive": "rimuovi dall'archivio", "UNARCHIVE": "RIMUOVI DALL'ARCHIVIO", "Unblock_user": "Sblocca utente", - "Unfavorite": "Rimuovi preferito", "Unfollowed_thread": "Non segui più il thread", "Unmute": "Attiva notifiche", "unmuted": "notifiche attivate", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 48d0ef1be..4f52473c8 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -77,7 +77,6 @@ "error-user-registration-secret": "ユーザーの登録は登録用URLからのみ許可されています", "error-you-are-last-owner": "あなたは最後のオーナーです。ルームを退出する前に別のオーナーを設定してください。", "Actions": "アクション", - "activity": "アクティビティ", "Activity": "アクティビティ順", "Add_Reaction": "リアクションを追加", "Add_Server": "サーバーを追加", @@ -183,7 +182,6 @@ "Everyone_can_access_this_channel": "全員このチャンネルにアクセスできます", "Error_uploading": "アップロードエラー", "Expiration_Days": "期限切れ (日)", - "Favorite": "お気に入り", "Favorites": "お気に入り", "Files": "ファイル", "File_description": "ファイルの説明", @@ -196,9 +194,6 @@ "Forgot_Password": "パスワードを忘れた", "Full_table": "クリックしてテーブル全体を見る", "Generate_New_Link": "新しいリンクを生成", - "Group_by_favorites": "お気に入りをグループ化", - "Group_by_type": "タイプ別にグループ化", - "Hide": "隠す", "Has_joined_the_channel": "はチャンネルに参加しました", "Has_joined_the_conversation": "は会話に参加しました", "Has_left_the_channel": "はチャンネルを退出しました", @@ -251,7 +246,6 @@ "My_servers": "自分のサーバー", "N_people_reacted": "{{n}}人がリアクションしました", "N_users": "{{n}}人", - "name": "アルファベット", "Name": "名前", "Never": "ずっと受け取らない", "New_Message": "メッセージ", @@ -308,7 +302,6 @@ "Reactions_are_disabled": "リアクションは無効化されています", "Reactions_are_enabled": "リアクションは有効化されています", "Reactions": "リアクション", - "Read": "読む", "Read_Only_Channel": "読み取り専用チャンネル", "Read_Only": "読み取り専用", "Read_Receipt": "レシートを見る", @@ -382,7 +375,6 @@ "Sign_in_your_server": "サーバーに接続", "Sign_Up": "登録", "Some_field_is_invalid_or_empty": "不正、または空の入力欄があります。", - "Sorting_by": "{{key}}順", "Sound": "音", "Star_room": "お気に入りルーム", "Star": "お気に入り", @@ -416,7 +408,6 @@ "unarchive": "アーカイブ解除", "UNARCHIVE": "アーカイブ解除", "Unblock_user": "ブロックを解除", - "Unfavorite": "お気に入り解除", "Unfollowed_thread": "スレッド更新時に通知しない", "Unmute": "ミュート解除", "unmuted": "ミュート解除しました", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index 33acb243b..dcd9f6cfa 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "Je bent de laatste eigenaar. Stel een nieuwe eigenaar in voordat je de kamer verlaat.", "error-status-not-allowed": "Onzichtbare status is uitgeschakeld", "Actions": "Acties", - "activity": "activiteit", "Activity": "Activiteit", "Add_Reaction": "Reactie toevoegen", "Add_Server": "Server toevoegen", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Iedereen heeft toegang tot dit team", "Error_uploading": "Fout bij uploaden", "Expiration_Days": "Vervaldatum (Dagen)", - "Favorite": "Favoriet", "Favorites": "Favorieten", "Files": "Bestanden", "File_description": "Bestandsbeschrijving", @@ -249,9 +247,6 @@ "Forward_to_user": "Doorsturen naar gebruiker", "Full_table": "Klik om de volledige tabel te zien", "Generate_New_Link": "Nieuwe link genereren", - "Group_by_favorites": "Groepeer favorieten", - "Group_by_type": "Groeperen op type", - "Hide": "Verberg", "Has_joined_the_channel": "is bij het kanaal gekomen", "Has_joined_the_conversation": "heeft zich bij het gesprek aangesloten", "Has_left_the_channel": "heeft het kanaal verlaten", @@ -334,7 +329,6 @@ "N_people_reacted": "{{n}} mensen hebben gereageerd", "N_users": "{{n}} gebruikers", "N_channels": "{{n}} kanalen", - "name": "naam", "Name": "Naam", "Navigation_history": "Navigatie geschiedenis", "Never": "Nooit", @@ -412,7 +406,6 @@ "Reactions_are_disabled": "Reacties zijn uitgeschakeld", "Reactions_are_enabled": "Reacties zijn ingeschakeld", "Reactions": "Reacties", - "Read": "Lezen", "Read_External_Permission_Message": "Rocket.Chat heeft toegang nodig tot foto's, media en bestanden op je apparaat", "Read_External_Permission": "Lees toestemming voor media", "Read_Only_Channel": "Alleen-lezen kanaal", @@ -507,7 +500,6 @@ "Sign_in_your_server": "Log in op je server", "Sign_Up": "Registreren", "Some_field_is_invalid_or_empty": "Sommige velden zijn ongeldig of leeg", - "Sorting_by": "Sorteren op {{key}}", "Sound": "Geluid", "Star_room": "Favoriete kanalen", "Star": "Ster", @@ -546,7 +538,6 @@ "unarchive": "dearchiveren", "UNARCHIVE": "DEARCHIVEREN", "Unblock_user": "Deblokkeer gebruiker", - "Unfavorite": "Uit favorieten halen", "Unfollowed_thread": "Draad ontvolgd", "Unmute": "Dempen opheffen", "unmuted": "ongedempt", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index 57c31c067..957d6ceca 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -77,7 +77,6 @@ "error-you-are-last-owner": "Você é o último proprietário da sala. Por favor defina um novo proprietário antes de sair.", "error-status-not-allowed": "O status invisível está desativado", "Actions": "Ações", - "activity": "atividade", "Activity": "Atividade", "Add_Reaction": "Reagir", "Add_Server": "Adicionar servidor", @@ -219,7 +218,6 @@ "Everyone_can_access_this_channel": "Todos podem acessar este canal", "Error_uploading": "Erro subindo", "Expiration_Days": "Expira em (dias)", - "Favorite": "Adicionar aos Favoritos", "Favorites": "Favoritos", "Files": "Arquivos", "File_description": "Descrição do arquivo", @@ -236,9 +234,6 @@ "Forward_to_user": "Encaminhar para usuário", "Full_table": "Clique para ver a tabela completa", "Generate_New_Link": "Gerar novo convite", - "Group_by_favorites": "Agrupar favoritos", - "Group_by_type": "Agrupar por tipo", - "Hide": "Ocultar", "Has_joined_the_channel": "entrou no canal", "Has_joined_the_conversation": "entrou na conversa", "Has_left_the_channel": "saiu da conversa", @@ -307,7 +302,6 @@ "muted": "mudo", "N_people_reacted": "{{n}} pessoas reagiram", "N_users": "{{n}} usuários", - "name": "nome", "Name": "Nome", "Navigation_history": "Histórico de navegação", "Never": "Nunca", @@ -466,7 +460,6 @@ "Sign_in_your_server": "Entrar no seu servidor", "Sign_Up": "Registrar", "Some_field_is_invalid_or_empty": "Algum campo está inválido ou vazio", - "Sorting_by": "Ordenando por {{key}}", "Sound": "Som da notificação", "Star_room": "Favoritar sala", "Star": "Favorito", @@ -502,7 +495,6 @@ "unarchive": "desarquivar", "UNARCHIVE": "DESARQUIVAR", "Unblock_user": "Desbloquear usuário", - "Unfavorite": "Remover dos Favoritos", "Unfollowed_thread": "Parou de seguir tópico", "Unmute": "Permitir que o usuário fale", "unmuted": "permitiu que o usuário fale", @@ -673,6 +665,13 @@ "Deleted_The_Team_Successfully": "Time deletado com sucesso", "Deleted_The_Room_Successfully": "Sala deletada com sucesso", "Convert_to_Channel": "Converter para um Canal", + "Display": "Display", + "Avatars": "Avatars", + "Sort_by": "Ordenar por", + "Group_by": "Agrupar por", + "Types": "Tipos", + "Expanded": "Estendido", + "Condensed": "Condensado", "Canned_Responses": "Respostas Predefinidas", "No_match_found": "Nenhum resultado encontrado", "Check_canned_responses": "Verifique nas respostas predefinidas", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index fb96c42e7..6ac16d862 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "Você é o último proprietário. Por favor, defina novo proprietário antes de sair da sala.", "error-status-not-allowed": "O estado invisível está desactivado", "Actions": "Acções", - "activity": "actividade", "Activity": "Actividade", "Add_Reaction": "Adicionar Reacção", "Add_Server": "Adicionar Servidor", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Todos podem aceder a esta equipa", "Error_uploading": "Erro ao fazer o envio", "Expiration_Days": "Validade (Dias)", - "Favorite": "Favorito", "Favorites": "Favoritos", "Files": "Ficheiros", "File_description": "Descrição do ficheiro", @@ -249,9 +247,6 @@ "Forward_to_user": "Reencaminhar para o utilizador", "Full_table": "Clique para ver a tabela completa", "Generate_New_Link": "Gerar Novo Link", - "Group_by_favorites": "Agrupar por favoritos", - "Group_by_type": "Agrupar por tipo", - "Hide": "Esconder", "Has_joined_the_channel": "entrou no canal", "Has_joined_the_conversation": "entrou na conversa", "Has_left_the_channel": "saiu do canal", @@ -333,7 +328,6 @@ "N_people_reacted": "{{n}} pessoas reagiram", "N_users": "{{n}} utilizadores", "N_channels": "{{n}} canais", - "name": "nome", "Name": "Nome", "Navigation_history": "Histórico de navegação", "Never": "Nunca", @@ -411,7 +405,6 @@ "Reactions_are_disabled": "Reacções desactivadas", "Reactions_are_enabled": "Reacções activadas", "Reactions": "Reacções", - "Read": "Ler", "Read_External_Permission_Message": "Rocket.Chat precisa acessar fotos, média e arquivos em seu dispositivo", "Read_External_Permission": "Permissão de leitura da média", "Read_Only_Channel": "Canal só de leitura", @@ -458,7 +451,6 @@ "Sign_in_your_server": "Entre no seu servidor", "Sign_Up": "Inscreva-se", "Some_field_is_invalid_or_empty": "Algum campo é inválido ou está vazio", - "Sorting_by": "Ordenar por {{key}}", "Star_room": "Marcar como favorito", "Star": "Dar estrela", "Starred_Messages": "Mensagens com estrela", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 359aadf99..d3102060a 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -81,7 +81,6 @@ "error-you-are-last-owner": "Вы последний владелец. Пожалуйста, назначьте нового владельца, прежде чем покинуть чат.", "error-status-not-allowed": "Статус Невидимый отключён", "Actions": "Действия", - "activity": "активности", "Activity": "По активности", "Add_Reaction": "Добавить реакцию", "Add_Server": "Добавить сервер", @@ -232,7 +231,6 @@ "Everyone_can_access_this_team": "Каждый может получить доступ к этой Команде", "Error_uploading": "Ошибка загрузки", "Expiration_Days": "Срок действия (Дни)", - "Favorite": "Избранное", "Favorites": "Избранные", "Files": "Файлы", "File_description": "Описание файла", @@ -249,9 +247,6 @@ "Forward_to_user": "Перенаправить пользователю", "Full_table": "Нажмите, чтобы увидеть полную таблицу", "Generate_New_Link": "Сгенерировать Новую Ссылку", - "Group_by_favorites": "По избранным", - "Group_by_type": "По типу", - "Hide": "Скрыть", "Has_joined_the_channel": "присоединился к каналу", "Has_joined_the_conversation": "присоединился к беседе", "Has_left_the_channel": "покинул канал", @@ -334,7 +329,6 @@ "N_people_reacted": "отреагировало {{n}} человек", "N_users": "{{n}} пользователи", "N_channels": "{{n}} каналов", - "name": "имя", "Name": "Имя", "Navigation_history": "История навигации", "Never": "Никогда", @@ -412,7 +406,6 @@ "Reactions_are_disabled": "Реакции отключены", "Reactions_are_enabled": "Реакции активированы", "Reactions": "Реакции", - "Read": "Читать", "Read_External_Permission_Message": "Rocket.Chat необходим доступ к фотографиям, медиа и другим файлам на вашем устройстве", "Read_External_Permission": "Разрешение на Чтение Медиа", "Read_Only_Channel": "Канал только для чтения", @@ -507,7 +500,6 @@ "Sign_in_your_server": "Войдите на ваш сервер", "Sign_Up": "Регистрация", "Some_field_is_invalid_or_empty": "Некоторые поля недопустимы или пусты", - "Sorting_by": "Сортировка по {{key}}", "Sound": "Звук", "Star_room": "В избранное", "Star": "Отметить", @@ -546,7 +538,6 @@ "unarchive": "разархивировать", "UNARCHIVE": "РАЗАРХИВИРОВАТЬ", "Unblock_user": "Разблокировать пользователя", - "Unfavorite": "Удалить из избранного", "Unfollowed_thread": "Не следить", "Unmute": "Отменить заглушивание", "unmuted": "Заглушивание отменено", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index 81a06449b..dfe44fdef 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -79,7 +79,6 @@ "error-user-registration-secret": "Kullanıcı kaydına yalnızca Gizli URL aracılığıyla izin verilir!", "error-you-are-last-owner": "Son sahibi sizsiniz. Lütfen odadan ayrılmadan önce yeni bir sahip belirleyin.", "Actions": "İşlemler", - "activity": "etkinlik", "Activity": "Etkinlik", "Add_Reaction": "Tepki ekle", "Add_Server": "Sunucu ekle", @@ -227,7 +226,6 @@ "Everyone_can_access_this_channel": "Bu kanala herkes erişebilir", "Error_uploading": "Yükleme hatası", "Expiration_Days": "Geçerlilik Süresi (Gün)", - "Favorite": "Favori", "Favorites": "Favoriler", "Files": "Dosyalar", "File_description": "Dosya açıklaması", @@ -244,9 +242,6 @@ "Forward_to_user": "Kullanıcıya İlet", "Full_table": "Tam tabloyu görmek için tıklayın", "Generate_New_Link": "Yeni Bağlantı Oluştur", - "Group_by_favorites": "Favorilere göre grupla", - "Group_by_type": "Türe göre grupla", - "Hide": "Gizle", "Has_joined_the_channel": "kanala katıldı", "Has_joined_the_conversation": "sohbete katıldı", "Has_left_the_channel": "kanaldan ayrıldı", @@ -327,7 +322,6 @@ "My_servers": "Sunucularım", "N_people_reacted": "{{n}} kişi tepki verdi", "N_users": "{{n}} kullanıcı", - "name": "isim", "Name": "İsim", "Navigation_history": "Gezinti geçmişi", "Never": "Asla", @@ -405,7 +399,6 @@ "Reactions_are_disabled": "Tepkiler devre dışı bırakıldı", "Reactions_are_enabled": "Tepkiler etkinleştirildi", "Reactions": "Tepkiler", - "Read": "Oku", "Read_External_Permission_Message": "Rocket.Chat'in cihazınızdaki fotoğraflara, medyaya ve dosyalara erişmesi gerekiyor", "Read_External_Permission": "Medya Okuma İzni ", "Read_Only_Channel": "Yazma Kısıtlı Kanal", @@ -498,7 +491,6 @@ "Sign_in_your_server": "Sunucunuzda oturum açın", "Sign_Up": "Kaydol", "Some_field_is_invalid_or_empty": "Bazı alanlar geçersiz veya boş", - "Sorting_by": "{{key}} göre sıralanıyor", "Sound": "Ses", "Star_room": "Odayı Yıldızla", "Star": "Yıldızla", @@ -537,7 +529,6 @@ "unarchive": "arşivden çıkar", "UNARCHIVE": "ARŞİVDEN ÇIKAR", "Unblock_user": "Kullanıcının engelini kaldır", - "Unfavorite": "Favorilerden Çıkar", "Unfollowed_thread": "Takip edilmeyen başlık", "Unmute": "Sesi Aç", "unmuted": "Sesi Açıldı", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index fd026bfdd..a304b3926 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -79,7 +79,6 @@ "error-user-registration-secret": "只能透过加密网址进行用戶注册", "error-you-are-last-owner": "您是最后的拥有者。请删除此人之前设置一个新的拥有者。", "Actions": "操作", - "activity": "活动时间", "Activity": "按活动时间排列", "Add_Reaction": "增加表情貼", "Add_Server": "創建服务器", @@ -227,7 +226,6 @@ "Everyone_can_access_this_channel": "每个人都可以访问此频道", "Error_uploading": "错误上传", "Expiration_Days": "到期 (日)", - "Favorite": "收藏", "Favorites": "收藏", "Files": "文件", "File_description": "文件描述", @@ -244,9 +242,6 @@ "Forward_to_user": "转发给用戶", "Full_table": "点击以查看完整表格", "Generate_New_Link": "产生新的链接", - "Group_by_favorites": "收藏优先", - "Group_by_type": "以类型分组", - "Hide": "隐藏", "Has_joined_the_channel": "已加入频道", "Has_joined_the_conversation": "已经加入此对话", "Has_left_the_channel": "已离开频道", @@ -324,7 +319,6 @@ "My_servers": "我的服务器", "N_people_reacted": "{{n}} 人回复", "N_users": "{{n}} 位用户", - "name": "名称", "Name": "名称", "Navigation_history": "浏览历史记录", "Never": "从不", @@ -402,7 +396,6 @@ "Reactions_are_disabled": "表情貼被禁用", "Reactions_are_enabled": "表情貼被启用", "Reactions": "表情貼", - "Read": "读取", "Read_External_Permission_Message": "Rocket.Chat 需要存取您装置上的相片、多媒体及文件", "Read_External_Permission": "读取媒体权限", "Read_Only_Channel": "只读频道", @@ -496,7 +489,6 @@ "Sign_in_your_server": "登录你的服务器", "Sign_Up": "注册", "Some_field_is_invalid_or_empty": "某些字段无效或为空", - "Sorting_by": "按{{key}}排序", "Sound": "声音", "Star_room": "将聊天室标记", "Star": "标记", @@ -535,7 +527,6 @@ "unarchive": "取消封存", "UNARCHIVE": "取消封存", "Unblock_user": "解除屏蔽", - "Unfavorite": "取消收藏", "Unfollowed_thread": "取消追踪讨论", "Unmute": "取消静音", "unmuted": "静音状态", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index 0725a12b4..3bcf48b3d 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -79,7 +79,6 @@ "error-user-registration-secret": "只能透過加密網址進行使用者註冊", "error-you-are-last-owner": "您是最後的擁有者。請刪除此人之前設置一個新的擁有者。", "Actions": "操作", - "activity": "活動時間", "Activity": "以活動時間排序", "Add_Reaction": "增加表情貼", "Add_Server": "新增伺服器", @@ -227,7 +226,6 @@ "Everyone_can_access_this_channel": "所有人皆可存取此頻道", "Error_uploading": "錯誤上傳", "Expiration_Days": "到期 (日)", - "Favorite": "我的最愛", "Favorites": "我的最愛", "Files": "檔案", "File_description": "檔案描述", @@ -244,9 +242,6 @@ "Forward_to_user": "轉發給使用者", "Full_table": "點擊以查看完整表格", "Generate_New_Link": "產生新的連結", - "Group_by_favorites": "我的最愛優先", - "Group_by_type": "以類型分組", - "Hide": "隱藏", "Has_joined_the_channel": "已加入頻道", "Has_joined_the_conversation": "已經加入此對話", "Has_left_the_channel": "已離開頻道", @@ -325,7 +320,6 @@ "My_servers": "我的伺服器", "N_people_reacted": "{{n}} 人回复", "N_users": "{{n}} 位使用者", - "name": "名稱", "Name": "名稱", "Navigation_history": "瀏覽歷史記錄", "Never": "從不", @@ -403,7 +397,6 @@ "Reactions_are_disabled": "表情貼被禁用", "Reactions_are_enabled": "表情貼被啟用", "Reactions": "表情貼", - "Read": "讀取", "Read_External_Permission_Message": "Rocket.Chat 需要存取您裝置上的相片、多媒體及檔案", "Read_External_Permission": "讀取媒體權限", "Read_Only_Channel": "唯讀頻道", @@ -497,7 +490,6 @@ "Sign_in_your_server": "登錄你的伺服器", "Sign_Up": "註冊", "Some_field_is_invalid_or_empty": "某些字段無效或為空", - "Sorting_by": "以{{key}}排序", "Sound": "聲音", "Star_room": "標記聊天室", "Star": "標記", @@ -536,7 +528,6 @@ "unarchive": "取消封存", "UNARCHIVE": "取消封存", "Unblock_user": "解除封鎖", - "Unfavorite": "取消最愛", "Unfollowed_thread": "取消追蹤討論", "Unmute": "取消靜音", "unmuted": "靜音狀態", diff --git a/app/lib/database/index.js b/app/lib/database/index.js index dfda88a98..ee02e6212 100644 --- a/app/lib/database/index.js +++ b/app/lib/database/index.js @@ -60,8 +60,7 @@ export const getDatabase = (database = '') => { Permission, SlashCommand, User - ], - actionsEnabled: true + ] }); }; @@ -73,8 +72,7 @@ class DB { schema: serversSchema, migrations: serversMigrations }), - modelClasses: [Server, LoggedUser, ServersHistory], - actionsEnabled: true + modelClasses: [Server, LoggedUser, ServersHistory] }) }; @@ -117,8 +115,7 @@ class DB { FrequentlyUsedEmoji, Setting, User - ], - actionsEnabled: true + ] }); } diff --git a/app/lib/methods/getPermissions.js b/app/lib/methods/getPermissions.js index d23268f39..589aa6bd1 100644 --- a/app/lib/methods/getPermissions.js +++ b/app/lib/methods/getPermissions.js @@ -18,6 +18,10 @@ const PERMISSIONS = [ 'archive-room', 'auto-translate', 'create-invite-links', + 'create-c', + 'create-p', + 'create-d', + 'start-discussion', 'create-team', 'delete-c', 'delete-message', diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index 4fd4bdb5a..40722348f 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1380,17 +1380,19 @@ const RocketChat = { * Returns an array of boolean for each permission from permissions arg */ async hasPermission(permissions, rid) { - const db = database.active; - const subsCollection = db.get('subscriptions'); let roomRoles = []; - try { - // get the room from database - const room = await subsCollection.find(rid); - // get room roles - roomRoles = room.roles || []; - } catch (error) { - console.log('hasPermission -> Room not found'); - return permissions.map(() => false); + if (rid) { + const db = database.active; + const subsCollection = db.get('subscriptions'); + try { + // get the room from database + const room = await subsCollection.find(rid); + // get room roles + roomRoles = room.roles || []; + } catch (error) { + console.log('hasPermission -> Room not found'); + return permissions.map(() => false); + } } try { @@ -1537,11 +1539,13 @@ const RocketChat = { messageId }); }, - searchMessages(roomId, searchText) { + searchMessages(roomId, searchText, count, offset) { // RC 0.60.0 return this.sdk.get('chat.search', { roomId, - searchText + searchText, + count, + offset }); }, toggleFollowMessage(mid, follow) { diff --git a/app/presentation/ImageViewer/ImageViewer.android.tsx b/app/presentation/ImageViewer/ImageViewer.android.tsx index 4c8cf5959..cbb79c7fe 100644 --- a/app/presentation/ImageViewer/ImageViewer.android.tsx +++ b/app/presentation/ImageViewer/ImageViewer.android.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { StyleSheet, View } from 'react-native'; import { PanGestureHandler, PinchGestureHandler, State } from 'react-native-gesture-handler'; -import Animated, { Easing } from 'react-native-reanimated'; +import Animated, { EasingNode } from 'react-native-reanimated'; import { ImageComponent } from './ImageComponent'; import { themes } from '../../constants/colors'; @@ -94,7 +94,7 @@ function runTiming(clock: any, value: any, dest: any, startStopClock: any = true const config = { toValue: new Value(0), duration: 300, - easing: Easing.inOut(Easing.cubic) + easing: EasingNode.inOut(EasingNode.cubic) }; return [ @@ -215,7 +215,9 @@ class Image extends React.PureComponent { return ; } } -const AnimatedImage = Animated.createAnimatedComponent(Image); + +// https://github.com/software-mansion/react-native-reanimated/issues/1717 +const AnimatedImage: any = Animated.createAnimatedComponent(Image); // it was picked from https://github.com/software-mansion/react-native-reanimated/tree/master/Example/imageViewer // and changed to use FastImage animated component diff --git a/app/presentation/RoomItem/Actions.tsx b/app/presentation/RoomItem/Actions.tsx index 92fbf98b5..19c63baaf 100644 --- a/app/presentation/RoomItem/Actions.tsx +++ b/app/presentation/RoomItem/Actions.tsx @@ -1,11 +1,12 @@ import React from 'react'; -import { Animated, Text, View } from 'react-native'; +import { Animated, View } from 'react-native'; import { RectButton } from 'react-native-gesture-handler'; -import I18n, { isRTL } from '../../i18n'; -import styles, { ACTION_WIDTH, LONG_SWIPE } from './styles'; +import { isRTL } from '../../i18n'; import { CustomIcon } from '../../lib/Icons'; import { themes } from '../../constants/colors'; +import { DISPLAY_MODE_CONDENSED } from '../../constants/constantDisplayMode'; +import styles, { ACTION_WIDTH, LONG_SWIPE, ROW_HEIGHT_CONDENSED } from './styles'; interface ILeftActions { theme: string; @@ -13,6 +14,7 @@ interface ILeftActions { isRead: boolean; width: number; onToggleReadPress(): void; + displayMode: string; } interface IRightActions { @@ -22,11 +24,14 @@ interface IRightActions { width: number; toggleFav(): void; onHidePress(): void; + displayMode: string; } const reverse = new Animated.Value(isRTL() ? -1 : 1); +const CONDENSED_ICON_SIZE = 24; +const EXPANDED_ICON_SIZE = 28; -export const LeftActions = React.memo(({ theme, transX, isRead, width, onToggleReadPress }: ILeftActions) => { +export const LeftActions = React.memo(({ theme, transX, isRead, width, onToggleReadPress, displayMode }: ILeftActions) => { const translateX = Animated.multiply( transX.interpolate({ inputRange: [0, ACTION_WIDTH], @@ -34,6 +39,10 @@ export const LeftActions = React.memo(({ theme, transX, isRead, width, onToggleR }), reverse ); + + const isCondensed = displayMode === DISPLAY_MODE_CONDENSED; + const viewHeight = isCondensed ? { height: ROW_HEIGHT_CONDENSED } : null; + return ( - + - <> - - {I18n.t(isRead ? 'Unread' : 'Read')} - + @@ -59,64 +70,64 @@ export const LeftActions = React.memo(({ theme, transX, isRead, width, onToggleR ); }); -export const RightActions = React.memo(({ transX, favorite, width, toggleFav, onHidePress, theme }: IRightActions) => { - const translateXFav = Animated.multiply( - transX.interpolate({ - inputRange: [-width / 2, -ACTION_WIDTH * 2, 0], - outputRange: [width / 2, width - ACTION_WIDTH * 2, width] - }), - reverse - ); - const translateXHide = Animated.multiply( - transX.interpolate({ - inputRange: [-width, -LONG_SWIPE, -ACTION_WIDTH * 2, 0], - outputRange: [0, width - LONG_SWIPE, width - ACTION_WIDTH, width] - }), - reverse - ); - return ( - - - - <> - - - {I18n.t(favorite ? 'Unfavorite' : 'Favorite')} - - - - - - - <> - - {I18n.t('Hide')} - - - - - ); -}); +export const RightActions = React.memo( + ({ transX, favorite, width, toggleFav, onHidePress, theme, displayMode }: IRightActions) => { + const translateXFav = Animated.multiply( + transX.interpolate({ + inputRange: [-width / 2, -ACTION_WIDTH * 2, 0], + outputRange: [width / 2, width - ACTION_WIDTH * 2, width] + }), + reverse + ); + const translateXHide = Animated.multiply( + transX.interpolate({ + inputRange: [-width, -LONG_SWIPE, -ACTION_WIDTH * 2, 0], + outputRange: [0, width - LONG_SWIPE, width - ACTION_WIDTH, width] + }), + reverse + ); + + const isCondensed = displayMode === DISPLAY_MODE_CONDENSED; + const viewHeight = isCondensed ? { height: ROW_HEIGHT_CONDENSED } : null; + + return ( + + + + + + + + + + + + + ); + } +); diff --git a/app/presentation/RoomItem/IconOrAvatar.js b/app/presentation/RoomItem/IconOrAvatar.js new file mode 100644 index 000000000..cedd3b0ff --- /dev/null +++ b/app/presentation/RoomItem/IconOrAvatar.js @@ -0,0 +1,63 @@ +import React from 'react'; +import { View } from 'react-native'; +import PropTypes from 'prop-types'; + +import Avatar from '../../containers/Avatar'; +import { DISPLAY_MODE_CONDENSED, DISPLAY_MODE_EXPANDED } from '../../constants/constantDisplayMode'; +import TypeIcon from './TypeIcon'; +import styles from './styles'; + +const IconOrAvatar = ({ + avatar, + type, + rid, + showAvatar, + prid, + status, + isGroupChat, + teamMain, + showLastMessage, + theme, + displayMode +}) => { + if (showAvatar) { + return ( + + ); + } + + if (displayMode === DISPLAY_MODE_EXPANDED && showLastMessage) { + return ( + + + + ); + } + + return null; +}; + +IconOrAvatar.propTypes = { + avatar: PropTypes.string, + type: PropTypes.string, + theme: PropTypes.string, + rid: PropTypes.string, + showAvatar: PropTypes.bool, + displayMode: PropTypes.string, + prid: PropTypes.string, + status: PropTypes.string, + isGroupChat: PropTypes.bool, + teamMain: PropTypes.bool, + showLastMessage: PropTypes.bool +}; + +export default IconOrAvatar; diff --git a/app/presentation/RoomItem/LastMessage.tsx b/app/presentation/RoomItem/LastMessage.tsx index a6ae19513..1f0a0a486 100644 --- a/app/presentation/RoomItem/LastMessage.tsx +++ b/app/presentation/RoomItem/LastMessage.tsx @@ -80,6 +80,7 @@ const LastMessage = React.memo( numberOfLines={2} preview theme={theme} + testID='room-item-last-message' /> ), arePropsEqual diff --git a/app/presentation/RoomItem/RoomItem.tsx b/app/presentation/RoomItem/RoomItem.tsx index 36f8921fd..fcd529c81 100644 --- a/app/presentation/RoomItem/RoomItem.tsx +++ b/app/presentation/RoomItem/RoomItem.tsx @@ -11,6 +11,7 @@ import UpdatedAt from './UpdatedAt'; import Touchable from './Touchable'; import Tag from './Tag'; import I18n from '../../i18n'; +import { DISPLAY_MODE_EXPANDED } from '../../constants/constantDisplayMode'; interface IRoomItem { rid: string; @@ -57,6 +58,8 @@ interface IRoomItem { hideChannel(): void; autoJoin: boolean; size?: number; + showAvatar: boolean; + displayMode: string; } const RoomItem = ({ @@ -95,7 +98,9 @@ const RoomItem = ({ toggleRead, hideChannel, teamMain, - autoJoin + autoJoin, + showAvatar, + displayMode }: IRoomItem) => ( - - {showLastMessage ? ( + swipeEnabled={swipeEnabled} + displayMode={displayMode}> + + {showLastMessage && displayMode === DISPLAY_MODE_EXPANDED ? ( <> - + {showAvatar ? ( + + ) : null} {autoJoin ? <Tag testID='auto-join-tag' name={I18n.t('Auto-join')} /> : null} <UpdatedAt date={date} theme={theme} hideUnreadStatus={hideUnreadStatus} alert={alert} /> @@ -143,17 +164,29 @@ const RoomItem = ({ </> ) : ( <View style={[styles.titleContainer, styles.flex]}> - <TypeIcon type={type} prid={prid} status={status} isGroupChat={isGroupChat} theme={theme} teamMain={teamMain} /> + <TypeIcon + type={type} + prid={prid} + status={status} + isGroupChat={isGroupChat} + theme={theme} + teamMain={teamMain} + size={22} + style={{ marginRight: 8 }} + /> <Title name={name} theme={theme} hideUnreadStatus={hideUnreadStatus} alert={alert} /> {autoJoin ? <Tag name={I18n.t('Auto-join')} /> : null} - <UnreadBadge - unread={unread} - userMentions={userMentions} - groupMentions={groupMentions} - tunread={tunread} - tunreadUser={tunreadUser} - tunreadGroup={tunreadGroup} - /> + <View style={styles.wrapUpdatedAndBadge}> + <UpdatedAt date={date} theme={theme} hideUnreadStatus={hideUnreadStatus} alert={alert} /> + <UnreadBadge + unread={unread} + userMentions={userMentions} + groupMentions={groupMentions} + tunread={tunread} + tunreadUser={tunreadUser} + tunreadGroup={tunreadGroup} + /> + </View> </View> )} </Wrapper> diff --git a/app/presentation/RoomItem/Touchable.tsx b/app/presentation/RoomItem/Touchable.tsx index 84071bbef..b40436aaa 100644 --- a/app/presentation/RoomItem/Touchable.tsx +++ b/app/presentation/RoomItem/Touchable.tsx @@ -24,6 +24,7 @@ interface ITouchableProps { theme: string; isFocused: boolean; swipeEnabled: boolean; + displayMode: string; } class Touchable extends React.Component<ITouchableProps, any> { @@ -227,7 +228,7 @@ class Touchable extends React.Component<ITouchableProps, any> { }; render() { - const { testID, isRead, width, favorite, children, theme, isFocused, swipeEnabled } = this.props; + const { testID, isRead, width, favorite, children, theme, isFocused, swipeEnabled, displayMode } = this.props; return ( <LongPressGestureHandler onHandlerStateChange={this.onLongPressHandlerStateChange}> @@ -244,6 +245,7 @@ class Touchable extends React.Component<ITouchableProps, any> { width={width} onToggleReadPress={this.onToggleReadPress} theme={theme} + displayMode={displayMode} /> <RightActions transX={this.transXReverse} @@ -252,6 +254,7 @@ class Touchable extends React.Component<ITouchableProps, any> { toggleFav={this.toggleFav} onHidePress={this.onHidePress} theme={theme} + displayMode={displayMode} /> <Animated.View style={{ diff --git a/app/presentation/RoomItem/TypeIcon.tsx b/app/presentation/RoomItem/TypeIcon.tsx index 414c16724..53659fbde 100644 --- a/app/presentation/RoomItem/TypeIcon.tsx +++ b/app/presentation/RoomItem/TypeIcon.tsx @@ -9,10 +9,19 @@ interface ITypeIcon { isGroupChat: boolean; teamMain: boolean; theme?: string; + size?: number; + style?: object; } -const TypeIcon = React.memo(({ type, prid, status, isGroupChat, teamMain }: ITypeIcon) => ( - <RoomTypeIcon type={prid ? 'discussion' : type} isGroupChat={isGroupChat} status={status} teamMain={teamMain} /> +const TypeIcon = React.memo(({ type, prid, status, isGroupChat, teamMain, size, style }: ITypeIcon) => ( + <RoomTypeIcon + type={prid ? 'discussion' : type} + isGroupChat={isGroupChat} + status={status} + teamMain={teamMain} + size={size} + style={style} + /> )); export default TypeIcon; diff --git a/app/presentation/RoomItem/Wrapper.tsx b/app/presentation/RoomItem/Wrapper.tsx index 903a5edca..cb4d6e1bd 100644 --- a/app/presentation/RoomItem/Wrapper.tsx +++ b/app/presentation/RoomItem/Wrapper.tsx @@ -1,9 +1,10 @@ import React from 'react'; import { View } from 'react-native'; -import styles from './styles'; import { themes } from '../../constants/colors'; -import Avatar from '../../containers/Avatar'; +import { DISPLAY_MODE_CONDENSED } from '../../constants/constantDisplayMode'; +import IconOrAvatar from './IconOrAvatar'; +import styles from './styles'; interface IWrapper { accessibilityLabel: string; @@ -13,17 +14,27 @@ interface IWrapper { theme: string; rid: string; children: JSX.Element; + displayMode: string; + prid: string; + showLastMessage: boolean; + status: string; + isGroupChat: boolean; + teamMain: boolean; + showAvatar: boolean; } -const Wrapper = ({ accessibilityLabel, avatar, avatarSize, type, theme, rid, children }: IWrapper) => ( - <View style={styles.container} accessibilityLabel={accessibilityLabel}> - <Avatar text={avatar} size={avatarSize} type={type} style={styles.avatar} rid={rid} /> +const Wrapper = ({ accessibilityLabel, theme, children, displayMode, ...props }: IWrapper) => ( + <View + style={[styles.container, displayMode === DISPLAY_MODE_CONDENSED && styles.containerCondensed]} + accessibilityLabel={accessibilityLabel}> + <IconOrAvatar theme={theme} displayMode={displayMode} {...props} /> <View style={[ styles.centerContainer, { borderColor: themes[theme].separatorColor - } + }, + displayMode === DISPLAY_MODE_CONDENSED && styles.condensedPaddingVertical ]}> {children} </View> diff --git a/app/presentation/RoomItem/index.tsx b/app/presentation/RoomItem/index.tsx index eedc1f4ff..7e88fe6c1 100644 --- a/app/presentation/RoomItem/index.tsx +++ b/app/presentation/RoomItem/index.tsx @@ -2,12 +2,11 @@ import React from 'react'; import { connect } from 'react-redux'; import I18n from '../../i18n'; -import { ROW_HEIGHT } from './styles'; +import { ROW_HEIGHT, ROW_HEIGHT_CONDENSED } from './styles'; import { formatDate } from '../../utils/room'; import RoomItem from './RoomItem'; -export { ROW_HEIGHT }; - +export { ROW_HEIGHT, ROW_HEIGHT_CONDENSED }; interface IRoomItemContainerProps { item: any; showLastMessage: boolean; @@ -32,9 +31,22 @@ interface IRoomItemContainerProps { getIsRead: Function; swipeEnabled: boolean; autoJoin: boolean; + showAvatar: boolean; + displayMode: string; } -const attrs = ['width', 'status', 'connected', 'theme', 'isFocused', 'forceUpdate', 'showLastMessage', 'autoJoin']; +const attrs = [ + 'width', + 'status', + 'connected', + 'theme', + 'isFocused', + 'forceUpdate', + 'showLastMessage', + 'autoJoin', + 'showAvatar', + 'displayMode' +]; class RoomItemContainer extends React.Component<IRoomItemContainerProps, any> { private mounted: boolean; @@ -137,7 +149,9 @@ class RoomItemContainer extends React.Component<IRoomItemContainerProps, any> { username, useRealName, swipeEnabled, - autoJoin + autoJoin, + showAvatar, + displayMode } = this.props; const name = getRoomTitle(item); const testID = `rooms-list-view-item-${name}`; @@ -200,6 +214,8 @@ class RoomItemContainer extends React.Component<IRoomItemContainerProps, any> { swipeEnabled={swipeEnabled} teamMain={item.teamMain} autoJoin={autoJoin} + showAvatar={showAvatar} + displayMode={displayMode} /> ); } diff --git a/app/presentation/RoomItem/styles.ts b/app/presentation/RoomItem/styles.ts index 953217a27..d3ce81413 100644 --- a/app/presentation/RoomItem/styles.ts +++ b/app/presentation/RoomItem/styles.ts @@ -3,6 +3,7 @@ import { PixelRatio, StyleSheet } from 'react-native'; import sharedStyles from '../../views/Styles'; export const ROW_HEIGHT = 75 * PixelRatio.getFontScale(); +export const ROW_HEIGHT_CONDENSED = 60 * PixelRatio.getFontScale(); export const ACTION_WIDTH = 80; export const SMALL_SWIPE = ACTION_WIDTH / 2; export const LONG_SWIPE = ACTION_WIDTH * 3; @@ -17,6 +18,12 @@ export default StyleSheet.create<any>({ paddingLeft: 14, height: ROW_HEIGHT }, + containerCondensed: { + height: ROW_HEIGHT_CONDENSED + }, + condensedPaddingVertical: { + paddingVertical: 20 + }, centerContainer: { flex: 1, paddingVertical: 10, @@ -37,6 +44,9 @@ export default StyleSheet.create<any>({ flexDirection: 'row', alignItems: 'flex-start' }, + wrapUpdatedAndBadge: { + alignItems: 'flex-end' + }, titleContainer: { width: '100%', flexDirection: 'row', @@ -72,11 +82,12 @@ export default StyleSheet.create<any>({ right: 0, height: ROW_HEIGHT }, - actionText: { - fontSize: 15, - justifyContent: 'center', - marginTop: 4, - ...sharedStyles.textSemibold + actionsLeftContainer: { + flexDirection: 'row', + position: 'absolute', + left: 0, + right: 0, + height: ROW_HEIGHT }, actionLeftButtonContainer: { position: 'absolute', @@ -107,5 +118,9 @@ export default StyleSheet.create<any>({ fontSize: 13, paddingHorizontal: 4, ...sharedStyles.textSemibold + }, + typeIcon: { + height: ROW_HEIGHT, + justifyContent: 'center' } }); diff --git a/app/reducers/rooms.js b/app/reducers/rooms.js index 6b6914fe9..660f5f1e7 100644 --- a/app/reducers/rooms.js +++ b/app/reducers/rooms.js @@ -8,7 +8,6 @@ const initialState = { searchText: '', showServerDropdown: false, closeServerDropdown: false, - showSortDropdown: false, showSearchHeader: false }; @@ -56,16 +55,6 @@ export default function login(state = initialState, action) { ...state, showServerDropdown: !state.showServerDropdown }; - case types.ROOMS.CLOSE_SORT_DROPDOWN: - return { - ...state, - closeSortDropdown: !state.closeSortDropdown - }; - case types.ROOMS.TOGGLE_SORT_DROPDOWN: - return { - ...state, - showSortDropdown: !state.showSortDropdown - }; case types.ROOMS.OPEN_SEARCH_HEADER: return { ...state, diff --git a/app/reducers/sortPreferences.js b/app/reducers/sortPreferences.js index 1e7c0b2dd..31b501852 100644 --- a/app/reducers/sortPreferences.js +++ b/app/reducers/sortPreferences.js @@ -1,10 +1,13 @@ import { SORT_PREFERENCES } from '../actions/actionsTypes'; +import { DISPLAY_MODE_EXPANDED } from '../constants/constantDisplayMode'; const initialState = { sortBy: 'activity', groupByType: false, showFavorites: false, - showUnread: false + showUnread: false, + showAvatar: true, + displayMode: DISPLAY_MODE_EXPANDED }; export default (state = initialState, action) => { diff --git a/app/stacks/InsideStack.js b/app/stacks/InsideStack.js index 95e6020db..b3de1b610 100644 --- a/app/stacks/InsideStack.js +++ b/app/stacks/InsideStack.js @@ -38,6 +38,9 @@ import ProfileView from '../views/ProfileView'; import UserPreferencesView from '../views/UserPreferencesView'; import UserNotificationPrefView from '../views/UserNotificationPreferencesView'; +// Display Preferences View +import DisplayPrefsView from '../views/DisplayPrefsView'; + // Settings Stack import SettingsView from '../views/SettingsView'; import SecurityPrivacyView from '../views/SecurityPrivacyView'; @@ -220,6 +223,18 @@ const AdminPanelStackNavigator = () => { ); }; +// DisplayPreferenceNavigator +const DisplayPrefStack = createStackNavigator(); +const DisplayPrefStackNavigator = () => { + const { theme } = React.useContext(ThemeContext); + + return ( + <DisplayPrefStack.Navigator screenOptions={{ ...defaultHeader, ...themedHeader(theme), ...StackAnimation }}> + <DisplayPrefStack.Screen name='DisplayPrefsView' component={DisplayPrefsView} /> + </DisplayPrefStack.Navigator> + ); +}; + // DrawerNavigator const Drawer = createDrawerNavigator(); const DrawerNavigator = () => { @@ -236,6 +251,7 @@ const DrawerNavigator = () => { <Drawer.Screen name='ProfileStackNavigator' component={ProfileStackNavigator} /> <Drawer.Screen name='SettingsStackNavigator' component={SettingsStackNavigator} /> <Drawer.Screen name='AdminPanelStackNavigator' component={AdminPanelStackNavigator} /> + <Drawer.Screen name='DisplayPrefStackNavigator' component={DisplayPrefStackNavigator} /> </Drawer.Navigator> ); }; diff --git a/app/stacks/MasterDetailStack/index.js b/app/stacks/MasterDetailStack/index.js index e1ba84957..71828a6a2 100644 --- a/app/stacks/MasterDetailStack/index.js +++ b/app/stacks/MasterDetailStack/index.js @@ -33,6 +33,7 @@ import TeamChannelsView from '../../views/TeamChannelsView'; import MarkdownTableView from '../../views/MarkdownTableView'; import ReadReceiptsView from '../../views/ReadReceiptView'; import ProfileView from '../../views/ProfileView'; +import DisplayPrefsView from '../../views/DisplayPrefsView'; import SettingsView from '../../views/SettingsView'; import LanguageView from '../../views/LanguageView'; import ThemeView from '../../views/ThemeView'; @@ -204,6 +205,7 @@ const ModalStackNavigator = React.memo(({ navigation }) => { component={ProfileView} options={props => ProfileView.navigationOptions({ ...props, isMasterDetail: true })} /> + <ModalStack.Screen name='DisplayPrefsView' component={DisplayPrefsView} /> <ModalStack.Screen name='AdminPanelView' component={AdminPanelView} diff --git a/app/utils/log/events.js b/app/utils/log/events.js index 4a3ec38df..4d2564b0c 100644 --- a/app/utils/log/events.js +++ b/app/utils/log/events.js @@ -66,15 +66,18 @@ export default { RL_TOGGLE_READ_F: 'rl_toggle_read_f', RL_HIDE_CHANNEL: 'rl_hide_channel', RL_HIDE_CHANNEL_F: 'rl_hide_channel_f', - RL_TOGGLE_SORT_DROPDOWN: 'rl_toggle_sort_dropdown', - RL_SORT_CHANNELS_BY_NAME: 'rl_sort_channels_by_name', - RL_SORT_CHANNELS_BY_ACTIVITY: 'rl_sort_channels_by_activity', - RL_SORT_CHANNELS_F: 'rl_sort_channels_f', - RL_GROUP_CHANNELS_BY_TYPE: 'rl_group_channels_by_type', - RL_GROUP_CHANNELS_BY_FAVORITE: 'rl_group_channels_by_favorite', - RL_GROUP_CHANNELS_BY_UNREAD: 'rl_group_channels_by_unread', RL_CREATE_NEW_WORKSPACE: 'rl_create_new_workspace', + // DISPLAY PREFERENCES VIEW + DP_SORT_CHANNELS_BY_NAME: 'dp_sort_channels_by_name', + DP_SORT_CHANNELS_BY_ACTIVITY: 'dp_sort_channels_by_activity', + DP_GROUP_CHANNELS_BY_TYPE: 'dp_group_channels_by_type', + DP_GROUP_CHANNELS_BY_FAVORITE: 'dp_group_channels_by_favorite', + DP_GROUP_CHANNELS_BY_UNREAD: 'dp_group_channels_by_unread', + DP_TOGGLE_AVATAR: 'dp_toggle_avatar', + DP_DISPLAY_EXPANDED: 'dp_display_expanded', + DP_DISPLAY_CONDENSED: 'dp_display_condensed', + // QUEUE LIST VIEW QL_GO_ROOM: 'ql_go_room', diff --git a/app/views/AuthLoadingView.js b/app/views/AuthLoadingView.tsx similarity index 81% rename from app/views/AuthLoadingView.js rename to app/views/AuthLoadingView.tsx index e97c10d94..ef6e7b943 100644 --- a/app/views/AuthLoadingView.js +++ b/app/views/AuthLoadingView.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { ActivityIndicator, StyleSheet, Text, View } from 'react-native'; -import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import I18n from '../i18n'; @@ -23,25 +22,25 @@ const styles = StyleSheet.create({ } }); -const AuthLoadingView = React.memo(({ theme, text }) => ( +interface IAuthLoadingView { + theme: string; + text: string; +} + +const AuthLoadingView = React.memo(({ theme, text }: IAuthLoadingView) => ( <View style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]}> <StatusBar /> - {text && ( + {text ? ( <> <ActivityIndicator color={themes[theme].auxiliaryText} size='large' /> <Text style={[styles.text, { color: themes[theme].bodyText }]}>{`${text}\n${I18n.t('Please_wait')}`}</Text> </> - )} + ) : null} </View> )); -const mapStateToProps = state => ({ +const mapStateToProps = (state: any) => ({ text: state.app.text }); -AuthLoadingView.propTypes = { - theme: PropTypes.string, - text: PropTypes.string -}; - export default connect(mapStateToProps)(withTheme(AuthLoadingView)); diff --git a/app/views/CreateChannelView.js b/app/views/CreateChannelView.js index af17961fb..0aa3c7035 100644 --- a/app/views/CreateChannelView.js +++ b/app/views/CreateChannelView.js @@ -21,6 +21,7 @@ import { Review } from '../utils/review'; import { getUserSelector } from '../selectors/login'; import { events, logEvent } from '../utils/log'; import SafeAreaView from '../containers/SafeAreaView'; +import RocketChat from '../lib/rocketchat'; import sharedStyles from './Styles'; const styles = StyleSheet.create({ @@ -79,10 +80,13 @@ class CreateChannelView extends React.Component { users: PropTypes.array.isRequired, user: PropTypes.shape({ id: PropTypes.string, - token: PropTypes.string + token: PropTypes.string, + roles: PropTypes.array }), theme: PropTypes.string, - teamId: PropTypes.string + teamId: PropTypes.string, + createPublicChannelPermission: PropTypes.array, + createPrivateChannelPermission: PropTypes.array }; constructor(props) { @@ -96,14 +100,20 @@ class CreateChannelView extends React.Component { readOnly: false, encrypted: false, broadcast: false, - isTeam + isTeam, + permissions: [] }; this.setHeader(); } + componentDidMount() { + this.handleHasPermission(); + } + shouldComponentUpdate(nextProps, nextState) { - const { channelName, type, readOnly, broadcast, encrypted } = this.state; - const { users, isFetching, encryptionEnabled, theme } = this.props; + const { channelName, type, readOnly, broadcast, encrypted, permissions } = this.state; + const { users, isFetching, encryptionEnabled, theme, createPublicChannelPermission, createPrivateChannelPermission } = + this.props; if (nextProps.theme !== theme) { return true; } @@ -122,18 +132,37 @@ class CreateChannelView extends React.Component { if (nextState.broadcast !== broadcast) { return true; } + if (nextState.permissions !== permissions) { + return true; + } if (nextProps.isFetching !== isFetching) { return true; } if (nextProps.encryptionEnabled !== encryptionEnabled) { return true; } + if (!dequal(nextProps.createPublicChannelPermission, createPublicChannelPermission)) { + return true; + } + if (!dequal(nextProps.createPrivateChannelPermission, createPrivateChannelPermission)) { + return true; + } if (!dequal(nextProps.users, users)) { return true; } return false; } + componentDidUpdate(prevProps) { + const { createPublicChannelPermission, createPrivateChannelPermission } = this.props; + if ( + !dequal(createPublicChannelPermission, prevProps.createPublicChannelPermission) || + !dequal(createPrivateChannelPermission, prevProps.createPrivateChannelPermission) + ) { + this.handleHasPermission(); + } + } + setHeader = () => { const { navigation } = this.props; const { isTeam } = this.state; @@ -208,12 +237,21 @@ class CreateChannelView extends React.Component { ); }; + handleHasPermission = async () => { + const { createPublicChannelPermission, createPrivateChannelPermission } = this.props; + const permissions = [createPublicChannelPermission, createPrivateChannelPermission]; + const permissionsToCreate = await RocketChat.hasPermission(permissions); + this.setState({ permissions: permissionsToCreate }); + }; + renderType() { - const { type, isTeam } = this.state; + const { type, isTeam, permissions } = this.state; + const isDisabled = permissions.filter(r => r === true).length <= 1; return this.renderSwitch({ id: 'type', - value: type, + value: permissions[1] ? type : false, + disabled: isDisabled, label: isTeam ? 'Private_Team' : 'Private_Channel', onValueChange: value => { logEvent(events.CR_TOGGLE_TYPE); @@ -373,7 +411,9 @@ const mapStateToProps = state => ({ isFetching: state.createChannel.isFetching, encryptionEnabled: state.encryption.enabled, users: state.selectedUsers.users, - user: getUserSelector(state) + user: getUserSelector(state), + createPublicChannelPermission: state.permissions['create-c'], + createPrivateChannelPermission: state.permissions['create-p'] }); const mapDispatchToProps = dispatch => ({ diff --git a/app/views/DisplayPrefsView.js b/app/views/DisplayPrefsView.js new file mode 100644 index 000000000..d1e29d139 --- /dev/null +++ b/app/views/DisplayPrefsView.js @@ -0,0 +1,192 @@ +import React, { useEffect } from 'react'; +import PropTypes from 'prop-types'; +import { Switch } from 'react-native'; +import { RadioButton } from 'react-native-ui-lib'; +import { useDispatch, useSelector } from 'react-redux'; + +import { setPreference } from '../actions/sortPreferences'; +import RocketChat from '../lib/rocketchat'; +import StatusBar from '../containers/StatusBar'; +import I18n from '../i18n'; +import * as List from '../containers/List'; +import { useTheme } from '../theme'; +import { themes } from '../constants/colors'; +import * as HeaderButton from '../containers/HeaderButton'; +import SafeAreaView from '../containers/SafeAreaView'; +import { ICON_SIZE } from '../containers/List/constants'; +import log, { events, logEvent } from '../utils/log'; +import { DISPLAY_MODE_CONDENSED, DISPLAY_MODE_EXPANDED } from '../constants/constantDisplayMode'; + +const DisplayPrefsView = props => { + const { theme } = useTheme(); + + const { sortBy, groupByType, showFavorites, showUnread, showAvatar, displayMode } = useSelector(state => state.sortPreferences); + const dispatch = useDispatch(); + + useEffect(() => { + const { navigation, isMasterDetail } = props; + navigation.setOptions({ + title: I18n.t('Display'), + headerLeft: () => + isMasterDetail ? ( + <HeaderButton.CloseModal navigation={navigation} testID='display-view-close' /> + ) : ( + <HeaderButton.Drawer navigation={navigation} testID='display-view-drawer' /> + ) + }); + }, []); + + const setSortPreference = async param => { + try { + dispatch(setPreference(param)); + await RocketChat.saveSortPreference(param); + } catch (e) { + log(e); + } + }; + + const sortByName = async () => { + logEvent(events.DP_SORT_CHANNELS_BY_NAME); + await setSortPreference({ sortBy: 'alphabetical' }); + }; + + const sortByActivity = async () => { + logEvent(events.DP_SORT_CHANNELS_BY_ACTIVITY); + await setSortPreference({ sortBy: 'activity' }); + }; + + const toggleGroupByType = async () => { + logEvent(events.DP_GROUP_CHANNELS_BY_TYPE); + await setSortPreference({ groupByType: !groupByType }); + }; + + const toggleGroupByFavorites = async () => { + logEvent(events.DP_GROUP_CHANNELS_BY_FAVORITE); + await setSortPreference({ showFavorites: !showFavorites }); + }; + + const toggleUnread = async () => { + logEvent(events.DP_GROUP_CHANNELS_BY_UNREAD); + await setSortPreference({ showUnread: !showUnread }); + }; + + const toggleAvatar = async () => { + logEvent(events.DP_TOGGLE_AVATAR); + await setSortPreference({ showAvatar: !showAvatar }); + }; + + const displayExpanded = async () => { + logEvent(events.DP_DISPLAY_EXPANDED); + await setSortPreference({ displayMode: DISPLAY_MODE_EXPANDED }); + }; + + const displayCondensed = async () => { + logEvent(events.DP_DISPLAY_CONDENSED); + await setSortPreference({ displayMode: DISPLAY_MODE_CONDENSED }); + }; + + const renderCheckBox = value => ( + <List.Icon name={value ? 'checkbox-checked' : 'checkbox-unchecked'} color={value ? themes[theme].actionTintColor : null} /> + ); + + const renderAvatarSwitch = value => ( + <Switch value={value} onValueChange={() => toggleAvatar()} testID='display-pref-view-avatar-switch' /> + ); + + const renderRadio = value => ( + <RadioButton + selected={!!value} + color={value ? themes[theme].actionTintColor : themes[theme].auxiliaryText} + size={ICON_SIZE} + /> + ); + + return ( + <SafeAreaView> + <StatusBar /> + <List.Container testID='display-view-list'> + <List.Section title='Display'> + <List.Separator /> + <List.Item + left={() => <List.Icon name='view-extended' />} + title='Expanded' + testID='display-pref-view-expanded' + right={() => renderRadio(displayMode === DISPLAY_MODE_EXPANDED)} + onPress={displayExpanded} + /> + <List.Separator /> + <List.Item + left={() => <List.Icon name='view-medium' />} + title='Condensed' + testID='display-pref-view-condensed' + right={() => renderRadio(displayMode === DISPLAY_MODE_CONDENSED)} + onPress={displayCondensed} + /> + <List.Separator /> + <List.Item + left={() => <List.Icon name='avatar' />} + title='Avatars' + testID='display-pref-view-avatars' + right={() => renderAvatarSwitch(showAvatar)} + /> + <List.Separator /> + </List.Section> + + <List.Section title='Sort_by'> + <List.Separator /> + <List.Item + title='Activity' + testID='display-pref-view-activity' + left={() => <List.Icon name='clock' />} + onPress={sortByActivity} + right={() => renderRadio(sortBy === 'activity')} + /> + <List.Separator /> + <List.Item + title='Name' + testID='display-pref-view-name' + left={() => <List.Icon name='sort-az' />} + onPress={sortByName} + right={() => renderRadio(sortBy === 'alphabetical')} + /> + <List.Separator /> + </List.Section> + + <List.Section title='Group_by'> + <List.Separator /> + <List.Item + title='Unread_on_top' + testID='display-pref-view-unread' + left={() => <List.Icon name='flag' />} + onPress={toggleUnread} + right={() => renderCheckBox(showUnread)} + /> + <List.Separator /> + <List.Item + title='Favorites' + testID='display-pref-view-favorites' + left={() => <List.Icon name='star' />} + onPress={toggleGroupByFavorites} + right={() => renderCheckBox(showFavorites)} + /> + <List.Separator /> + <List.Item + title='Types' + testID='display-pref-view-types' + left={() => <List.Icon name='group-by-type' />} + onPress={toggleGroupByType} + right={() => renderCheckBox(groupByType)} + /> + <List.Separator /> + </List.Section> + </List.Container> + </SafeAreaView> + ); +}; + +DisplayPrefsView.propTypes = { + navigation: PropTypes.object, + isMasterDetail: PropTypes.bool +}; + +export default DisplayPrefsView; diff --git a/app/views/LegalView.js b/app/views/LegalView.tsx similarity index 77% rename from app/views/LegalView.js rename to app/views/LegalView.tsx index b9db90572..02ac172d9 100644 --- a/app/views/LegalView.js +++ b/app/views/LegalView.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import PropTypes from 'prop-types'; import { connect } from 'react-redux'; +import { StackNavigationOptions } from '@react-navigation/stack'; import I18n from '../i18n'; import StatusBar from '../containers/StatusBar'; @@ -9,13 +9,17 @@ import { withTheme } from '../theme'; import SafeAreaView from '../containers/SafeAreaView'; import * as List from '../containers/List'; -class LegalView extends React.Component { - static propTypes = { - server: PropTypes.string, - theme: PropTypes.string +interface ILegalView { + server: string; + theme: string; +} + +class LegalView extends React.Component<ILegalView, any> { + static navigationOptions: StackNavigationOptions = { + title: I18n.t('Legal') }; - onPressItem = ({ route }) => { + onPressItem = ({ route }: { route: string }) => { const { server, theme } = this.props; if (!server) { return; @@ -51,12 +55,8 @@ class LegalView extends React.Component { } } -const mapStateToProps = state => ({ +const mapStateToProps = (state: any) => ({ server: state.server.server }); -LegalView.navigationOptions = { - title: I18n.t('Legal') -}; - export default connect(mapStateToProps)(withTheme(LegalView)); diff --git a/app/views/NewMessageView.js b/app/views/NewMessageView.js index 4b210e7cb..020588ffa 100644 --- a/app/views/NewMessageView.js +++ b/app/views/NewMessageView.js @@ -3,8 +3,9 @@ import PropTypes from 'prop-types'; import { FlatList, StyleSheet, Text, View } from 'react-native'; import { connect } from 'react-redux'; import { Q } from '@nozbe/watermelondb'; - +import { dequal } from 'dequal'; import * as List from '../containers/List'; + import Touch from '../utils/touch'; import database from '../lib/database'; import RocketChat from '../lib/rocketchat'; @@ -57,13 +58,19 @@ class NewMessageView extends React.Component { baseUrl: PropTypes.string, user: PropTypes.shape({ id: PropTypes.string, - token: PropTypes.string + token: PropTypes.string, + roles: PropTypes.array }), create: PropTypes.func, maxUsers: PropTypes.number, theme: PropTypes.string, isMasterDetail: PropTypes.bool, - serverVersion: PropTypes.string + serverVersion: PropTypes.string, + createTeamPermission: PropTypes.array, + createDirectMessagePermission: PropTypes.array, + createPublicChannelPermission: PropTypes.array, + createPrivateChannelPermission: PropTypes.array, + createDiscussionPermission: PropTypes.array }; constructor(props) { @@ -71,7 +78,8 @@ class NewMessageView extends React.Component { this.init(); this.state = { search: [], - chats: [] + chats: [], + permissions: [] }; } @@ -90,6 +98,30 @@ class NewMessageView extends React.Component { } }; + componentDidMount() { + this.handleHasPermission(); + } + + componentDidUpdate(prevProps) { + const { + createTeamPermission, + createPublicChannelPermission, + createPrivateChannelPermission, + createDirectMessagePermission, + createDiscussionPermission + } = this.props; + + if ( + !dequal(createTeamPermission, prevProps.createTeamPermission) || + !dequal(createPublicChannelPermission, prevProps.createPublicChannelPermission) || + !dequal(createPrivateChannelPermission, prevProps.createPrivateChannelPermission) || + !dequal(createDirectMessagePermission, prevProps.createDirectMessagePermission) || + !dequal(createDiscussionPermission, prevProps.createDiscussionPermission) + ) { + this.handleHasPermission(); + } + } + onSearchChangeText(text) { this.search(text); } @@ -161,20 +193,43 @@ class NewMessageView extends React.Component { Navigation.navigate('CreateDiscussionView'); }; + handleHasPermission = async () => { + const { + createTeamPermission, + createDirectMessagePermission, + createPublicChannelPermission, + createPrivateChannelPermission, + createDiscussionPermission + } = this.props; + const permissions = [ + createPublicChannelPermission, + createPrivateChannelPermission, + createTeamPermission, + createDirectMessagePermission, + createDiscussionPermission + ]; + const permissionsToCreate = await RocketChat.hasPermission(permissions); + this.setState({ permissions: permissionsToCreate }); + }; + renderHeader = () => { const { maxUsers, theme, serverVersion } = this.props; + const { permissions } = this.state; + return ( <View style={{ backgroundColor: themes[theme].auxiliaryBackground }}> <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='new-message-view-search' /> <View style={styles.buttonContainer}> - {this.renderButton({ - onPress: this.createChannel, - title: I18n.t('Create_Channel'), - icon: 'channel-public', - testID: 'new-message-view-create-channel', - first: true - })} - {compareServerVersion(serverVersion, '3.13.0', methods.greaterThanOrEqualTo) + {permissions[0] || permissions[1] + ? this.renderButton({ + onPress: this.createChannel, + title: I18n.t('Create_Channel'), + icon: 'channel-public', + testID: 'new-message-view-create-channel', + first: true + }) + : null} + {compareServerVersion(serverVersion, '3.13.0', methods.greaterThanOrEqualTo) && permissions[2] ? this.renderButton({ onPress: this.createTeam, title: I18n.t('Create_Team'), @@ -182,7 +237,7 @@ class NewMessageView extends React.Component { testID: 'new-message-view-create-team' }) : null} - {maxUsers > 2 + {maxUsers > 2 && permissions[3] ? this.renderButton({ onPress: this.createGroupChat, title: I18n.t('Create_Direct_Messages'), @@ -190,12 +245,14 @@ class NewMessageView extends React.Component { testID: 'new-message-view-create-direct-message' }) : null} - {this.renderButton({ - onPress: this.createDiscussion, - title: I18n.t('Create_Discussion'), - icon: 'discussions', - testID: 'new-message-view-create-discussion' - })} + {permissions[4] + ? this.renderButton({ + onPress: this.createDiscussion, + title: I18n.t('Create_Discussion'), + icon: 'discussions', + testID: 'new-message-view-create-discussion' + }) + : null} </View> </View> ); @@ -261,7 +318,12 @@ const mapStateToProps = state => ({ isMasterDetail: state.app.isMasterDetail, baseUrl: state.server.server, maxUsers: state.settings.DirectMesssage_maxUsers || 1, - user: getUserSelector(state) + user: getUserSelector(state), + createTeamPermission: state.permissions['create-team'], + createDirectMessagePermission: state.permissions['create-d'], + createPublicChannelPermission: state.permissions['create-c'], + createPrivateChannelPermission: state.permissions['create-p'], + createDiscussionPermission: state.permissions['start-discussion'] }); const mapDispatchToProps = dispatch => ({ diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js index 308946982..9a93d1cae 100644 --- a/app/views/RoomMembersView/index.js +++ b/app/views/RoomMembersView/index.js @@ -446,7 +446,8 @@ class RoomMembersView extends React.Component { type: allUsers ? 'all' : 'online', filter: filtering, skip: members.length, - limit: PAGE_SIZE + limit: PAGE_SIZE, + allUsers }); this.setState({ members: members.concat(membersResult || []), diff --git a/app/views/RoomView/RightButtons.js b/app/views/RoomView/RightButtons.js index 70e18bd68..9bbf717fd 100644 --- a/app/views/RoomView/RightButtons.js +++ b/app/views/RoomView/RightButtons.js @@ -20,7 +20,8 @@ class RightButtonsContainer extends Component { navigation: PropTypes.object, isMasterDetail: PropTypes.bool, toggleFollowThread: PropTypes.func, - joined: PropTypes.bool + joined: PropTypes.bool, + encrypted: PropTypes.bool }; constructor(props) { @@ -137,11 +138,14 @@ class RightButtonsContainer extends Component { goSearchView = () => { logEvent(events.ROOM_GO_SEARCH); - const { rid, t, navigation, isMasterDetail } = this.props; + const { rid, t, navigation, isMasterDetail, encrypted } = this.props; if (isMasterDetail) { - navigation.navigate('ModalStackNavigator', { screen: 'SearchMessagesView', params: { rid, showCloseModal: true } }); + navigation.navigate('ModalStackNavigator', { + screen: 'SearchMessagesView', + params: { rid, showCloseModal: true, encrypted } + }); } else { - navigation.navigate('SearchMessagesView', { rid, t }); + navigation.navigate('SearchMessagesView', { rid, t, encrypted }); } }; diff --git a/app/views/RoomView/index.js b/app/views/RoomView/index.js index 3aa389467..a94af5f4e 100644 --- a/app/views/RoomView/index.js +++ b/app/views/RoomView/index.js @@ -362,6 +362,7 @@ class RoomView extends React.Component { const t = room?.t; const teamMain = room?.teamMain; const teamId = room?.teamId; + const encrypted = room?.encrypted; const { id: userId, token } = user; const avatar = room?.name; const visitor = room?.visitor; @@ -424,6 +425,7 @@ class RoomView extends React.Component { teamMain={teamMain} joined={joined} t={t} + encrypted={encrypted} navigation={navigation} toggleFollowThread={this.toggleFollowThread} /> diff --git a/app/views/RoomsListView/Header/index.js b/app/views/RoomsListView/Header/index.js index 4557b66dc..b97f65e15 100644 --- a/app/views/RoomsListView/Header/index.js +++ b/app/views/RoomsListView/Header/index.js @@ -2,12 +2,7 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; -import { - closeServerDropdown, - closeSortDropdown, - setSearch as setSearchAction, - toggleServerDropdown -} from '../../../actions/rooms'; +import { toggleServerDropdown, closeServerDropdown, setSearch as setSearchAction } from '../../../actions/rooms'; import { withTheme } from '../../../theme'; import EventEmitter from '../../../utils/events'; import { KEY_COMMAND, handleCommandOpenServerDropdown } from '../../../commands'; @@ -18,7 +13,6 @@ import Header from './Header'; class RoomsListHeaderView extends PureComponent { static propTypes = { showServerDropdown: PropTypes.bool, - showSortDropdown: PropTypes.bool, showSearchHeader: PropTypes.bool, serverName: PropTypes.string, connecting: PropTypes.bool, @@ -28,7 +22,6 @@ class RoomsListHeaderView extends PureComponent { server: PropTypes.string, open: PropTypes.func, close: PropTypes.func, - closeSort: PropTypes.func, setSearch: PropTypes.func }; @@ -58,14 +51,9 @@ class RoomsListHeaderView extends PureComponent { onPress = () => { logEvent(events.RL_TOGGLE_SERVER_DROPDOWN); - const { showServerDropdown, showSortDropdown, close, open, closeSort } = this.props; + const { showServerDropdown, close, open } = this.props; if (showServerDropdown) { close(); - } else if (showSortDropdown) { - closeSort(); - setTimeout(() => { - open(); - }, 300); } else { open(); } @@ -93,7 +81,6 @@ class RoomsListHeaderView extends PureComponent { const mapStateToProps = state => ({ showServerDropdown: state.rooms.showServerDropdown, - showSortDropdown: state.rooms.showSortDropdown, showSearchHeader: state.rooms.showSearchHeader, connecting: state.meteor.connecting || state.server.loading, connected: state.meteor.connected, @@ -105,7 +92,6 @@ const mapStateToProps = state => ({ const mapDispatchtoProps = dispatch => ({ close: () => dispatch(closeServerDropdown()), open: () => dispatch(toggleServerDropdown()), - closeSort: () => dispatch(closeSortDropdown()), setSearch: searchText => dispatch(setSearchAction(searchText)) }); diff --git a/app/views/RoomsListView/ListHeader/index.js b/app/views/RoomsListView/ListHeader/index.js index d7d4d2304..b1aced177 100644 --- a/app/views/RoomsListView/ListHeader/index.js +++ b/app/views/RoomsListView/ListHeader/index.js @@ -2,16 +2,13 @@ import React from 'react'; import PropTypes from 'prop-types'; import { withTheme } from '../../../theme'; -import I18n from '../../../i18n'; import * as List from '../../../containers/List'; import { E2E_BANNER_TYPE } from '../../../lib/encryption/constants'; import { themes } from '../../../constants/colors'; import OmnichannelStatus from '../../../ee/omnichannel/containers/OmnichannelStatus'; const ListHeader = React.memo( - ({ searching, sortBy, toggleSort, goEncryption, goQueue, queueSize, inquiryEnabled, encryptionBanner, user, theme }) => { - const sortTitle = I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') }); - + ({ searching, goEncryption, goQueue, queueSize, inquiryEnabled, encryptionBanner, user, theme }) => { if (searching) { return null; } @@ -36,13 +33,6 @@ const ListHeader = React.memo( <List.Separator /> </> ) : null} - <List.Item - title={sortTitle} - left={() => <List.Icon name='sort' />} - color={themes[theme].auxiliaryText} - onPress={toggleSort} - translateTitle={false} - /> <List.Separator /> <OmnichannelStatus searching={searching} @@ -58,8 +48,6 @@ const ListHeader = React.memo( ListHeader.propTypes = { searching: PropTypes.bool, - sortBy: PropTypes.string, - toggleSort: PropTypes.func, goEncryption: PropTypes.func, goQueue: PropTypes.func, queueSize: PropTypes.number, diff --git a/app/views/RoomsListView/SortDropdown/index.js b/app/views/RoomsListView/SortDropdown/index.js deleted file mode 100644 index 6a945ff67..000000000 --- a/app/views/RoomsListView/SortDropdown/index.js +++ /dev/null @@ -1,207 +0,0 @@ -import React, { PureComponent } from 'react'; -import { Animated, Easing, TouchableWithoutFeedback } from 'react-native'; -import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; -import { withSafeAreaInsets } from 'react-native-safe-area-context'; - -import styles from '../styles'; -import * as List from '../../../containers/List'; -import RocketChat from '../../../lib/rocketchat'; -import { setPreference } from '../../../actions/sortPreferences'; -import log, { events, logEvent } from '../../../utils/log'; -import I18n from '../../../i18n'; -import { withTheme } from '../../../theme'; -import { themes } from '../../../constants/colors'; -import { headerHeight } from '../../../containers/Header'; - -const ANIMATION_DURATION = 200; - -class Sort extends PureComponent { - static propTypes = { - closeSortDropdown: PropTypes.bool, - close: PropTypes.func, - sortBy: PropTypes.string, - groupByType: PropTypes.bool, - showFavorites: PropTypes.bool, - showUnread: PropTypes.bool, - isMasterDetail: PropTypes.bool, - theme: PropTypes.string, - insets: PropTypes.object, - setSortPreference: PropTypes.func - }; - - constructor(props) { - super(props); - this.animatedValue = new Animated.Value(0); - } - - componentDidMount() { - Animated.timing(this.animatedValue, { - toValue: 1, - duration: ANIMATION_DURATION, - easing: Easing.inOut(Easing.quad), - useNativeDriver: true - }).start(); - } - - componentDidUpdate(prevProps) { - const { closeSortDropdown } = this.props; - if (prevProps.closeSortDropdown !== closeSortDropdown) { - this.close(); - } - } - - setSortPreference = param => { - const { setSortPreference } = this.props; - - try { - setSortPreference(param); - RocketChat.saveSortPreference(param); - } catch (e) { - logEvent(events.RL_SORT_CHANNELS_F); - log(e); - } - }; - - sortByName = () => { - logEvent(events.RL_SORT_CHANNELS_BY_NAME); - this.setSortPreference({ sortBy: 'alphabetical' }); - this.close(); - }; - - sortByActivity = () => { - logEvent(events.RL_SORT_CHANNELS_BY_ACTIVITY); - this.setSortPreference({ sortBy: 'activity' }); - this.close(); - }; - - toggleGroupByType = () => { - logEvent(events.RL_GROUP_CHANNELS_BY_TYPE); - const { groupByType } = this.props; - this.setSortPreference({ groupByType: !groupByType }); - }; - - toggleGroupByFavorites = () => { - logEvent(events.RL_GROUP_CHANNELS_BY_FAVORITE); - const { showFavorites } = this.props; - this.setSortPreference({ showFavorites: !showFavorites }); - }; - - toggleUnread = () => { - logEvent(events.RL_GROUP_CHANNELS_BY_UNREAD); - const { showUnread } = this.props; - this.setSortPreference({ showUnread: !showUnread }); - }; - - close = () => { - const { close } = this.props; - Animated.timing(this.animatedValue, { - toValue: 0, - duration: ANIMATION_DURATION, - easing: Easing.inOut(Easing.quad), - useNativeDriver: true - }).start(() => close()); - }; - - renderCheck = () => { - const { theme } = this.props; - return <List.Icon name='check' color={themes[theme].tintColor} />; - }; - - render() { - const { isMasterDetail, insets } = this.props; - const statusBarHeight = insets?.top ?? 0; - const heightDestination = isMasterDetail ? headerHeight + statusBarHeight : 0; - const translateY = this.animatedValue.interpolate({ - inputRange: [0, 1], - outputRange: [-326, heightDestination] - }); - const { sortBy, groupByType, showFavorites, showUnread, theme } = this.props; - const backdropOpacity = this.animatedValue.interpolate({ - inputRange: [0, 1], - outputRange: [0, themes[theme].backdropOpacity] - }); - - return ( - <> - <TouchableWithoutFeedback onPress={this.close}> - <Animated.View - style={[ - styles.backdrop, - { - backgroundColor: themes[theme].backdropColor, - opacity: backdropOpacity, - top: heightDestination - } - ]} - /> - </TouchableWithoutFeedback> - <Animated.View - style={[ - styles.dropdownContainer, - { - transform: [{ translateY }], - backgroundColor: themes[theme].backgroundColor, - borderColor: themes[theme].separatorColor - } - ]}> - <List.Item - title={I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') })} - left={() => <List.Icon name='sort' />} - color={themes[theme].auxiliaryText} - onPress={this.close} - translateTitle={false} - /> - <List.Separator /> - <List.Item - title='Alphabetical' - left={() => <List.Icon name='sort-az' />} - color={themes[theme].auxiliaryText} - onPress={this.sortByName} - right={() => (sortBy === 'alphabetical' ? this.renderCheck() : null)} - /> - <List.Item - title='Activity' - left={() => <List.Icon name='clock' />} - color={themes[theme].auxiliaryText} - onPress={this.sortByActivity} - right={() => (sortBy === 'activity' ? this.renderCheck() : null)} - /> - <List.Separator /> - <List.Item - title='Group_by_type' - left={() => <List.Icon name='group-by-type' />} - color={themes[theme].auxiliaryText} - onPress={this.toggleGroupByType} - right={() => (groupByType ? this.renderCheck() : null)} - /> - <List.Item - title='Group_by_favorites' - left={() => <List.Icon name='star' />} - color={themes[theme].auxiliaryText} - onPress={this.toggleGroupByFavorites} - right={() => (showFavorites ? this.renderCheck() : null)} - /> - <List.Item - title='Unread_on_top' - left={() => <List.Icon name='unread-on-top-disabled' />} - color={themes[theme].auxiliaryText} - onPress={this.toggleUnread} - right={() => (showUnread ? this.renderCheck() : null)} - /> - </Animated.View> - </> - ); - } -} - -const mapStateToProps = state => ({ - closeSortDropdown: state.rooms.closeSortDropdown, - isMasterDetail: state.app.isMasterDetail -}); - -const mapDispatchToProps = dispatch => ({ - setSortPreference: preference => dispatch(setPreference(preference)) -}); - -export default connect(mapStateToProps, mapDispatchToProps)(withSafeAreaInsets(withTheme(Sort))); diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index 5f4d12553..41da6dd80 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -9,15 +9,14 @@ import { withSafeAreaInsets } from 'react-native-safe-area-context'; import database from '../../lib/database'; import RocketChat from '../../lib/rocketchat'; -import RoomItem, { ROW_HEIGHT } from '../../presentation/RoomItem'; -import log, { events, logEvent } from '../../utils/log'; +import RoomItem, { ROW_HEIGHT, ROW_HEIGHT_CONDENSED } from '../../presentation/RoomItem'; +import log, { logEvent, events } from '../../utils/log'; import I18n from '../../i18n'; import { closeSearchHeader as closeSearchHeaderAction, closeServerDropdown as closeServerDropdownAction, openSearchHeader as openSearchHeaderAction, - roomsRequest as roomsRequestAction, - toggleSortDropdown as toggleSortDropdownAction + roomsRequest as roomsRequestAction } from '../../actions/rooms'; import { appStart as appStartAction, ROOT_OUTSIDE } from '../../actions/app'; import debounce from '../../utils/debounce'; @@ -50,11 +49,11 @@ import { showConfirmationAlert, showErrorAlert } from '../../utils/info'; import { E2E_BANNER_TYPE } from '../../lib/encryption/constants'; import { getInquiryQueueSelector } from '../../ee/omnichannel/selectors/inquiry'; import { changeLivechatStatus, isOmnichannelStatusAvailable } from '../../ee/omnichannel/lib'; +import { DISPLAY_MODE_CONDENSED } from '../../constants/constantDisplayMode'; +import styles from './styles'; +import ServerDropdown from './ServerDropdown'; import ListHeader from './ListHeader'; import RoomsListHeaderView from './Header'; -import ServerDropdown from './ServerDropdown'; -import SortDropdown from './SortDropdown'; -import styles from './styles'; const INITIAL_NUM_TO_RENDER = isTablet ? 20 : 12; const CHATS_HEADER = 'Chats'; @@ -77,11 +76,6 @@ const shouldUpdateProps = [ 'searchText', 'loadingServer', 'showServerDropdown', - 'showSortDropdown', - 'sortBy', - 'groupByType', - 'showFavorites', - 'showUnread', 'useRealName', 'StoreLastMessage', 'theme', @@ -89,11 +83,21 @@ const shouldUpdateProps = [ 'refreshing', 'queueSize', 'inquiryEnabled', - 'encryptionBanner' + 'encryptionBanner', + 'createTeamPermission', + 'createDirectMessagePermission', + 'createPublicChannelPermission', + 'createPrivateChannelPermission', + 'createDiscussionPermission' ]; -const getItemLayout = (data, index) => ({ - length: ROW_HEIGHT, - offset: ROW_HEIGHT * index, + +const sortPreferencesShouldUpdate = ['sortBy', 'groupByType', 'showFavorites', 'showUnread']; + +const displayPropsShouldUpdate = ['showAvatar', 'displayMode']; + +const getItemLayout = (data, index, height) => ({ + length: height, + offset: height * index, index }); const keyExtractor = item => item.rid; @@ -106,14 +110,13 @@ class RoomsListView extends React.Component { username: PropTypes.string, token: PropTypes.string, statusLivechat: PropTypes.string, - roles: PropTypes.object + roles: PropTypes.array }), server: PropTypes.string, searchText: PropTypes.string, changingServer: PropTypes.bool, loadingServer: PropTypes.bool, showServerDropdown: PropTypes.bool, - showSortDropdown: PropTypes.bool, sortBy: PropTypes.string, groupByType: PropTypes.bool, showFavorites: PropTypes.bool, @@ -121,7 +124,6 @@ class RoomsListView extends React.Component { refreshing: PropTypes.bool, StoreLastMessage: PropTypes.bool, theme: PropTypes.string, - toggleSortDropdown: PropTypes.func, openSearchHeader: PropTypes.func, closeSearchHeader: PropTypes.func, appStart: PropTypes.func, @@ -135,6 +137,13 @@ class RoomsListView extends React.Component { queueSize: PropTypes.number, inquiryEnabled: PropTypes.bool, encryptionBanner: PropTypes.string, + showAvatar: PropTypes.bool, + displayMode: PropTypes.string, + createTeamPermission: PropTypes.array, + createDirectMessagePermission: PropTypes.array, + createPublicChannelPermission: PropTypes.array, + createPrivateChannelPermission: PropTypes.array, + createDiscussionPermission: PropTypes.array, initAdd: PropTypes.func }; @@ -152,7 +161,8 @@ class RoomsListView extends React.Component { loading: true, chatsUpdate: [], chats: [], - item: {} + item: {}, + canCreateRoom: false }; this.setHeader(); this.getSubscriptions(); @@ -160,6 +170,7 @@ class RoomsListView extends React.Component { componentDidMount() { const { navigation, closeServerDropdown } = this.props; + this.handleHasPermission(); this.mounted = true; if (isTablet) { @@ -168,6 +179,11 @@ class RoomsListView extends React.Component { this.unsubscribeFocus = navigation.addListener('focus', () => { Orientation.unlockAllOrientations(); this.animated = true; + // Check if there were changes with sort preference, then call getSubscription to remount the list + if (this.sortPreferencesChanged) { + this.getSubscriptions(); + this.sortPreferencesChanged = false; + } // Check if there were changes while not focused (it's set on sCU) if (this.shouldUpdate) { this.forceUpdate(); @@ -203,13 +219,27 @@ class RoomsListView extends React.Component { } shouldComponentUpdate(nextProps, nextState) { - const { chatsUpdate, searching, item } = this.state; + const { chatsUpdate, searching, item, canCreateRoom } = this.state; // eslint-disable-next-line react/destructuring-assignment const propsUpdated = shouldUpdateProps.some(key => nextProps[key] !== this.props[key]); if (propsUpdated) { return true; } + // check if some display props are changed to force update when focus this view again + // eslint-disable-next-line react/destructuring-assignment + const displayUpdated = displayPropsShouldUpdate.some(key => nextProps[key] !== this.props[key]); + if (displayUpdated) { + this.shouldUpdate = true; + } + + // check if some sort preferences are changed to getSubscription() when focus this view again + // eslint-disable-next-line react/destructuring-assignment + const sortPreferencesUpdate = sortPreferencesShouldUpdate.some(key => nextProps[key] !== this.props[key]); + if (sortPreferencesUpdate) { + this.sortPreferencesChanged = true; + } + // Compare changes only once const chatsNotEqual = !dequal(nextState.chatsUpdate, chatsUpdate); @@ -222,6 +252,10 @@ class RoomsListView extends React.Component { return true; } + if (nextState.canCreateRoom !== canCreateRoom) { + return true; + } + if (nextState.item?.rid !== item?.rid) { return true; } @@ -257,7 +291,22 @@ class RoomsListView extends React.Component { } componentDidUpdate(prevProps) { - const { sortBy, groupByType, showFavorites, showUnread, rooms, isMasterDetail, insets } = this.props; + const { + sortBy, + groupByType, + showFavorites, + showUnread, + rooms, + isMasterDetail, + insets, + createTeamPermission, + createPublicChannelPermission, + createPrivateChannelPermission, + createDirectMessagePermission, + createDiscussionPermission, + showAvatar, + displayMode + } = this.props; const { item } = this.state; if ( @@ -265,7 +314,9 @@ class RoomsListView extends React.Component { prevProps.sortBy === sortBy && prevProps.groupByType === groupByType && prevProps.showFavorites === showFavorites && - prevProps.showUnread === showUnread + prevProps.showUnread === showUnread && + prevProps.showAvatar === showAvatar && + prevProps.displayMode === displayMode ) ) { this.getSubscriptions(); @@ -278,6 +329,17 @@ class RoomsListView extends React.Component { if (insets.left !== prevProps.insets.left || insets.right !== prevProps.insets.right) { this.setHeader(); } + + if ( + !dequal(createTeamPermission, prevProps.createTeamPermission) || + !dequal(createPublicChannelPermission, prevProps.createPublicChannelPermission) || + !dequal(createPrivateChannelPermission, prevProps.createPrivateChannelPermission) || + !dequal(createDirectMessagePermission, prevProps.createDirectMessagePermission) || + !dequal(createDiscussionPermission, prevProps.createDiscussionPermission) + ) { + this.handleHasPermission(); + this.setHeader(); + } } componentWillUnmount() { @@ -297,10 +359,31 @@ class RoomsListView extends React.Component { console.countReset(`${this.constructor.name}.render calls`); } + handleHasPermission = async () => { + const { + createTeamPermission, + createDirectMessagePermission, + createPublicChannelPermission, + createPrivateChannelPermission, + createDiscussionPermission + } = this.props; + const permissions = [ + createPublicChannelPermission, + createPrivateChannelPermission, + createTeamPermission, + createDirectMessagePermission, + createDiscussionPermission + ]; + const permissionsToCreate = await RocketChat.hasPermission(permissions); + const canCreateRoom = permissionsToCreate.filter(r => r === true).length > 0; + this.setState({ canCreateRoom }, () => this.setHeader()); + }; + getHeader = () => { - const { searching } = this.state; + const { searching, canCreateRoom } = this.state; const { navigation, isMasterDetail, insets } = this.props; const headerTitlePosition = getHeaderTitlePosition({ insets, numIconsRight: searching ? 0 : 3 }); + return { headerTitleAlign: 'left', headerLeft: () => @@ -327,7 +410,9 @@ class RoomsListView extends React.Component { headerRight: () => searching ? null : ( <HeaderButton.Container> - <HeaderButton.Item iconName='create' onPress={this.goToNewMessage} testID='rooms-list-view-create-channel' /> + {canCreateRoom ? ( + <HeaderButton.Item iconName='create' onPress={this.goToNewMessage} testID='rooms-list-view-create-channel' /> + ) : null} <HeaderButton.Item iconName='search' onPress={this.initSearching} testID='rooms-list-view-search' /> <HeaderButton.Item iconName='directory' onPress={this.goDirectory} testID='rooms-list-view-directory' /> </HeaderButton.Container> @@ -553,16 +638,6 @@ class RoomsListView extends React.Component { } }; - toggleSort = () => { - logEvent(events.RL_TOGGLE_SORT_DROPDOWN); - const { toggleSortDropdown } = this.props; - - this.scrollToTop(); - setTimeout(() => { - toggleSortDropdown(); - }, 100); - }; - toggleFav = async (rid, favorite) => { logEvent(favorite ? events.RL_UNFAVORITE_CHANNEL : events.RL_FAVORITE_CHANNEL); try { @@ -811,12 +886,10 @@ class RoomsListView extends React.Component { renderListHeader = () => { const { searching } = this.state; - const { sortBy, queueSize, inquiryEnabled, encryptionBanner, user } = this.props; + const { queueSize, inquiryEnabled, encryptionBanner, user } = this.props; return ( <ListHeader searching={searching} - sortBy={sortBy} - toggleSort={this.toggleSort} goEncryption={this.goEncryption} goQueue={this.goQueue} queueSize={queueSize} @@ -850,7 +923,9 @@ class RoomsListView extends React.Component { useRealName, theme, isMasterDetail, - width + width, + showAvatar, + displayMode } = this.props; const id = this.getUidDirectMessage(item); @@ -875,6 +950,8 @@ class RoomsListView extends React.Component { getIsRead={this.isRead} visitor={item.visitor} isFocused={currentItem?.rid === item.rid} + showAvatar={showAvatar} + displayMode={displayMode} /> ); }; @@ -890,7 +967,9 @@ class RoomsListView extends React.Component { renderScroll = () => { const { loading, chats, search, searching } = this.state; - const { theme, refreshing } = this.props; + const { theme, refreshing, displayMode } = this.props; + + const height = displayMode === DISPLAY_MODE_CONDENSED ? ROW_HEIGHT_CONDENSED : ROW_HEIGHT; if (loading) { return <ActivityIndicator theme={theme} />; @@ -905,7 +984,7 @@ class RoomsListView extends React.Component { style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} renderItem={this.renderItem} ListHeaderComponent={this.renderListHeader} - getItemLayout={getItemLayout} + getItemLayout={(data, index) => getItemLayout(data, index, height)} removeClippedSubviews={isIOS} keyboardShouldPersistTaps='always' initialNumToRender={INITIAL_NUM_TO_RENDER} @@ -921,23 +1000,13 @@ class RoomsListView extends React.Component { render = () => { console.count(`${this.constructor.name}.render calls`); - const { sortBy, groupByType, showFavorites, showUnread, showServerDropdown, showSortDropdown, theme, navigation } = - this.props; + const { showServerDropdown, theme, navigation } = this.props; return ( <SafeAreaView testID='rooms-list-view' style={{ backgroundColor: themes[theme].backgroundColor }}> <StatusBar /> {this.renderHeader()} {this.renderScroll()} - {showSortDropdown ? ( - <SortDropdown - close={this.toggleSort} - sortBy={sortBy} - groupByType={groupByType} - showFavorites={showFavorites} - showUnread={showUnread} - /> - ) : null} {showServerDropdown ? <ServerDropdown navigation={navigation} /> : null} </SafeAreaView> ); @@ -952,7 +1021,6 @@ const mapStateToProps = state => ({ searchText: state.rooms.searchText, loadingServer: state.server.loading, showServerDropdown: state.rooms.showServerDropdown, - showSortDropdown: state.rooms.showSortDropdown, refreshing: state.rooms.refreshing, sortBy: state.sortPreferences.sortBy, groupByType: state.sortPreferences.groupByType, @@ -963,11 +1031,17 @@ const mapStateToProps = state => ({ rooms: state.room.rooms, queueSize: getInquiryQueueSelector(state).length, inquiryEnabled: state.inquiry.enabled, - encryptionBanner: state.encryption.banner + encryptionBanner: state.encryption.banner, + showAvatar: state.sortPreferences.showAvatar, + displayMode: state.sortPreferences.displayMode, + createTeamPermission: state.permissions['create-team'], + createDirectMessagePermission: state.permissions['create-d'], + createPublicChannelPermission: state.permissions['create-c'], + createPrivateChannelPermission: state.permissions['create-p'], + createDiscussionPermission: state.permissions['start-discussion'] }); const mapDispatchToProps = dispatch => ({ - toggleSortDropdown: () => dispatch(toggleSortDropdownAction()), openSearchHeader: () => dispatch(openSearchHeaderAction()), closeSearchHeader: () => dispatch(closeSearchHeaderAction()), roomsRequest: params => dispatch(roomsRequestAction(params)), diff --git a/app/views/SearchMessagesView/index.js b/app/views/SearchMessagesView/index.js index f8131ec1d..c36425edd 100644 --- a/app/views/SearchMessagesView/index.js +++ b/app/views/SearchMessagesView/index.js @@ -24,8 +24,11 @@ import database from '../../lib/database'; import { sanitizeLikeString } from '../../lib/database/utils'; import getThreadName from '../../lib/methods/getThreadName'; import getRoomInfo from '../../lib/methods/getRoomInfo'; +import { isIOS } from '../../utils/deviceInfo'; +import { compareServerVersion, methods } from '../../lib/utils'; import styles from './styles'; +const QUERY_SIZE = 50; class SearchMessagesView extends React.Component { static navigationOptions = ({ navigation, route }) => { const options = { @@ -43,6 +46,7 @@ class SearchMessagesView extends React.Component { route: PropTypes.object, user: PropTypes.object, baseUrl: PropTypes.string, + serverVersion: PropTypes.string, customEmojis: PropTypes.object, theme: PropTypes.string, useRealName: PropTypes.bool @@ -55,6 +59,7 @@ class SearchMessagesView extends React.Component { messages: [], searchText: '' }; + this.offset = 0; this.rid = props.route.params?.rid; this.t = props.route.params?.t; this.encrypted = props.route.params?.encrypted; @@ -88,6 +93,9 @@ class SearchMessagesView extends React.Component { // Handle encrypted rooms search messages searchMessages = async searchText => { + if (!searchText) { + return []; + } // If it's a encrypted, room we'll search only on the local stored messages if (this.encrypted) { const db = database.active; @@ -103,25 +111,33 @@ class SearchMessagesView extends React.Component { .fetch(); } // If it's not a encrypted room, search messages on the server - const result = await RocketChat.searchMessages(this.rid, searchText); + const result = await RocketChat.searchMessages(this.rid, searchText, QUERY_SIZE, this.offset); if (result.success) { return result.messages; } }; - search = debounce(async searchText => { - this.setState({ searchText, loading: true, messages: [] }); - + getMessages = async (searchText, debounced) => { try { const messages = await this.searchMessages(searchText); - this.setState({ - messages: messages || [], + this.setState(prevState => ({ + messages: debounced ? messages : [...prevState.messages, ...messages], loading: false - }); + })); } catch (e) { this.setState({ loading: false }); log(e); } + }; + + search = searchText => { + this.offset = 0; + this.setState({ searchText, loading: true, messages: [] }); + this.searchDebounced(searchText); + }; + + searchDebounced = debounce(async searchText => { + await this.getMessages(searchText, true); }, 1000); getCustomEmoji = name => { @@ -168,6 +184,23 @@ class SearchMessagesView extends React.Component { } }; + onEndReached = async () => { + const { serverVersion } = this.props; + const { searchText, messages, loading } = this.state; + if ( + messages.length < this.offset || + this.encrypted || + loading || + compareServerVersion(serverVersion, '3.17.0', methods.lowerThan) + ) { + return; + } + this.setState({ loading: true }); + this.offset += QUERY_SIZE; + + await this.getMessages(searchText); + }; + renderEmpty = () => { const { theme } = this.props; return ( @@ -212,8 +245,10 @@ class SearchMessagesView extends React.Component { renderItem={this.renderItem} style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} keyExtractor={item => item._id} - onEndReached={this.load} + onEndReached={this.onEndReached} ListFooterComponent={loading ? <ActivityIndicator theme={theme} /> : null} + onEndReachedThreshold={0.5} + removeClippedSubviews={isIOS} {...scrollPersistTaps} /> ); @@ -243,6 +278,7 @@ class SearchMessagesView extends React.Component { } const mapStateToProps = state => ({ + serverVersion: state.server.version, baseUrl: state.server.server, user: getUserSelector(state), useRealName: state.settings.UI_Use_Real_Name, diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.js index 4c62e19bc..897d86a6e 100644 --- a/app/views/SettingsView/index.js +++ b/app/views/SettingsView/index.js @@ -185,6 +185,8 @@ class SettingsView extends React.Component { <List.Separator /> </List.Section> <List.Section> + <List.Separator /> + <List.Item title='Display' onPress={() => this.navigateToScreen('DisplayPrefsView')} showActionIndicator /> <List.Separator /> <List.Item title='Profile' diff --git a/app/views/SidebarView/index.js b/app/views/SidebarView/index.js index 975d8a896..5f27e7062 100644 --- a/app/views/SidebarView/index.js +++ b/app/views/SidebarView/index.js @@ -193,6 +193,13 @@ class Sidebar extends Component { testID='sidebar-profile' current={this.currentItemKey === 'ProfileStackNavigator'} /> + <SidebarItem + text={I18n.t('Display')} + left={<CustomIcon name='sort' size={20} color={themes[theme].titleText} />} + onPress={() => this.sidebarNavigate('DisplayPrefStackNavigator')} + testID='sidebar-display' + current={this.currentItemKey === 'DisplayPrefStackNavigator'} + /> <SidebarItem text={I18n.t('Settings')} left={<CustomIcon name='administration' size={20} color={themes[theme].titleText} />} diff --git a/app/views/TeamChannelsView.js b/app/views/TeamChannelsView.js index 869d5e4c3..13546703e 100644 --- a/app/views/TeamChannelsView.js +++ b/app/views/TeamChannelsView.js @@ -61,7 +61,9 @@ class TeamChannelsView extends React.Component { deleteCPermission: PropTypes.array, deletePPermission: PropTypes.array, showActionSheet: PropTypes.func, - deleteRoom: PropTypes.func + deleteRoom: PropTypes.func, + showAvatar: PropTypes.bool, + displayMode: PropTypes.string }; constructor(props) { @@ -463,7 +465,7 @@ class TeamChannelsView extends React.Component { }; renderItem = ({ item }) => { - const { StoreLastMessage, useRealName, theme, width } = this.props; + const { StoreLastMessage, useRealName, theme, width, showAvatar, displayMode } = this.props; return ( <RoomItem item={item} @@ -478,6 +480,8 @@ class TeamChannelsView extends React.Component { getRoomAvatar={this.getRoomAvatar} swipeEnabled={false} autoJoin={item.teamDefault} + showAvatar={showAvatar} + displayMode={displayMode} /> ); }; @@ -540,7 +544,9 @@ const mapStateToProps = state => ({ editTeamChannelPermission: state.permissions[PERMISSION_EDIT_TEAM_CHANNEL], removeTeamChannelPermission: state.permissions[PERMISSION_REMOVE_TEAM_CHANNEL], deleteCPermission: state.permissions[PERMISSION_DELETE_C], - deletePPermission: state.permissions[PERMISSION_DELETE_P] + deletePPermission: state.permissions[PERMISSION_DELETE_P], + showAvatar: state.sortPreferences.showAvatar, + displayMode: state.sortPreferences.displayMode }); const mapDispatchToProps = dispatch => ({ diff --git a/app/views/WorkspaceView/ServerAvatar.js b/app/views/WorkspaceView/ServerAvatar.tsx similarity index 80% rename from app/views/WorkspaceView/ServerAvatar.js rename to app/views/WorkspaceView/ServerAvatar.tsx index 749c4b10e..54b90b9bb 100644 --- a/app/views/WorkspaceView/ServerAvatar.js +++ b/app/views/WorkspaceView/ServerAvatar.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; -import PropTypes from 'prop-types'; import { createImageProgress } from 'react-native-image-progress'; import * as Progress from 'react-native-progress'; import FastImage from '@rocket.chat/react-native-fast-image'; @@ -41,15 +40,24 @@ const styles = StyleSheet.create({ } }); -const getInitial = url => url && url.replace(/http(s?):\/\//, '').slice(0, 1); +const getInitial = (url: string) => url && url.replace(/http(s?):\/\//, '').slice(0, 1); -const Fallback = ({ theme, initial }) => ( +interface IFallback { + theme: string; + initial: string; +} +const Fallback = ({ theme, initial }: IFallback) => ( <View style={[styles.container, styles.fallback, { backgroundColor: themes[theme].dangerColor }]}> <Text style={[styles.initial, { color: themes[theme].buttonText }]}>{initial}</Text> </View> ); -const ServerAvatar = React.memo(({ theme, url, image }) => ( +interface IServerAvatar { + theme: string; + url: string; + image: string; +} +const ServerAvatar = React.memo(({ theme, url, image }: IServerAvatar) => ( <View style={styles.container}> {image && ( <ImageProgress @@ -66,16 +74,6 @@ const ServerAvatar = React.memo(({ theme, url, image }) => ( </View> )); -ServerAvatar.propTypes = { - theme: PropTypes.string, - url: PropTypes.string, - image: PropTypes.string -}; ServerAvatar.displayName = 'ServerAvatar'; -Fallback.propTypes = { - theme: PropTypes.string, - initial: PropTypes.string -}; - export default ServerAvatar; diff --git a/app/views/WorkspaceView/index.js b/app/views/WorkspaceView/index.tsx similarity index 81% rename from app/views/WorkspaceView/index.js rename to app/views/WorkspaceView/index.tsx index dbd1c69e0..68ac5157b 100644 --- a/app/views/WorkspaceView/index.js +++ b/app/views/WorkspaceView/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Text, View } from 'react-native'; -import PropTypes from 'prop-types'; +import { StackNavigationProp, StackNavigationOptions } from '@react-navigation/stack'; import { connect } from 'react-redux'; import I18n from '../../i18n'; @@ -12,23 +12,27 @@ import { getShowLoginButton } from '../../selectors/login'; import ServerAvatar from './ServerAvatar'; import styles from './styles'; -class WorkspaceView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Your_workspace') - }); +interface IWorkSpaceProp { + // TODO: waiting for the RootStackParamList https://reactnavigation.org/docs/typescript/#type-checking-screens + navigation: StackNavigationProp<any, 'WorkspaceView'>; + theme: string; + Site_Name: string; + Site_Url: string; + server: string; + Assets_favicon_512: { + url?: string; + defaultUrl: string; + }; + registrationForm: string; + registrationText: string; + showLoginButton: boolean; + Accounts_iframe_enabled: boolean; + inviteLinkToken: string; +} - static propTypes = { - navigation: PropTypes.object, - theme: PropTypes.string, - Site_Name: PropTypes.string, - Site_Url: PropTypes.string, - server: PropTypes.string, - Assets_favicon_512: PropTypes.object, - registrationForm: PropTypes.string, - registrationText: PropTypes.string, - showLoginButton: PropTypes.bool, - Accounts_iframe_enabled: PropTypes.bool, - inviteLinkToken: PropTypes.string +class WorkspaceView extends React.Component<IWorkSpaceProp, any> { + static navigationOptions: StackNavigationOptions = { + title: I18n.t('Your_workspace') }; get showRegistrationButton() { @@ -94,7 +98,7 @@ class WorkspaceView extends React.Component { } } -const mapStateToProps = state => ({ +const mapStateToProps = (state: any) => ({ server: state.server.server, Site_Name: state.settings.Site_Name, Site_Url: state.settings.Site_Url, diff --git a/app/views/WorkspaceView/styles.js b/app/views/WorkspaceView/styles.ts similarity index 100% rename from app/views/WorkspaceView/styles.js rename to app/views/WorkspaceView/styles.ts diff --git a/babel.config.js b/babel.config.js index 708e683ff..335868bb2 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,6 @@ module.exports = { presets: ['module:metro-react-native-babel-preset'], - plugins: [['@babel/plugin-proposal-decorators', { legacy: true }]], + plugins: [['@babel/plugin-proposal-decorators', { legacy: true }], 'react-native-reanimated/plugin'], env: { production: { plugins: ['transform-remove-console'] diff --git a/e2e/tests/assorted/13-display-pref.spec.js b/e2e/tests/assorted/13-display-pref.spec.js new file mode 100644 index 000000000..602838a82 --- /dev/null +++ b/e2e/tests/assorted/13-display-pref.spec.js @@ -0,0 +1,96 @@ +const { login, navigateToLogin } = require('../../helpers/app'); +const data = require('../../data'); + +const goToDisplayPref = async () => { + await expect(element(by.id('rooms-list-view-sidebar'))).toBeVisible(); + await element(by.id('rooms-list-view-sidebar')).tap(); + await expect(element(by.id('sidebar-display'))).toBeVisible(); + await element(by.id('sidebar-display')).tap(); +}; +const goToRoomList = async () => { + await expect(element(by.id('display-view-drawer'))).toBeVisible(); + await element(by.id('display-view-drawer')).tap(); + await expect(element(by.id('sidebar-chats'))).toBeVisible(); + await element(by.id('sidebar-chats')).tap(); +}; + +describe('Rooms list screen', () => { + before(async () => { + await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true }); + await navigateToLogin(); + await login(data.users.regular.username, data.users.regular.password); + }); + + describe('Render', () => { + it('should have rooms list screen', async () => { + await expect(element(by.id('rooms-list-view'))).toBeVisible(); + }); + + it('should have room item', async () => { + await expect(element(by.id('rooms-list-view-item-general'))).toExist(); + }); + + // Render - Header + describe('Header', () => { + it('should have create channel button', async () => { + await expect(element(by.id('rooms-list-view-create-channel'))).toBeVisible(); + }); + + it('should have sidebar button', async () => { + await expect(element(by.id('rooms-list-view-sidebar'))).toBeVisible(); + }); + }); + + describe('DisplayPrefView', () => { + it('should go to Display Preferences', async () => { + await goToDisplayPref(); + }); + + it('should have Displays button, expanded, condensed, avatars', async () => { + await expect(element(by.id('display-pref-view-expanded'))).toBeVisible(); + await expect(element(by.id('display-pref-view-condensed'))).toBeVisible(); + await expect(element(by.id('display-pref-view-avatars'))).toBeVisible(); + }); + + it('should have Sort By button', async () => { + await expect(element(by.id('display-pref-view-activity'))).toBeVisible(); + await expect(element(by.id('display-pref-view-name'))).toBeVisible(); + }); + + it('should have Group by button', async () => { + await expect(element(by.id('display-pref-view-unread'))).toBeVisible(); + await expect(element(by.id('display-pref-view-favorites'))).toBeVisible(); + await expect(element(by.id('display-pref-view-types'))).toBeVisible(); + }); + }); + + describe('Change display', () => { + it('should appear the last message in RoomList when is Expanded', async () => { + await element(by.id('display-pref-view-expanded')).tap(); + await goToRoomList(); + await expect(element(by.id('room-item-last-message')).atIndex(0)).toBeVisible(); + }); + + it('should not appear the last message in RoomList when is Condensed', async () => { + await goToDisplayPref(); + await element(by.id('display-pref-view-condensed')).tap(); + await goToRoomList(); + await expect(element(by.id('room-item-last-message'))).not.toBeVisible(); + }); + }); + + describe('Change the avatar visible', () => { + it('should have avatar as default in room list', async () => { + await expect(element(by.id('avatar')).atIndex(0)).toExist(); + }); + + it('should hide the avatar', async () => { + await goToDisplayPref(); + await expect(element(by.id('display-pref-view-avatar-switch'))).toBeVisible(); + await element(by.id('display-pref-view-avatar-switch')).tap(); + await goToRoomList(); + await expect(element(by.id('avatar'))).not.toBeVisible(); + }); + }); + }); +}); diff --git a/ios/NotificationService/NotificationService-Bridging-Header.h b/ios/NotificationService/NotificationService-Bridging-Header.h index 2417bb56d..cb9650a24 100644 --- a/ios/NotificationService/NotificationService-Bridging-Header.h +++ b/ios/NotificationService/NotificationService-Bridging-Header.h @@ -7,3 +7,10 @@ #import <react-native-simple-crypto/Aes.h> #import <react-native-simple-crypto/Rsa.h> #import <react-native-simple-crypto/Shared.h> +#import <React/RCTBundleURLProvider.h> +#import <React/RCTRootView.h> +#import <React/RCTViewManager.h> +#import <React/RCTBridgeModule.h> + +// Silence warning +#import "../../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/Bridging.h" \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index 40be1ede6..fdc7c3ab9 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -4,6 +4,9 @@ require_relative '../node_modules/@react-native-community/cli-platform-ios/nativ require_relative '../node_modules/react-native-unimodules/cocoapods.rb' def all_pods + pod 'WatermelonDB', :path => '../node_modules/@nozbe/watermelondb' + pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi', :modular_headers => true + pod 'simdjson', path: '../node_modules/@nozbe/simdjson' config = use_native_modules! use_unimodules! use_react_native!( diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 68582e288..8b21c0edf 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -530,19 +530,46 @@ PODS: - RNFBApp - RNGestureHandler (1.10.3): - React-Core - - RNImageCropPicker (0.31.1): + - RNImageCropPicker (0.36.3): - React-Core - React-RCTImage - - RNImageCropPicker/QBImagePickerController (= 0.31.1) + - RNImageCropPicker/QBImagePickerController (= 0.36.3) - TOCropViewController - - RNImageCropPicker/QBImagePickerController (0.31.1): + - RNImageCropPicker/QBImagePickerController (0.36.3): - React-Core - React-RCTImage - TOCropViewController - RNLocalize (2.1.1): - React-Core - - RNReanimated (1.9.0): + - RNReanimated (2.2.2): + - DoubleConversion + - FBLazyVector + - FBReactNativeSpec + - glog + - RCT-Folly + - RCTRequired + - RCTTypeSafety - React + - React-callinvoker + - React-Core + - React-Core/DevSupport + - React-Core/RCTWebSocket + - React-CoreModules + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-RCTActionSheet + - React-RCTAnimation + - React-RCTBlob + - React-RCTImage + - React-RCTLinking + - React-RCTNetwork + - React-RCTSettings + - React-RCTText + - React-RCTVibration + - ReactCommon/turbomodule/core + - Yoga - RNRootView (1.0.3): - React - RNScreens (2.9.0): @@ -555,6 +582,7 @@ PODS: - SDWebImageWebPCoder (0.4.1): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.5) + - simdjson (0.9.6-fix2) - TOCropViewController (2.5.3) - UMAppLoader (1.2.0) - UMBarCodeScannerInterface (5.2.1) @@ -573,6 +601,9 @@ PODS: - UMFontInterface - UMSensorsInterface (5.2.1) - UMTaskManagerInterface (5.2.1) + - WatermelonDB (0.23.0): + - React + - React-jsi - Yoga (1.14.0) - YogaKit (1.18.1): - Yoga (~> 1.14) @@ -681,6 +712,7 @@ DEPENDENCIES: - RNRootView (from `../node_modules/rn-root-view`) - RNScreens (from `../node_modules/react-native-screens`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) + - "simdjson (from `../node_modules/@nozbe/simdjson`)" - UMAppLoader (from `../node_modules/unimodules-app-loader/ios`) - UMBarCodeScannerInterface (from `../node_modules/unimodules-barcode-scanner-interface/ios`) - UMCameraInterface (from `../node_modules/unimodules-camera-interface/ios`) @@ -694,6 +726,7 @@ DEPENDENCIES: - "UMReactNativeAdapter (from `../node_modules/@unimodules/react-native-adapter/ios`)" - UMSensorsInterface (from `../node_modules/unimodules-sensors-interface/ios`) - UMTaskManagerInterface (from `../node_modules/unimodules-task-manager-interface/ios`) + - "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -889,6 +922,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-screens" RNVectorIcons: :path: "../node_modules/react-native-vector-icons" + simdjson: + :path: "../node_modules/@nozbe/simdjson" UMAppLoader: :path: "../node_modules/unimodules-app-loader/ios" UMBarCodeScannerInterface: @@ -915,6 +950,8 @@ EXTERNAL SOURCES: :path: "../node_modules/unimodules-sensors-interface/ios" UMTaskManagerInterface: :path: "../node_modules/unimodules-task-manager-interface/ios" + WatermelonDB: + :path: "../node_modules/@nozbe/watermelondb" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -940,7 +977,7 @@ SPEC CHECKSUMS: EXVideoThumbnails: cd257fc6e07884a704a5674d362a6410933acb68 EXWebBrowser: d37a5ffdea1b65947352bc001dd9f732463725d4 FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b - FBReactNativeSpec: b427d2f482828b9533661dbcf9edf846cb60dc7b + FBReactNativeSpec: 110d69378fce79af38271c39894b59fec7890221 Firebase: 919186c8e119dd9372a45fd1dd17a8a942bc1892 FirebaseAnalytics: 5fa308e1b13f838d0f6dc74719ac2a72e8c5afc4 FirebaseCore: 8cd4f8ea22075e0ee582849b1cf79d8816506085 @@ -1024,14 +1061,15 @@ SPEC CHECKSUMS: RNFBApp: 6fd8a7e757135d4168bf033a8812c241af7363a0 RNFBCrashlytics: 88de72c2476b5868a892d9523b89b86c527c540e RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 - RNImageCropPicker: 38865ab4af1b0b2146ad66061196bc0184946855 + RNImageCropPicker: 97289cd94fb01ab79db4e5c92938be4d0d63415d RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b - RNReanimated: b5ccb50650ba06f6e749c7c329a1bc3ae0c88b43 + RNReanimated: 241c586663f44f19a53883c63375fdd041253960 RNRootView: 895a4813dedeaca82db2fa868ca1c333d790e494 RNScreens: c526239bbe0e957b988dacc8d75ac94ec9cb19da RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4 SDWebImage: cf6922231e95550934da2ada0f20f2becf2ceba9 SDWebImageWebPCoder: 36f8f47bd9879a8aea6044765c1351120fd8e3a8 + simdjson: 85016870cd17207312b718ef6652eb6a1cd6a2b0 TOCropViewController: 20a14b6a7a098308bf369e7c8d700dc983a974e6 UMAppLoader: 61049c8d55590b74e9ae1d5429bf68d96b4a2528 UMBarCodeScannerInterface: e5e4c87797d3d01214e25cd1618866caf5d4f17f @@ -1046,9 +1084,10 @@ SPEC CHECKSUMS: UMReactNativeAdapter: 538efe92e781b5d7678cf95b34c46f2d0989a557 UMSensorsInterface: cb5bf31d52c4349f0ff9e3c049bbe4df0d80d383 UMTaskManagerInterface: 80653f25c55d9e6d79d6a0a65589fa213feaee11 + WatermelonDB: 577c61fceff16e9f9103b59d14aee4850c0307b6 Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 2cb6f38193d69310b4dfc466be3cf4ff7a5e98d3 +PODFILE CHECKSUM: 46fb1ed324f44252f8900c63e7c93e4391658bad COCOAPODS: 1.10.1 diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index d54f2e216..4c54b0d3e 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -24,7 +24,6 @@ 1E068CFF24FD2DC700A0FFC1 /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E068CFD24FD2DC700A0FFC1 /* AppGroup.swift */; }; 1E068D0124FD2E0500A0FFC1 /* AppGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E068D0024FD2E0500A0FFC1 /* AppGroup.m */; }; 1E068D0224FD2E0500A0FFC1 /* AppGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E068D0024FD2E0500A0FFC1 /* AppGroup.m */; }; - 1E1C2F7E250FACB5005DCE7D /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AAA749B23043AD300F1ADE9 /* libWatermelonDB.a */; }; 1E1C2F80250FCB69005DCE7D /* Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E1C2F7F250FCB69005DCE7D /* Database.swift */; }; 1E1EA80A2326CD2200E22452 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA8092326CD2200E22452 /* AVFoundation.framework */; }; 1E1EA80C2326CD2800E22452 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E1EA80B2326CD2800E22452 /* AudioToolbox.framework */; }; @@ -43,7 +42,6 @@ 1E470E832513A71E00E3DD1D /* RocketChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E470E822513A71E00E3DD1D /* RocketChat.swift */; }; 1E51D962251263CD00DC95DE /* MessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E51D961251263CD00DC95DE /* MessageType.swift */; }; 1E51D965251263D600DC95DE /* NotificationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E51D964251263D600DC95DE /* NotificationType.swift */; }; - 1E55FDB32320675C0048D2F9 /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AAA749B23043AD300F1ADE9 /* libWatermelonDB.a */; }; 1E598AE42515057D002BDFBD /* Date+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE32515057D002BDFBD /* Date+Extensions.swift */; }; 1E598AE725150660002BDFBD /* Data+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE625150660002BDFBD /* Data+Extensions.swift */; }; 1E598AE925151A63002BDFBD /* SendMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E598AE825151A63002BDFBD /* SendMessage.swift */; }; @@ -158,13 +156,6 @@ remoteGlobalIDString = 1EFEB5942493B6640072EDC0; remoteInfo = NotificationService; }; - 7AAA749A23043AD300F1ADE9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 290E43E48AD8418287FA99D6 /* WatermelonDB.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6E660D5E213BCCD300189354; - remoteInfo = WatermelonDB; - }; 7AAB3E0F257E6A6E00707CF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; @@ -265,7 +256,6 @@ 1EFEB5972493B6640072EDC0 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; }; 1EFEB5992493B6640072EDC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 1EFEB5A12493B67D0072EDC0 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; }; - 290E43E48AD8418287FA99D6 /* WatermelonDB.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = WatermelonDB.xcodeproj; path = "../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB.xcodeproj"; sourceTree = "<group>"; }; 2977818A2C0F18284F485E2B /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Pods/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = "<group>"; }; 298C921C910A1A2FD60068AE /* Pods-defaults-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.debug.xcconfig"; path = "Pods/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.debug.xcconfig"; sourceTree = "<group>"; }; 2B2C0164CCC5BED03F5A257E /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -321,7 +311,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1E55FDB32320675C0048D2F9 /* libWatermelonDB.a in Frameworks */, 1E25743422CBA2CF005A877F /* JavaScriptCore.framework in Frameworks */, DC5529EC3B4695AC7319279F /* libPods-defaults-ShareRocketChatRN.a in Frameworks */, ); @@ -331,7 +320,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1E1C2F7E250FACB5005DCE7D /* libWatermelonDB.a in Frameworks */, EDE8A8F63A3ADB93A6640F8E /* libPods-defaults-NotificationService.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -503,18 +491,9 @@ name = Pods; sourceTree = "<group>"; }; - 7AAA749723043AD300F1ADE9 /* Products */ = { - isa = PBXGroup; - children = ( - 7AAA749B23043AD300F1ADE9 /* libWatermelonDB.a */, - ); - name = Products; - sourceTree = "<group>"; - }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( - 290E43E48AD8418287FA99D6 /* WatermelonDB.xcodeproj */, ); name = Libraries; sourceTree = "<group>"; @@ -747,12 +726,6 @@ mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 7AAA749723043AD300F1ADE9 /* Products */; - ProjectRef = 290E43E48AD8418287FA99D6 /* WatermelonDB.xcodeproj */; - }, - ); projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* RocketChatRN */, @@ -763,16 +736,6 @@ }; /* End PBXProject section */ -/* Begin PBXReferenceProxy section */ - 7AAA749B23043AD300F1ADE9 /* libWatermelonDB.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libWatermelonDB.a; - remoteRef = 7AAA749A23043AD300F1ADE9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - /* Begin PBXResourcesBuildPhase section */ 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -1726,7 +1689,7 @@ INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 4.20.0; + MARKETING_VERSION = 4.21.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; @@ -1763,7 +1726,7 @@ INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; - MARKETING_VERSION = 4.20.0; + MARKETING_VERSION = 4.21.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index 4c7ca4e19..fa56e9b07 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -26,7 +26,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>4.20.0</string> + <string>4.21.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleURLTypes</key> diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist index 84bc33705..a0e5d8826 100644 --- a/ios/ShareRocketChatRN/Info.plist +++ b/ios/ShareRocketChatRN/Info.plist @@ -26,7 +26,7 @@ <key>CFBundlePackageType</key> <string>XPC!</string> <key>CFBundleShortVersionString</key> - <string>4.20.0</string> + <string>4.21.0</string> <key>CFBundleVersion</key> <string>1</string> <key>KeychainGroup</key> diff --git a/package.json b/package.json index 1d4a2ac1c..b5b5f1aad 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket-chat-reactnative", - "version": "4.20.0", + "version": "4.21.0", "private": true, "scripts": { "start": "react-native start", @@ -29,7 +29,7 @@ "dependencies": { "@bugsnag/react-native": "^7.10.5", "@codler/react-native-keyboard-aware-scroll-view": "^1.0.1", - "@nozbe/watermelondb": "0.19.0", + "@nozbe/watermelondb": "0.23.0", "@react-native-community/art": "^1.2.0", "@react-native-community/async-storage": "1.12.1", "@react-native-community/blur": "^3.6.0", @@ -56,7 +56,6 @@ "commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git", "dequal": "^2.0.2", "ejson": "2.2.1", - "eslint-config-airbnb": "^18.1.0", "expo-apple-authentication": "^2.2.1", "expo-av": "8.2.1", "expo-file-system": "9.0.1", @@ -104,7 +103,7 @@ "react-native-popover-view": "4.0.1", "react-native-progress": "4.1.2", "react-native-prompt-android": "^1.1.0", - "react-native-reanimated": "1.9.0", + "react-native-reanimated": "2.2.2", "react-native-restart": "0.0.22", "react-native-safe-area-context": "3.2.0", "react-native-screens": "2.9.0", diff --git a/patches/@nozbe+watermelondb+0.19.0.patch b/patches/@nozbe+watermelondb+0.23.0.patch similarity index 61% rename from patches/@nozbe+watermelondb+0.19.0.patch rename to patches/@nozbe+watermelondb+0.23.0.patch index 5398cc067..da8f8509c 100644 --- a/patches/@nozbe+watermelondb+0.19.0.patch +++ b/patches/@nozbe+watermelondb+0.23.0.patch @@ -1,9 +1,32 @@ +diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt +index 802f137..cfcac91 100644 +--- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt ++++ b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt +@@ -8,7 +8,7 @@ import android.database.sqlite.SQLiteDatabase + import android.database.sqlite.SQLiteQuery + import java.io.File + +-class Database(private val name: String, private val context: Context) { ++public class Database(private val name: String, private val context: Context) { + + private val db: SQLiteDatabase by lazy { + SQLiteDatabase.openOrCreateDatabase( +@@ -44,7 +44,7 @@ class Database(private val name: String, private val context: Context) { + + fun delete(query: SQL, args: QueryArgs) = db.execSQL(query, args) + +- fun rawQuery(sql: SQL, args: QueryArgs = emptyArray()): Cursor { ++ public fun rawQuery(sql: SQL, args: QueryArgs = emptyArray()): Cursor { + // HACK: db.rawQuery only supports String args, and there's no clean way AFAIK to construct + // a query with arbitrary args (like with execSQL). However, we can misuse cursor factory + // to get the reference of a SQLiteQuery before it's executed diff --git a/node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/Database.swift b/node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/Database.swift -index 43f2c9c..e24a24f 100644 +index b4d7151..429e318 100644 --- a/node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/Database.swift +++ b/node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/Database.swift -@@ -1,14 +1,14 @@ +@@ -1,15 +1,15 @@ import Foundation + import SQLite3 -class Database { - typealias SQL = String @@ -22,7 +45,7 @@ index 43f2c9c..e24a24f 100644 self.path = path fmdb = FMDatabase(path: path) open() -@@ -53,7 +53,7 @@ class Database { +@@ -54,7 +54,7 @@ class Database { } } @@ -31,38 +54,3 @@ index 43f2c9c..e24a24f 100644 let resultSet = try fmdb.executeQuery(query, values: args) return AnyIterator { -diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt -index 2217222..5b2eb73 100644 ---- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt -+++ b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt -@@ -5,7 +5,7 @@ import android.database.Cursor - import android.database.sqlite.SQLiteDatabase - import java.io.File - --class Database(private val name: String, private val context: Context) { -+public class Database(private val name: String, private val context: Context) { - - private val db: SQLiteDatabase by lazy { - SQLiteDatabase.openOrCreateDatabase( -@@ -41,7 +41,7 @@ class Database(private val name: String, private val context: Context) { - - fun delete(query: SQL, args: QueryArgs) = db.execSQL(query, args) - -- fun rawQuery(query: SQL, args: RawQueryArgs = emptyArray()): Cursor = db.rawQuery(query, args) -+ public fun rawQuery(query: SQL, args: RawQueryArgs = emptyArray()): Cursor = db.rawQuery(query, args) - - fun count(query: SQL, args: RawQueryArgs = emptyArray()): Int = - rawQuery(query, args).use { -diff --git a/node_modules/@nozbe/watermelondb/decorators/date/index.js b/node_modules/@nozbe/watermelondb/decorators/date/index.js -index 65690af..ce71aa0 100644 ---- a/node_modules/@nozbe/watermelondb/decorators/date/index.js -+++ b/node_modules/@nozbe/watermelondb/decorators/date/index.js -@@ -44,7 +44,7 @@ var dateDecorator = (0, _makeDecorator.default)(function (columnName) { - var rawValue = date ? +new Date(date) : null; - - if (rawValue && date) { -- cache.set(rawValue, date); -+ cache.set(rawValue, new Date(date)); - } - - this.asModel._setRaw(columnName, rawValue); diff --git a/patches/react-native-image-crop-picker+0.31.1.patch b/patches/react-native-image-crop-picker+0.31.1.patch deleted file mode 100644 index 167e876ea..000000000 --- a/patches/react-native-image-crop-picker+0.31.1.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java b/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java -index 3500542..94e45b6 100644 ---- a/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java -+++ b/node_modules/react-native-image-crop-picker/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java -@@ -584,6 +584,7 @@ class PickerModule extends ReactContextBaseJavaModule implements ActivityEventLi - image.putInt("height", options.outHeight); - image.putString("mime", options.outMimeType); - image.putInt("size", (int) new File(compressedImagePath).length()); -+ image.putString("filename", compressedImage.getName()); - image.putString("modificationDate", String.valueOf(modificationDate)); - - if (includeBase64) { diff --git a/patches/react-native-reanimated+2.2.2.patch b/patches/react-native-reanimated+2.2.2.patch new file mode 100644 index 000000000..3167e5a24 --- /dev/null +++ b/patches/react-native-reanimated+2.2.2.patch @@ -0,0 +1,3385 @@ +diff --git a/node_modules/react-native-reanimated/android/build.gradle b/node_modules/react-native-reanimated/android/build.gradle +index c1e9495..9a76784 100644 +--- a/node_modules/react-native-reanimated/android/build.gradle ++++ b/node_modules/react-native-reanimated/android/build.gradle +@@ -1,6 +1,5 @@ +-import groovy.json.JsonSlurper +-import java.util.regex.Matcher +-import java.util.regex.Pattern ++// https://github.com/software-mansion/react-native-reanimated/issues/2412#issuecomment-917958173 ++import groovy.json.JsonSlurper; + configurations.maybeCreate("default") + + def inputFile = new File(projectDir, '../../react-native/package.json') +@@ -9,83 +8,8 @@ def reactNativeVersion = json.version as String + def (major, minor, patch) = reactNativeVersion.tokenize('.') + + def engine = "jsc" +- +-abstract class replaceSoTask extends DefaultTask { +- public static String appName = ":app" +- public static String buildDir = "../../../android/app/build" +- +- @TaskAction +- def run() { +- for(def abiVersion in ["x86", "x86_64", "armeabi-v7a", "arm64-v8a"]) { +- ant.sequential { +- copy( +- tofile: "${buildDir}/intermediates/merged_native_libs/debug/out/lib/${abiVersion}/libfbjni.so", +- file: "../libSo/fbjni/jni/${abiVersion}/libfbjni.so", +- overwrite: true +- ) +- } +- } +- } +-} +- +-def getCurrentFlavor() { +- Gradle gradle = getGradle() +- String taskRequestName = gradle.getStartParameter().getTaskRequests().toString() +- Pattern pattern +- +- if(taskRequestName.contains("assemble")) { +- pattern = Pattern.compile("assemble(\\w+)(Release|Debug)") +- } +- else { +- pattern = Pattern.compile("generate(\\w+)(Release|Debug)") +- } +- Matcher matcher = pattern.matcher(taskRequestName) +- +- if(matcher.find()) { +- return matcher.group(1).toLowerCase() +- } +- return "" ++if (project(':app').ext.react.enableHermes) { ++ engine = "hermes" + } + +-def replaceSoTaskDebug +-def replaceSoTaskRelease +-if(Integer.parseInt(minor) < 65) { +- tasks.register("replaceSoTaskDebug", replaceSoTask) +- tasks.register("replaceSoTaskRelease", replaceSoTask) +- replaceSoTaskDebug = project.getTasks().getByPath(":react-native-reanimated:replaceSoTaskDebug") +- replaceSoTaskRelease = project.getTasks().getByPath(":react-native-reanimated:replaceSoTaskRelease") +-} +- +-rootProject.getSubprojects().forEach({project -> +- if (project.plugins.hasPlugin("com.android.application")) { +- if(project.ext.react.enableHermes) { +- engine = "hermes" +- } +- +- if(project.getProperties().get("android") && Integer.parseInt(minor) < 65) { +- def projectProperties = project.getProperties() +- if(!projectProperties.get("reanimated") +- || (projectProperties.get("reanimated") && projectProperties.get("reanimated").get("enablePackagingOptions")) +- ) { +- def flavorString = getCurrentFlavor() +- replaceSoTask.appName = project.getProperties().path +- replaceSoTask.buildDir = project.getProperties().buildDir +- def appName = project.getProperties().path +- +- replaceSoTaskDebug.dependsOn( +- project.getTasks().getByPath("${appName}:merge${flavorString}DebugNativeLibs"), +- project.getTasks().getByPath("${appName}:strip${flavorString}DebugDebugSymbols") +- ) +- project.getTasks().getByPath("${appName}:package${flavorString}Debug").dependsOn(replaceSoTaskDebug) +- +- replaceSoTaskRelease.dependsOn( +- project.getTasks().getByPath("${appName}:merge${flavorString}ReleaseNativeLibs"), +- project.getTasks().getByPath("${appName}:strip${flavorString}ReleaseDebugSymbols") +- ) +- project.getTasks().getByPath("${appName}:package${flavorString}Release").dependsOn(replaceSoTaskRelease) +- } +- } +- } +-}) +- + artifacts.add("default", file("react-native-reanimated-${minor}-${engine}.aar")) +\ No newline at end of file +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b.bin b/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b.bin +new file mode 100644 +index 0000000..214ecf5 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b.bin +@@ -0,0 +1 @@ ++o/jetified-react-native-reanimated-64-hermes-api.jar +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b/jetified-react-native-reanimated-64-hermes-api.jar b/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b/jetified-react-native-reanimated-64-hermes-api.jar +new file mode 100644 +index 0000000..a362ca2 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/0674ce792918c850f6599f93a58c111b/jetified-react-native-reanimated-64-hermes-api.jar differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/0e49fb8d0588979b43d04c7c3fdd99ce.bin b/node_modules/react-native-reanimated/android/build/.transforms/0e49fb8d0588979b43d04c7c3fdd99ce.bin +new file mode 100644 +index 0000000..c626d1b +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/0e49fb8d0588979b43d04c7c3fdd99ce.bin +@@ -0,0 +1 @@ ++i/jars/classes.jar +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/15f215e0173913a35544c1270cd76d27.bin b/node_modules/react-native-reanimated/android/build/.transforms/15f215e0173913a35544c1270cd76d27.bin +new file mode 100644 +index 0000000..fcbf8d4 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/15f215e0173913a35544c1270cd76d27.bin +@@ -0,0 +1 @@ ++i/AndroidManifest.xml +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3122bd1de52d19dd628e62e030135c7e.bin b/node_modules/react-native-reanimated/android/build/.transforms/3122bd1de52d19dd628e62e030135c7e.bin +new file mode 100644 +index 0000000..63dace7 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/3122bd1de52d19dd628e62e030135c7e.bin +@@ -0,0 +1 @@ ++i/META-INF/com/android/build/gradle/aar-metadata.properties +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26.bin b/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26.bin +new file mode 100644 +index 0000000..575535e +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26.bin +@@ -0,0 +1 @@ ++o/jetified-react-native-reanimated-64-hermes-runtime.jar +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26/jetified-react-native-reanimated-64-hermes-runtime.jar b/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26/jetified-react-native-reanimated-64-hermes-runtime.jar +new file mode 100644 +index 0000000..1112558 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/32ec7705dc5a057bb6d3ba87670adf26/jetified-react-native-reanimated-64-hermes-runtime.jar differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f.bin b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f.bin +new file mode 100644 +index 0000000..d5e9196 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f.bin +@@ -0,0 +1 @@ ++o/jetified-react-native-reanimated-64-hermes +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/AndroidManifest.xml b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/AndroidManifest.xml +new file mode 100644 +index 0000000..462b587 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/AndroidManifest.xml +@@ -0,0 +1,9 @@ ++<?xml version="1.0" encoding="utf-8"?> ++<manifest xmlns:android="http://schemas.android.com/apk/res/android" ++ package="com.swmansion.reanimated" > ++ ++ <uses-sdk ++ android:minSdkVersion="16" ++ android:targetSdkVersion="30" /> ++ ++</manifest> +\ No newline at end of file +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/META-INF/com/android/build/gradle/aar-metadata.properties b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/META-INF/com/android/build/gradle/aar-metadata.properties +new file mode 100644 +index 0000000..d8560bd +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/META-INF/com/android/build/gradle/aar-metadata.properties +@@ -0,0 +1,2 @@ ++aarFormatVersion=1.0 ++aarMetadataVersion=1.0 +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/R.txt b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/R.txt +new file mode 100644 +index 0000000..b6c4867 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/R.txt +@@ -0,0 +1,1799 @@ ++int anim abc_fade_in 0x0 ++int anim abc_fade_out 0x0 ++int anim abc_grow_fade_in_from_bottom 0x0 ++int anim abc_popup_enter 0x0 ++int anim abc_popup_exit 0x0 ++int anim abc_shrink_fade_out_from_bottom 0x0 ++int anim abc_slide_in_bottom 0x0 ++int anim abc_slide_in_top 0x0 ++int anim abc_slide_out_bottom 0x0 ++int anim abc_slide_out_top 0x0 ++int anim abc_tooltip_enter 0x0 ++int anim abc_tooltip_exit 0x0 ++int anim catalyst_fade_in 0x0 ++int anim catalyst_fade_out 0x0 ++int anim catalyst_push_up_in 0x0 ++int anim catalyst_push_up_out 0x0 ++int anim catalyst_slide_down 0x0 ++int anim catalyst_slide_up 0x0 ++int attr actionBarDivider 0x0 ++int attr actionBarItemBackground 0x0 ++int attr actionBarPopupTheme 0x0 ++int attr actionBarSize 0x0 ++int attr actionBarSplitStyle 0x0 ++int attr actionBarStyle 0x0 ++int attr actionBarTabBarStyle 0x0 ++int attr actionBarTabStyle 0x0 ++int attr actionBarTabTextStyle 0x0 ++int attr actionBarTheme 0x0 ++int attr actionBarWidgetTheme 0x0 ++int attr actionButtonStyle 0x0 ++int attr actionDropDownStyle 0x0 ++int attr actionLayout 0x0 ++int attr actionMenuTextAppearance 0x0 ++int attr actionMenuTextColor 0x0 ++int attr actionModeBackground 0x0 ++int attr actionModeCloseButtonStyle 0x0 ++int attr actionModeCloseDrawable 0x0 ++int attr actionModeCopyDrawable 0x0 ++int attr actionModeCutDrawable 0x0 ++int attr actionModeFindDrawable 0x0 ++int attr actionModePasteDrawable 0x0 ++int attr actionModePopupWindowStyle 0x0 ++int attr actionModeSelectAllDrawable 0x0 ++int attr actionModeShareDrawable 0x0 ++int attr actionModeSplitBackground 0x0 ++int attr actionModeStyle 0x0 ++int attr actionModeWebSearchDrawable 0x0 ++int attr actionOverflowButtonStyle 0x0 ++int attr actionOverflowMenuStyle 0x0 ++int attr actionProviderClass 0x0 ++int attr actionViewClass 0x0 ++int attr activityChooserViewStyle 0x0 ++int attr actualImageResource 0x0 ++int attr actualImageScaleType 0x0 ++int attr actualImageUri 0x0 ++int attr alertDialogButtonGroupStyle 0x0 ++int attr alertDialogCenterButtons 0x0 ++int attr alertDialogStyle 0x0 ++int attr alertDialogTheme 0x0 ++int attr allowStacking 0x0 ++int attr alpha 0x0 ++int attr alphabeticModifiers 0x0 ++int attr arrowHeadLength 0x0 ++int attr arrowShaftLength 0x0 ++int attr autoCompleteTextViewStyle 0x0 ++int attr autoSizeMaxTextSize 0x0 ++int attr autoSizeMinTextSize 0x0 ++int attr autoSizePresetSizes 0x0 ++int attr autoSizeStepGranularity 0x0 ++int attr autoSizeTextType 0x0 ++int attr background 0x0 ++int attr backgroundImage 0x0 ++int attr backgroundSplit 0x0 ++int attr backgroundStacked 0x0 ++int attr backgroundTint 0x0 ++int attr backgroundTintMode 0x0 ++int attr barLength 0x0 ++int attr borderlessButtonStyle 0x0 ++int attr buttonBarButtonStyle 0x0 ++int attr buttonBarNegativeButtonStyle 0x0 ++int attr buttonBarNeutralButtonStyle 0x0 ++int attr buttonBarPositiveButtonStyle 0x0 ++int attr buttonBarStyle 0x0 ++int attr buttonGravity 0x0 ++int attr buttonIconDimen 0x0 ++int attr buttonPanelSideLayout 0x0 ++int attr buttonStyle 0x0 ++int attr buttonStyleSmall 0x0 ++int attr buttonTint 0x0 ++int attr buttonTintMode 0x0 ++int attr checkboxStyle 0x0 ++int attr checkedTextViewStyle 0x0 ++int attr closeIcon 0x0 ++int attr closeItemLayout 0x0 ++int attr collapseContentDescription 0x0 ++int attr collapseIcon 0x0 ++int attr color 0x0 ++int attr colorAccent 0x0 ++int attr colorBackgroundFloating 0x0 ++int attr colorButtonNormal 0x0 ++int attr colorControlActivated 0x0 ++int attr colorControlHighlight 0x0 ++int attr colorControlNormal 0x0 ++int attr colorError 0x0 ++int attr colorPrimary 0x0 ++int attr colorPrimaryDark 0x0 ++int attr colorSwitchThumbNormal 0x0 ++int attr commitIcon 0x0 ++int attr contentDescription 0x0 ++int attr contentInsetEnd 0x0 ++int attr contentInsetEndWithActions 0x0 ++int attr contentInsetLeft 0x0 ++int attr contentInsetRight 0x0 ++int attr contentInsetStart 0x0 ++int attr contentInsetStartWithNavigation 0x0 ++int attr controlBackground 0x0 ++int attr coordinatorLayoutStyle 0x0 ++int attr customNavigationLayout 0x0 ++int attr defaultQueryHint 0x0 ++int attr dialogCornerRadius 0x0 ++int attr dialogPreferredPadding 0x0 ++int attr dialogTheme 0x0 ++int attr displayOptions 0x0 ++int attr divider 0x0 ++int attr dividerHorizontal 0x0 ++int attr dividerPadding 0x0 ++int attr dividerVertical 0x0 ++int attr drawableSize 0x0 ++int attr drawerArrowStyle 0x0 ++int attr dropDownListViewStyle 0x0 ++int attr dropdownListPreferredItemHeight 0x0 ++int attr editTextBackground 0x0 ++int attr editTextColor 0x0 ++int attr editTextStyle 0x0 ++int attr elevation 0x0 ++int attr expandActivityOverflowButtonDrawable 0x0 ++int attr fadeDuration 0x0 ++int attr failureImage 0x0 ++int attr failureImageScaleType 0x0 ++int attr firstBaselineToTopHeight 0x0 ++int attr font 0x0 ++int attr fontFamily 0x0 ++int attr fontProviderAuthority 0x0 ++int attr fontProviderCerts 0x0 ++int attr fontProviderFetchStrategy 0x0 ++int attr fontProviderFetchTimeout 0x0 ++int attr fontProviderPackage 0x0 ++int attr fontProviderQuery 0x0 ++int attr fontStyle 0x0 ++int attr fontVariationSettings 0x0 ++int attr fontWeight 0x0 ++int attr gapBetweenBars 0x0 ++int attr goIcon 0x0 ++int attr height 0x0 ++int attr hideOnContentScroll 0x0 ++int attr homeAsUpIndicator 0x0 ++int attr homeLayout 0x0 ++int attr icon 0x0 ++int attr iconTint 0x0 ++int attr iconTintMode 0x0 ++int attr iconifiedByDefault 0x0 ++int attr imageButtonStyle 0x0 ++int attr indeterminateProgressStyle 0x0 ++int attr initialActivityCount 0x0 ++int attr isLightTheme 0x0 ++int attr itemPadding 0x0 ++int attr keylines 0x0 ++int attr lastBaselineToBottomHeight 0x0 ++int attr layout 0x0 ++int attr layout_anchor 0x0 ++int attr layout_anchorGravity 0x0 ++int attr layout_behavior 0x0 ++int attr layout_dodgeInsetEdges 0x0 ++int attr layout_insetEdge 0x0 ++int attr layout_keyline 0x0 ++int attr lineHeight 0x0 ++int attr listChoiceBackgroundIndicator 0x0 ++int attr listDividerAlertDialog 0x0 ++int attr listItemLayout 0x0 ++int attr listLayout 0x0 ++int attr listMenuViewStyle 0x0 ++int attr listPopupWindowStyle 0x0 ++int attr listPreferredItemHeight 0x0 ++int attr listPreferredItemHeightLarge 0x0 ++int attr listPreferredItemHeightSmall 0x0 ++int attr listPreferredItemPaddingLeft 0x0 ++int attr listPreferredItemPaddingRight 0x0 ++int attr logo 0x0 ++int attr logoDescription 0x0 ++int attr maxButtonHeight 0x0 ++int attr measureWithLargestChild 0x0 ++int attr multiChoiceItemLayout 0x0 ++int attr navigationContentDescription 0x0 ++int attr navigationIcon 0x0 ++int attr navigationMode 0x0 ++int attr numericModifiers 0x0 ++int attr overlapAnchor 0x0 ++int attr overlayImage 0x0 ++int attr paddingBottomNoButtons 0x0 ++int attr paddingEnd 0x0 ++int attr paddingStart 0x0 ++int attr paddingTopNoTitle 0x0 ++int attr panelBackground 0x0 ++int attr panelMenuListTheme 0x0 ++int attr panelMenuListWidth 0x0 ++int attr placeholderImage 0x0 ++int attr placeholderImageScaleType 0x0 ++int attr popupMenuStyle 0x0 ++int attr popupTheme 0x0 ++int attr popupWindowStyle 0x0 ++int attr preserveIconSpacing 0x0 ++int attr pressedStateOverlayImage 0x0 ++int attr progressBarAutoRotateInterval 0x0 ++int attr progressBarImage 0x0 ++int attr progressBarImageScaleType 0x0 ++int attr progressBarPadding 0x0 ++int attr progressBarStyle 0x0 ++int attr queryBackground 0x0 ++int attr queryHint 0x0 ++int attr radioButtonStyle 0x0 ++int attr ratingBarStyle 0x0 ++int attr ratingBarStyleIndicator 0x0 ++int attr ratingBarStyleSmall 0x0 ++int attr retryImage 0x0 ++int attr retryImageScaleType 0x0 ++int attr roundAsCircle 0x0 ++int attr roundBottomEnd 0x0 ++int attr roundBottomLeft 0x0 ++int attr roundBottomRight 0x0 ++int attr roundBottomStart 0x0 ++int attr roundTopEnd 0x0 ++int attr roundTopLeft 0x0 ++int attr roundTopRight 0x0 ++int attr roundTopStart 0x0 ++int attr roundWithOverlayColor 0x0 ++int attr roundedCornerRadius 0x0 ++int attr roundingBorderColor 0x0 ++int attr roundingBorderPadding 0x0 ++int attr roundingBorderWidth 0x0 ++int attr searchHintIcon 0x0 ++int attr searchIcon 0x0 ++int attr searchViewStyle 0x0 ++int attr seekBarStyle 0x0 ++int attr selectableItemBackground 0x0 ++int attr selectableItemBackgroundBorderless 0x0 ++int attr showAsAction 0x0 ++int attr showDividers 0x0 ++int attr showText 0x0 ++int attr showTitle 0x0 ++int attr singleChoiceItemLayout 0x0 ++int attr spinBars 0x0 ++int attr spinnerDropDownItemStyle 0x0 ++int attr spinnerStyle 0x0 ++int attr splitTrack 0x0 ++int attr srcCompat 0x0 ++int attr state_above_anchor 0x0 ++int attr statusBarBackground 0x0 ++int attr subMenuArrow 0x0 ++int attr submitBackground 0x0 ++int attr subtitle 0x0 ++int attr subtitleTextAppearance 0x0 ++int attr subtitleTextColor 0x0 ++int attr subtitleTextStyle 0x0 ++int attr suggestionRowLayout 0x0 ++int attr switchMinWidth 0x0 ++int attr switchPadding 0x0 ++int attr switchStyle 0x0 ++int attr switchTextAppearance 0x0 ++int attr textAllCaps 0x0 ++int attr textAppearanceLargePopupMenu 0x0 ++int attr textAppearanceListItem 0x0 ++int attr textAppearanceListItemSecondary 0x0 ++int attr textAppearanceListItemSmall 0x0 ++int attr textAppearancePopupMenuHeader 0x0 ++int attr textAppearanceSearchResultSubtitle 0x0 ++int attr textAppearanceSearchResultTitle 0x0 ++int attr textAppearanceSmallPopupMenu 0x0 ++int attr textColorAlertDialogListItem 0x0 ++int attr textColorSearchUrl 0x0 ++int attr theme 0x0 ++int attr thickness 0x0 ++int attr thumbTextPadding 0x0 ++int attr thumbTint 0x0 ++int attr thumbTintMode 0x0 ++int attr tickMark 0x0 ++int attr tickMarkTint 0x0 ++int attr tickMarkTintMode 0x0 ++int attr tint 0x0 ++int attr tintMode 0x0 ++int attr title 0x0 ++int attr titleMargin 0x0 ++int attr titleMarginBottom 0x0 ++int attr titleMarginEnd 0x0 ++int attr titleMarginStart 0x0 ++int attr titleMarginTop 0x0 ++int attr titleMargins 0x0 ++int attr titleTextAppearance 0x0 ++int attr titleTextColor 0x0 ++int attr titleTextStyle 0x0 ++int attr toolbarNavigationButtonStyle 0x0 ++int attr toolbarStyle 0x0 ++int attr tooltipForegroundColor 0x0 ++int attr tooltipFrameBackground 0x0 ++int attr tooltipText 0x0 ++int attr track 0x0 ++int attr trackTint 0x0 ++int attr trackTintMode 0x0 ++int attr ttcIndex 0x0 ++int attr viewAspectRatio 0x0 ++int attr viewInflaterClass 0x0 ++int attr voiceIcon 0x0 ++int attr windowActionBar 0x0 ++int attr windowActionBarOverlay 0x0 ++int attr windowActionModeOverlay 0x0 ++int attr windowFixedHeightMajor 0x0 ++int attr windowFixedHeightMinor 0x0 ++int attr windowFixedWidthMajor 0x0 ++int attr windowFixedWidthMinor 0x0 ++int attr windowMinWidthMajor 0x0 ++int attr windowMinWidthMinor 0x0 ++int attr windowNoTitle 0x0 ++int bool abc_action_bar_embed_tabs 0x0 ++int bool abc_allow_stacked_button_bar 0x0 ++int bool abc_config_actionMenuItemAllCaps 0x0 ++int color abc_background_cache_hint_selector_material_dark 0x0 ++int color abc_background_cache_hint_selector_material_light 0x0 ++int color abc_btn_colored_borderless_text_material 0x0 ++int color abc_btn_colored_text_material 0x0 ++int color abc_color_highlight_material 0x0 ++int color abc_hint_foreground_material_dark 0x0 ++int color abc_hint_foreground_material_light 0x0 ++int color abc_input_method_navigation_guard 0x0 ++int color abc_primary_text_disable_only_material_dark 0x0 ++int color abc_primary_text_disable_only_material_light 0x0 ++int color abc_primary_text_material_dark 0x0 ++int color abc_primary_text_material_light 0x0 ++int color abc_search_url_text 0x0 ++int color abc_search_url_text_normal 0x0 ++int color abc_search_url_text_pressed 0x0 ++int color abc_search_url_text_selected 0x0 ++int color abc_secondary_text_material_dark 0x0 ++int color abc_secondary_text_material_light 0x0 ++int color abc_tint_btn_checkable 0x0 ++int color abc_tint_default 0x0 ++int color abc_tint_edittext 0x0 ++int color abc_tint_seek_thumb 0x0 ++int color abc_tint_spinner 0x0 ++int color abc_tint_switch_track 0x0 ++int color accent_material_dark 0x0 ++int color accent_material_light 0x0 ++int color background_floating_material_dark 0x0 ++int color background_floating_material_light 0x0 ++int color background_material_dark 0x0 ++int color background_material_light 0x0 ++int color bright_foreground_disabled_material_dark 0x0 ++int color bright_foreground_disabled_material_light 0x0 ++int color bright_foreground_inverse_material_dark 0x0 ++int color bright_foreground_inverse_material_light 0x0 ++int color bright_foreground_material_dark 0x0 ++int color bright_foreground_material_light 0x0 ++int color button_material_dark 0x0 ++int color button_material_light 0x0 ++int color catalyst_logbox_background 0x0 ++int color catalyst_redbox_background 0x0 ++int color dim_foreground_disabled_material_dark 0x0 ++int color dim_foreground_disabled_material_light 0x0 ++int color dim_foreground_material_dark 0x0 ++int color dim_foreground_material_light 0x0 ++int color error_color_material_dark 0x0 ++int color error_color_material_light 0x0 ++int color foreground_material_dark 0x0 ++int color foreground_material_light 0x0 ++int color highlighted_text_material_dark 0x0 ++int color highlighted_text_material_light 0x0 ++int color material_blue_grey_800 0x0 ++int color material_blue_grey_900 0x0 ++int color material_blue_grey_950 0x0 ++int color material_deep_teal_200 0x0 ++int color material_deep_teal_500 0x0 ++int color material_grey_100 0x0 ++int color material_grey_300 0x0 ++int color material_grey_50 0x0 ++int color material_grey_600 0x0 ++int color material_grey_800 0x0 ++int color material_grey_850 0x0 ++int color material_grey_900 0x0 ++int color notification_action_color_filter 0x0 ++int color notification_icon_bg_color 0x0 ++int color primary_dark_material_dark 0x0 ++int color primary_dark_material_light 0x0 ++int color primary_material_dark 0x0 ++int color primary_material_light 0x0 ++int color primary_text_default_material_dark 0x0 ++int color primary_text_default_material_light 0x0 ++int color primary_text_disabled_material_dark 0x0 ++int color primary_text_disabled_material_light 0x0 ++int color ripple_material_dark 0x0 ++int color ripple_material_light 0x0 ++int color secondary_text_default_material_dark 0x0 ++int color secondary_text_default_material_light 0x0 ++int color secondary_text_disabled_material_dark 0x0 ++int color secondary_text_disabled_material_light 0x0 ++int color switch_thumb_disabled_material_dark 0x0 ++int color switch_thumb_disabled_material_light 0x0 ++int color switch_thumb_material_dark 0x0 ++int color switch_thumb_material_light 0x0 ++int color switch_thumb_normal_material_dark 0x0 ++int color switch_thumb_normal_material_light 0x0 ++int color tooltip_background_dark 0x0 ++int color tooltip_background_light 0x0 ++int dimen abc_action_bar_content_inset_material 0x0 ++int dimen abc_action_bar_content_inset_with_nav 0x0 ++int dimen abc_action_bar_default_height_material 0x0 ++int dimen abc_action_bar_default_padding_end_material 0x0 ++int dimen abc_action_bar_default_padding_start_material 0x0 ++int dimen abc_action_bar_elevation_material 0x0 ++int dimen abc_action_bar_icon_vertical_padding_material 0x0 ++int dimen abc_action_bar_overflow_padding_end_material 0x0 ++int dimen abc_action_bar_overflow_padding_start_material 0x0 ++int dimen abc_action_bar_stacked_max_height 0x0 ++int dimen abc_action_bar_stacked_tab_max_width 0x0 ++int dimen abc_action_bar_subtitle_bottom_margin_material 0x0 ++int dimen abc_action_bar_subtitle_top_margin_material 0x0 ++int dimen abc_action_button_min_height_material 0x0 ++int dimen abc_action_button_min_width_material 0x0 ++int dimen abc_action_button_min_width_overflow_material 0x0 ++int dimen abc_alert_dialog_button_bar_height 0x0 ++int dimen abc_alert_dialog_button_dimen 0x0 ++int dimen abc_button_inset_horizontal_material 0x0 ++int dimen abc_button_inset_vertical_material 0x0 ++int dimen abc_button_padding_horizontal_material 0x0 ++int dimen abc_button_padding_vertical_material 0x0 ++int dimen abc_cascading_menus_min_smallest_width 0x0 ++int dimen abc_config_prefDialogWidth 0x0 ++int dimen abc_control_corner_material 0x0 ++int dimen abc_control_inset_material 0x0 ++int dimen abc_control_padding_material 0x0 ++int dimen abc_dialog_corner_radius_material 0x0 ++int dimen abc_dialog_fixed_height_major 0x0 ++int dimen abc_dialog_fixed_height_minor 0x0 ++int dimen abc_dialog_fixed_width_major 0x0 ++int dimen abc_dialog_fixed_width_minor 0x0 ++int dimen abc_dialog_list_padding_bottom_no_buttons 0x0 ++int dimen abc_dialog_list_padding_top_no_title 0x0 ++int dimen abc_dialog_min_width_major 0x0 ++int dimen abc_dialog_min_width_minor 0x0 ++int dimen abc_dialog_padding_material 0x0 ++int dimen abc_dialog_padding_top_material 0x0 ++int dimen abc_dialog_title_divider_material 0x0 ++int dimen abc_disabled_alpha_material_dark 0x0 ++int dimen abc_disabled_alpha_material_light 0x0 ++int dimen abc_dropdownitem_icon_width 0x0 ++int dimen abc_dropdownitem_text_padding_left 0x0 ++int dimen abc_dropdownitem_text_padding_right 0x0 ++int dimen abc_edit_text_inset_bottom_material 0x0 ++int dimen abc_edit_text_inset_horizontal_material 0x0 ++int dimen abc_edit_text_inset_top_material 0x0 ++int dimen abc_floating_window_z 0x0 ++int dimen abc_list_item_padding_horizontal_material 0x0 ++int dimen abc_panel_menu_list_width 0x0 ++int dimen abc_progress_bar_height_material 0x0 ++int dimen abc_search_view_preferred_height 0x0 ++int dimen abc_search_view_preferred_width 0x0 ++int dimen abc_seekbar_track_background_height_material 0x0 ++int dimen abc_seekbar_track_progress_height_material 0x0 ++int dimen abc_select_dialog_padding_start_material 0x0 ++int dimen abc_switch_padding 0x0 ++int dimen abc_text_size_body_1_material 0x0 ++int dimen abc_text_size_body_2_material 0x0 ++int dimen abc_text_size_button_material 0x0 ++int dimen abc_text_size_caption_material 0x0 ++int dimen abc_text_size_display_1_material 0x0 ++int dimen abc_text_size_display_2_material 0x0 ++int dimen abc_text_size_display_3_material 0x0 ++int dimen abc_text_size_display_4_material 0x0 ++int dimen abc_text_size_headline_material 0x0 ++int dimen abc_text_size_large_material 0x0 ++int dimen abc_text_size_medium_material 0x0 ++int dimen abc_text_size_menu_header_material 0x0 ++int dimen abc_text_size_menu_material 0x0 ++int dimen abc_text_size_small_material 0x0 ++int dimen abc_text_size_subhead_material 0x0 ++int dimen abc_text_size_subtitle_material_toolbar 0x0 ++int dimen abc_text_size_title_material 0x0 ++int dimen abc_text_size_title_material_toolbar 0x0 ++int dimen compat_button_inset_horizontal_material 0x0 ++int dimen compat_button_inset_vertical_material 0x0 ++int dimen compat_button_padding_horizontal_material 0x0 ++int dimen compat_button_padding_vertical_material 0x0 ++int dimen compat_control_corner_material 0x0 ++int dimen compat_notification_large_icon_max_height 0x0 ++int dimen compat_notification_large_icon_max_width 0x0 ++int dimen disabled_alpha_material_dark 0x0 ++int dimen disabled_alpha_material_light 0x0 ++int dimen highlight_alpha_material_colored 0x0 ++int dimen highlight_alpha_material_dark 0x0 ++int dimen highlight_alpha_material_light 0x0 ++int dimen hint_alpha_material_dark 0x0 ++int dimen hint_alpha_material_light 0x0 ++int dimen hint_pressed_alpha_material_dark 0x0 ++int dimen hint_pressed_alpha_material_light 0x0 ++int dimen notification_action_icon_size 0x0 ++int dimen notification_action_text_size 0x0 ++int dimen notification_big_circle_margin 0x0 ++int dimen notification_content_margin_start 0x0 ++int dimen notification_large_icon_height 0x0 ++int dimen notification_large_icon_width 0x0 ++int dimen notification_main_column_padding_top 0x0 ++int dimen notification_media_narrow_margin 0x0 ++int dimen notification_right_icon_size 0x0 ++int dimen notification_right_side_padding_top 0x0 ++int dimen notification_small_icon_background_padding 0x0 ++int dimen notification_small_icon_size_as_large 0x0 ++int dimen notification_subtext_size 0x0 ++int dimen notification_top_pad 0x0 ++int dimen notification_top_pad_large_text 0x0 ++int dimen tooltip_corner_radius 0x0 ++int dimen tooltip_horizontal_padding 0x0 ++int dimen tooltip_margin 0x0 ++int dimen tooltip_precise_anchor_extra_offset 0x0 ++int dimen tooltip_precise_anchor_threshold 0x0 ++int dimen tooltip_vertical_padding 0x0 ++int dimen tooltip_y_offset_non_touch 0x0 ++int dimen tooltip_y_offset_touch 0x0 ++int drawable abc_ab_share_pack_mtrl_alpha 0x0 ++int drawable abc_action_bar_item_background_material 0x0 ++int drawable abc_btn_borderless_material 0x0 ++int drawable abc_btn_check_material 0x0 ++int drawable abc_btn_check_to_on_mtrl_000 0x0 ++int drawable abc_btn_check_to_on_mtrl_015 0x0 ++int drawable abc_btn_colored_material 0x0 ++int drawable abc_btn_default_mtrl_shape 0x0 ++int drawable abc_btn_radio_material 0x0 ++int drawable abc_btn_radio_to_on_mtrl_000 0x0 ++int drawable abc_btn_radio_to_on_mtrl_015 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00001 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00012 0x0 ++int drawable abc_cab_background_internal_bg 0x0 ++int drawable abc_cab_background_top_material 0x0 ++int drawable abc_cab_background_top_mtrl_alpha 0x0 ++int drawable abc_control_background_material 0x0 ++int drawable abc_dialog_material_background 0x0 ++int drawable abc_edit_text_material 0x0 ++int drawable abc_ic_ab_back_material 0x0 ++int drawable abc_ic_arrow_drop_right_black_24dp 0x0 ++int drawable abc_ic_clear_material 0x0 ++int drawable abc_ic_commit_search_api_mtrl_alpha 0x0 ++int drawable abc_ic_go_search_api_material 0x0 ++int drawable abc_ic_menu_copy_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_cut_mtrl_alpha 0x0 ++int drawable abc_ic_menu_overflow_material 0x0 ++int drawable abc_ic_menu_paste_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_selectall_mtrl_alpha 0x0 ++int drawable abc_ic_menu_share_mtrl_alpha 0x0 ++int drawable abc_ic_search_api_material 0x0 ++int drawable abc_ic_star_black_16dp 0x0 ++int drawable abc_ic_star_black_36dp 0x0 ++int drawable abc_ic_star_black_48dp 0x0 ++int drawable abc_ic_star_half_black_16dp 0x0 ++int drawable abc_ic_star_half_black_36dp 0x0 ++int drawable abc_ic_star_half_black_48dp 0x0 ++int drawable abc_ic_voice_search_api_material 0x0 ++int drawable abc_item_background_holo_dark 0x0 ++int drawable abc_item_background_holo_light 0x0 ++int drawable abc_list_divider_material 0x0 ++int drawable abc_list_divider_mtrl_alpha 0x0 ++int drawable abc_list_focused_holo 0x0 ++int drawable abc_list_longpressed_holo 0x0 ++int drawable abc_list_pressed_holo_dark 0x0 ++int drawable abc_list_pressed_holo_light 0x0 ++int drawable abc_list_selector_background_transition_holo_dark 0x0 ++int drawable abc_list_selector_background_transition_holo_light 0x0 ++int drawable abc_list_selector_disabled_holo_dark 0x0 ++int drawable abc_list_selector_disabled_holo_light 0x0 ++int drawable abc_list_selector_holo_dark 0x0 ++int drawable abc_list_selector_holo_light 0x0 ++int drawable abc_menu_hardkey_panel_mtrl_mult 0x0 ++int drawable abc_popup_background_mtrl_mult 0x0 ++int drawable abc_ratingbar_indicator_material 0x0 ++int drawable abc_ratingbar_material 0x0 ++int drawable abc_ratingbar_small_material 0x0 ++int drawable abc_scrubber_control_off_mtrl_alpha 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_000 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_005 0x0 ++int drawable abc_scrubber_primary_mtrl_alpha 0x0 ++int drawable abc_scrubber_track_mtrl_alpha 0x0 ++int drawable abc_seekbar_thumb_material 0x0 ++int drawable abc_seekbar_tick_mark_material 0x0 ++int drawable abc_seekbar_track_material 0x0 ++int drawable abc_spinner_mtrl_am_alpha 0x0 ++int drawable abc_spinner_textfield_background_material 0x0 ++int drawable abc_switch_thumb_material 0x0 ++int drawable abc_switch_track_mtrl_alpha 0x0 ++int drawable abc_tab_indicator_material 0x0 ++int drawable abc_tab_indicator_mtrl_alpha 0x0 ++int drawable abc_text_cursor_material 0x0 ++int drawable abc_text_select_handle_left_mtrl_dark 0x0 ++int drawable abc_text_select_handle_left_mtrl_light 0x0 ++int drawable abc_text_select_handle_middle_mtrl_dark 0x0 ++int drawable abc_text_select_handle_middle_mtrl_light 0x0 ++int drawable abc_text_select_handle_right_mtrl_dark 0x0 ++int drawable abc_text_select_handle_right_mtrl_light 0x0 ++int drawable abc_textfield_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_search_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_material 0x0 ++int drawable abc_vector_test 0x0 ++int drawable notification_action_background 0x0 ++int drawable notification_bg 0x0 ++int drawable notification_bg_low 0x0 ++int drawable notification_bg_low_normal 0x0 ++int drawable notification_bg_low_pressed 0x0 ++int drawable notification_bg_normal 0x0 ++int drawable notification_bg_normal_pressed 0x0 ++int drawable notification_icon_background 0x0 ++int drawable notification_template_icon_bg 0x0 ++int drawable notification_template_icon_low_bg 0x0 ++int drawable notification_tile_bg 0x0 ++int drawable notify_panel_notification_icon_bg 0x0 ++int drawable redbox_top_border_background 0x0 ++int drawable tooltip_frame_dark 0x0 ++int drawable tooltip_frame_light 0x0 ++int id accessibility_actions 0x0 ++int id accessibility_hint 0x0 ++int id accessibility_label 0x0 ++int id accessibility_role 0x0 ++int id accessibility_state 0x0 ++int id accessibility_value 0x0 ++int id action_bar 0x0 ++int id action_bar_activity_content 0x0 ++int id action_bar_container 0x0 ++int id action_bar_root 0x0 ++int id action_bar_spinner 0x0 ++int id action_bar_subtitle 0x0 ++int id action_bar_title 0x0 ++int id action_container 0x0 ++int id action_context_bar 0x0 ++int id action_divider 0x0 ++int id action_image 0x0 ++int id action_menu_divider 0x0 ++int id action_menu_presenter 0x0 ++int id action_mode_bar 0x0 ++int id action_mode_bar_stub 0x0 ++int id action_mode_close_button 0x0 ++int id action_text 0x0 ++int id actions 0x0 ++int id activity_chooser_view_content 0x0 ++int id add 0x0 ++int id alertTitle 0x0 ++int id async 0x0 ++int id blocking 0x0 ++int id bottom 0x0 ++int id buttonPanel 0x0 ++int id catalyst_redbox_title 0x0 ++int id center 0x0 ++int id centerCrop 0x0 ++int id centerInside 0x0 ++int id checkbox 0x0 ++int id chronometer 0x0 ++int id content 0x0 ++int id contentPanel 0x0 ++int id custom 0x0 ++int id customPanel 0x0 ++int id decor_content_parent 0x0 ++int id default_activity_button 0x0 ++int id edit_query 0x0 ++int id end 0x0 ++int id expand_activities_button 0x0 ++int id expanded_menu 0x0 ++int id fitBottomStart 0x0 ++int id fitCenter 0x0 ++int id fitEnd 0x0 ++int id fitStart 0x0 ++int id fitXY 0x0 ++int id focusCrop 0x0 ++int id forever 0x0 ++int id fps_text 0x0 ++int id ghost_view 0x0 ++int id ghost_view_holder 0x0 ++int id group_divider 0x0 ++int id home 0x0 ++int id icon 0x0 ++int id icon_group 0x0 ++int id image 0x0 ++int id info 0x0 ++int id italic 0x0 ++int id left 0x0 ++int id line1 0x0 ++int id line3 0x0 ++int id listMode 0x0 ++int id list_item 0x0 ++int id message 0x0 ++int id multiply 0x0 ++int id none 0x0 ++int id normal 0x0 ++int id notification_background 0x0 ++int id notification_main_column 0x0 ++int id notification_main_column_container 0x0 ++int id parentPanel 0x0 ++int id parent_matrix 0x0 ++int id progress_circular 0x0 ++int id progress_horizontal 0x0 ++int id radio 0x0 ++int id react_test_id 0x0 ++int id right 0x0 ++int id right_icon 0x0 ++int id right_side 0x0 ++int id rn_frame_file 0x0 ++int id rn_frame_method 0x0 ++int id rn_redbox_dismiss_button 0x0 ++int id rn_redbox_line_separator 0x0 ++int id rn_redbox_loading_indicator 0x0 ++int id rn_redbox_reload_button 0x0 ++int id rn_redbox_report_button 0x0 ++int id rn_redbox_report_label 0x0 ++int id rn_redbox_stack 0x0 ++int id save_non_transition_alpha 0x0 ++int id save_overlay_view 0x0 ++int id screen 0x0 ++int id scrollIndicatorDown 0x0 ++int id scrollIndicatorUp 0x0 ++int id scrollView 0x0 ++int id search_badge 0x0 ++int id search_bar 0x0 ++int id search_button 0x0 ++int id search_close_btn 0x0 ++int id search_edit_frame 0x0 ++int id search_go_btn 0x0 ++int id search_mag_icon 0x0 ++int id search_plate 0x0 ++int id search_src_text 0x0 ++int id search_voice_btn 0x0 ++int id select_dialog_listview 0x0 ++int id shortcut 0x0 ++int id spacer 0x0 ++int id split_action_bar 0x0 ++int id src_atop 0x0 ++int id src_in 0x0 ++int id src_over 0x0 ++int id start 0x0 ++int id submenuarrow 0x0 ++int id submit_area 0x0 ++int id tabMode 0x0 ++int id tag_transition_group 0x0 ++int id tag_unhandled_key_event_manager 0x0 ++int id tag_unhandled_key_listeners 0x0 ++int id text 0x0 ++int id text2 0x0 ++int id textSpacerNoButtons 0x0 ++int id textSpacerNoTitle 0x0 ++int id time 0x0 ++int id title 0x0 ++int id titleDividerNoCustom 0x0 ++int id title_template 0x0 ++int id top 0x0 ++int id topPanel 0x0 ++int id transition_current_scene 0x0 ++int id transition_layout_save 0x0 ++int id transition_position 0x0 ++int id transition_scene_layoutid_cache 0x0 ++int id transition_transform 0x0 ++int id uniform 0x0 ++int id up 0x0 ++int id view_tag_instance_handle 0x0 ++int id view_tag_native_id 0x0 ++int id wrap_content 0x0 ++int integer abc_config_activityDefaultDur 0x0 ++int integer abc_config_activityShortDur 0x0 ++int integer cancel_button_image_alpha 0x0 ++int integer config_tooltipAnimTime 0x0 ++int integer react_native_dev_server_port 0x0 ++int integer react_native_inspector_proxy_port 0x0 ++int integer status_bar_notification_info_maxnum 0x0 ++int layout abc_action_bar_title_item 0x0 ++int layout abc_action_bar_up_container 0x0 ++int layout abc_action_menu_item_layout 0x0 ++int layout abc_action_menu_layout 0x0 ++int layout abc_action_mode_bar 0x0 ++int layout abc_action_mode_close_item_material 0x0 ++int layout abc_activity_chooser_view 0x0 ++int layout abc_activity_chooser_view_list_item 0x0 ++int layout abc_alert_dialog_button_bar_material 0x0 ++int layout abc_alert_dialog_material 0x0 ++int layout abc_alert_dialog_title_material 0x0 ++int layout abc_cascading_menu_item_layout 0x0 ++int layout abc_dialog_title_material 0x0 ++int layout abc_expanded_menu_layout 0x0 ++int layout abc_list_menu_item_checkbox 0x0 ++int layout abc_list_menu_item_icon 0x0 ++int layout abc_list_menu_item_layout 0x0 ++int layout abc_list_menu_item_radio 0x0 ++int layout abc_popup_menu_header_item_layout 0x0 ++int layout abc_popup_menu_item_layout 0x0 ++int layout abc_screen_content_include 0x0 ++int layout abc_screen_simple 0x0 ++int layout abc_screen_simple_overlay_action_mode 0x0 ++int layout abc_screen_toolbar 0x0 ++int layout abc_search_dropdown_item_icons_2line 0x0 ++int layout abc_search_view 0x0 ++int layout abc_select_dialog_material 0x0 ++int layout abc_tooltip 0x0 ++int layout dev_loading_view 0x0 ++int layout fps_view 0x0 ++int layout notification_action 0x0 ++int layout notification_action_tombstone 0x0 ++int layout notification_template_custom_big 0x0 ++int layout notification_template_icon_group 0x0 ++int layout notification_template_part_chronometer 0x0 ++int layout notification_template_part_time 0x0 ++int layout redbox_item_frame 0x0 ++int layout redbox_item_title 0x0 ++int layout redbox_view 0x0 ++int layout select_dialog_item_material 0x0 ++int layout select_dialog_multichoice_material 0x0 ++int layout select_dialog_singlechoice_material 0x0 ++int layout support_simple_spinner_dropdown_item 0x0 ++int string abc_action_bar_home_description 0x0 ++int string abc_action_bar_up_description 0x0 ++int string abc_action_menu_overflow_description 0x0 ++int string abc_action_mode_done 0x0 ++int string abc_activity_chooser_view_see_all 0x0 ++int string abc_activitychooserview_choose_application 0x0 ++int string abc_capital_off 0x0 ++int string abc_capital_on 0x0 ++int string abc_font_family_body_1_material 0x0 ++int string abc_font_family_body_2_material 0x0 ++int string abc_font_family_button_material 0x0 ++int string abc_font_family_caption_material 0x0 ++int string abc_font_family_display_1_material 0x0 ++int string abc_font_family_display_2_material 0x0 ++int string abc_font_family_display_3_material 0x0 ++int string abc_font_family_display_4_material 0x0 ++int string abc_font_family_headline_material 0x0 ++int string abc_font_family_menu_material 0x0 ++int string abc_font_family_subhead_material 0x0 ++int string abc_font_family_title_material 0x0 ++int string abc_menu_alt_shortcut_label 0x0 ++int string abc_menu_ctrl_shortcut_label 0x0 ++int string abc_menu_delete_shortcut_label 0x0 ++int string abc_menu_enter_shortcut_label 0x0 ++int string abc_menu_function_shortcut_label 0x0 ++int string abc_menu_meta_shortcut_label 0x0 ++int string abc_menu_shift_shortcut_label 0x0 ++int string abc_menu_space_shortcut_label 0x0 ++int string abc_menu_sym_shortcut_label 0x0 ++int string abc_prepend_shortcut_label 0x0 ++int string abc_search_hint 0x0 ++int string abc_searchview_description_clear 0x0 ++int string abc_searchview_description_query 0x0 ++int string abc_searchview_description_search 0x0 ++int string abc_searchview_description_submit 0x0 ++int string abc_searchview_description_voice 0x0 ++int string abc_shareactionprovider_share_with 0x0 ++int string abc_shareactionprovider_share_with_application 0x0 ++int string abc_toolbar_collapse_description 0x0 ++int string alert_description 0x0 ++int string button_description 0x0 ++int string catalyst_change_bundle_location 0x0 ++int string catalyst_copy_button 0x0 ++int string catalyst_debug 0x0 ++int string catalyst_debug_chrome 0x0 ++int string catalyst_debug_chrome_stop 0x0 ++int string catalyst_debug_connecting 0x0 ++int string catalyst_debug_error 0x0 ++int string catalyst_debug_open 0x0 ++int string catalyst_debug_stop 0x0 ++int string catalyst_devtools_open 0x0 ++int string catalyst_dismiss_button 0x0 ++int string catalyst_heap_capture 0x0 ++int string catalyst_hot_reloading 0x0 ++int string catalyst_hot_reloading_auto_disable 0x0 ++int string catalyst_hot_reloading_auto_enable 0x0 ++int string catalyst_hot_reloading_stop 0x0 ++int string catalyst_inspector 0x0 ++int string catalyst_loading_from_url 0x0 ++int string catalyst_open_flipper_error 0x0 ++int string catalyst_perf_monitor 0x0 ++int string catalyst_perf_monitor_stop 0x0 ++int string catalyst_reload 0x0 ++int string catalyst_reload_button 0x0 ++int string catalyst_reload_error 0x0 ++int string catalyst_report_button 0x0 ++int string catalyst_sample_profiler_disable 0x0 ++int string catalyst_sample_profiler_enable 0x0 ++int string catalyst_settings 0x0 ++int string catalyst_settings_title 0x0 ++int string combobox_description 0x0 ++int string header_description 0x0 ++int string image_description 0x0 ++int string imagebutton_description 0x0 ++int string link_description 0x0 ++int string menu_description 0x0 ++int string menubar_description 0x0 ++int string menuitem_description 0x0 ++int string progressbar_description 0x0 ++int string radiogroup_description 0x0 ++int string rn_tab_description 0x0 ++int string scrollbar_description 0x0 ++int string search_description 0x0 ++int string search_menu_title 0x0 ++int string spinbutton_description 0x0 ++int string state_busy_description 0x0 ++int string state_collapsed_description 0x0 ++int string state_expanded_description 0x0 ++int string state_mixed_description 0x0 ++int string state_off_description 0x0 ++int string state_on_description 0x0 ++int string status_bar_notification_info_overflow 0x0 ++int string summary_description 0x0 ++int string tablist_description 0x0 ++int string timer_description 0x0 ++int string toolbar_description 0x0 ++int style AlertDialog_AppCompat 0x0 ++int style AlertDialog_AppCompat_Light 0x0 ++int style Animation_AppCompat_Dialog 0x0 ++int style Animation_AppCompat_DropDownUp 0x0 ++int style Animation_AppCompat_Tooltip 0x0 ++int style Animation_Catalyst_LogBox 0x0 ++int style Animation_Catalyst_RedBox 0x0 ++int style Base_AlertDialog_AppCompat 0x0 ++int style Base_AlertDialog_AppCompat_Light 0x0 ++int style Base_Animation_AppCompat_Dialog 0x0 ++int style Base_Animation_AppCompat_DropDownUp 0x0 ++int style Base_Animation_AppCompat_Tooltip 0x0 ++int style Base_DialogWindowTitleBackground_AppCompat 0x0 ++int style Base_DialogWindowTitle_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat_Body1 0x0 ++int style Base_TextAppearance_AppCompat_Body2 0x0 ++int style Base_TextAppearance_AppCompat_Button 0x0 ++int style Base_TextAppearance_AppCompat_Caption 0x0 ++int style Base_TextAppearance_AppCompat_Display1 0x0 ++int style Base_TextAppearance_AppCompat_Display2 0x0 ++int style Base_TextAppearance_AppCompat_Display3 0x0 ++int style Base_TextAppearance_AppCompat_Display4 0x0 ++int style Base_TextAppearance_AppCompat_Headline 0x0 ++int style Base_TextAppearance_AppCompat_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Large 0x0 ++int style Base_TextAppearance_AppCompat_Large_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Medium 0x0 ++int style Base_TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Menu 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style Base_TextAppearance_AppCompat_Small 0x0 ++int style Base_TextAppearance_AppCompat_Small_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Subhead 0x0 ++int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Title 0x0 ++int style Base_TextAppearance_AppCompat_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Tooltip 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Switch 0x0 ++int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Base_ThemeOverlay_AppCompat 0x0 ++int style Base_ThemeOverlay_AppCompat_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style Base_ThemeOverlay_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat 0x0 ++int style Base_Theme_AppCompat_CompactMenu 0x0 ++int style Base_Theme_AppCompat_Dialog 0x0 ++int style Base_Theme_AppCompat_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Base_Theme_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Base_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat 0x0 ++int style Base_V21_Theme_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat_Light 0x0 ++int style Base_V21_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V22_Theme_AppCompat 0x0 ++int style Base_V22_Theme_AppCompat_Light 0x0 ++int style Base_V23_Theme_AppCompat 0x0 ++int style Base_V23_Theme_AppCompat_Light 0x0 ++int style Base_V26_Theme_AppCompat 0x0 ++int style Base_V26_Theme_AppCompat_Light 0x0 ++int style Base_V26_Widget_AppCompat_Toolbar 0x0 ++int style Base_V28_Theme_AppCompat 0x0 ++int style Base_V28_Theme_AppCompat_Light 0x0 ++int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat 0x0 ++int style Base_V7_Theme_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat_Light 0x0 ++int style Base_V7_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_V7_Widget_AppCompat_EditText 0x0 ++int style Base_V7_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_ActionBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_ActionButton 0x0 ++int style Base_Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Base_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Base_Widget_AppCompat_ActionMode 0x0 ++int style Base_Widget_AppCompat_ActivityChooserView 0x0 ++int style Base_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_Widget_AppCompat_Button 0x0 ++int style Base_Widget_AppCompat_ButtonBar 0x0 ++int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Borderless 0x0 ++int style Base_Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Colored 0x0 ++int style Base_Widget_AppCompat_Button_Small 0x0 ++int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Base_Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x0 ++int style Base_Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Base_Widget_AppCompat_EditText 0x0 ++int style Base_Widget_AppCompat_ImageButton 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_ListMenuView 0x0 ++int style Base_Widget_AppCompat_ListPopupWindow 0x0 ++int style Base_Widget_AppCompat_ListView 0x0 ++int style Base_Widget_AppCompat_ListView_DropDown 0x0 ++int style Base_Widget_AppCompat_ListView_Menu 0x0 ++int style Base_Widget_AppCompat_PopupMenu 0x0 ++int style Base_Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_PopupWindow 0x0 ++int style Base_Widget_AppCompat_ProgressBar 0x0 ++int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Base_Widget_AppCompat_RatingBar 0x0 ++int style Base_Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Base_Widget_AppCompat_RatingBar_Small 0x0 ++int style Base_Widget_AppCompat_SearchView 0x0 ++int style Base_Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Base_Widget_AppCompat_SeekBar 0x0 ++int style Base_Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Base_Widget_AppCompat_Spinner 0x0 ++int style Base_Widget_AppCompat_Spinner_Underlined 0x0 ++int style Base_Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Base_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style CalendarDatePickerDialog 0x0 ++int style CalendarDatePickerStyle 0x0 ++int style DialogAnimationFade 0x0 ++int style DialogAnimationSlide 0x0 ++int style Platform_AppCompat 0x0 ++int style Platform_AppCompat_Light 0x0 ++int style Platform_ThemeOverlay_AppCompat 0x0 ++int style Platform_ThemeOverlay_AppCompat_Dark 0x0 ++int style Platform_ThemeOverlay_AppCompat_Light 0x0 ++int style Platform_V21_AppCompat 0x0 ++int style Platform_V21_AppCompat_Light 0x0 ++int style Platform_V25_AppCompat 0x0 ++int style Platform_V25_AppCompat_Light 0x0 ++int style Platform_Widget_AppCompat_Spinner 0x0 ++int style RtlOverlay_DialogWindowTitle_AppCompat 0x0 ++int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x0 ++int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x0 ++int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style SpinnerDatePickerDialog 0x0 ++int style SpinnerDatePickerStyle 0x0 ++int style TextAppearance_AppCompat 0x0 ++int style TextAppearance_AppCompat_Body1 0x0 ++int style TextAppearance_AppCompat_Body2 0x0 ++int style TextAppearance_AppCompat_Button 0x0 ++int style TextAppearance_AppCompat_Caption 0x0 ++int style TextAppearance_AppCompat_Display1 0x0 ++int style TextAppearance_AppCompat_Display2 0x0 ++int style TextAppearance_AppCompat_Display3 0x0 ++int style TextAppearance_AppCompat_Display4 0x0 ++int style TextAppearance_AppCompat_Headline 0x0 ++int style TextAppearance_AppCompat_Inverse 0x0 ++int style TextAppearance_AppCompat_Large 0x0 ++int style TextAppearance_AppCompat_Large_Inverse 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Medium 0x0 ++int style TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style TextAppearance_AppCompat_Menu 0x0 ++int style TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Small 0x0 ++int style TextAppearance_AppCompat_Small_Inverse 0x0 ++int style TextAppearance_AppCompat_Subhead 0x0 ++int style TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style TextAppearance_AppCompat_Title 0x0 ++int style TextAppearance_AppCompat_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Tooltip 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_Button 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Widget_Switch 0x0 ++int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style TextAppearance_Compat_Notification 0x0 ++int style TextAppearance_Compat_Notification_Info 0x0 ++int style TextAppearance_Compat_Notification_Line2 0x0 ++int style TextAppearance_Compat_Notification_Time 0x0 ++int style TextAppearance_Compat_Notification_Title 0x0 ++int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Theme 0x0 ++int style ThemeOverlay_AppCompat 0x0 ++int style ThemeOverlay_AppCompat_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dark 0x0 ++int style ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dialog 0x0 ++int style ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style ThemeOverlay_AppCompat_Light 0x0 ++int style Theme_AppCompat 0x0 ++int style Theme_AppCompat_CompactMenu 0x0 ++int style Theme_AppCompat_DayNight 0x0 ++int style Theme_AppCompat_DayNight_DarkActionBar 0x0 ++int style Theme_AppCompat_DayNight_Dialog 0x0 ++int style Theme_AppCompat_DayNight_DialogWhenLarge 0x0 ++int style Theme_AppCompat_DayNight_Dialog_Alert 0x0 ++int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_DayNight_NoActionBar 0x0 ++int style Theme_AppCompat_Dialog 0x0 ++int style Theme_AppCompat_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Dialog_Alert 0x0 ++int style Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Light 0x0 ++int style Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Theme_AppCompat_Light_Dialog 0x0 ++int style Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Light_NoActionBar 0x0 ++int style Theme_AppCompat_NoActionBar 0x0 ++int style Theme_Catalyst 0x0 ++int style Theme_Catalyst_LogBox 0x0 ++int style Theme_Catalyst_RedBox 0x0 ++int style Theme_FullScreenDialog 0x0 ++int style Theme_FullScreenDialogAnimatedFade 0x0 ++int style Theme_FullScreenDialogAnimatedSlide 0x0 ++int style Theme_ReactNative_AppCompat_Light 0x0 ++int style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen 0x0 ++int style Widget_AppCompat_ActionBar 0x0 ++int style Widget_AppCompat_ActionBar_Solid 0x0 ++int style Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_ActionBar_TabText 0x0 ++int style Widget_AppCompat_ActionBar_TabView 0x0 ++int style Widget_AppCompat_ActionButton 0x0 ++int style Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_ActionMode 0x0 ++int style Widget_AppCompat_ActivityChooserView 0x0 ++int style Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Button 0x0 ++int style Widget_AppCompat_ButtonBar 0x0 ++int style Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Borderless 0x0 ++int style Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Colored 0x0 ++int style Widget_AppCompat_Button_Small 0x0 ++int style Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_EditText 0x0 ++int style Widget_AppCompat_ImageButton 0x0 ++int style Widget_AppCompat_Light_ActionBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionButton 0x0 ++int style Widget_AppCompat_Light_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_Light_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_Light_ActionMode_Inverse 0x0 ++int style Widget_AppCompat_Light_ActivityChooserView 0x0 ++int style Widget_AppCompat_Light_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Light_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_Light_ListPopupWindow 0x0 ++int style Widget_AppCompat_Light_ListView_DropDown 0x0 ++int style Widget_AppCompat_Light_PopupMenu 0x0 ++int style Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_Light_SearchView 0x0 ++int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_ListMenuView 0x0 ++int style Widget_AppCompat_ListPopupWindow 0x0 ++int style Widget_AppCompat_ListView 0x0 ++int style Widget_AppCompat_ListView_DropDown 0x0 ++int style Widget_AppCompat_ListView_Menu 0x0 ++int style Widget_AppCompat_PopupMenu 0x0 ++int style Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_PopupWindow 0x0 ++int style Widget_AppCompat_ProgressBar 0x0 ++int style Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Widget_AppCompat_RatingBar 0x0 ++int style Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Widget_AppCompat_RatingBar_Small 0x0 ++int style Widget_AppCompat_SearchView 0x0 ++int style Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Widget_AppCompat_SeekBar 0x0 ++int style Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Widget_AppCompat_Spinner 0x0 ++int style Widget_AppCompat_Spinner_DropDown 0x0 ++int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_Spinner_Underlined 0x0 ++int style Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Widget_AppCompat_Toolbar 0x0 ++int style Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style Widget_Compat_NotificationActionContainer 0x0 ++int style Widget_Compat_NotificationActionText 0x0 ++int style Widget_Support_CoordinatorLayout 0x0 ++int style redboxButton 0x0 ++int[] styleable ActionBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionBar_background 0 ++int styleable ActionBar_backgroundSplit 1 ++int styleable ActionBar_backgroundStacked 2 ++int styleable ActionBar_contentInsetEnd 3 ++int styleable ActionBar_contentInsetEndWithActions 4 ++int styleable ActionBar_contentInsetLeft 5 ++int styleable ActionBar_contentInsetRight 6 ++int styleable ActionBar_contentInsetStart 7 ++int styleable ActionBar_contentInsetStartWithNavigation 8 ++int styleable ActionBar_customNavigationLayout 9 ++int styleable ActionBar_displayOptions 10 ++int styleable ActionBar_divider 11 ++int styleable ActionBar_elevation 12 ++int styleable ActionBar_height 13 ++int styleable ActionBar_hideOnContentScroll 14 ++int styleable ActionBar_homeAsUpIndicator 15 ++int styleable ActionBar_homeLayout 16 ++int styleable ActionBar_icon 17 ++int styleable ActionBar_indeterminateProgressStyle 18 ++int styleable ActionBar_itemPadding 19 ++int styleable ActionBar_logo 20 ++int styleable ActionBar_navigationMode 21 ++int styleable ActionBar_popupTheme 22 ++int styleable ActionBar_progressBarPadding 23 ++int styleable ActionBar_progressBarStyle 24 ++int styleable ActionBar_subtitle 25 ++int styleable ActionBar_subtitleTextStyle 26 ++int styleable ActionBar_title 27 ++int styleable ActionBar_titleTextStyle 28 ++int[] styleable ActionBarLayout { 0x10100b3 } ++int styleable ActionBarLayout_android_layout_gravity 0 ++int[] styleable ActionMenuItemView { 0x101013f } ++int styleable ActionMenuItemView_android_minWidth 0 ++int[] styleable ActionMenuView { } ++int[] styleable ActionMode { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionMode_background 0 ++int styleable ActionMode_backgroundSplit 1 ++int styleable ActionMode_closeItemLayout 2 ++int styleable ActionMode_height 3 ++int styleable ActionMode_subtitleTextStyle 4 ++int styleable ActionMode_titleTextStyle 5 ++int[] styleable ActivityChooserView { 0x0, 0x0 } ++int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0 ++int styleable ActivityChooserView_initialActivityCount 1 ++int[] styleable AlertDialog { 0x10100f2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AlertDialog_android_layout 0 ++int styleable AlertDialog_buttonIconDimen 1 ++int styleable AlertDialog_buttonPanelSideLayout 2 ++int styleable AlertDialog_listItemLayout 3 ++int styleable AlertDialog_listLayout 4 ++int styleable AlertDialog_multiChoiceItemLayout 5 ++int styleable AlertDialog_showTitle 6 ++int styleable AlertDialog_singleChoiceItemLayout 7 ++int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable AnimatedStateListDrawableCompat_android_constantSize 0 ++int styleable AnimatedStateListDrawableCompat_android_dither 1 ++int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2 ++int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3 ++int styleable AnimatedStateListDrawableCompat_android_variablePadding 4 ++int styleable AnimatedStateListDrawableCompat_android_visible 5 ++int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 } ++int styleable AnimatedStateListDrawableItem_android_drawable 0 ++int styleable AnimatedStateListDrawableItem_android_id 1 ++int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 } ++int styleable AnimatedStateListDrawableTransition_android_drawable 0 ++int styleable AnimatedStateListDrawableTransition_android_fromId 1 ++int styleable AnimatedStateListDrawableTransition_android_reversible 2 ++int styleable AnimatedStateListDrawableTransition_android_toId 3 ++int[] styleable AppCompatImageView { 0x1010119, 0x0, 0x0, 0x0 } ++int styleable AppCompatImageView_android_src 0 ++int styleable AppCompatImageView_srcCompat 1 ++int styleable AppCompatImageView_tint 2 ++int styleable AppCompatImageView_tintMode 3 ++int[] styleable AppCompatSeekBar { 0x1010142, 0x0, 0x0, 0x0 } ++int styleable AppCompatSeekBar_android_thumb 0 ++int styleable AppCompatSeekBar_tickMark 1 ++int styleable AppCompatSeekBar_tickMarkTint 2 ++int styleable AppCompatSeekBar_tickMarkTintMode 3 ++int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 } ++int styleable AppCompatTextHelper_android_drawableBottom 0 ++int styleable AppCompatTextHelper_android_drawableEnd 1 ++int styleable AppCompatTextHelper_android_drawableLeft 2 ++int styleable AppCompatTextHelper_android_drawableRight 3 ++int styleable AppCompatTextHelper_android_drawableStart 4 ++int styleable AppCompatTextHelper_android_drawableTop 5 ++int styleable AppCompatTextHelper_android_textAppearance 6 ++int[] styleable AppCompatTextView { 0x1010034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTextView_android_textAppearance 0 ++int styleable AppCompatTextView_autoSizeMaxTextSize 1 ++int styleable AppCompatTextView_autoSizeMinTextSize 2 ++int styleable AppCompatTextView_autoSizePresetSizes 3 ++int styleable AppCompatTextView_autoSizeStepGranularity 4 ++int styleable AppCompatTextView_autoSizeTextType 5 ++int styleable AppCompatTextView_firstBaselineToTopHeight 6 ++int styleable AppCompatTextView_fontFamily 7 ++int styleable AppCompatTextView_lastBaselineToBottomHeight 8 ++int styleable AppCompatTextView_lineHeight 9 ++int styleable AppCompatTextView_textAllCaps 10 ++int[] styleable AppCompatTheme { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10100ae, 0x1010057, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTheme_actionBarDivider 0 ++int styleable AppCompatTheme_actionBarItemBackground 1 ++int styleable AppCompatTheme_actionBarPopupTheme 2 ++int styleable AppCompatTheme_actionBarSize 3 ++int styleable AppCompatTheme_actionBarSplitStyle 4 ++int styleable AppCompatTheme_actionBarStyle 5 ++int styleable AppCompatTheme_actionBarTabBarStyle 6 ++int styleable AppCompatTheme_actionBarTabStyle 7 ++int styleable AppCompatTheme_actionBarTabTextStyle 8 ++int styleable AppCompatTheme_actionBarTheme 9 ++int styleable AppCompatTheme_actionBarWidgetTheme 10 ++int styleable AppCompatTheme_actionButtonStyle 11 ++int styleable AppCompatTheme_actionDropDownStyle 12 ++int styleable AppCompatTheme_actionMenuTextAppearance 13 ++int styleable AppCompatTheme_actionMenuTextColor 14 ++int styleable AppCompatTheme_actionModeBackground 15 ++int styleable AppCompatTheme_actionModeCloseButtonStyle 16 ++int styleable AppCompatTheme_actionModeCloseDrawable 17 ++int styleable AppCompatTheme_actionModeCopyDrawable 18 ++int styleable AppCompatTheme_actionModeCutDrawable 19 ++int styleable AppCompatTheme_actionModeFindDrawable 20 ++int styleable AppCompatTheme_actionModePasteDrawable 21 ++int styleable AppCompatTheme_actionModePopupWindowStyle 22 ++int styleable AppCompatTheme_actionModeSelectAllDrawable 23 ++int styleable AppCompatTheme_actionModeShareDrawable 24 ++int styleable AppCompatTheme_actionModeSplitBackground 25 ++int styleable AppCompatTheme_actionModeStyle 26 ++int styleable AppCompatTheme_actionModeWebSearchDrawable 27 ++int styleable AppCompatTheme_actionOverflowButtonStyle 28 ++int styleable AppCompatTheme_actionOverflowMenuStyle 29 ++int styleable AppCompatTheme_activityChooserViewStyle 30 ++int styleable AppCompatTheme_alertDialogButtonGroupStyle 31 ++int styleable AppCompatTheme_alertDialogCenterButtons 32 ++int styleable AppCompatTheme_alertDialogStyle 33 ++int styleable AppCompatTheme_alertDialogTheme 34 ++int styleable AppCompatTheme_android_windowAnimationStyle 35 ++int styleable AppCompatTheme_android_windowIsFloating 36 ++int styleable AppCompatTheme_autoCompleteTextViewStyle 37 ++int styleable AppCompatTheme_borderlessButtonStyle 38 ++int styleable AppCompatTheme_buttonBarButtonStyle 39 ++int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40 ++int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41 ++int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42 ++int styleable AppCompatTheme_buttonBarStyle 43 ++int styleable AppCompatTheme_buttonStyle 44 ++int styleable AppCompatTheme_buttonStyleSmall 45 ++int styleable AppCompatTheme_checkboxStyle 46 ++int styleable AppCompatTheme_checkedTextViewStyle 47 ++int styleable AppCompatTheme_colorAccent 48 ++int styleable AppCompatTheme_colorBackgroundFloating 49 ++int styleable AppCompatTheme_colorButtonNormal 50 ++int styleable AppCompatTheme_colorControlActivated 51 ++int styleable AppCompatTheme_colorControlHighlight 52 ++int styleable AppCompatTheme_colorControlNormal 53 ++int styleable AppCompatTheme_colorError 54 ++int styleable AppCompatTheme_colorPrimary 55 ++int styleable AppCompatTheme_colorPrimaryDark 56 ++int styleable AppCompatTheme_colorSwitchThumbNormal 57 ++int styleable AppCompatTheme_controlBackground 58 ++int styleable AppCompatTheme_dialogCornerRadius 59 ++int styleable AppCompatTheme_dialogPreferredPadding 60 ++int styleable AppCompatTheme_dialogTheme 61 ++int styleable AppCompatTheme_dividerHorizontal 62 ++int styleable AppCompatTheme_dividerVertical 63 ++int styleable AppCompatTheme_dropDownListViewStyle 64 ++int styleable AppCompatTheme_dropdownListPreferredItemHeight 65 ++int styleable AppCompatTheme_editTextBackground 66 ++int styleable AppCompatTheme_editTextColor 67 ++int styleable AppCompatTheme_editTextStyle 68 ++int styleable AppCompatTheme_homeAsUpIndicator 69 ++int styleable AppCompatTheme_imageButtonStyle 70 ++int styleable AppCompatTheme_listChoiceBackgroundIndicator 71 ++int styleable AppCompatTheme_listDividerAlertDialog 72 ++int styleable AppCompatTheme_listMenuViewStyle 73 ++int styleable AppCompatTheme_listPopupWindowStyle 74 ++int styleable AppCompatTheme_listPreferredItemHeight 75 ++int styleable AppCompatTheme_listPreferredItemHeightLarge 76 ++int styleable AppCompatTheme_listPreferredItemHeightSmall 77 ++int styleable AppCompatTheme_listPreferredItemPaddingLeft 78 ++int styleable AppCompatTheme_listPreferredItemPaddingRight 79 ++int styleable AppCompatTheme_panelBackground 80 ++int styleable AppCompatTheme_panelMenuListTheme 81 ++int styleable AppCompatTheme_panelMenuListWidth 82 ++int styleable AppCompatTheme_popupMenuStyle 83 ++int styleable AppCompatTheme_popupWindowStyle 84 ++int styleable AppCompatTheme_radioButtonStyle 85 ++int styleable AppCompatTheme_ratingBarStyle 86 ++int styleable AppCompatTheme_ratingBarStyleIndicator 87 ++int styleable AppCompatTheme_ratingBarStyleSmall 88 ++int styleable AppCompatTheme_searchViewStyle 89 ++int styleable AppCompatTheme_seekBarStyle 90 ++int styleable AppCompatTheme_selectableItemBackground 91 ++int styleable AppCompatTheme_selectableItemBackgroundBorderless 92 ++int styleable AppCompatTheme_spinnerDropDownItemStyle 93 ++int styleable AppCompatTheme_spinnerStyle 94 ++int styleable AppCompatTheme_switchStyle 95 ++int styleable AppCompatTheme_textAppearanceLargePopupMenu 96 ++int styleable AppCompatTheme_textAppearanceListItem 97 ++int styleable AppCompatTheme_textAppearanceListItemSecondary 98 ++int styleable AppCompatTheme_textAppearanceListItemSmall 99 ++int styleable AppCompatTheme_textAppearancePopupMenuHeader 100 ++int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 101 ++int styleable AppCompatTheme_textAppearanceSearchResultTitle 102 ++int styleable AppCompatTheme_textAppearanceSmallPopupMenu 103 ++int styleable AppCompatTheme_textColorAlertDialogListItem 104 ++int styleable AppCompatTheme_textColorSearchUrl 105 ++int styleable AppCompatTheme_toolbarNavigationButtonStyle 106 ++int styleable AppCompatTheme_toolbarStyle 107 ++int styleable AppCompatTheme_tooltipForegroundColor 108 ++int styleable AppCompatTheme_tooltipFrameBackground 109 ++int styleable AppCompatTheme_viewInflaterClass 110 ++int styleable AppCompatTheme_windowActionBar 111 ++int styleable AppCompatTheme_windowActionBarOverlay 112 ++int styleable AppCompatTheme_windowActionModeOverlay 113 ++int styleable AppCompatTheme_windowFixedHeightMajor 114 ++int styleable AppCompatTheme_windowFixedHeightMinor 115 ++int styleable AppCompatTheme_windowFixedWidthMajor 116 ++int styleable AppCompatTheme_windowFixedWidthMinor 117 ++int styleable AppCompatTheme_windowMinWidthMajor 118 ++int styleable AppCompatTheme_windowMinWidthMinor 119 ++int styleable AppCompatTheme_windowNoTitle 120 ++int[] styleable ButtonBarLayout { 0x0 } ++int styleable ButtonBarLayout_allowStacking 0 ++int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } ++int styleable ColorStateListItem_alpha 0 ++int styleable ColorStateListItem_android_alpha 1 ++int styleable ColorStateListItem_android_color 2 ++int[] styleable CompoundButton { 0x1010107, 0x0, 0x0 } ++int styleable CompoundButton_android_button 0 ++int styleable CompoundButton_buttonTint 1 ++int styleable CompoundButton_buttonTintMode 2 ++int[] styleable CoordinatorLayout { 0x0, 0x0 } ++int styleable CoordinatorLayout_keylines 0 ++int styleable CoordinatorLayout_statusBarBackground 1 ++int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable CoordinatorLayout_Layout_android_layout_gravity 0 ++int styleable CoordinatorLayout_Layout_layout_anchor 1 ++int styleable CoordinatorLayout_Layout_layout_anchorGravity 2 ++int styleable CoordinatorLayout_Layout_layout_behavior 3 ++int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4 ++int styleable CoordinatorLayout_Layout_layout_insetEdge 5 ++int styleable CoordinatorLayout_Layout_layout_keyline 6 ++int[] styleable DrawerArrowToggle { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable DrawerArrowToggle_arrowHeadLength 0 ++int styleable DrawerArrowToggle_arrowShaftLength 1 ++int styleable DrawerArrowToggle_barLength 2 ++int styleable DrawerArrowToggle_color 3 ++int styleable DrawerArrowToggle_drawableSize 4 ++int styleable DrawerArrowToggle_gapBetweenBars 5 ++int styleable DrawerArrowToggle_spinBars 6 ++int styleable DrawerArrowToggle_thickness 7 ++int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamily_fontProviderAuthority 0 ++int styleable FontFamily_fontProviderCerts 1 ++int styleable FontFamily_fontProviderFetchStrategy 2 ++int styleable FontFamily_fontProviderFetchTimeout 3 ++int styleable FontFamily_fontProviderPackage 4 ++int styleable FontFamily_fontProviderQuery 5 ++int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamilyFont_android_font 0 ++int styleable FontFamilyFont_android_fontStyle 1 ++int styleable FontFamilyFont_android_fontVariationSettings 2 ++int styleable FontFamilyFont_android_fontWeight 3 ++int styleable FontFamilyFont_android_ttcIndex 4 ++int styleable FontFamilyFont_font 5 ++int styleable FontFamilyFont_fontStyle 6 ++int styleable FontFamilyFont_fontVariationSettings 7 ++int styleable FontFamilyFont_fontWeight 8 ++int styleable FontFamilyFont_ttcIndex 9 ++int[] styleable GenericDraweeHierarchy { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable GenericDraweeHierarchy_actualImageScaleType 0 ++int styleable GenericDraweeHierarchy_backgroundImage 1 ++int styleable GenericDraweeHierarchy_fadeDuration 2 ++int styleable GenericDraweeHierarchy_failureImage 3 ++int styleable GenericDraweeHierarchy_failureImageScaleType 4 ++int styleable GenericDraweeHierarchy_overlayImage 5 ++int styleable GenericDraweeHierarchy_placeholderImage 6 ++int styleable GenericDraweeHierarchy_placeholderImageScaleType 7 ++int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8 ++int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9 ++int styleable GenericDraweeHierarchy_progressBarImage 10 ++int styleable GenericDraweeHierarchy_progressBarImageScaleType 11 ++int styleable GenericDraweeHierarchy_retryImage 12 ++int styleable GenericDraweeHierarchy_retryImageScaleType 13 ++int styleable GenericDraweeHierarchy_roundAsCircle 14 ++int styleable GenericDraweeHierarchy_roundBottomEnd 15 ++int styleable GenericDraweeHierarchy_roundBottomLeft 16 ++int styleable GenericDraweeHierarchy_roundBottomRight 17 ++int styleable GenericDraweeHierarchy_roundBottomStart 18 ++int styleable GenericDraweeHierarchy_roundTopEnd 19 ++int styleable GenericDraweeHierarchy_roundTopLeft 20 ++int styleable GenericDraweeHierarchy_roundTopRight 21 ++int styleable GenericDraweeHierarchy_roundTopStart 22 ++int styleable GenericDraweeHierarchy_roundWithOverlayColor 23 ++int styleable GenericDraweeHierarchy_roundedCornerRadius 24 ++int styleable GenericDraweeHierarchy_roundingBorderColor 25 ++int styleable GenericDraweeHierarchy_roundingBorderPadding 26 ++int styleable GenericDraweeHierarchy_roundingBorderWidth 27 ++int styleable GenericDraweeHierarchy_viewAspectRatio 28 ++int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } ++int styleable GradientColor_android_centerColor 0 ++int styleable GradientColor_android_centerX 1 ++int styleable GradientColor_android_centerY 2 ++int styleable GradientColor_android_endColor 3 ++int styleable GradientColor_android_endX 4 ++int styleable GradientColor_android_endY 5 ++int styleable GradientColor_android_gradientRadius 6 ++int styleable GradientColor_android_startColor 7 ++int styleable GradientColor_android_startX 8 ++int styleable GradientColor_android_startY 9 ++int styleable GradientColor_android_tileMode 10 ++int styleable GradientColor_android_type 11 ++int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } ++int styleable GradientColorItem_android_color 0 ++int styleable GradientColorItem_android_offset 1 ++int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x0, 0x0, 0x0, 0x0 } ++int styleable LinearLayoutCompat_android_baselineAligned 0 ++int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1 ++int styleable LinearLayoutCompat_android_gravity 2 ++int styleable LinearLayoutCompat_android_orientation 3 ++int styleable LinearLayoutCompat_android_weightSum 4 ++int styleable LinearLayoutCompat_divider 5 ++int styleable LinearLayoutCompat_dividerPadding 6 ++int styleable LinearLayoutCompat_measureWithLargestChild 7 ++int styleable LinearLayoutCompat_showDividers 8 ++int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 } ++int styleable LinearLayoutCompat_Layout_android_layout_gravity 0 ++int styleable LinearLayoutCompat_Layout_android_layout_height 1 ++int styleable LinearLayoutCompat_Layout_android_layout_weight 2 ++int styleable LinearLayoutCompat_Layout_android_layout_width 3 ++int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad } ++int styleable ListPopupWindow_android_dropDownHorizontalOffset 0 ++int styleable ListPopupWindow_android_dropDownVerticalOffset 1 ++int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 } ++int styleable MenuGroup_android_checkableBehavior 0 ++int styleable MenuGroup_android_enabled 1 ++int styleable MenuGroup_android_id 2 ++int styleable MenuGroup_android_menuCategory 3 ++int styleable MenuGroup_android_orderInCategory 4 ++int styleable MenuGroup_android_visible 5 ++int[] styleable MenuItem { 0x0, 0x0, 0x0, 0x0, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable MenuItem_actionLayout 0 ++int styleable MenuItem_actionProviderClass 1 ++int styleable MenuItem_actionViewClass 2 ++int styleable MenuItem_alphabeticModifiers 3 ++int styleable MenuItem_android_alphabeticShortcut 4 ++int styleable MenuItem_android_checkable 5 ++int styleable MenuItem_android_checked 6 ++int styleable MenuItem_android_enabled 7 ++int styleable MenuItem_android_icon 8 ++int styleable MenuItem_android_id 9 ++int styleable MenuItem_android_menuCategory 10 ++int styleable MenuItem_android_numericShortcut 11 ++int styleable MenuItem_android_onClick 12 ++int styleable MenuItem_android_orderInCategory 13 ++int styleable MenuItem_android_title 14 ++int styleable MenuItem_android_titleCondensed 15 ++int styleable MenuItem_android_visible 16 ++int styleable MenuItem_contentDescription 17 ++int styleable MenuItem_iconTint 18 ++int styleable MenuItem_iconTintMode 19 ++int styleable MenuItem_numericModifiers 20 ++int styleable MenuItem_showAsAction 21 ++int styleable MenuItem_tooltipText 22 ++int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x0, 0x0 } ++int styleable MenuView_android_headerBackground 0 ++int styleable MenuView_android_horizontalDivider 1 ++int styleable MenuView_android_itemBackground 2 ++int styleable MenuView_android_itemIconDisabledAlpha 3 ++int styleable MenuView_android_itemTextAppearance 4 ++int styleable MenuView_android_verticalDivider 5 ++int styleable MenuView_android_windowAnimationStyle 6 ++int styleable MenuView_preserveIconSpacing 7 ++int styleable MenuView_subMenuArrow 8 ++int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x0 } ++int styleable PopupWindow_android_popupAnimationStyle 0 ++int styleable PopupWindow_android_popupBackground 1 ++int styleable PopupWindow_overlapAnchor 2 ++int[] styleable PopupWindowBackgroundState { 0x0 } ++int styleable PopupWindowBackgroundState_state_above_anchor 0 ++int[] styleable RecycleListView { 0x0, 0x0 } ++int styleable RecycleListView_paddingBottomNoButtons 0 ++int styleable RecycleListView_paddingTopNoTitle 1 ++int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SearchView_android_focusable 0 ++int styleable SearchView_android_imeOptions 1 ++int styleable SearchView_android_inputType 2 ++int styleable SearchView_android_maxWidth 3 ++int styleable SearchView_closeIcon 4 ++int styleable SearchView_commitIcon 5 ++int styleable SearchView_defaultQueryHint 6 ++int styleable SearchView_goIcon 7 ++int styleable SearchView_iconifiedByDefault 8 ++int styleable SearchView_layout 9 ++int styleable SearchView_queryBackground 10 ++int styleable SearchView_queryHint 11 ++int styleable SearchView_searchHintIcon 12 ++int styleable SearchView_searchIcon 13 ++int styleable SearchView_submitBackground 14 ++int styleable SearchView_suggestionRowLayout 15 ++int styleable SearchView_voiceIcon 16 ++int[] styleable SimpleDraweeView { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SimpleDraweeView_actualImageResource 0 ++int styleable SimpleDraweeView_actualImageScaleType 1 ++int styleable SimpleDraweeView_actualImageUri 2 ++int styleable SimpleDraweeView_backgroundImage 3 ++int styleable SimpleDraweeView_fadeDuration 4 ++int styleable SimpleDraweeView_failureImage 5 ++int styleable SimpleDraweeView_failureImageScaleType 6 ++int styleable SimpleDraweeView_overlayImage 7 ++int styleable SimpleDraweeView_placeholderImage 8 ++int styleable SimpleDraweeView_placeholderImageScaleType 9 ++int styleable SimpleDraweeView_pressedStateOverlayImage 10 ++int styleable SimpleDraweeView_progressBarAutoRotateInterval 11 ++int styleable SimpleDraweeView_progressBarImage 12 ++int styleable SimpleDraweeView_progressBarImageScaleType 13 ++int styleable SimpleDraweeView_retryImage 14 ++int styleable SimpleDraweeView_retryImageScaleType 15 ++int styleable SimpleDraweeView_roundAsCircle 16 ++int styleable SimpleDraweeView_roundBottomEnd 17 ++int styleable SimpleDraweeView_roundBottomLeft 18 ++int styleable SimpleDraweeView_roundBottomRight 19 ++int styleable SimpleDraweeView_roundBottomStart 20 ++int styleable SimpleDraweeView_roundTopEnd 21 ++int styleable SimpleDraweeView_roundTopLeft 22 ++int styleable SimpleDraweeView_roundTopRight 23 ++int styleable SimpleDraweeView_roundTopStart 24 ++int styleable SimpleDraweeView_roundWithOverlayColor 25 ++int styleable SimpleDraweeView_roundedCornerRadius 26 ++int styleable SimpleDraweeView_roundingBorderColor 27 ++int styleable SimpleDraweeView_roundingBorderPadding 28 ++int styleable SimpleDraweeView_roundingBorderWidth 29 ++int styleable SimpleDraweeView_viewAspectRatio 30 ++int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x0 } ++int styleable Spinner_android_dropDownWidth 0 ++int styleable Spinner_android_entries 1 ++int styleable Spinner_android_popupBackground 2 ++int styleable Spinner_android_prompt 3 ++int styleable Spinner_popupTheme 4 ++int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable StateListDrawable_android_constantSize 0 ++int styleable StateListDrawable_android_dither 1 ++int styleable StateListDrawable_android_enterFadeDuration 2 ++int styleable StateListDrawable_android_exitFadeDuration 3 ++int styleable StateListDrawable_android_variablePadding 4 ++int styleable StateListDrawable_android_visible 5 ++int[] styleable StateListDrawableItem { 0x1010199 } ++int styleable StateListDrawableItem_android_drawable 0 ++int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SwitchCompat_android_textOff 0 ++int styleable SwitchCompat_android_textOn 1 ++int styleable SwitchCompat_android_thumb 2 ++int styleable SwitchCompat_showText 3 ++int styleable SwitchCompat_splitTrack 4 ++int styleable SwitchCompat_switchMinWidth 5 ++int styleable SwitchCompat_switchPadding 6 ++int styleable SwitchCompat_switchTextAppearance 7 ++int styleable SwitchCompat_thumbTextPadding 8 ++int styleable SwitchCompat_thumbTint 9 ++int styleable SwitchCompat_thumbTintMode 10 ++int styleable SwitchCompat_track 11 ++int styleable SwitchCompat_trackTint 12 ++int styleable SwitchCompat_trackTintMode 13 ++int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010095, 0x1010097, 0x1010096, 0x0, 0x0 } ++int styleable TextAppearance_android_fontFamily 0 ++int styleable TextAppearance_android_shadowColor 1 ++int styleable TextAppearance_android_shadowDx 2 ++int styleable TextAppearance_android_shadowDy 3 ++int styleable TextAppearance_android_shadowRadius 4 ++int styleable TextAppearance_android_textColor 5 ++int styleable TextAppearance_android_textColorHint 6 ++int styleable TextAppearance_android_textColorLink 7 ++int styleable TextAppearance_android_textSize 8 ++int styleable TextAppearance_android_textStyle 9 ++int styleable TextAppearance_android_typeface 10 ++int styleable TextAppearance_fontFamily 11 ++int styleable TextAppearance_textAllCaps 12 ++int[] styleable Toolbar { 0x10100af, 0x1010140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable Toolbar_android_gravity 0 ++int styleable Toolbar_android_minHeight 1 ++int styleable Toolbar_buttonGravity 2 ++int styleable Toolbar_collapseContentDescription 3 ++int styleable Toolbar_collapseIcon 4 ++int styleable Toolbar_contentInsetEnd 5 ++int styleable Toolbar_contentInsetEndWithActions 6 ++int styleable Toolbar_contentInsetLeft 7 ++int styleable Toolbar_contentInsetRight 8 ++int styleable Toolbar_contentInsetStart 9 ++int styleable Toolbar_contentInsetStartWithNavigation 10 ++int styleable Toolbar_logo 11 ++int styleable Toolbar_logoDescription 12 ++int styleable Toolbar_maxButtonHeight 13 ++int styleable Toolbar_navigationContentDescription 14 ++int styleable Toolbar_navigationIcon 15 ++int styleable Toolbar_popupTheme 16 ++int styleable Toolbar_subtitle 17 ++int styleable Toolbar_subtitleTextAppearance 18 ++int styleable Toolbar_subtitleTextColor 19 ++int styleable Toolbar_title 20 ++int styleable Toolbar_titleMargin 21 ++int styleable Toolbar_titleMarginBottom 22 ++int styleable Toolbar_titleMarginEnd 23 ++int styleable Toolbar_titleMarginStart 24 ++int styleable Toolbar_titleMarginTop 25 ++int styleable Toolbar_titleMargins 26 ++int styleable Toolbar_titleTextAppearance 27 ++int styleable Toolbar_titleTextColor 28 ++int[] styleable View { 0x10100da, 0x1010000, 0x0, 0x0, 0x0 } ++int styleable View_android_focusable 0 ++int styleable View_android_theme 1 ++int styleable View_paddingEnd 2 ++int styleable View_paddingStart 3 ++int styleable View_theme 4 ++int[] styleable ViewBackgroundHelper { 0x10100d4, 0x0, 0x0 } ++int styleable ViewBackgroundHelper_android_background 0 ++int styleable ViewBackgroundHelper_backgroundTint 1 ++int styleable ViewBackgroundHelper_backgroundTintMode 2 ++int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 } ++int styleable ViewStubCompat_android_id 0 ++int styleable ViewStubCompat_android_inflatedId 1 ++int styleable ViewStubCompat_android_layout 2 ++int xml rn_dev_preferences 0x0 +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jars/classes.jar b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jars/classes.jar +new file mode 100644 +index 0000000..52fe1a9 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jars/classes.jar differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/arm64-v8a/libreanimated.so b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/arm64-v8a/libreanimated.so +new file mode 100644 +index 0000000..ae3ae27 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/arm64-v8a/libreanimated.so differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/armeabi-v7a/libreanimated.so b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/armeabi-v7a/libreanimated.so +new file mode 100644 +index 0000000..afeaf70 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/armeabi-v7a/libreanimated.so differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86/libreanimated.so b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86/libreanimated.so +new file mode 100644 +index 0000000..8b7e106 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86/libreanimated.so differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86_64/libreanimated.so b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86_64/libreanimated.so +new file mode 100644 +index 0000000..cfb18af +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/3dc66eaffffc4a1b2013533ca5514c4f/jetified-react-native-reanimated-64-hermes/jni/x86_64/libreanimated.so differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570.bin b/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570.bin +new file mode 100644 +index 0000000..14943b4 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570.bin +@@ -0,0 +1 @@ ++o/jetified-react-native-reanimated-64-hermes.aar +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570/jetified-react-native-reanimated-64-hermes.aar b/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570/jetified-react-native-reanimated-64-hermes.aar +new file mode 100644 +index 0000000..695759a +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/4f11b85642437dd25277d88e044df570/jetified-react-native-reanimated-64-hermes.aar differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/5c2807702f3678faf4cc7573e2b611ce.bin b/node_modules/react-native-reanimated/android/build/.transforms/5c2807702f3678faf4cc7573e2b611ce.bin +new file mode 100644 +index 0000000..5d66879 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/5c2807702f3678faf4cc7573e2b611ce.bin +@@ -0,0 +1 @@ ++o/com.swmansion.reanimated +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/5e119b631fe7a97752431963ddaeb250.bin b/node_modules/react-native-reanimated/android/build/.transforms/5e119b631fe7a97752431963ddaeb250.bin +new file mode 100644 +index 0000000..199366a +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/5e119b631fe7a97752431963ddaeb250.bin +@@ -0,0 +1 @@ ++i/jni +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20.bin b/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20.bin +new file mode 100644 +index 0000000..f183a66 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20.bin +@@ -0,0 +1 @@ ++o/com.swmansion.reanimated-r.txt +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20/com.swmansion.reanimated-r.txt b/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20/com.swmansion.reanimated-r.txt +new file mode 100644 +index 0000000..dd7bcf9 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/6bf78b54df5d87e632b0431671adef20/com.swmansion.reanimated-r.txt +@@ -0,0 +1,1325 @@ ++com.swmansion.reanimated ++anim abc_fade_in ++anim abc_fade_out ++anim abc_grow_fade_in_from_bottom ++anim abc_popup_enter ++anim abc_popup_exit ++anim abc_shrink_fade_out_from_bottom ++anim abc_slide_in_bottom ++anim abc_slide_in_top ++anim abc_slide_out_bottom ++anim abc_slide_out_top ++anim abc_tooltip_enter ++anim abc_tooltip_exit ++anim catalyst_fade_in ++anim catalyst_fade_out ++anim catalyst_push_up_in ++anim catalyst_push_up_out ++anim catalyst_slide_down ++anim catalyst_slide_up ++attr actionBarDivider ++attr actionBarItemBackground ++attr actionBarPopupTheme ++attr actionBarSize ++attr actionBarSplitStyle ++attr actionBarStyle ++attr actionBarTabBarStyle ++attr actionBarTabStyle ++attr actionBarTabTextStyle ++attr actionBarTheme ++attr actionBarWidgetTheme ++attr actionButtonStyle ++attr actionDropDownStyle ++attr actionLayout ++attr actionMenuTextAppearance ++attr actionMenuTextColor ++attr actionModeBackground ++attr actionModeCloseButtonStyle ++attr actionModeCloseDrawable ++attr actionModeCopyDrawable ++attr actionModeCutDrawable ++attr actionModeFindDrawable ++attr actionModePasteDrawable ++attr actionModePopupWindowStyle ++attr actionModeSelectAllDrawable ++attr actionModeShareDrawable ++attr actionModeSplitBackground ++attr actionModeStyle ++attr actionModeWebSearchDrawable ++attr actionOverflowButtonStyle ++attr actionOverflowMenuStyle ++attr actionProviderClass ++attr actionViewClass ++attr activityChooserViewStyle ++attr actualImageResource ++attr actualImageScaleType ++attr actualImageUri ++attr alertDialogButtonGroupStyle ++attr alertDialogCenterButtons ++attr alertDialogStyle ++attr alertDialogTheme ++attr allowStacking ++attr alpha ++attr alphabeticModifiers ++attr arrowHeadLength ++attr arrowShaftLength ++attr autoCompleteTextViewStyle ++attr autoSizeMaxTextSize ++attr autoSizeMinTextSize ++attr autoSizePresetSizes ++attr autoSizeStepGranularity ++attr autoSizeTextType ++attr background ++attr backgroundImage ++attr backgroundSplit ++attr backgroundStacked ++attr backgroundTint ++attr backgroundTintMode ++attr barLength ++attr borderlessButtonStyle ++attr buttonBarButtonStyle ++attr buttonBarNegativeButtonStyle ++attr buttonBarNeutralButtonStyle ++attr buttonBarPositiveButtonStyle ++attr buttonBarStyle ++attr buttonGravity ++attr buttonIconDimen ++attr buttonPanelSideLayout ++attr buttonStyle ++attr buttonStyleSmall ++attr buttonTint ++attr buttonTintMode ++attr checkboxStyle ++attr checkedTextViewStyle ++attr closeIcon ++attr closeItemLayout ++attr collapseContentDescription ++attr collapseIcon ++attr color ++attr colorAccent ++attr colorBackgroundFloating ++attr colorButtonNormal ++attr colorControlActivated ++attr colorControlHighlight ++attr colorControlNormal ++attr colorError ++attr colorPrimary ++attr colorPrimaryDark ++attr colorSwitchThumbNormal ++attr commitIcon ++attr contentDescription ++attr contentInsetEnd ++attr contentInsetEndWithActions ++attr contentInsetLeft ++attr contentInsetRight ++attr contentInsetStart ++attr contentInsetStartWithNavigation ++attr controlBackground ++attr coordinatorLayoutStyle ++attr customNavigationLayout ++attr defaultQueryHint ++attr dialogCornerRadius ++attr dialogPreferredPadding ++attr dialogTheme ++attr displayOptions ++attr divider ++attr dividerHorizontal ++attr dividerPadding ++attr dividerVertical ++attr drawableSize ++attr drawerArrowStyle ++attr dropDownListViewStyle ++attr dropdownListPreferredItemHeight ++attr editTextBackground ++attr editTextColor ++attr editTextStyle ++attr elevation ++attr expandActivityOverflowButtonDrawable ++attr fadeDuration ++attr failureImage ++attr failureImageScaleType ++attr firstBaselineToTopHeight ++attr font ++attr fontFamily ++attr fontProviderAuthority ++attr fontProviderCerts ++attr fontProviderFetchStrategy ++attr fontProviderFetchTimeout ++attr fontProviderPackage ++attr fontProviderQuery ++attr fontStyle ++attr fontVariationSettings ++attr fontWeight ++attr gapBetweenBars ++attr goIcon ++attr height ++attr hideOnContentScroll ++attr homeAsUpIndicator ++attr homeLayout ++attr icon ++attr iconTint ++attr iconTintMode ++attr iconifiedByDefault ++attr imageButtonStyle ++attr indeterminateProgressStyle ++attr initialActivityCount ++attr isLightTheme ++attr itemPadding ++attr keylines ++attr lastBaselineToBottomHeight ++attr layout ++attr layout_anchor ++attr layout_anchorGravity ++attr layout_behavior ++attr layout_dodgeInsetEdges ++attr layout_insetEdge ++attr layout_keyline ++attr lineHeight ++attr listChoiceBackgroundIndicator ++attr listDividerAlertDialog ++attr listItemLayout ++attr listLayout ++attr listMenuViewStyle ++attr listPopupWindowStyle ++attr listPreferredItemHeight ++attr listPreferredItemHeightLarge ++attr listPreferredItemHeightSmall ++attr listPreferredItemPaddingLeft ++attr listPreferredItemPaddingRight ++attr logo ++attr logoDescription ++attr maxButtonHeight ++attr measureWithLargestChild ++attr multiChoiceItemLayout ++attr navigationContentDescription ++attr navigationIcon ++attr navigationMode ++attr numericModifiers ++attr overlapAnchor ++attr overlayImage ++attr paddingBottomNoButtons ++attr paddingEnd ++attr paddingStart ++attr paddingTopNoTitle ++attr panelBackground ++attr panelMenuListTheme ++attr panelMenuListWidth ++attr placeholderImage ++attr placeholderImageScaleType ++attr popupMenuStyle ++attr popupTheme ++attr popupWindowStyle ++attr preserveIconSpacing ++attr pressedStateOverlayImage ++attr progressBarAutoRotateInterval ++attr progressBarImage ++attr progressBarImageScaleType ++attr progressBarPadding ++attr progressBarStyle ++attr queryBackground ++attr queryHint ++attr radioButtonStyle ++attr ratingBarStyle ++attr ratingBarStyleIndicator ++attr ratingBarStyleSmall ++attr retryImage ++attr retryImageScaleType ++attr roundAsCircle ++attr roundBottomEnd ++attr roundBottomLeft ++attr roundBottomRight ++attr roundBottomStart ++attr roundTopEnd ++attr roundTopLeft ++attr roundTopRight ++attr roundTopStart ++attr roundWithOverlayColor ++attr roundedCornerRadius ++attr roundingBorderColor ++attr roundingBorderPadding ++attr roundingBorderWidth ++attr searchHintIcon ++attr searchIcon ++attr searchViewStyle ++attr seekBarStyle ++attr selectableItemBackground ++attr selectableItemBackgroundBorderless ++attr showAsAction ++attr showDividers ++attr showText ++attr showTitle ++attr singleChoiceItemLayout ++attr spinBars ++attr spinnerDropDownItemStyle ++attr spinnerStyle ++attr splitTrack ++attr srcCompat ++attr state_above_anchor ++attr statusBarBackground ++attr subMenuArrow ++attr submitBackground ++attr subtitle ++attr subtitleTextAppearance ++attr subtitleTextColor ++attr subtitleTextStyle ++attr suggestionRowLayout ++attr switchMinWidth ++attr switchPadding ++attr switchStyle ++attr switchTextAppearance ++attr textAllCaps ++attr textAppearanceLargePopupMenu ++attr textAppearanceListItem ++attr textAppearanceListItemSecondary ++attr textAppearanceListItemSmall ++attr textAppearancePopupMenuHeader ++attr textAppearanceSearchResultSubtitle ++attr textAppearanceSearchResultTitle ++attr textAppearanceSmallPopupMenu ++attr textColorAlertDialogListItem ++attr textColorSearchUrl ++attr theme ++attr thickness ++attr thumbTextPadding ++attr thumbTint ++attr thumbTintMode ++attr tickMark ++attr tickMarkTint ++attr tickMarkTintMode ++attr tint ++attr tintMode ++attr title ++attr titleMargin ++attr titleMarginBottom ++attr titleMarginEnd ++attr titleMarginStart ++attr titleMarginTop ++attr titleMargins ++attr titleTextAppearance ++attr titleTextColor ++attr titleTextStyle ++attr toolbarNavigationButtonStyle ++attr toolbarStyle ++attr tooltipForegroundColor ++attr tooltipFrameBackground ++attr tooltipText ++attr track ++attr trackTint ++attr trackTintMode ++attr ttcIndex ++attr viewAspectRatio ++attr viewInflaterClass ++attr voiceIcon ++attr windowActionBar ++attr windowActionBarOverlay ++attr windowActionModeOverlay ++attr windowFixedHeightMajor ++attr windowFixedHeightMinor ++attr windowFixedWidthMajor ++attr windowFixedWidthMinor ++attr windowMinWidthMajor ++attr windowMinWidthMinor ++attr windowNoTitle ++bool abc_action_bar_embed_tabs ++bool abc_allow_stacked_button_bar ++bool abc_config_actionMenuItemAllCaps ++color abc_background_cache_hint_selector_material_dark ++color abc_background_cache_hint_selector_material_light ++color abc_btn_colored_borderless_text_material ++color abc_btn_colored_text_material ++color abc_color_highlight_material ++color abc_hint_foreground_material_dark ++color abc_hint_foreground_material_light ++color abc_input_method_navigation_guard ++color abc_primary_text_disable_only_material_dark ++color abc_primary_text_disable_only_material_light ++color abc_primary_text_material_dark ++color abc_primary_text_material_light ++color abc_search_url_text ++color abc_search_url_text_normal ++color abc_search_url_text_pressed ++color abc_search_url_text_selected ++color abc_secondary_text_material_dark ++color abc_secondary_text_material_light ++color abc_tint_btn_checkable ++color abc_tint_default ++color abc_tint_edittext ++color abc_tint_seek_thumb ++color abc_tint_spinner ++color abc_tint_switch_track ++color accent_material_dark ++color accent_material_light ++color background_floating_material_dark ++color background_floating_material_light ++color background_material_dark ++color background_material_light ++color bright_foreground_disabled_material_dark ++color bright_foreground_disabled_material_light ++color bright_foreground_inverse_material_dark ++color bright_foreground_inverse_material_light ++color bright_foreground_material_dark ++color bright_foreground_material_light ++color button_material_dark ++color button_material_light ++color catalyst_logbox_background ++color catalyst_redbox_background ++color dim_foreground_disabled_material_dark ++color dim_foreground_disabled_material_light ++color dim_foreground_material_dark ++color dim_foreground_material_light ++color error_color_material_dark ++color error_color_material_light ++color foreground_material_dark ++color foreground_material_light ++color highlighted_text_material_dark ++color highlighted_text_material_light ++color material_blue_grey_800 ++color material_blue_grey_900 ++color material_blue_grey_950 ++color material_deep_teal_200 ++color material_deep_teal_500 ++color material_grey_100 ++color material_grey_300 ++color material_grey_50 ++color material_grey_600 ++color material_grey_800 ++color material_grey_850 ++color material_grey_900 ++color notification_action_color_filter ++color notification_icon_bg_color ++color primary_dark_material_dark ++color primary_dark_material_light ++color primary_material_dark ++color primary_material_light ++color primary_text_default_material_dark ++color primary_text_default_material_light ++color primary_text_disabled_material_dark ++color primary_text_disabled_material_light ++color ripple_material_dark ++color ripple_material_light ++color secondary_text_default_material_dark ++color secondary_text_default_material_light ++color secondary_text_disabled_material_dark ++color secondary_text_disabled_material_light ++color switch_thumb_disabled_material_dark ++color switch_thumb_disabled_material_light ++color switch_thumb_material_dark ++color switch_thumb_material_light ++color switch_thumb_normal_material_dark ++color switch_thumb_normal_material_light ++color tooltip_background_dark ++color tooltip_background_light ++dimen abc_action_bar_content_inset_material ++dimen abc_action_bar_content_inset_with_nav ++dimen abc_action_bar_default_height_material ++dimen abc_action_bar_default_padding_end_material ++dimen abc_action_bar_default_padding_start_material ++dimen abc_action_bar_elevation_material ++dimen abc_action_bar_icon_vertical_padding_material ++dimen abc_action_bar_overflow_padding_end_material ++dimen abc_action_bar_overflow_padding_start_material ++dimen abc_action_bar_stacked_max_height ++dimen abc_action_bar_stacked_tab_max_width ++dimen abc_action_bar_subtitle_bottom_margin_material ++dimen abc_action_bar_subtitle_top_margin_material ++dimen abc_action_button_min_height_material ++dimen abc_action_button_min_width_material ++dimen abc_action_button_min_width_overflow_material ++dimen abc_alert_dialog_button_bar_height ++dimen abc_alert_dialog_button_dimen ++dimen abc_button_inset_horizontal_material ++dimen abc_button_inset_vertical_material ++dimen abc_button_padding_horizontal_material ++dimen abc_button_padding_vertical_material ++dimen abc_cascading_menus_min_smallest_width ++dimen abc_config_prefDialogWidth ++dimen abc_control_corner_material ++dimen abc_control_inset_material ++dimen abc_control_padding_material ++dimen abc_dialog_corner_radius_material ++dimen abc_dialog_fixed_height_major ++dimen abc_dialog_fixed_height_minor ++dimen abc_dialog_fixed_width_major ++dimen abc_dialog_fixed_width_minor ++dimen abc_dialog_list_padding_bottom_no_buttons ++dimen abc_dialog_list_padding_top_no_title ++dimen abc_dialog_min_width_major ++dimen abc_dialog_min_width_minor ++dimen abc_dialog_padding_material ++dimen abc_dialog_padding_top_material ++dimen abc_dialog_title_divider_material ++dimen abc_disabled_alpha_material_dark ++dimen abc_disabled_alpha_material_light ++dimen abc_dropdownitem_icon_width ++dimen abc_dropdownitem_text_padding_left ++dimen abc_dropdownitem_text_padding_right ++dimen abc_edit_text_inset_bottom_material ++dimen abc_edit_text_inset_horizontal_material ++dimen abc_edit_text_inset_top_material ++dimen abc_floating_window_z ++dimen abc_list_item_padding_horizontal_material ++dimen abc_panel_menu_list_width ++dimen abc_progress_bar_height_material ++dimen abc_search_view_preferred_height ++dimen abc_search_view_preferred_width ++dimen abc_seekbar_track_background_height_material ++dimen abc_seekbar_track_progress_height_material ++dimen abc_select_dialog_padding_start_material ++dimen abc_switch_padding ++dimen abc_text_size_body_1_material ++dimen abc_text_size_body_2_material ++dimen abc_text_size_button_material ++dimen abc_text_size_caption_material ++dimen abc_text_size_display_1_material ++dimen abc_text_size_display_2_material ++dimen abc_text_size_display_3_material ++dimen abc_text_size_display_4_material ++dimen abc_text_size_headline_material ++dimen abc_text_size_large_material ++dimen abc_text_size_medium_material ++dimen abc_text_size_menu_header_material ++dimen abc_text_size_menu_material ++dimen abc_text_size_small_material ++dimen abc_text_size_subhead_material ++dimen abc_text_size_subtitle_material_toolbar ++dimen abc_text_size_title_material ++dimen abc_text_size_title_material_toolbar ++dimen compat_button_inset_horizontal_material ++dimen compat_button_inset_vertical_material ++dimen compat_button_padding_horizontal_material ++dimen compat_button_padding_vertical_material ++dimen compat_control_corner_material ++dimen compat_notification_large_icon_max_height ++dimen compat_notification_large_icon_max_width ++dimen disabled_alpha_material_dark ++dimen disabled_alpha_material_light ++dimen highlight_alpha_material_colored ++dimen highlight_alpha_material_dark ++dimen highlight_alpha_material_light ++dimen hint_alpha_material_dark ++dimen hint_alpha_material_light ++dimen hint_pressed_alpha_material_dark ++dimen hint_pressed_alpha_material_light ++dimen notification_action_icon_size ++dimen notification_action_text_size ++dimen notification_big_circle_margin ++dimen notification_content_margin_start ++dimen notification_large_icon_height ++dimen notification_large_icon_width ++dimen notification_main_column_padding_top ++dimen notification_media_narrow_margin ++dimen notification_right_icon_size ++dimen notification_right_side_padding_top ++dimen notification_small_icon_background_padding ++dimen notification_small_icon_size_as_large ++dimen notification_subtext_size ++dimen notification_top_pad ++dimen notification_top_pad_large_text ++dimen tooltip_corner_radius ++dimen tooltip_horizontal_padding ++dimen tooltip_margin ++dimen tooltip_precise_anchor_extra_offset ++dimen tooltip_precise_anchor_threshold ++dimen tooltip_vertical_padding ++dimen tooltip_y_offset_non_touch ++dimen tooltip_y_offset_touch ++drawable abc_ab_share_pack_mtrl_alpha ++drawable abc_action_bar_item_background_material ++drawable abc_btn_borderless_material ++drawable abc_btn_check_material ++drawable abc_btn_check_to_on_mtrl_000 ++drawable abc_btn_check_to_on_mtrl_015 ++drawable abc_btn_colored_material ++drawable abc_btn_default_mtrl_shape ++drawable abc_btn_radio_material ++drawable abc_btn_radio_to_on_mtrl_000 ++drawable abc_btn_radio_to_on_mtrl_015 ++drawable abc_btn_switch_to_on_mtrl_00001 ++drawable abc_btn_switch_to_on_mtrl_00012 ++drawable abc_cab_background_internal_bg ++drawable abc_cab_background_top_material ++drawable abc_cab_background_top_mtrl_alpha ++drawable abc_control_background_material ++drawable abc_dialog_material_background ++drawable abc_edit_text_material ++drawable abc_ic_ab_back_material ++drawable abc_ic_arrow_drop_right_black_24dp ++drawable abc_ic_clear_material ++drawable abc_ic_commit_search_api_mtrl_alpha ++drawable abc_ic_go_search_api_material ++drawable abc_ic_menu_copy_mtrl_am_alpha ++drawable abc_ic_menu_cut_mtrl_alpha ++drawable abc_ic_menu_overflow_material ++drawable abc_ic_menu_paste_mtrl_am_alpha ++drawable abc_ic_menu_selectall_mtrl_alpha ++drawable abc_ic_menu_share_mtrl_alpha ++drawable abc_ic_search_api_material ++drawable abc_ic_star_black_16dp ++drawable abc_ic_star_black_36dp ++drawable abc_ic_star_black_48dp ++drawable abc_ic_star_half_black_16dp ++drawable abc_ic_star_half_black_36dp ++drawable abc_ic_star_half_black_48dp ++drawable abc_ic_voice_search_api_material ++drawable abc_item_background_holo_dark ++drawable abc_item_background_holo_light ++drawable abc_list_divider_material ++drawable abc_list_divider_mtrl_alpha ++drawable abc_list_focused_holo ++drawable abc_list_longpressed_holo ++drawable abc_list_pressed_holo_dark ++drawable abc_list_pressed_holo_light ++drawable abc_list_selector_background_transition_holo_dark ++drawable abc_list_selector_background_transition_holo_light ++drawable abc_list_selector_disabled_holo_dark ++drawable abc_list_selector_disabled_holo_light ++drawable abc_list_selector_holo_dark ++drawable abc_list_selector_holo_light ++drawable abc_menu_hardkey_panel_mtrl_mult ++drawable abc_popup_background_mtrl_mult ++drawable abc_ratingbar_indicator_material ++drawable abc_ratingbar_material ++drawable abc_ratingbar_small_material ++drawable abc_scrubber_control_off_mtrl_alpha ++drawable abc_scrubber_control_to_pressed_mtrl_000 ++drawable abc_scrubber_control_to_pressed_mtrl_005 ++drawable abc_scrubber_primary_mtrl_alpha ++drawable abc_scrubber_track_mtrl_alpha ++drawable abc_seekbar_thumb_material ++drawable abc_seekbar_tick_mark_material ++drawable abc_seekbar_track_material ++drawable abc_spinner_mtrl_am_alpha ++drawable abc_spinner_textfield_background_material ++drawable abc_switch_thumb_material ++drawable abc_switch_track_mtrl_alpha ++drawable abc_tab_indicator_material ++drawable abc_tab_indicator_mtrl_alpha ++drawable abc_text_cursor_material ++drawable abc_text_select_handle_left_mtrl_dark ++drawable abc_text_select_handle_left_mtrl_light ++drawable abc_text_select_handle_middle_mtrl_dark ++drawable abc_text_select_handle_middle_mtrl_light ++drawable abc_text_select_handle_right_mtrl_dark ++drawable abc_text_select_handle_right_mtrl_light ++drawable abc_textfield_activated_mtrl_alpha ++drawable abc_textfield_default_mtrl_alpha ++drawable abc_textfield_search_activated_mtrl_alpha ++drawable abc_textfield_search_default_mtrl_alpha ++drawable abc_textfield_search_material ++drawable abc_vector_test ++drawable notification_action_background ++drawable notification_bg ++drawable notification_bg_low ++drawable notification_bg_low_normal ++drawable notification_bg_low_pressed ++drawable notification_bg_normal ++drawable notification_bg_normal_pressed ++drawable notification_icon_background ++drawable notification_template_icon_bg ++drawable notification_template_icon_low_bg ++drawable notification_tile_bg ++drawable notify_panel_notification_icon_bg ++drawable redbox_top_border_background ++drawable tooltip_frame_dark ++drawable tooltip_frame_light ++id accessibility_actions ++id accessibility_hint ++id accessibility_label ++id accessibility_role ++id accessibility_state ++id accessibility_value ++id action_bar ++id action_bar_activity_content ++id action_bar_container ++id action_bar_root ++id action_bar_spinner ++id action_bar_subtitle ++id action_bar_title ++id action_container ++id action_context_bar ++id action_divider ++id action_image ++id action_menu_divider ++id action_menu_presenter ++id action_mode_bar ++id action_mode_bar_stub ++id action_mode_close_button ++id action_text ++id actions ++id activity_chooser_view_content ++id add ++id alertTitle ++id async ++id blocking ++id bottom ++id buttonPanel ++id catalyst_redbox_title ++id center ++id centerCrop ++id centerInside ++id checkbox ++id chronometer ++id content ++id contentPanel ++id custom ++id customPanel ++id decor_content_parent ++id default_activity_button ++id edit_query ++id end ++id expand_activities_button ++id expanded_menu ++id fitBottomStart ++id fitCenter ++id fitEnd ++id fitStart ++id fitXY ++id focusCrop ++id forever ++id fps_text ++id ghost_view ++id ghost_view_holder ++id group_divider ++id home ++id icon ++id icon_group ++id image ++id info ++id italic ++id left ++id line1 ++id line3 ++id listMode ++id list_item ++id message ++id multiply ++id none ++id normal ++id notification_background ++id notification_main_column ++id notification_main_column_container ++id parentPanel ++id parent_matrix ++id progress_circular ++id progress_horizontal ++id radio ++id react_test_id ++id right ++id right_icon ++id right_side ++id rn_frame_file ++id rn_frame_method ++id rn_redbox_dismiss_button ++id rn_redbox_line_separator ++id rn_redbox_loading_indicator ++id rn_redbox_reload_button ++id rn_redbox_report_button ++id rn_redbox_report_label ++id rn_redbox_stack ++id save_non_transition_alpha ++id save_overlay_view ++id screen ++id scrollIndicatorDown ++id scrollIndicatorUp ++id scrollView ++id search_badge ++id search_bar ++id search_button ++id search_close_btn ++id search_edit_frame ++id search_go_btn ++id search_mag_icon ++id search_plate ++id search_src_text ++id search_voice_btn ++id select_dialog_listview ++id shortcut ++id spacer ++id split_action_bar ++id src_atop ++id src_in ++id src_over ++id start ++id submenuarrow ++id submit_area ++id tabMode ++id tag_transition_group ++id tag_unhandled_key_event_manager ++id tag_unhandled_key_listeners ++id text ++id text2 ++id textSpacerNoButtons ++id textSpacerNoTitle ++id time ++id title ++id titleDividerNoCustom ++id title_template ++id top ++id topPanel ++id transition_current_scene ++id transition_layout_save ++id transition_position ++id transition_scene_layoutid_cache ++id transition_transform ++id uniform ++id up ++id view_tag_instance_handle ++id view_tag_native_id ++id wrap_content ++integer abc_config_activityDefaultDur ++integer abc_config_activityShortDur ++integer cancel_button_image_alpha ++integer config_tooltipAnimTime ++integer react_native_dev_server_port ++integer react_native_inspector_proxy_port ++integer status_bar_notification_info_maxnum ++layout abc_action_bar_title_item ++layout abc_action_bar_up_container ++layout abc_action_menu_item_layout ++layout abc_action_menu_layout ++layout abc_action_mode_bar ++layout abc_action_mode_close_item_material ++layout abc_activity_chooser_view ++layout abc_activity_chooser_view_list_item ++layout abc_alert_dialog_button_bar_material ++layout abc_alert_dialog_material ++layout abc_alert_dialog_title_material ++layout abc_cascading_menu_item_layout ++layout abc_dialog_title_material ++layout abc_expanded_menu_layout ++layout abc_list_menu_item_checkbox ++layout abc_list_menu_item_icon ++layout abc_list_menu_item_layout ++layout abc_list_menu_item_radio ++layout abc_popup_menu_header_item_layout ++layout abc_popup_menu_item_layout ++layout abc_screen_content_include ++layout abc_screen_simple ++layout abc_screen_simple_overlay_action_mode ++layout abc_screen_toolbar ++layout abc_search_dropdown_item_icons_2line ++layout abc_search_view ++layout abc_select_dialog_material ++layout abc_tooltip ++layout dev_loading_view ++layout fps_view ++layout notification_action ++layout notification_action_tombstone ++layout notification_template_custom_big ++layout notification_template_icon_group ++layout notification_template_part_chronometer ++layout notification_template_part_time ++layout redbox_item_frame ++layout redbox_item_title ++layout redbox_view ++layout select_dialog_item_material ++layout select_dialog_multichoice_material ++layout select_dialog_singlechoice_material ++layout support_simple_spinner_dropdown_item ++string abc_action_bar_home_description ++string abc_action_bar_up_description ++string abc_action_menu_overflow_description ++string abc_action_mode_done ++string abc_activity_chooser_view_see_all ++string abc_activitychooserview_choose_application ++string abc_capital_off ++string abc_capital_on ++string abc_font_family_body_1_material ++string abc_font_family_body_2_material ++string abc_font_family_button_material ++string abc_font_family_caption_material ++string abc_font_family_display_1_material ++string abc_font_family_display_2_material ++string abc_font_family_display_3_material ++string abc_font_family_display_4_material ++string abc_font_family_headline_material ++string abc_font_family_menu_material ++string abc_font_family_subhead_material ++string abc_font_family_title_material ++string abc_menu_alt_shortcut_label ++string abc_menu_ctrl_shortcut_label ++string abc_menu_delete_shortcut_label ++string abc_menu_enter_shortcut_label ++string abc_menu_function_shortcut_label ++string abc_menu_meta_shortcut_label ++string abc_menu_shift_shortcut_label ++string abc_menu_space_shortcut_label ++string abc_menu_sym_shortcut_label ++string abc_prepend_shortcut_label ++string abc_search_hint ++string abc_searchview_description_clear ++string abc_searchview_description_query ++string abc_searchview_description_search ++string abc_searchview_description_submit ++string abc_searchview_description_voice ++string abc_shareactionprovider_share_with ++string abc_shareactionprovider_share_with_application ++string abc_toolbar_collapse_description ++string alert_description ++string button_description ++string catalyst_change_bundle_location ++string catalyst_copy_button ++string catalyst_debug ++string catalyst_debug_chrome ++string catalyst_debug_chrome_stop ++string catalyst_debug_connecting ++string catalyst_debug_error ++string catalyst_debug_open ++string catalyst_debug_stop ++string catalyst_devtools_open ++string catalyst_dismiss_button ++string catalyst_heap_capture ++string catalyst_hot_reloading ++string catalyst_hot_reloading_auto_disable ++string catalyst_hot_reloading_auto_enable ++string catalyst_hot_reloading_stop ++string catalyst_inspector ++string catalyst_loading_from_url ++string catalyst_open_flipper_error ++string catalyst_perf_monitor ++string catalyst_perf_monitor_stop ++string catalyst_reload ++string catalyst_reload_button ++string catalyst_reload_error ++string catalyst_report_button ++string catalyst_sample_profiler_disable ++string catalyst_sample_profiler_enable ++string catalyst_settings ++string catalyst_settings_title ++string combobox_description ++string header_description ++string image_description ++string imagebutton_description ++string link_description ++string menu_description ++string menubar_description ++string menuitem_description ++string progressbar_description ++string radiogroup_description ++string rn_tab_description ++string scrollbar_description ++string search_description ++string search_menu_title ++string spinbutton_description ++string state_busy_description ++string state_collapsed_description ++string state_expanded_description ++string state_mixed_description ++string state_off_description ++string state_on_description ++string status_bar_notification_info_overflow ++string summary_description ++string tablist_description ++string timer_description ++string toolbar_description ++style AlertDialog_AppCompat ++style AlertDialog_AppCompat_Light ++style Animation_AppCompat_Dialog ++style Animation_AppCompat_DropDownUp ++style Animation_AppCompat_Tooltip ++style Animation_Catalyst_LogBox ++style Animation_Catalyst_RedBox ++style Base_AlertDialog_AppCompat ++style Base_AlertDialog_AppCompat_Light ++style Base_Animation_AppCompat_Dialog ++style Base_Animation_AppCompat_DropDownUp ++style Base_Animation_AppCompat_Tooltip ++style Base_DialogWindowTitleBackground_AppCompat ++style Base_DialogWindowTitle_AppCompat ++style Base_TextAppearance_AppCompat ++style Base_TextAppearance_AppCompat_Body1 ++style Base_TextAppearance_AppCompat_Body2 ++style Base_TextAppearance_AppCompat_Button ++style Base_TextAppearance_AppCompat_Caption ++style Base_TextAppearance_AppCompat_Display1 ++style Base_TextAppearance_AppCompat_Display2 ++style Base_TextAppearance_AppCompat_Display3 ++style Base_TextAppearance_AppCompat_Display4 ++style Base_TextAppearance_AppCompat_Headline ++style Base_TextAppearance_AppCompat_Inverse ++style Base_TextAppearance_AppCompat_Large ++style Base_TextAppearance_AppCompat_Large_Inverse ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Medium ++style Base_TextAppearance_AppCompat_Medium_Inverse ++style Base_TextAppearance_AppCompat_Menu ++style Base_TextAppearance_AppCompat_SearchResult ++style Base_TextAppearance_AppCompat_SearchResult_Subtitle ++style Base_TextAppearance_AppCompat_SearchResult_Title ++style Base_TextAppearance_AppCompat_Small ++style Base_TextAppearance_AppCompat_Small_Inverse ++style Base_TextAppearance_AppCompat_Subhead ++style Base_TextAppearance_AppCompat_Subhead_Inverse ++style Base_TextAppearance_AppCompat_Title ++style Base_TextAppearance_AppCompat_Title_Inverse ++style Base_TextAppearance_AppCompat_Tooltip ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Title ++style Base_TextAppearance_AppCompat_Widget_Button ++style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Inverse ++style Base_TextAppearance_AppCompat_Widget_DropDownItem ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Widget_Switch ++style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Title ++style Base_ThemeOverlay_AppCompat ++style Base_ThemeOverlay_AppCompat_ActionBar ++style Base_ThemeOverlay_AppCompat_Dark ++style Base_ThemeOverlay_AppCompat_Dark_ActionBar ++style Base_ThemeOverlay_AppCompat_Dialog ++style Base_ThemeOverlay_AppCompat_Dialog_Alert ++style Base_ThemeOverlay_AppCompat_Light ++style Base_Theme_AppCompat ++style Base_Theme_AppCompat_CompactMenu ++style Base_Theme_AppCompat_Dialog ++style Base_Theme_AppCompat_DialogWhenLarge ++style Base_Theme_AppCompat_Dialog_Alert ++style Base_Theme_AppCompat_Dialog_FixedSize ++style Base_Theme_AppCompat_Dialog_MinWidth ++style Base_Theme_AppCompat_Light ++style Base_Theme_AppCompat_Light_DarkActionBar ++style Base_Theme_AppCompat_Light_Dialog ++style Base_Theme_AppCompat_Light_DialogWhenLarge ++style Base_Theme_AppCompat_Light_Dialog_Alert ++style Base_Theme_AppCompat_Light_Dialog_FixedSize ++style Base_Theme_AppCompat_Light_Dialog_MinWidth ++style Base_V21_ThemeOverlay_AppCompat_Dialog ++style Base_V21_Theme_AppCompat ++style Base_V21_Theme_AppCompat_Dialog ++style Base_V21_Theme_AppCompat_Light ++style Base_V21_Theme_AppCompat_Light_Dialog ++style Base_V22_Theme_AppCompat ++style Base_V22_Theme_AppCompat_Light ++style Base_V23_Theme_AppCompat ++style Base_V23_Theme_AppCompat_Light ++style Base_V26_Theme_AppCompat ++style Base_V26_Theme_AppCompat_Light ++style Base_V26_Widget_AppCompat_Toolbar ++style Base_V28_Theme_AppCompat ++style Base_V28_Theme_AppCompat_Light ++style Base_V7_ThemeOverlay_AppCompat_Dialog ++style Base_V7_Theme_AppCompat ++style Base_V7_Theme_AppCompat_Dialog ++style Base_V7_Theme_AppCompat_Light ++style Base_V7_Theme_AppCompat_Light_Dialog ++style Base_V7_Widget_AppCompat_AutoCompleteTextView ++style Base_V7_Widget_AppCompat_EditText ++style Base_V7_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_ActionBar ++style Base_Widget_AppCompat_ActionBar_Solid ++style Base_Widget_AppCompat_ActionBar_TabBar ++style Base_Widget_AppCompat_ActionBar_TabText ++style Base_Widget_AppCompat_ActionBar_TabView ++style Base_Widget_AppCompat_ActionButton ++style Base_Widget_AppCompat_ActionButton_CloseMode ++style Base_Widget_AppCompat_ActionButton_Overflow ++style Base_Widget_AppCompat_ActionMode ++style Base_Widget_AppCompat_ActivityChooserView ++style Base_Widget_AppCompat_AutoCompleteTextView ++style Base_Widget_AppCompat_Button ++style Base_Widget_AppCompat_ButtonBar ++style Base_Widget_AppCompat_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Borderless ++style Base_Widget_AppCompat_Button_Borderless_Colored ++style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Colored ++style Base_Widget_AppCompat_Button_Small ++style Base_Widget_AppCompat_CompoundButton_CheckBox ++style Base_Widget_AppCompat_CompoundButton_RadioButton ++style Base_Widget_AppCompat_CompoundButton_Switch ++style Base_Widget_AppCompat_DrawerArrowToggle ++style Base_Widget_AppCompat_DrawerArrowToggle_Common ++style Base_Widget_AppCompat_DropDownItem_Spinner ++style Base_Widget_AppCompat_EditText ++style Base_Widget_AppCompat_ImageButton ++style Base_Widget_AppCompat_Light_ActionBar ++style Base_Widget_AppCompat_Light_ActionBar_Solid ++style Base_Widget_AppCompat_Light_ActionBar_TabBar ++style Base_Widget_AppCompat_Light_ActionBar_TabText ++style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Base_Widget_AppCompat_Light_ActionBar_TabView ++style Base_Widget_AppCompat_Light_PopupMenu ++style Base_Widget_AppCompat_Light_PopupMenu_Overflow ++style Base_Widget_AppCompat_ListMenuView ++style Base_Widget_AppCompat_ListPopupWindow ++style Base_Widget_AppCompat_ListView ++style Base_Widget_AppCompat_ListView_DropDown ++style Base_Widget_AppCompat_ListView_Menu ++style Base_Widget_AppCompat_PopupMenu ++style Base_Widget_AppCompat_PopupMenu_Overflow ++style Base_Widget_AppCompat_PopupWindow ++style Base_Widget_AppCompat_ProgressBar ++style Base_Widget_AppCompat_ProgressBar_Horizontal ++style Base_Widget_AppCompat_RatingBar ++style Base_Widget_AppCompat_RatingBar_Indicator ++style Base_Widget_AppCompat_RatingBar_Small ++style Base_Widget_AppCompat_SearchView ++style Base_Widget_AppCompat_SearchView_ActionBar ++style Base_Widget_AppCompat_SeekBar ++style Base_Widget_AppCompat_SeekBar_Discrete ++style Base_Widget_AppCompat_Spinner ++style Base_Widget_AppCompat_Spinner_Underlined ++style Base_Widget_AppCompat_TextView_SpinnerItem ++style Base_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_Toolbar_Button_Navigation ++style CalendarDatePickerDialog ++style CalendarDatePickerStyle ++style DialogAnimationFade ++style DialogAnimationSlide ++style Platform_AppCompat ++style Platform_AppCompat_Light ++style Platform_ThemeOverlay_AppCompat ++style Platform_ThemeOverlay_AppCompat_Dark ++style Platform_ThemeOverlay_AppCompat_Light ++style Platform_V21_AppCompat ++style Platform_V21_AppCompat_Light ++style Platform_V25_AppCompat ++style Platform_V25_AppCompat_Light ++style Platform_Widget_AppCompat_Spinner ++style RtlOverlay_DialogWindowTitle_AppCompat ++style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem ++style RtlOverlay_Widget_AppCompat_DialogTitle_Icon ++style RtlOverlay_Widget_AppCompat_PopupMenuItem ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title ++style RtlOverlay_Widget_AppCompat_SearchView_MagIcon ++style RtlOverlay_Widget_AppCompat_Search_DropDown ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Query ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Text ++style RtlUnderlay_Widget_AppCompat_ActionButton ++style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow ++style SpinnerDatePickerDialog ++style SpinnerDatePickerStyle ++style TextAppearance_AppCompat ++style TextAppearance_AppCompat_Body1 ++style TextAppearance_AppCompat_Body2 ++style TextAppearance_AppCompat_Button ++style TextAppearance_AppCompat_Caption ++style TextAppearance_AppCompat_Display1 ++style TextAppearance_AppCompat_Display2 ++style TextAppearance_AppCompat_Display3 ++style TextAppearance_AppCompat_Display4 ++style TextAppearance_AppCompat_Headline ++style TextAppearance_AppCompat_Inverse ++style TextAppearance_AppCompat_Large ++style TextAppearance_AppCompat_Large_Inverse ++style TextAppearance_AppCompat_Light_SearchResult_Subtitle ++style TextAppearance_AppCompat_Light_SearchResult_Title ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Medium ++style TextAppearance_AppCompat_Medium_Inverse ++style TextAppearance_AppCompat_Menu ++style TextAppearance_AppCompat_SearchResult_Subtitle ++style TextAppearance_AppCompat_SearchResult_Title ++style TextAppearance_AppCompat_Small ++style TextAppearance_AppCompat_Small_Inverse ++style TextAppearance_AppCompat_Subhead ++style TextAppearance_AppCompat_Subhead_Inverse ++style TextAppearance_AppCompat_Title ++style TextAppearance_AppCompat_Title_Inverse ++style TextAppearance_AppCompat_Tooltip ++style TextAppearance_AppCompat_Widget_ActionBar_Menu ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionBar_Title ++style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Title ++style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse ++style TextAppearance_AppCompat_Widget_Button ++style TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style TextAppearance_AppCompat_Widget_Button_Colored ++style TextAppearance_AppCompat_Widget_Button_Inverse ++style TextAppearance_AppCompat_Widget_DropDownItem ++style TextAppearance_AppCompat_Widget_PopupMenu_Header ++style TextAppearance_AppCompat_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Widget_Switch ++style TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style TextAppearance_Compat_Notification ++style TextAppearance_Compat_Notification_Info ++style TextAppearance_Compat_Notification_Line2 ++style TextAppearance_Compat_Notification_Time ++style TextAppearance_Compat_Notification_Title ++style TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style TextAppearance_Widget_AppCompat_Toolbar_Title ++style Theme ++style ThemeOverlay_AppCompat ++style ThemeOverlay_AppCompat_ActionBar ++style ThemeOverlay_AppCompat_Dark ++style ThemeOverlay_AppCompat_Dark_ActionBar ++style ThemeOverlay_AppCompat_Dialog ++style ThemeOverlay_AppCompat_Dialog_Alert ++style ThemeOverlay_AppCompat_Light ++style Theme_AppCompat ++style Theme_AppCompat_CompactMenu ++style Theme_AppCompat_DayNight ++style Theme_AppCompat_DayNight_DarkActionBar ++style Theme_AppCompat_DayNight_Dialog ++style Theme_AppCompat_DayNight_DialogWhenLarge ++style Theme_AppCompat_DayNight_Dialog_Alert ++style Theme_AppCompat_DayNight_Dialog_MinWidth ++style Theme_AppCompat_DayNight_NoActionBar ++style Theme_AppCompat_Dialog ++style Theme_AppCompat_DialogWhenLarge ++style Theme_AppCompat_Dialog_Alert ++style Theme_AppCompat_Dialog_MinWidth ++style Theme_AppCompat_Light ++style Theme_AppCompat_Light_DarkActionBar ++style Theme_AppCompat_Light_Dialog ++style Theme_AppCompat_Light_DialogWhenLarge ++style Theme_AppCompat_Light_Dialog_Alert ++style Theme_AppCompat_Light_Dialog_MinWidth ++style Theme_AppCompat_Light_NoActionBar ++style Theme_AppCompat_NoActionBar ++style Theme_Catalyst ++style Theme_Catalyst_LogBox ++style Theme_Catalyst_RedBox ++style Theme_FullScreenDialog ++style Theme_FullScreenDialogAnimatedFade ++style Theme_FullScreenDialogAnimatedSlide ++style Theme_ReactNative_AppCompat_Light ++style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen ++style Widget_AppCompat_ActionBar ++style Widget_AppCompat_ActionBar_Solid ++style Widget_AppCompat_ActionBar_TabBar ++style Widget_AppCompat_ActionBar_TabText ++style Widget_AppCompat_ActionBar_TabView ++style Widget_AppCompat_ActionButton ++style Widget_AppCompat_ActionButton_CloseMode ++style Widget_AppCompat_ActionButton_Overflow ++style Widget_AppCompat_ActionMode ++style Widget_AppCompat_ActivityChooserView ++style Widget_AppCompat_AutoCompleteTextView ++style Widget_AppCompat_Button ++style Widget_AppCompat_ButtonBar ++style Widget_AppCompat_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Borderless ++style Widget_AppCompat_Button_Borderless_Colored ++style Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Colored ++style Widget_AppCompat_Button_Small ++style Widget_AppCompat_CompoundButton_CheckBox ++style Widget_AppCompat_CompoundButton_RadioButton ++style Widget_AppCompat_CompoundButton_Switch ++style Widget_AppCompat_DrawerArrowToggle ++style Widget_AppCompat_DropDownItem_Spinner ++style Widget_AppCompat_EditText ++style Widget_AppCompat_ImageButton ++style Widget_AppCompat_Light_ActionBar ++style Widget_AppCompat_Light_ActionBar_Solid ++style Widget_AppCompat_Light_ActionBar_Solid_Inverse ++style Widget_AppCompat_Light_ActionBar_TabBar ++style Widget_AppCompat_Light_ActionBar_TabBar_Inverse ++style Widget_AppCompat_Light_ActionBar_TabText ++style Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Widget_AppCompat_Light_ActionBar_TabView ++style Widget_AppCompat_Light_ActionBar_TabView_Inverse ++style Widget_AppCompat_Light_ActionButton ++style Widget_AppCompat_Light_ActionButton_CloseMode ++style Widget_AppCompat_Light_ActionButton_Overflow ++style Widget_AppCompat_Light_ActionMode_Inverse ++style Widget_AppCompat_Light_ActivityChooserView ++style Widget_AppCompat_Light_AutoCompleteTextView ++style Widget_AppCompat_Light_DropDownItem_Spinner ++style Widget_AppCompat_Light_ListPopupWindow ++style Widget_AppCompat_Light_ListView_DropDown ++style Widget_AppCompat_Light_PopupMenu ++style Widget_AppCompat_Light_PopupMenu_Overflow ++style Widget_AppCompat_Light_SearchView ++style Widget_AppCompat_Light_Spinner_DropDown_ActionBar ++style Widget_AppCompat_ListMenuView ++style Widget_AppCompat_ListPopupWindow ++style Widget_AppCompat_ListView ++style Widget_AppCompat_ListView_DropDown ++style Widget_AppCompat_ListView_Menu ++style Widget_AppCompat_PopupMenu ++style Widget_AppCompat_PopupMenu_Overflow ++style Widget_AppCompat_PopupWindow ++style Widget_AppCompat_ProgressBar ++style Widget_AppCompat_ProgressBar_Horizontal ++style Widget_AppCompat_RatingBar ++style Widget_AppCompat_RatingBar_Indicator ++style Widget_AppCompat_RatingBar_Small ++style Widget_AppCompat_SearchView ++style Widget_AppCompat_SearchView_ActionBar ++style Widget_AppCompat_SeekBar ++style Widget_AppCompat_SeekBar_Discrete ++style Widget_AppCompat_Spinner ++style Widget_AppCompat_Spinner_DropDown ++style Widget_AppCompat_Spinner_DropDown_ActionBar ++style Widget_AppCompat_Spinner_Underlined ++style Widget_AppCompat_TextView_SpinnerItem ++style Widget_AppCompat_Toolbar ++style Widget_AppCompat_Toolbar_Button_Navigation ++style Widget_Compat_NotificationActionContainer ++style Widget_Compat_NotificationActionText ++style Widget_Support_CoordinatorLayout ++style redboxButton ++styleable ActionBar background backgroundSplit backgroundStacked contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation customNavigationLayout displayOptions divider elevation height hideOnContentScroll homeAsUpIndicator homeLayout icon indeterminateProgressStyle itemPadding logo navigationMode popupTheme progressBarPadding progressBarStyle subtitle subtitleTextStyle title titleTextStyle ++styleable ActionBarLayout android_layout_gravity ++styleable ActionMenuItemView android_minWidth ++styleable ActionMenuView ++styleable ActionMode background backgroundSplit closeItemLayout height subtitleTextStyle titleTextStyle ++styleable ActivityChooserView expandActivityOverflowButtonDrawable initialActivityCount ++styleable AlertDialog android_layout buttonIconDimen buttonPanelSideLayout listItemLayout listLayout multiChoiceItemLayout showTitle singleChoiceItemLayout ++styleable AnimatedStateListDrawableCompat android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable AnimatedStateListDrawableItem android_drawable android_id ++styleable AnimatedStateListDrawableTransition android_drawable android_fromId android_reversible android_toId ++styleable AppCompatImageView android_src srcCompat tint tintMode ++styleable AppCompatSeekBar android_thumb tickMark tickMarkTint tickMarkTintMode ++styleable AppCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance ++styleable AppCompatTextView android_textAppearance autoSizeMaxTextSize autoSizeMinTextSize autoSizePresetSizes autoSizeStepGranularity autoSizeTextType firstBaselineToTopHeight fontFamily lastBaselineToBottomHeight lineHeight textAllCaps ++styleable AppCompatTheme actionBarDivider actionBarItemBackground actionBarPopupTheme actionBarSize actionBarSplitStyle actionBarStyle actionBarTabBarStyle actionBarTabStyle actionBarTabTextStyle actionBarTheme actionBarWidgetTheme actionButtonStyle actionDropDownStyle actionMenuTextAppearance actionMenuTextColor actionModeBackground actionModeCloseButtonStyle actionModeCloseDrawable actionModeCopyDrawable actionModeCutDrawable actionModeFindDrawable actionModePasteDrawable actionModePopupWindowStyle actionModeSelectAllDrawable actionModeShareDrawable actionModeSplitBackground actionModeStyle actionModeWebSearchDrawable actionOverflowButtonStyle actionOverflowMenuStyle activityChooserViewStyle alertDialogButtonGroupStyle alertDialogCenterButtons alertDialogStyle alertDialogTheme android_windowAnimationStyle android_windowIsFloating autoCompleteTextViewStyle borderlessButtonStyle buttonBarButtonStyle buttonBarNegativeButtonStyle buttonBarNeutralButtonStyle buttonBarPositiveButtonStyle buttonBarStyle buttonStyle buttonStyleSmall checkboxStyle checkedTextViewStyle colorAccent colorBackgroundFloating colorButtonNormal colorControlActivated colorControlHighlight colorControlNormal colorError colorPrimary colorPrimaryDark colorSwitchThumbNormal controlBackground dialogCornerRadius dialogPreferredPadding dialogTheme dividerHorizontal dividerVertical dropDownListViewStyle dropdownListPreferredItemHeight editTextBackground editTextColor editTextStyle homeAsUpIndicator imageButtonStyle listChoiceBackgroundIndicator listDividerAlertDialog listMenuViewStyle listPopupWindowStyle listPreferredItemHeight listPreferredItemHeightLarge listPreferredItemHeightSmall listPreferredItemPaddingLeft listPreferredItemPaddingRight panelBackground panelMenuListTheme panelMenuListWidth popupMenuStyle popupWindowStyle radioButtonStyle ratingBarStyle ratingBarStyleIndicator ratingBarStyleSmall searchViewStyle seekBarStyle selectableItemBackground selectableItemBackgroundBorderless spinnerDropDownItemStyle spinnerStyle switchStyle textAppearanceLargePopupMenu textAppearanceListItem textAppearanceListItemSecondary textAppearanceListItemSmall textAppearancePopupMenuHeader textAppearanceSearchResultSubtitle textAppearanceSearchResultTitle textAppearanceSmallPopupMenu textColorAlertDialogListItem textColorSearchUrl toolbarNavigationButtonStyle toolbarStyle tooltipForegroundColor tooltipFrameBackground viewInflaterClass windowActionBar windowActionBarOverlay windowActionModeOverlay windowFixedHeightMajor windowFixedHeightMinor windowFixedWidthMajor windowFixedWidthMinor windowMinWidthMajor windowMinWidthMinor windowNoTitle ++styleable ButtonBarLayout allowStacking ++styleable ColorStateListItem alpha android_alpha android_color ++styleable CompoundButton android_button buttonTint buttonTintMode ++styleable CoordinatorLayout keylines statusBarBackground ++styleable CoordinatorLayout_Layout android_layout_gravity layout_anchor layout_anchorGravity layout_behavior layout_dodgeInsetEdges layout_insetEdge layout_keyline ++styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness ++styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery ++styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex ++styleable GenericDraweeHierarchy actualImageScaleType backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type ++styleable GradientColorItem android_color android_offset ++styleable LinearLayoutCompat android_baselineAligned android_baselineAlignedChildIndex android_gravity android_orientation android_weightSum divider dividerPadding measureWithLargestChild showDividers ++styleable LinearLayoutCompat_Layout android_layout_gravity android_layout_height android_layout_weight android_layout_width ++styleable ListPopupWindow android_dropDownHorizontalOffset android_dropDownVerticalOffset ++styleable MenuGroup android_checkableBehavior android_enabled android_id android_menuCategory android_orderInCategory android_visible ++styleable MenuItem actionLayout actionProviderClass actionViewClass alphabeticModifiers android_alphabeticShortcut android_checkable android_checked android_enabled android_icon android_id android_menuCategory android_numericShortcut android_onClick android_orderInCategory android_title android_titleCondensed android_visible contentDescription iconTint iconTintMode numericModifiers showAsAction tooltipText ++styleable MenuView android_headerBackground android_horizontalDivider android_itemBackground android_itemIconDisabledAlpha android_itemTextAppearance android_verticalDivider android_windowAnimationStyle preserveIconSpacing subMenuArrow ++styleable PopupWindow android_popupAnimationStyle android_popupBackground overlapAnchor ++styleable PopupWindowBackgroundState state_above_anchor ++styleable RecycleListView paddingBottomNoButtons paddingTopNoTitle ++styleable SearchView android_focusable android_imeOptions android_inputType android_maxWidth closeIcon commitIcon defaultQueryHint goIcon iconifiedByDefault layout queryBackground queryHint searchHintIcon searchIcon submitBackground suggestionRowLayout voiceIcon ++styleable SimpleDraweeView actualImageResource actualImageScaleType actualImageUri backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable Spinner android_dropDownWidth android_entries android_popupBackground android_prompt popupTheme ++styleable StateListDrawable android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable StateListDrawableItem android_drawable ++styleable SwitchCompat android_textOff android_textOn android_thumb showText splitTrack switchMinWidth switchPadding switchTextAppearance thumbTextPadding thumbTint thumbTintMode track trackTint trackTintMode ++styleable TextAppearance android_fontFamily android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textColorLink android_textSize android_textStyle android_typeface fontFamily textAllCaps ++styleable Toolbar android_gravity android_minHeight buttonGravity collapseContentDescription collapseIcon contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation logo logoDescription maxButtonHeight navigationContentDescription navigationIcon popupTheme subtitle subtitleTextAppearance subtitleTextColor title titleMargin titleMarginBottom titleMarginEnd titleMarginStart titleMarginTop titleMargins titleTextAppearance titleTextColor ++styleable View android_focusable android_theme paddingEnd paddingStart theme ++styleable ViewBackgroundHelper android_background backgroundTint backgroundTintMode ++styleable ViewStubCompat android_id android_inflatedId android_layout ++xml rn_dev_preferences +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/9b2cc9dc5260a635b099a9fc9e4c00c6.bin b/node_modules/react-native-reanimated/android/build/.transforms/9b2cc9dc5260a635b099a9fc9e4c00c6.bin +new file mode 100644 +index 0000000..e69de29 +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/9f58999073bf850246fe92ed3b192c92.bin b/node_modules/react-native-reanimated/android/build/.transforms/9f58999073bf850246fe92ed3b192c92.bin +new file mode 100644 +index 0000000..e69de29 +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2.bin b/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2.bin +new file mode 100644 +index 0000000..abab530 +--- /dev/null ++++ b/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2.bin +@@ -0,0 +1 @@ ++o/jetified-react-native-reanimated-64-hermes-runtime +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2/jetified-react-native-reanimated-64-hermes-runtime/classes.dex b/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2/jetified-react-native-reanimated-64-hermes-runtime/classes.dex +new file mode 100644 +index 0000000..6c6af16 +Binary files /dev/null and b/node_modules/react-native-reanimated/android/build/.transforms/a75698f55b2732ab4a4eb9f5a9c2bfe2/jetified-react-native-reanimated-64-hermes-runtime/classes.dex differ +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/be7577e299e7cadc317864fac57e68b7.bin b/node_modules/react-native-reanimated/android/build/.transforms/be7577e299e7cadc317864fac57e68b7.bin +new file mode 100644 +index 0000000..e69de29 +diff --git a/node_modules/react-native-reanimated/android/build/.transforms/c14b39947b717193365b5983a5474303.bin b/node_modules/react-native-reanimated/android/build/.transforms/c14b39947b717193365b5983a5474303.bin +new file mode 100644 +index 0000000..e69de29 diff --git a/react-native.config.js b/react-native.config.js index f90e1e797..6f2362f43 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -5,12 +5,6 @@ module.exports = { android: null } }, - '@nozbe/watermelondb': { - platforms: { - android: null, - ios: null - } - }, '@react-native-firebase/app': { platforms: { android: null diff --git a/storybook/stories/RoomItem.js b/storybook/stories/RoomItem.js index 5baeb9f95..1538c118a 100644 --- a/storybook/stories/RoomItem.js +++ b/storybook/stories/RoomItem.js @@ -7,6 +7,7 @@ import { Provider } from 'react-redux'; import { themes } from '../../app/constants/colors'; import RoomItemComponent from '../../app/presentation/RoomItem/RoomItem'; import { longText } from '../utils'; +import { DISPLAY_MODE_CONDENSED, DISPLAY_MODE_EXPANDED } from '../../app/constants/constantDisplayMode'; import { store } from './index'; const baseUrl = 'https://open.rocket.chat'; @@ -30,6 +31,8 @@ const RoomItem = props => ( baseUrl={baseUrl} width={width} theme={_theme} + showAvatar + displayMode={DISPLAY_MODE_EXPANDED} {...updatedAt} {...props} /> @@ -126,3 +129,57 @@ stories.add('Last Message', () => ( <RoomItem showLastMessage alert tunread={[1]} lastMessage={lastMessage} /> </> )); + +stories.add('Condensed Room Item', () => ( + <> + <RoomItem showLastMessage alert tunread={[1]} lastMessage={lastMessage} displayMode={DISPLAY_MODE_CONDENSED} /> + <RoomItem showLastMessage alert name='unread' unread={1000} displayMode={DISPLAY_MODE_CONDENSED} /> + + <RoomItem type='c' displayMode={DISPLAY_MODE_CONDENSED} autoJoin /> + </> +)); + +stories.add('Condensed Room Item without Avatar', () => ( + <> + <RoomItem + showLastMessage + alert + tunread={[1]} + lastMessage={lastMessage} + displayMode={DISPLAY_MODE_CONDENSED} + showAvatar={false} + /> + <RoomItem type='p' displayMode={DISPLAY_MODE_CONDENSED} showAvatar={false} /> + <RoomItem name={longText} autoJoin displayMode={DISPLAY_MODE_CONDENSED} showAvatar={false} /> + </> +)); + +stories.add('Expanded Room Item without Avatar', () => ( + <> + <RoomItem + showLastMessage + alert + tunread={[1]} + lastMessage={lastMessage} + displayMode={DISPLAY_MODE_EXPANDED} + showAvatar={false} + /> + <RoomItem + status='online' + showLastMessage + alert + tunread={[1]} + lastMessage={lastMessage} + displayMode={DISPLAY_MODE_EXPANDED} + showAvatar={false} + /> + <RoomItem + status='online' + showLastMessage + alert + lastMessage={lastMessage} + displayMode={DISPLAY_MODE_EXPANDED} + showAvatar={false} + /> + </> +)); diff --git a/yarn.lock b/yarn.lock index ef839c91b..8cff8c970 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1428,6 +1428,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-object-assign@^7.10.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.14.5.tgz#62537d54b6d85de04f4df48bfdba2eebff17b760" + integrity sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" @@ -1792,6 +1799,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.11.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.12.1": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" @@ -2840,23 +2854,37 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nozbe/simdjson@0.9.6-fix2": + version "0.9.6-fix2" + resolved "https://registry.yarnpkg.com/@nozbe/simdjson/-/simdjson-0.9.6-fix2.tgz#00d1c8ec76bfac25c022b07511c8fff4568b2973" + integrity sha512-xKzrhtH7elBUOOihtNwN4Jr0iVcI7+95NCzC2gLvBYkITiCYqqOUm+2badFMkWFEE9gKQLUJJaux4qtgPPItaQ== + "@nozbe/sqlite@3.31.1": version "3.31.1" resolved "https://registry.yarnpkg.com/@nozbe/sqlite/-/sqlite-3.31.1.tgz#ffd394ad7c188c6b73f89fd6e1ccb849a1b96dba" integrity sha512-z5+GdcHZl9OQ1g0pnygORAnwCYUlYw/gQxdW/8rS0HxD2Gnn/k3DBQOvqQIH4Z3Z3KWVMbGUYhcH1v4SqTAdwg== -"@nozbe/watermelondb@0.19.0": - version "0.19.0" - resolved "https://registry.yarnpkg.com/@nozbe/watermelondb/-/watermelondb-0.19.0.tgz#70dae4bfca9dde8d61819a6092846e178a50e2f7" - integrity sha512-x7sclLu/4RDmLzANIYQioKjWdmoIxgqYw7OJnS7UtWEtJGn28l5Z69SWojll/RM0X2KOEem0BIcjqM46CA53GA== +"@nozbe/watermelondb@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@nozbe/watermelondb/-/watermelondb-0.23.0.tgz#505b1dda6445c734708d1af0d82b10b7fcc58c07" + integrity sha512-nQCQCZe9jthWlVPDI5WfOPc9lx3hI+sxG74vlyDH3NXgzjJiLEkVmpV+zF71U6VQLHsFRE7pGntys4SdsuEmzg== dependencies: + "@babel/runtime" "^7.11.2" + "@nozbe/simdjson" "0.9.6-fix2" "@nozbe/sqlite" "3.31.1" - lokijs "npm:@nozbe/lokijs@1.5.10-wmelon0" - rambdax "2.15.0" - rxjs "^6.2.2" - rxjs-compat "^6.3.2" + "@nozbe/with-observables" "1.4.0" + hoist-non-react-statics "^3.3.2" + lokijs "npm:@nozbe/lokijs@1.5.12-wmelon2" + rxjs "^6.5.3" sql-escape-string "^1.1.0" +"@nozbe/with-observables@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@nozbe/with-observables/-/with-observables-1.4.0.tgz#38d91186c932d431b767302f9f31214335912c6a" + integrity sha512-vzc0QiYcXK/GmflBGBXTs02ayL25e1l4Cr9aYgSuYCZVqpyMfep9xp89RygNbiibAfVLbgEUa7thxlm3jw8hFw== + dependencies: + hoist-non-react-statics "^3.3.2" + "@reach/router@^1.2.1": version "1.3.3" resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.3.tgz#58162860dce6c9449d49be86b0561b5ef46d80db" @@ -6361,11 +6389,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== - connect@^3.6.5: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -7477,24 +7500,6 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz#2ba4592dd6843258221d9bff2b6831bd77c874e4" - integrity sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw== - dependencies: - confusing-browser-globals "^1.0.9" - object.assign "^4.1.0" - object.entries "^1.1.1" - -eslint-config-airbnb@^18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d" - integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw== - dependencies: - eslint-config-airbnb-base "^14.1.0" - object.assign "^4.1.0" - object.entries "^1.1.1" - eslint-config-prettier@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" @@ -8147,7 +8152,7 @@ fbjs-css-vars@^1.0.0: resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== -fbjs@1.0.0, fbjs@^1.0.0: +fbjs@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== @@ -11212,10 +11217,10 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" -"lokijs@npm:@nozbe/lokijs@1.5.10-wmelon0": - version "1.5.10-wmelon0" - resolved "https://registry.yarnpkg.com/@nozbe/lokijs/-/lokijs-1.5.10-wmelon0.tgz#dcad682083b85c238d14cdcd1f016125fff54336" - integrity sha512-GSLyRUTxCPwWLLKxMxA8/Pujm2xAgPGSehze9ICHZDG9yyMMfuWYae+qY+fQctgA1HuKiwoRUEvrrKBCQj9jzA== +"lokijs@npm:@nozbe/lokijs@1.5.12-wmelon2": + version "1.5.12-wmelon2" + resolved "https://registry.yarnpkg.com/@nozbe/lokijs/-/lokijs-1.5.12-wmelon2.tgz#31bc7b2d0c62edc1ccabd50ba795635d40e3e8c9" + integrity sha512-/YkZghPWKmyXgVpZ2MaIe3y/t/IYm/wQxXyEoi0G8JrjTrO9tlrAs2uiHUhbdY/2ZSPMLKbw1q9EqXZxA8ZqnQ== long@~3: version "3.2.0" @@ -11904,6 +11909,11 @@ mocha@9.0.1: yargs-parser "20.2.4" yargs-unparser "2.0.0" +mockdate@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-3.0.5.tgz#789be686deb3149e7df2b663d2bc4392bc3284fb" + integrity sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ== + moment@2.29.1, moment@^2.19.3, moment@^2.24.0: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" @@ -12289,7 +12299,7 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.0, object.entries@^1.1.1: +object.entries@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== @@ -13394,11 +13404,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -rambdax@2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-2.15.0.tgz#34fb481cea1a88e64a25e3a25e34a258fa18ca12" - integrity sha512-9ScXRMAcLaiist63yYDeDTRSIbL9DFY5yaIkoWyodaHS94PUL1ECQxQkxPP+h76oXG6bLo9b/ML+yvIRd78qeg== - ramda@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" @@ -13674,8 +13679,8 @@ react-native-gesture-handler@^1.10.3: prop-types "^15.7.2" react-native-image-crop-picker@RocketChat/react-native-image-crop-picker: - version "0.31.1" - resolved "https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/db1040b57e8536bd64db699897361167009b359c" + version "0.36.3" + resolved "https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/f347776247afb5cbd1400dde215689d7ca8fd6f2" react-native-image-progress@^1.1.1: version "1.1.1" @@ -13782,12 +13787,15 @@ react-native-prompt-android@^1.1.0: resolved "https://registry.yarnpkg.com/react-native-prompt-android/-/react-native-prompt-android-1.1.0.tgz#3c5168029075cb9f72549fd5f92403372fb234e9" integrity sha512-4JoyEaT2ZnK9IH+tDFpbTiQBgva8UIFGQf4/Uw/tnEVWBERlVlzcs5B82T9BkeEhEqXhp89JaiSBnLWj30lciw== -react-native-reanimated@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.9.0.tgz#38676c99dd585504fdc7331efb45e5f48ec7339a" - integrity sha512-Aj+spgIHRiVv7ezGADxnSH1EoKrQRD2+XaSiGY0MiB/pvRNNrZPSJ+3NVpvLwWf9lZMOP7dwqqyJIzoZgBDt8w== +react-native-reanimated@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-2.2.2.tgz#8bc81c7ee93d599991507bb826050a5eeee1e7f2" + integrity sha512-Lfv4ogbNLU9x3DqhXUFza9pnzyTvPrw5xGC1wWA6aGXqZgyaikNLgC5dNWzxVbfEwRdOuLPFsai3LAcIM92TCg== dependencies: - fbjs "^1.0.0" + "@babel/plugin-transform-object-assign" "^7.10.4" + fbjs "^3.0.0" + mockdate "^3.0.2" + string-hash-64 "^1.0.3" react-native-redash@^12.0.3: version "12.6.1" @@ -14599,18 +14607,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs-compat@^6.3.2: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.5.5.tgz#073c40510f29c45a2a5fc02dde87f8c3ad75f2c2" - integrity sha512-F42sssVbUyWH4vJswEo6m+Eh02xHv3q93n8S7nUJO58R7sbc3CvJIOts605zdaBhWa1xMB9aVSyqPqhQ5q3eXg== - -rxjs@^6.2.2, rxjs@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== - dependencies: - tslib "^1.9.0" - rxjs@^6.4.0, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -14618,6 +14614,13 @@ rxjs@^6.4.0, rxjs@^6.6.7: dependencies: tslib "^1.9.0" +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -15337,6 +15340,11 @@ string-argv@0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +string-hash-64@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string-hash-64/-/string-hash-64-1.0.3.tgz#0deb56df58678640db5c479ccbbb597aaa0de322" + integrity sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"