From dfbb4d3a9493a85ea232545f3def1f5661307ebd Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Mon, 4 Jun 2018 10:27:05 +1000 Subject: [PATCH 001/137] Added Share option in media and profile pages. --- src/screens/Profiles/MediaPages/index.js | 11 +++++- src/screens/Profiles/ProfilePages/index.js | 44 +++++++++++++++------- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/screens/Profiles/MediaPages/index.js b/src/screens/Profiles/MediaPages/index.js index 1cd19134d..dda3c16f5 100644 --- a/src/screens/Profiles/MediaPages/index.js +++ b/src/screens/Profiles/MediaPages/index.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { StatusBar, View } from 'react-native'; +import { StatusBar, View, Share } from 'react-native'; import { TabRouter } from 'react-navigation'; import { connect } from 'react-redux'; import ParallaxScroll from '@monterosa/react-native-parallax-scroll'; @@ -111,6 +111,7 @@ class MediaPages extends PureComponent { onMoreButtonOptionsSelected = async (option) => { const { mediaId, mediaType } = this.props.navigation.state.params; + const { media } = this.state; switch (option) { case 'add': { const record = await Kitsu.create('favorites', { @@ -130,6 +131,12 @@ class MediaPages extends PureComponent { await Kitsu.destroy('favorites', this.state.favorite.id); this.setState({ favorite: null }); break; + case 'Share': { + const message = (media && `${media.canonicalTitle} - `) || ''; + const url = `https://kitsu.io/${mediaType}/${mediaId}`; + Share.share({ message, url }, { dialogTitle: 'Share Media' }); + break; + } default: console.log('unhandled option selected:', option); break; @@ -528,7 +535,7 @@ class MediaPages extends PureComponent { } MAIN_BUTTON_OPTIONS.push('Nevermind'); - const MORE_BUTTON_OPTIONS = ['Nevermind']; + const MORE_BUTTON_OPTIONS = ['Share', 'Nevermind']; if (favorite) { MORE_BUTTON_OPTIONS.unshift({ text: 'Remove from Favorites', value: 'remove' }); } else { diff --git a/src/screens/Profiles/ProfilePages/index.js b/src/screens/Profiles/ProfilePages/index.js index 77dba6cb2..bf5dbf928 100644 --- a/src/screens/Profiles/ProfilePages/index.js +++ b/src/screens/Profiles/ProfilePages/index.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { StatusBar, SectionList, View } from 'react-native'; +import { StatusBar, SectionList, View, Share } from 'react-native'; import { TabRouter } from 'react-navigation'; import { connect } from 'react-redux'; import ParallaxScroll from '@monterosa/react-native-parallax-scroll'; @@ -28,9 +28,6 @@ import { Feed } from './pages/Feed'; const HEADER_HEIGHT = navigationBarHeight + statusBarHeight + (isX ? paddingX : 0); -// There's no way to Report Profiles at the moment in the API. -const MORE_BUTTON_OPTIONS = ['Block', /* 'Report Profile', */ 'Nevermind']; - const tabPage = name => ({ key: name.toLowerCase(), label: name, screen: name }); const TAB_ITEMS = [ @@ -78,7 +75,7 @@ class ProfilePage extends PureComponent { feed: null, follow: null, isLoadingFollow: false, - editModalVisible: false + editModalVisible: false, } componentWillMount() { @@ -101,14 +98,27 @@ class ProfilePage extends PureComponent { } onMoreButtonOptionsSelected = async (button) => { - if (button === 'Block') { - await Kitsu.create('blocks', { - blocked: { id: this.props.userId }, - user: { id: this.props.currentUser.id }, - }); - } else if (button === 'Report Profile') { - // There's no current way to report users from the site. - // Once there is, the API call goes here. + const { currentUser } = this.props; + const { profile } = this.state; + const userId = this.props.userId || (this.props.navigation.state.params || {}).userId; + + switch (button) { + case 'Block': { + await Kitsu.create('blocks', { + blocked: { id: userId }, + user: { id: currentUser.id }, + }); + break; + } + case 'Share': { + const message = (profile && `${profile.name} - `) || ''; + const url = `https://kitsu.io/users/${userId}`; + Share.share({ message, url }, { dialogTitle: 'Share User' }); + break; + } + default: + console.log('unhandled profile option selected:', option); + break; } } @@ -312,6 +322,13 @@ class ProfilePage extends PureComponent { const userId = this.props.userId || (this.props.navigation.state.params || {}).userId; const isCurrentUser = isIdForCurrentUser(userId, this.props.currentUser); const mainButtonTitle = isCurrentUser ? 'Edit' : follow ? 'Unfollow' : 'Follow'; + + // There's no way to Report Profiles at the moment in the API. + const MORE_BUTTON_OPTIONS = ['Share', /* 'Report Profile', */ 'Nevermind']; + if (!isCurrentUser) { + MORE_BUTTON_OPTIONS.unshift('Block'); + } + return ( @@ -348,7 +365,6 @@ class ProfilePage extends PureComponent { posterImage={profile.avatar && profile.avatar.large} followersCount={profile.followersCount} followingCount={profile.followingCount} - showMoreButton={!isCurrentUser} moreButtonOptions={MORE_BUTTON_OPTIONS} mainButtonTitle={mainButtonTitle} mainButtonLoading={isLoadingFollow} From bccc45157b8b831c4ae45434d5960fef0232bbd3 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Mon, 4 Jun 2018 14:31:03 +1000 Subject: [PATCH 002/137] Added ImageGrid. --- .../Feed/components/ImageGrid/component.js | 104 ++++++++++++++++++ .../Feed/components/ImageGrid/index.js | 1 + .../Feed/components/ImageGrid/styles.js | 11 ++ .../Feed/components/PostImage/component.js | 43 ++++---- 4 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 src/screens/Feed/components/ImageGrid/component.js create mode 100644 src/screens/Feed/components/ImageGrid/index.js create mode 100644 src/screens/Feed/components/ImageGrid/styles.js diff --git a/src/screens/Feed/components/ImageGrid/component.js b/src/screens/Feed/components/ImageGrid/component.js new file mode 100644 index 000000000..6bc3ec916 --- /dev/null +++ b/src/screens/Feed/components/ImageGrid/component.js @@ -0,0 +1,104 @@ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import { View, Image } from 'react-native'; +import { PostImage } from 'kitsu/screens/Feed/components/PostImage'; +import { scene } from 'kitsu/screens/Profiles/constants'; +import { isEmpty, isNull } from 'lodash'; +import { styles } from './styles'; + +export class ImageGrid extends PureComponent { + static propTypes = { + images: PropTypes.arrayOf(PropTypes.any), + widthToHeightRatio: PropTypes.number, + width: PropTypes.number, + compact: PropTypes.bool, + imageBorderWidth: PropTypes.number, + }; + + static defaultProps = { + images: [], + widthToHeightRatio: 1, + width: null, + compact: false, + imageBorderWidth: 1, + }; + + state = { + } + + renderImage(image, width, height) { + if (isEmpty(image)) return null; + + const { widthToHeightRatio, imageBorderWidth } = this.props; + + const newHeight = height || (width / widthToHeightRatio); + return ( + + {!isNull(image.uri) ? + + : + + } + + ); + } + + render() { + const { images, widthToHeightRatio, width, compact, imageBorderWidth } = this.props; + + // If we don't have anything to show then don't show it + if (isEmpty(images)) return null; + + // We only display maximum of 4 images at the moment + const currentImages = images.length > 4 ? images.slice(0, 4) : images; + + // The width of the gallery + const currentWidth = width || scene.width; + const borderOffset = imageBorderWidth * 2; + + // Current Width to image width ratio + // This is for the case when we have more than 1 image + const ratio = images.length > 3 ? (1 / 3) : (1 / 2); + const ratioWidth = (currentWidth * ratio) - borderOffset; + const ratioHeight = ratioWidth / widthToHeightRatio; + + // TODO: Clean this code up + switch (currentImages.length) { + case 1: + return this.renderImage(images[0], currentWidth - borderOffset, null); + case 2: + return ( + + {this.renderImage(images[0], ratioWidth, ratioHeight)} + {this.renderImage(images[1], ratioWidth, ratioHeight)} + + ); + case 3: + return ( + + {this.renderImage(images[0], currentWidth - borderOffset, null)} + {this.renderImage(images[1], ratioWidth, ratioHeight)} + {this.renderImage(images[2], ratioWidth, ratioHeight)} + + ); + default: + return ( + + {this.renderImage(images[0], currentWidth - borderOffset, null)} + {this.renderImage(images[1], ratioWidth, ratioHeight)} + {this.renderImage(images[2], ratioWidth, ratioHeight)} + {this.renderImage(images[3], ratioWidth, ratioHeight)} + + ); + } + } +} diff --git a/src/screens/Feed/components/ImageGrid/index.js b/src/screens/Feed/components/ImageGrid/index.js new file mode 100644 index 000000000..bb824842c --- /dev/null +++ b/src/screens/Feed/components/ImageGrid/index.js @@ -0,0 +1 @@ +export * from './component'; diff --git a/src/screens/Feed/components/ImageGrid/styles.js b/src/screens/Feed/components/ImageGrid/styles.js new file mode 100644 index 000000000..564d73da3 --- /dev/null +++ b/src/screens/Feed/components/ImageGrid/styles.js @@ -0,0 +1,11 @@ +import { StyleSheet } from 'react-native'; + +export const styles = StyleSheet.create({ + row: { + flexDirection: 'row', + flexWrap: 'wrap', + }, + imageWrap: { + borderColor: 'white', + }, +}); diff --git a/src/screens/Feed/components/PostImage/component.js b/src/screens/Feed/components/PostImage/component.js index e954a5676..7b48d045a 100644 --- a/src/screens/Feed/components/PostImage/component.js +++ b/src/screens/Feed/components/PostImage/component.js @@ -40,26 +40,31 @@ export class PostImage extends PureComponent { } updateImageSize() { - Image.getSize(this.props.uri, (width, height) => { - if (!this.mounted) return; + const { width, height, uri } = this.props; + if (width && height) { + this.setState({ width: this.props.width, height: this.props.height }); + } else { + Image.getSize(uri, (imageWidth, imageHeight) => { + if (!this.mounted) return; - if (this.props.width && !this.props.height) { - this.setState({ - width: this.props.width, - height: height * (this.props.width / width), - }); - } else if (!this.props.width && this.props.height) { - this.setState({ - width: width * (this.props.height / height), - height: this.props.height, - }); - } else { - this.setState({ - width, - height, - }); - } - }); + if (width && !height) { + this.setState({ + width, + height: imageHeight * (width / imageWidth), + }); + } else if (!width && height) { + this.setState({ + width: imageWidth * (height / imageHeight), + height, + }); + } else { + this.setState({ + width: imageWidth, + height: imageHeight, + }); + } + }); + } } mounted = false From 1a29223903b373a64b8c1413afe1a444e2f0ceef Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Mon, 4 Jun 2018 15:24:00 +1000 Subject: [PATCH 003/137] Added ImageGrid to EmbeddedContent. --- .../components/EmbeddedContent/component.js | 6 ++-- .../Feed/components/ImageGrid/component.js | 19 ++++++++---- .../Feed/components/ImageGrid/styles.js | 14 +++++++++ .../Feed/components/PostImage/component.js | 31 ++++++++++++------- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 52ad5340c..299d44a38 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -10,6 +10,7 @@ import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; import { startCase } from 'lodash'; import { styles } from './styles'; +import { ImageGrid } from 'kitsu/screens/Feed/components/ImageGrid'; export class EmbeddedContent extends PureComponent { // The reason for the combination of string or number is that @@ -73,10 +74,9 @@ export class EmbeddedContent extends PureComponent { if (minWidth && width < minWidth) width = minWidth; if (width > maxWidth) width = maxWidth; - // PostImage will auto scale the image return ( - diff --git a/src/screens/Feed/components/ImageGrid/component.js b/src/screens/Feed/components/ImageGrid/component.js index 6bc3ec916..f88ebf77f 100644 --- a/src/screens/Feed/components/ImageGrid/component.js +++ b/src/screens/Feed/components/ImageGrid/component.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Image } from 'react-native'; +import { View, Image, Text } from 'react-native'; import { PostImage } from 'kitsu/screens/Feed/components/PostImage'; import { scene } from 'kitsu/screens/Profiles/constants'; import { isEmpty, isNull } from 'lodash'; @@ -13,6 +13,7 @@ export class ImageGrid extends PureComponent { width: PropTypes.number, compact: PropTypes.bool, imageBorderWidth: PropTypes.number, + borderRadius: PropTypes.number, }; static defaultProps = { @@ -21,15 +22,16 @@ export class ImageGrid extends PureComponent { width: null, compact: false, imageBorderWidth: 1, + borderRadius: 0, }; state = { } - renderImage(image, width, height) { + renderImage(image, width, height, count = null) { if (isEmpty(image)) return null; - const { widthToHeightRatio, imageBorderWidth } = this.props; + const { widthToHeightRatio, imageBorderWidth, borderRadius } = this.props; const newHeight = height || (width / widthToHeightRatio); return ( @@ -39,15 +41,20 @@ export class ImageGrid extends PureComponent { uri={image.uri} width={width} height={height} - borderRadius={0} + borderRadius={borderRadius} /> : } + { !isEmpty(count) && count > 0 && + + +{count} + + } ); } @@ -96,7 +103,7 @@ export class ImageGrid extends PureComponent { {this.renderImage(images[0], currentWidth - borderOffset, null)} {this.renderImage(images[1], ratioWidth, ratioHeight)} {this.renderImage(images[2], ratioWidth, ratioHeight)} - {this.renderImage(images[3], ratioWidth, ratioHeight)} + {this.renderImage(images[3], ratioWidth, ratioHeight, images.length - 4)} ); } diff --git a/src/screens/Feed/components/ImageGrid/styles.js b/src/screens/Feed/components/ImageGrid/styles.js index 564d73da3..7ef0a7973 100644 --- a/src/screens/Feed/components/ImageGrid/styles.js +++ b/src/screens/Feed/components/ImageGrid/styles.js @@ -8,4 +8,18 @@ export const styles = StyleSheet.create({ imageWrap: { borderColor: 'white', }, + countContainer: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + backgroundColor: 'rgba(0,0,0,0.4)', + justifyContent: 'center', + alignItems: 'center', + }, + countText: { + color: 'white', + fontSize: 40, + }, }); diff --git a/src/screens/Feed/components/PostImage/component.js b/src/screens/Feed/components/PostImage/component.js index 7b48d045a..aea427410 100644 --- a/src/screens/Feed/components/PostImage/component.js +++ b/src/screens/Feed/components/PostImage/component.js @@ -40,27 +40,34 @@ export class PostImage extends PureComponent { } updateImageSize() { - const { width, height, uri } = this.props; - if (width && height) { - this.setState({ width: this.props.width, height: this.props.height }); + /* + If we do: const { width, height, uri } = this.props + Then the view updates incorrectly, i.e nextProps.width won't be applied to the state + Thus i have chosen to leave the implementation as is, but i don't know if there is a work-around + */ + if (this.props.width && this.props.height) { + this.setState({ + width: this.props.width, + height: this.props.height, + }); } else { - Image.getSize(uri, (imageWidth, imageHeight) => { + Image.getSize(this.props.uri, (width, height) => { if (!this.mounted) return; - if (width && !height) { + if (this.props.width && !this.props.height) { this.setState({ - width, - height: imageHeight * (width / imageWidth), + width: this.props.width, + height: height * (this.props.width / width), }); - } else if (!width && height) { + } else if (!this.props.width && this.props.height) { this.setState({ - width: imageWidth * (height / imageHeight), - height, + width: width * (this.props.height / height), + height: this.props.height, }); } else { this.setState({ - width: imageWidth, - height: imageHeight, + width, + height, }); } }); From cf24f296ac0cd9dd16992a98c047d46db42d3c84 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Mon, 4 Jun 2018 16:06:11 +1000 Subject: [PATCH 004/137] Added compact view --- .../Feed/components/Comment/component.js | 1 + .../components/EmbeddedContent/component.js | 7 ++- .../Feed/components/ImageGrid/component.js | 45 ++++++++++--------- .../Feed/components/ImageGrid/styles.js | 1 + 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/screens/Feed/components/Comment/component.js b/src/screens/Feed/components/Comment/component.js index 55b79346c..8a78bef86 100644 --- a/src/screens/Feed/components/Comment/component.js +++ b/src/screens/Feed/components/Comment/component.js @@ -230,6 +230,7 @@ export class Comment extends PureComponent { borderRadius={20} style={isEmpty(content) ? null : styles.embed} navigation={navigation} + compact /> } diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 299d44a38..adb5e78e2 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -9,8 +9,8 @@ import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; import { startCase } from 'lodash'; -import { styles } from './styles'; import { ImageGrid } from 'kitsu/screens/Feed/components/ImageGrid'; +import { styles } from './styles'; export class EmbeddedContent extends PureComponent { // The reason for the combination of string or number is that @@ -49,12 +49,14 @@ export class EmbeddedContent extends PureComponent { minWidth: PropTypes.number, borderRadius: PropTypes.number, navigation: PropTypes.object.isRequired, + compact: PropTypes.bool, } static defaultProps = { style: null, minWidth: null, borderRadius: 0, + compact: false, } /** @@ -67,7 +69,7 @@ export class EmbeddedContent extends PureComponent { renderImage(embed) { if (!embed.image) return null; - const { maxWidth, minWidth, borderRadius } = this.props; + const { maxWidth, minWidth, borderRadius, compact } = this.props; const imageWidth = embed.image.width || maxWidth; let width = parseInt(imageWidth, 10); @@ -79,6 +81,7 @@ export class EmbeddedContent extends PureComponent { images={[{ uri: embed.image.url }]} width={width} borderRadius={borderRadius} + compact={compact} /> ); } diff --git a/src/screens/Feed/components/ImageGrid/component.js b/src/screens/Feed/components/ImageGrid/component.js index f88ebf77f..524ec1ab5 100644 --- a/src/screens/Feed/components/ImageGrid/component.js +++ b/src/screens/Feed/components/ImageGrid/component.js @@ -8,7 +8,9 @@ import { styles } from './styles'; export class ImageGrid extends PureComponent { static propTypes = { - images: PropTypes.arrayOf(PropTypes.any), + images: PropTypes.arrayOf(PropTypes.shape({ + uri: PropTypes.string.isRequired, + })), widthToHeightRatio: PropTypes.number, width: PropTypes.number, compact: PropTypes.bool, @@ -29,29 +31,20 @@ export class ImageGrid extends PureComponent { } renderImage(image, width, height, count = null) { - if (isEmpty(image)) return null; + if (isEmpty(image) || isEmpty(image.uri)) return null; - const { widthToHeightRatio, imageBorderWidth, borderRadius } = this.props; + const { imageBorderWidth, borderRadius, compact } = this.props; - const newHeight = height || (width / widthToHeightRatio); return ( - - {!isNull(image.uri) ? - - : - - } - { !isEmpty(count) && count > 0 && - + + + { !isNull(count) && count > 0 && + +{count} } @@ -78,11 +71,17 @@ export class ImageGrid extends PureComponent { const ratioWidth = (currentWidth * ratio) - borderOffset; const ratioHeight = ratioWidth / widthToHeightRatio; - // TODO: Clean this code up + // Compact view will just show the number straight up + if (compact) { + return this.renderImage(images[0], currentWidth, null, images.length - 1); + } + switch (currentImages.length) { case 1: + // 1 landscape image return this.renderImage(images[0], currentWidth - borderOffset, null); case 2: + // 2 square images return ( {this.renderImage(images[0], ratioWidth, ratioHeight)} @@ -90,6 +89,7 @@ export class ImageGrid extends PureComponent { ); case 3: + // 1 landscape and 2 square images return ( {this.renderImage(images[0], currentWidth - borderOffset, null)} @@ -98,6 +98,7 @@ export class ImageGrid extends PureComponent { ); default: + // 1 landscape and 3 square images with a count on the last one return ( {this.renderImage(images[0], currentWidth - borderOffset, null)} diff --git a/src/screens/Feed/components/ImageGrid/styles.js b/src/screens/Feed/components/ImageGrid/styles.js index 7ef0a7973..024c542b8 100644 --- a/src/screens/Feed/components/ImageGrid/styles.js +++ b/src/screens/Feed/components/ImageGrid/styles.js @@ -17,6 +17,7 @@ export const styles = StyleSheet.create({ backgroundColor: 'rgba(0,0,0,0.4)', justifyContent: 'center', alignItems: 'center', + overflow: 'hidden', }, countText: { color: 'white', From ecdd3e5660089cdfd0a32fde67759260629f6dbc Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Mon, 4 Jun 2018 18:55:48 +1000 Subject: [PATCH 005/137] Use slugs if we have them otherwise fallback to ids. --- src/screens/Profiles/MediaPages/index.js | 3 ++- src/screens/Profiles/ProfilePages/index.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/screens/Profiles/MediaPages/index.js b/src/screens/Profiles/MediaPages/index.js index dda3c16f5..bd6ba10e7 100644 --- a/src/screens/Profiles/MediaPages/index.js +++ b/src/screens/Profiles/MediaPages/index.js @@ -133,7 +133,8 @@ class MediaPages extends PureComponent { break; case 'Share': { const message = (media && `${media.canonicalTitle} - `) || ''; - const url = `https://kitsu.io/${mediaType}/${mediaId}`; + const id = (media && media.slug) || mediaId; + const url = `https://kitsu.io/${mediaType}/${id}`; Share.share({ message, url }, { dialogTitle: 'Share Media' }); break; } diff --git a/src/screens/Profiles/ProfilePages/index.js b/src/screens/Profiles/ProfilePages/index.js index bf5dbf928..7658cc00f 100644 --- a/src/screens/Profiles/ProfilePages/index.js +++ b/src/screens/Profiles/ProfilePages/index.js @@ -112,7 +112,8 @@ class ProfilePage extends PureComponent { } case 'Share': { const message = (profile && `${profile.name} - `) || ''; - const url = `https://kitsu.io/users/${userId}`; + const id = (profile && profile.slug) || userId; + const url = `https://kitsu.io/users/${id}`; Share.share({ message, url }, { dialogTitle: 'Share User' }); break; } From 3edb22dab09ffa36aad534c6c051f566946fc53c Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 09:58:36 +1000 Subject: [PATCH 006/137] Replaced share with copy to clipboard. --- src/screens/Profiles/MediaPages/index.js | 21 ++++++++++++++------ src/screens/Profiles/ProfilePages/index.js | 23 +++++++++++++++------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/screens/Profiles/MediaPages/index.js b/src/screens/Profiles/MediaPages/index.js index bd6ba10e7..11df12dd8 100644 --- a/src/screens/Profiles/MediaPages/index.js +++ b/src/screens/Profiles/MediaPages/index.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { StatusBar, View, Share } from 'react-native'; +import { StatusBar, View, Clipboard, ToastAndroid, Platform } from 'react-native'; import { TabRouter } from 'react-navigation'; import { connect } from 'react-redux'; import ParallaxScroll from '@monterosa/react-native-parallax-scroll'; @@ -20,6 +20,7 @@ import { capitalize, upperFirst } from 'lodash'; import { getImgixCoverImage } from 'kitsu/utils/coverImage'; import { StyledText } from 'kitsu/components/StyledText'; import { KitsuLibrary, KitsuLibraryEvents, KitsuLibraryEventSource } from 'kitsu/utils/kitsuLibrary'; +import { kitsuConfig } from 'kitsu/config/env'; import { ErrorPage } from 'kitsu/screens/Profiles/components/ErrorPage'; const HEADER_HEIGHT = navigationBarHeight + statusBarHeight + (isX ? paddingX : 0); @@ -131,11 +132,19 @@ class MediaPages extends PureComponent { await Kitsu.destroy('favorites', this.state.favorite.id); this.setState({ favorite: null }); break; - case 'Share': { - const message = (media && `${media.canonicalTitle} - `) || ''; + case 'copy': { const id = (media && media.slug) || mediaId; - const url = `https://kitsu.io/${mediaType}/${id}`; - Share.share({ message, url }, { dialogTitle: 'Share Media' }); + const url = `${kitsuConfig.kitsuUrl}/${mediaType}/${id}`; + await Clipboard.setString(url); + if (Platform.OS === 'android') { + ToastAndroid.showWithGravity( + 'Copied media link!', + ToastAndroid.SHORT, + ToastAndroid.BOTTOM, + ); + } else { + alert('Copied media link!'); + } break; } default: @@ -536,7 +545,7 @@ class MediaPages extends PureComponent { } MAIN_BUTTON_OPTIONS.push('Nevermind'); - const MORE_BUTTON_OPTIONS = ['Share', 'Nevermind']; + const MORE_BUTTON_OPTIONS = [{ text: 'Copy Link to Media', value: 'copy' }, 'Nevermind']; if (favorite) { MORE_BUTTON_OPTIONS.unshift({ text: 'Remove from Favorites', value: 'remove' }); } else { diff --git a/src/screens/Profiles/ProfilePages/index.js b/src/screens/Profiles/ProfilePages/index.js index 7658cc00f..6c9c536b7 100644 --- a/src/screens/Profiles/ProfilePages/index.js +++ b/src/screens/Profiles/ProfilePages/index.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { StatusBar, SectionList, View, Share } from 'react-native'; +import { StatusBar, SectionList, View, Clipboard, ToastAndroid, Platform } from 'react-native'; import { TabRouter } from 'react-navigation'; import { connect } from 'react-redux'; import ParallaxScroll from '@monterosa/react-native-parallax-scroll'; @@ -23,6 +23,7 @@ import { getImgixCoverImage } from 'kitsu/utils/coverImage'; import { parseURL } from 'kitsu/common/utils/url'; import { isEmpty } from 'lodash'; import { ErrorPage } from 'kitsu/screens/Profiles/components/ErrorPage'; +import { kitsuConfig } from 'kitsu/config/env'; import Summary from './pages/Summary'; import { Feed } from './pages/Feed'; @@ -110,11 +111,19 @@ class ProfilePage extends PureComponent { }); break; } - case 'Share': { - const message = (profile && `${profile.name} - `) || ''; + case 'copy': { const id = (profile && profile.slug) || userId; - const url = `https://kitsu.io/users/${id}`; - Share.share({ message, url }, { dialogTitle: 'Share User' }); + const url = `${kitsuConfig.kitsuUrl}/users/${id}`; + await Clipboard.setString(url); + if (Platform.OS === 'android') { + ToastAndroid.showWithGravity( + 'Copied profile link!', + ToastAndroid.SHORT, + ToastAndroid.BOTTOM, + ); + } else { + alert('Copied profile link!'); + } break; } default: @@ -190,7 +199,7 @@ class ProfilePage extends PureComponent { id: userId, }, fields: { - users: 'waifuOrHusbando,gender,location,birthday,createdAt,followersCount,followingCount,coverImage,avatar,about,name,waifu', + users: 'slug,waifuOrHusbando,gender,location,birthday,createdAt,followersCount,followingCount,coverImage,avatar,about,name,waifu', characters: 'name,image,description', }, include: 'waifu', @@ -325,7 +334,7 @@ class ProfilePage extends PureComponent { const mainButtonTitle = isCurrentUser ? 'Edit' : follow ? 'Unfollow' : 'Follow'; // There's no way to Report Profiles at the moment in the API. - const MORE_BUTTON_OPTIONS = ['Share', /* 'Report Profile', */ 'Nevermind']; + const MORE_BUTTON_OPTIONS = [{ text: 'Copy Link to Profile', value: 'copy' }, /* 'Report Profile', */ 'Nevermind']; if (!isCurrentUser) { MORE_BUTTON_OPTIONS.unshift('Block'); } From 12f61e37f0c6235a438191acff040a72cec63bbe Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 11:19:05 +1000 Subject: [PATCH 007/137] Added app settings page. --- src/assets/img/sidebar_icons/app.png | Bin 0 -> 6040 bytes src/assets/img/sidebar_icons/index.js | 2 + src/routes/sidebar.js | 4 ++ src/screens/Auth/SplashScreen.js | 15 ++++- src/screens/Sidebar/AppSettings.js | 93 ++++++++++++++++++++++++++ src/screens/Sidebar/SettingsScreen.js | 3 +- src/screens/Sidebar/index.js | 2 + src/screens/Sidebar/styles.js | 8 +++ src/utils/storage.js | 22 ++++++ 9 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 src/assets/img/sidebar_icons/app.png create mode 100644 src/screens/Sidebar/AppSettings.js create mode 100644 src/utils/storage.js diff --git a/src/assets/img/sidebar_icons/app.png b/src/assets/img/sidebar_icons/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a24575bdead0d0cb6086288024711386189c1b GIT binary patch literal 6040 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 navigationOptions(navigation, 'App'); + + state = { + dataSaver: false, + }; + + componentDidMount() { + this.fetchSettings(); + } + + onStartingPageChange = (option) => { + + } + + fetchSettings = async () => { + try { + const value = await getDataSaver(); + if (value !== null) { + this.setState({ dataSaver: value }); + } + } catch (error) { + console.warn('Failed to fetch data saver value'); + } + } + + + toggleDataSaver = async () => { + try { + await setDataSaver(!this.state.dataSaver); + this.setState({ dataSaver: !this.state.dataSaver }); + } catch (error) { + console.warn('Failed to set data saver value'); + } + } + + render() { + const { dataSaver } = this.state; + + const pages = ['Feed', 'Library', 'Nevermind']; + return ( + + + + {/* TODO: Flesh this out further */} + + + + Starting Page + + + Feed + + + + + + + + Data Saver Mode + + + Tap to load images + + + + + + + ); + } +} diff --git a/src/screens/Sidebar/SettingsScreen.js b/src/screens/Sidebar/SettingsScreen.js index 9a09f9acb..da9047d0d 100644 --- a/src/screens/Sidebar/SettingsScreen.js +++ b/src/screens/Sidebar/SettingsScreen.js @@ -1,7 +1,7 @@ import React, { PureComponent } from 'react'; import { View, FlatList } from 'react-native'; import { connect } from 'react-redux'; -import { blocking, library, privacy, settings, linked } from 'kitsu/assets/img/sidebar_icons/'; +import { blocking, library, privacy, settings, linked, app } from 'kitsu/assets/img/sidebar_icons/'; import { navigationOptions, SidebarTitle, ItemSeparator, SidebarListItem } from './common/'; import { styles } from './styles'; @@ -20,6 +20,7 @@ class SettingsScreen extends PureComponent { { title: 'Linked Accounts', image: linked, target: 'LinkedAccounts' }, { title: 'Library', image: library, target: 'LibrarySettings' }, { title: 'Blocking', image: blocking, target: 'Blocking' }, + { title: 'App', image: app, target: 'AppSettings' }, ]} keyExtractor={item => item.title} renderItem={({ item }) => ( diff --git a/src/screens/Sidebar/index.js b/src/screens/Sidebar/index.js index 4f47ae200..bbc49b01e 100644 --- a/src/screens/Sidebar/index.js +++ b/src/screens/Sidebar/index.js @@ -6,6 +6,7 @@ import PrivacySettings from './PrivacySettings'; import SettingsScreen from './SettingsScreen'; import SidebarScreen from './SidebarScreen'; import { CannyBoard } from './CannyBoard'; +import { AppSettings } from './AppSettings'; export { Blocking, @@ -19,4 +20,5 @@ export { SettingsScreen, SidebarScreen, CannyBoard, + AppSettings, }; diff --git a/src/screens/Sidebar/styles.js b/src/screens/Sidebar/styles.js index 0f433adcf..5a006a98e 100644 --- a/src/screens/Sidebar/styles.js +++ b/src/screens/Sidebar/styles.js @@ -54,6 +54,14 @@ export const styles = StyleSheet.create({ paddingVertical: 8, paddingHorizontal: 12, }, + checkBoxContainer: { + backgroundColor: colors.white, + paddingVertical: 8, + paddingHorizontal: 12, + flex: 1, + flexDirection: 'row', + alignItems: 'center', + }, item: { backgroundColor: colors.white, paddingHorizontal: 12, diff --git a/src/utils/storage.js b/src/utils/storage.js new file mode 100644 index 000000000..d2e70caa3 --- /dev/null +++ b/src/utils/storage.js @@ -0,0 +1,22 @@ +import { AsyncStorage } from 'react-native'; + +export async function getItem(key) { + return AsyncStorage.getItem(`@Kitsu:${key}`).then(value => JSON.parse(value)); +} + +export async function setItem(key, value) { + return AsyncStorage.setItem(`@Kitsu:${key}`, JSON.stringify(value)); +} + +export async function removeItem(key) { + return AsyncStorage.removeItem(`@Kitsu:${key}`); +} + +// App Settings +export async function getDataSaver() { + return getItem('dataSaver'); +} + +export async function setDataSaver(value) { + return setItem('dataSaver', !!value); +} From b44e9756962da8866aa4fe8d2674d218fa91d491 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 11:39:19 +1000 Subject: [PATCH 008/137] Added tap to load image in EmbeddedContent --- .../components/EmbeddedContent/component.js | 30 +++++++++++++++++++ .../Feed/components/EmbeddedContent/styles.js | 7 +++++ 2 files changed, 37 insertions(+) diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 52ad5340c..a8189b5fe 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -9,6 +9,7 @@ import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; import { startCase } from 'lodash'; +import { getDataSaver } from 'kitsu/utils/storage'; import { styles } from './styles'; export class EmbeddedContent extends PureComponent { @@ -56,6 +57,20 @@ export class EmbeddedContent extends PureComponent { borderRadius: 0, } + state = { + dataSaver: false, + visible: false, + } + + async componentDidMount() { + const dataSaver = await getDataSaver(); + this.setState({ dataSaver: !!dataSaver }); + } + + toggleVisibility = () => { + this.setState({ visible: !this.state.visible }); + } + /** * Render an image embed. * This will render the image with given image width or maxWidth if it exceeds it. @@ -66,6 +81,8 @@ export class EmbeddedContent extends PureComponent { renderImage(embed) { if (!embed.image) return null; + const { dataSaver, visible } = this.state; + const { maxWidth, minWidth, borderRadius } = this.props; const imageWidth = embed.image.width || maxWidth; @@ -73,6 +90,19 @@ export class EmbeddedContent extends PureComponent { if (minWidth && width < minWidth) width = minWidth; if (width > maxWidth) width = maxWidth; + if (dataSaver && !visible) { + return ( + + + Tap to load image + + + ); + } + // PostImage will auto scale the image return ( Date: Tue, 5 Jun 2018 12:07:50 +1000 Subject: [PATCH 009/137] Moved app settings to redux. --- src/screens/Auth/SplashScreen.js | 14 ------ .../components/EmbeddedContent/component.js | 22 +++++---- .../Feed/components/EmbeddedContent/index.js | 4 +- src/screens/Sidebar/AppSettings.js | 45 +++++++++---------- src/screens/Sidebar/index.js | 2 +- src/store/app/actions.js | 6 ++- src/store/app/reducer.js | 17 +++++++ src/store/types.js | 2 + src/utils/storage.js | 22 --------- 9 files changed, 61 insertions(+), 73 deletions(-) delete mode 100644 src/utils/storage.js diff --git a/src/screens/Auth/SplashScreen.js b/src/screens/Auth/SplashScreen.js index 4ca0235d5..30b16a58f 100644 --- a/src/screens/Auth/SplashScreen.js +++ b/src/screens/Auth/SplashScreen.js @@ -4,7 +4,6 @@ import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { NavigationActions } from 'react-navigation'; import * as colors from 'kitsu/constants/colors'; -import { getDataSaver, setDataSaver } from 'kitsu/utils/storage'; class SplashScreen extends Component { static navigationOptions = { @@ -16,7 +15,6 @@ class SplashScreen extends Component { if (rehydratedAt) { this.navigate(isAuthenticated, completed); } - this.updateAppSettings(); } componentWillReceiveProps(nextProps) { @@ -26,18 +24,6 @@ class SplashScreen extends Component { } } - async updateAppSettings() { - try { - const value = await getDataSaver(); - if (value === null) { - await setDataSaver(false); - } - } catch (error) { - console.log(error); - console.warn('Failed to initialize data saver value'); - } - } - navigate(authorized, completed) { const { dispatch } = this.props.navigation; let resetAction = null; diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index a8189b5fe..a7313e7af 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -1,4 +1,5 @@ import React, { PureComponent } from 'react'; +import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { View, ViewPropTypes, WebView, Platform, TouchableOpacity } from 'react-native'; import FastImage from 'react-native-fast-image'; @@ -9,10 +10,9 @@ import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; import { startCase } from 'lodash'; -import { getDataSaver } from 'kitsu/utils/storage'; import { styles } from './styles'; -export class EmbeddedContent extends PureComponent { +class EmbeddedContent extends PureComponent { // The reason for the combination of string or number is that // sometimes the embeds return width/height as strings // othertimes as numbers ... @@ -49,24 +49,20 @@ export class EmbeddedContent extends PureComponent { minWidth: PropTypes.number, borderRadius: PropTypes.number, navigation: PropTypes.object.isRequired, + dataSaver: PropTypes.bool, } static defaultProps = { style: null, minWidth: null, borderRadius: 0, + dataSaver: false, } state = { - dataSaver: false, visible: false, } - async componentDidMount() { - const dataSaver = await getDataSaver(); - this.setState({ dataSaver: !!dataSaver }); - } - toggleVisibility = () => { this.setState({ visible: !this.state.visible }); } @@ -81,7 +77,8 @@ export class EmbeddedContent extends PureComponent { renderImage(embed) { if (!embed.image) return null; - const { dataSaver, visible } = this.state; + const { dataSaver } = this.props; + const { visible } = this.state; const { maxWidth, minWidth, borderRadius } = this.props; const imageWidth = embed.image.width || maxWidth; @@ -241,3 +238,10 @@ export class EmbeddedContent extends PureComponent { ); } } + +const mapper = ({ app }) => { + const { dataSaver } = app; + return { dataSaver }; +}; + +export default connect(mapper, null)(EmbeddedContent); diff --git a/src/screens/Feed/components/EmbeddedContent/index.js b/src/screens/Feed/components/EmbeddedContent/index.js index bb824842c..9a7c557c5 100644 --- a/src/screens/Feed/components/EmbeddedContent/index.js +++ b/src/screens/Feed/components/EmbeddedContent/index.js @@ -1 +1,3 @@ -export * from './component'; +import EmbeddedContent from './component'; + +export { EmbeddedContent }; diff --git a/src/screens/Sidebar/AppSettings.js b/src/screens/Sidebar/AppSettings.js index d3b59dd88..e0655d93c 100644 --- a/src/screens/Sidebar/AppSettings.js +++ b/src/screens/Sidebar/AppSettings.js @@ -6,48 +6,36 @@ import Icon from 'react-native-vector-icons/FontAwesome'; import isEmpty from 'lodash/isEmpty'; import * as colors from 'kitsu/constants/colors'; import { SelectMenu } from 'kitsu/components/SelectMenu'; -import { getDataSaver, setDataSaver } from 'kitsu/utils/storage'; +import { setDataSaver } from 'kitsu/store/app/actions'; import { navigationOptions, SidebarTitle, ItemSeparator, SidebarButton } from './common/'; import { styles } from './styles'; -export class AppSettings extends PureComponent { + +class AppSettings extends PureComponent { static navigationOptions = ({ navigation }) => navigationOptions(navigation, 'App'); - state = { - dataSaver: false, + static propTypes = { + dataSaver: PropTypes.bool, + setDataSaver: PropTypes.func, }; - componentDidMount() { - this.fetchSettings(); + static defaultProps = { + dataSaver: false, + setDataSaver: null, } onStartingPageChange = (option) => { } - fetchSettings = async () => { - try { - const value = await getDataSaver(); - if (value !== null) { - this.setState({ dataSaver: value }); - } - } catch (error) { - console.warn('Failed to fetch data saver value'); - } - } - - - toggleDataSaver = async () => { - try { - await setDataSaver(!this.state.dataSaver); - this.setState({ dataSaver: !this.state.dataSaver }); - } catch (error) { - console.warn('Failed to set data saver value'); + toggleDataSaver = () => { + if (this.props.setDataSaver) { + this.props.setDataSaver(!this.props.dataSaver); } } render() { - const { dataSaver } = this.state; + const { dataSaver } = this.props; const pages = ['Feed', 'Library', 'Nevermind']; return ( @@ -91,3 +79,10 @@ export class AppSettings extends PureComponent { ); } } + +const mapStateToProps = ({ app }) => { + const { dataSaver } = app; + return { dataSaver }; +}; + +export default connect(mapStateToProps, { setDataSaver })(AppSettings); diff --git a/src/screens/Sidebar/index.js b/src/screens/Sidebar/index.js index bbc49b01e..518a481ce 100644 --- a/src/screens/Sidebar/index.js +++ b/src/screens/Sidebar/index.js @@ -6,7 +6,7 @@ import PrivacySettings from './PrivacySettings'; import SettingsScreen from './SettingsScreen'; import SidebarScreen from './SidebarScreen'; import { CannyBoard } from './CannyBoard'; -import { AppSettings } from './AppSettings'; +import AppSettings from './AppSettings'; export { Blocking, diff --git a/src/store/app/actions.js b/src/store/app/actions.js index dfc051070..addfca600 100644 --- a/src/store/app/actions.js +++ b/src/store/app/actions.js @@ -1,5 +1,5 @@ import { kitsuConfig } from 'kitsu/config/env'; -import { ALGOLIA_KEY_REQUEST, ALGOLIA_KEY_SUCCESS, ALGOLIA_KEY_FAIL } from 'kitsu/store/types'; +import { ALGOLIA_KEY_REQUEST, ALGOLIA_KEY_SUCCESS, ALGOLIA_KEY_FAIL, SETTING_DATA_SAVER } from 'kitsu/store/types'; export const fetchAlgoliaKeys = () => (dispatch) => { dispatch({ type: ALGOLIA_KEY_REQUEST, payload: {} }); @@ -11,3 +11,7 @@ export const fetchAlgoliaKeys = () => (dispatch) => { }) .catch(error => dispatch({ type: ALGOLIA_KEY_FAIL, payload: error })); }; + +export const setDataSaver = value => (dispatch) => { + dispatch({ type: SETTING_DATA_SAVER, payload: !!value }); +}; diff --git a/src/store/app/reducer.js b/src/store/app/reducer.js index 2488deb15..94793924a 100644 --- a/src/store/app/reducer.js +++ b/src/store/app/reducer.js @@ -1,10 +1,12 @@ import * as types from 'kitsu/store/types'; +import { REHYDRATE } from 'redux-persist'; const initialState = { algoliaKeys: { media: {}, users: {}, }, + dataSaver: false, pushNotificationEnabled: false, }; @@ -20,6 +22,21 @@ export const appReducer = (state = initialState, action) => { ...state, pushNotificationEnabled: true, }; + case types.SETTING_DATA_SAVER: { + return { + ...state, + dataSaver: action.payload, + }; + } + case REHYDRATE: { + const payload = action && action.payload; + const app = (payload && payload.app) || {}; + return { + ...state, + ...app, + rehydratedAt: new Date(), + }; + } default: return state; } diff --git a/src/store/types.js b/src/store/types.js index 0a37854f8..3020b434f 100644 --- a/src/store/types.js +++ b/src/store/types.js @@ -158,3 +158,5 @@ export const USER_FOLLOW_SUCCESS = 'USER_FOLLOW_SUCCESS'; export const USER_FOLLOW_FAIL = 'USER_FOLLOW_FAIL'; export const CAPTURE_USERS_DATA = 'CAPTURE_USERS_DATA'; + +export const SETTING_DATA_SAVER = 'SETTING_DATA_SAVER'; diff --git a/src/utils/storage.js b/src/utils/storage.js deleted file mode 100644 index d2e70caa3..000000000 --- a/src/utils/storage.js +++ /dev/null @@ -1,22 +0,0 @@ -import { AsyncStorage } from 'react-native'; - -export async function getItem(key) { - return AsyncStorage.getItem(`@Kitsu:${key}`).then(value => JSON.parse(value)); -} - -export async function setItem(key, value) { - return AsyncStorage.setItem(`@Kitsu:${key}`, JSON.stringify(value)); -} - -export async function removeItem(key) { - return AsyncStorage.removeItem(`@Kitsu:${key}`); -} - -// App Settings -export async function getDataSaver() { - return getItem('dataSaver'); -} - -export async function setDataSaver(value) { - return setItem('dataSaver', !!value); -} From 50ae221ab2d72e8c71316dad7743ec37763d171e Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 17:31:36 +1000 Subject: [PATCH 010/137] Added starting page setting to redux. --- src/screens/Sidebar/AppSettings.js | 25 ++++++++++++++++--------- src/store/app/actions.js | 6 +++++- src/store/app/reducer.js | 9 +++++++-- src/store/types.js | 1 + 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/screens/Sidebar/AppSettings.js b/src/screens/Sidebar/AppSettings.js index e0655d93c..19d06f3a4 100644 --- a/src/screens/Sidebar/AppSettings.js +++ b/src/screens/Sidebar/AppSettings.js @@ -6,7 +6,7 @@ import Icon from 'react-native-vector-icons/FontAwesome'; import isEmpty from 'lodash/isEmpty'; import * as colors from 'kitsu/constants/colors'; import { SelectMenu } from 'kitsu/components/SelectMenu'; -import { setDataSaver } from 'kitsu/store/app/actions'; +import { setDataSaver, setInitialPage } from 'kitsu/store/app/actions'; import { navigationOptions, SidebarTitle, ItemSeparator, SidebarButton } from './common/'; import { styles } from './styles'; @@ -17,15 +17,21 @@ class AppSettings extends PureComponent { static propTypes = { dataSaver: PropTypes.bool, setDataSaver: PropTypes.func, + setInitialPage: PropTypes.func, + initialPage: PropTypes.string, }; static defaultProps = { dataSaver: false, setDataSaver: null, + setInitialPage: null, + initialPage: '-', } onStartingPageChange = (option) => { - + if (this.props.setInitialPage) { + this.props.setInitialPage(option); + } } toggleDataSaver = () => { @@ -35,9 +41,10 @@ class AppSettings extends PureComponent { } render() { - const { dataSaver } = this.props; + const { dataSaver, initialPage } = this.props; + + const pages = ['Feed', 'Search', 'Library', 'Nevermind']; - const pages = ['Feed', 'Library', 'Nevermind']; return ( @@ -46,7 +53,7 @@ class AppSettings extends PureComponent { @@ -54,7 +61,7 @@ class AppSettings extends PureComponent { Starting Page - Feed + {initialPage} @@ -81,8 +88,8 @@ class AppSettings extends PureComponent { } const mapStateToProps = ({ app }) => { - const { dataSaver } = app; - return { dataSaver }; + const { dataSaver, initialPage } = app; + return { dataSaver, initialPage }; }; -export default connect(mapStateToProps, { setDataSaver })(AppSettings); +export default connect(mapStateToProps, { setDataSaver, setInitialPage })(AppSettings); diff --git a/src/store/app/actions.js b/src/store/app/actions.js index addfca600..2aec1638b 100644 --- a/src/store/app/actions.js +++ b/src/store/app/actions.js @@ -1,5 +1,5 @@ import { kitsuConfig } from 'kitsu/config/env'; -import { ALGOLIA_KEY_REQUEST, ALGOLIA_KEY_SUCCESS, ALGOLIA_KEY_FAIL, SETTING_DATA_SAVER } from 'kitsu/store/types'; +import { ALGOLIA_KEY_REQUEST, ALGOLIA_KEY_SUCCESS, ALGOLIA_KEY_FAIL, SETTING_DATA_SAVER, SETTING_INITIAL_PAGE } from 'kitsu/store/types'; export const fetchAlgoliaKeys = () => (dispatch) => { dispatch({ type: ALGOLIA_KEY_REQUEST, payload: {} }); @@ -15,3 +15,7 @@ export const fetchAlgoliaKeys = () => (dispatch) => { export const setDataSaver = value => (dispatch) => { dispatch({ type: SETTING_DATA_SAVER, payload: !!value }); }; + +export const setInitialPage = value => (dispatch) => { + dispatch({ type: SETTING_INITIAL_PAGE, payload: value }); +}; diff --git a/src/store/app/reducer.js b/src/store/app/reducer.js index 94793924a..dabcc7ad3 100644 --- a/src/store/app/reducer.js +++ b/src/store/app/reducer.js @@ -8,6 +8,7 @@ const initialState = { }, dataSaver: false, pushNotificationEnabled: false, + initialPage: 'Feed', }; export const appReducer = (state = initialState, action) => { @@ -22,12 +23,16 @@ export const appReducer = (state = initialState, action) => { ...state, pushNotificationEnabled: true, }; - case types.SETTING_DATA_SAVER: { + case types.SETTING_DATA_SAVER: return { ...state, dataSaver: action.payload, }; - } + case types.SETTING_INITIAL_PAGE: + return { + ...state, + initialPage: action.payload || 'Feed', + }; case REHYDRATE: { const payload = action && action.payload; const app = (payload && payload.app) || {}; diff --git a/src/store/types.js b/src/store/types.js index 3020b434f..79d12f1fc 100644 --- a/src/store/types.js +++ b/src/store/types.js @@ -160,3 +160,4 @@ export const USER_FOLLOW_FAIL = 'USER_FOLLOW_FAIL'; export const CAPTURE_USERS_DATA = 'CAPTURE_USERS_DATA'; export const SETTING_DATA_SAVER = 'SETTING_DATA_SAVER'; +export const SETTING_INITIAL_PAGE = 'SETTING_INITIAL_PAGE'; From f88b6dc6ca614a3993160af736ee6c9219c32478 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 18:09:48 +1000 Subject: [PATCH 011/137] Added navigation to specific tab on startup. --- src/routes/tabs.js | 174 ++++++++++++++++++++++++++++----------------- 1 file changed, 110 insertions(+), 64 deletions(-) diff --git a/src/routes/tabs.js b/src/routes/tabs.js index a2357ff3e..116120693 100644 --- a/src/routes/tabs.js +++ b/src/routes/tabs.js @@ -1,4 +1,6 @@ -import React, { PureComponent } from 'react'; +/* eslint react/no-multi-comp:0 */ + +import React, { PureComponent, Component } from 'react'; import { DrawerNavigator, TabNavigator } from 'react-navigation'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; @@ -8,6 +10,7 @@ import { fetchAlgoliaKeys } from 'kitsu/store/app/actions'; import { fetchNotifications } from 'kitsu/store/feed/actions'; import { tabRed, listBackPurple } from 'kitsu/constants/colors'; import { SidebarScreen } from 'kitsu/screens/Sidebar'; +import { isNull } from 'lodash'; import SearchStack from './search'; import NotificationsStack from './notification'; @@ -25,64 +28,100 @@ const TOP_LEVEL_ROUTES = [ 'DrawerOpen', ]; -const Tabs = TabNavigator( - { - Feed: { - screen: FeedStack, - }, - Search: { - screen: SearchStack, - }, - QuickUpdate: { - screen: QuickUpdateStack, - }, - Notifications: { - screen: NotificationsStack, - }, - Library: { - screen: LibraryStack, - }, - }, - { - lazy: true, - removeClippedSubviews: true, - tabBarPosition: 'bottom', - swipeEnabled: false, - tabBarOptions: { - activeTintColor: tabRed, - inactiveBackgroundColor: listBackPurple, - activeBackgroundColor: listBackPurple, - showLabel: false, - showIcon: true, - iconStyle: { - width: 44, - height: 44, +const Tabs = (initialRouteName = 'Feed') => ( + TabNavigator( + { + Feed: { + screen: FeedStack, }, - style: { - height: 44.96, - borderTopWidth: 0, - backgroundColor: listBackPurple, + Search: { + screen: SearchStack, }, - tabStyle: { - height: 44.96, - borderTopWidth: 0, + QuickUpdate: { + screen: QuickUpdateStack, }, - indicatorStyle: { - backgroundColor: tabRed, + Notifications: { + screen: NotificationsStack, + }, + Library: { + screen: LibraryStack, + }, + }, + { + initialRouteName, + lazy: true, + removeClippedSubviews: true, + tabBarPosition: 'bottom', + swipeEnabled: false, + tabBarOptions: { + activeTintColor: tabRed, + inactiveBackgroundColor: listBackPurple, + activeBackgroundColor: listBackPurple, + showLabel: false, + showIcon: true, + iconStyle: { + width: 44, + height: 44, + }, + style: { + height: 44.96, + borderTopWidth: 0, + backgroundColor: listBackPurple, + }, + tabStyle: { + height: 44.96, + borderTopWidth: 0, + }, + indicatorStyle: { + backgroundColor: tabRed, + }, + backgroundColor: listBackPurple, }, - backgroundColor: listBackPurple, }, - }, + ) ); -const Drawer = DrawerNavigator({ - Tabs: { - screen: Tabs, - }, -}, { - contentComponent: SidebarScreen, // Use our own component - drawerBackgroundColor: listBackPurple, -}); +const Drawer = initialRouteName => ( + DrawerNavigator({ + Tabs: { + screen: Tabs(initialRouteName), + }, + }, { + contentComponent: SidebarScreen, // Use our own component + drawerBackgroundColor: listBackPurple, + }) +); + +/* +This is a really wacky hack job to show a specific tab at the start of the app. +There is no other easy way to navigate to a specific Tab using `NavigationActions.reset`. + +We have to have a wrapper for the `Drawer` otherwise `TabsNav` keeps re-rendering it, +causing it to mess up some nav actions, specifically navigation from the drawer. +*/ +class DrawerWrapper extends Component { + static propTypes = { + initialPage: PropTypes.bool, + } + + static defaultProps = { + initialPage: null, + } + + shouldComponentUpdate(nextProps) { + return isNull(this.props.initialPage) && !isNull(nextProps.initialPage); + } + + render() { + const { initialPage, ...otherProps } = this.props; + const Wrapper = Drawer(initialPage); + return ( + + ); + } +} class TabsNav extends PureComponent { static propTypes = { @@ -91,6 +130,11 @@ class TabsNav extends PureComponent { fetchCurrentUser: PropTypes.func.isRequired, fetchAlgoliaKeys: PropTypes.func.isRequired, fetchNotifications: PropTypes.func.isRequired, + initialPage: PropTypes.string, + }; + + static defaultProps = { + initialPage: null, }; state = { @@ -102,15 +146,6 @@ class TabsNav extends PureComponent { this.props.fetchAlgoliaKeys(); } - fetchCurrentUser = async () => { - try { - await this.props.fetchCurrentUser(); - this.props.fetchNotifications(); - } catch (e) { - console.warn(e); - } - }; - onNavigationStateChange = (prevState, currentState) => { const current = this._getRouteName(currentState); const previous = this._getRouteName(prevState); @@ -125,6 +160,15 @@ class TabsNav extends PureComponent { } }; + fetchCurrentUser = async () => { + try { + await this.props.fetchCurrentUser(); + this.props.fetchNotifications(); + } catch (e) { + console.warn(e); + } + }; + _getRouteName(state) { if (!state) return null; const route = state.routes[state.index]; @@ -135,11 +179,12 @@ class TabsNav extends PureComponent { } render() { - const { navigation: rootNavigation, badge } = this.props; + const { navigation: rootNavigation, badge, initialPage } = this.props; const { drawerLockMode } = this.state; const props = { rootNavigation, badge, drawerLockMode }; return ( - @@ -147,8 +192,9 @@ class TabsNav extends PureComponent { } } -const mapper = ({ feed }) => ({ +const mapper = ({ feed, app }) => ({ badge: feed.notificationsUnseen, + initialPage: app.initialPage, }); export default connect(mapper, { fetchCurrentUser, fetchAlgoliaKeys, fetchNotifications })(TabsNav); From 4e50960a048acc61121f1c893be4f330141ccad5 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Tue, 5 Jun 2018 18:17:56 +1000 Subject: [PATCH 012/137] Added quick update screen option. --- src/screens/Sidebar/AppSettings.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/screens/Sidebar/AppSettings.js b/src/screens/Sidebar/AppSettings.js index 19d06f3a4..4a2183ec2 100644 --- a/src/screens/Sidebar/AppSettings.js +++ b/src/screens/Sidebar/AppSettings.js @@ -43,13 +43,25 @@ class AppSettings extends PureComponent { render() { const { dataSaver, initialPage } = this.props; - const pages = ['Feed', 'Search', 'Library', 'Nevermind']; + // The pages + const pages = [ + 'Feed', + 'Search', + { text: 'Quick Update', value: 'QuickUpdate' }, + 'Library', + 'Nevermind', + ]; + + // Page title display + let pageText = initialPage; + if (initialPage === 'QuickUpdate') { + pageText = 'Quick Update'; + } return ( - {/* TODO: Flesh this out further */} - {initialPage} + {pageText} From 026a73398fa1744d4bf4a7522a29287cfccb0724 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 10:03:52 +1000 Subject: [PATCH 013/137] Cleaned up render code. --- .../components/EmbeddedContent/component.js | 2 +- .../Feed/components/ImageGrid/component.js | 120 +++++++++--------- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index adb5e78e2..094c7c240 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -78,7 +78,7 @@ export class EmbeddedContent extends PureComponent { return ( {}, }; - state = { - } - - renderImage(image, width, height, count = null) { - if (isEmpty(image) || isEmpty(image.uri)) return null; + renderImage(image, width, height, onPress, count = null) { + if (isEmpty(image)) return null; const { imageBorderWidth, borderRadius, compact } = this.props; return ( - + +{count} } - + ); } - render() { - const { images, widthToHeightRatio, width, compact, imageBorderWidth } = this.props; - - // If we don't have anything to show then don't show it - if (isEmpty(images)) return null; + renderImages(images) { + const { heightToWidthRatio, width, compact, imageBorderWidth, onImageTapped } = this.props; // We only display maximum of 4 images at the moment - const currentImages = images.length > 4 ? images.slice(0, 4) : images; + // Or 1 image if compact + let currentImages = images.length > 4 ? images.slice(0, 4) : images; + if (compact) currentImages = [images[0]]; // The width of the gallery const currentWidth = width || scene.width; @@ -67,46 +66,47 @@ export class ImageGrid extends PureComponent { // Current Width to image width ratio // This is for the case when we have more than 1 image - const ratio = images.length > 3 ? (1 / 3) : (1 / 2); + const ratio = 1 / Math.max(2, currentImages.length - 1); const ratioWidth = (currentWidth * ratio) - borderOffset; - const ratioHeight = ratioWidth / widthToHeightRatio; - - // Compact view will just show the number straight up - if (compact) { - return this.renderImage(images[0], currentWidth, null, images.length - 1); - } - - switch (currentImages.length) { - case 1: - // 1 landscape image - return this.renderImage(images[0], currentWidth - borderOffset, null); - case 2: - // 2 square images - return ( - - {this.renderImage(images[0], ratioWidth, ratioHeight)} - {this.renderImage(images[1], ratioWidth, ratioHeight)} - - ); - case 3: - // 1 landscape and 2 square images - return ( - - {this.renderImage(images[0], currentWidth - borderOffset, null)} - {this.renderImage(images[1], ratioWidth, ratioHeight)} - {this.renderImage(images[2], ratioWidth, ratioHeight)} - - ); - default: - // 1 landscape and 3 square images with a count on the last one - return ( - - {this.renderImage(images[0], currentWidth - borderOffset, null)} - {this.renderImage(images[1], ratioWidth, ratioHeight)} - {this.renderImage(images[2], ratioWidth, ratioHeight)} - {this.renderImage(images[3], ratioWidth, ratioHeight, images.length - 4)} - - ); - } + const ratioHeight = ratioWidth * heightToWidthRatio; + + /* + This will produce the following: + 1 image -> 1 landscape image + 2 images -> 2 square images + 3 images -> 1 lanscape image + 2 square images + 4 images -> 1 landscape image + 3 square images + count on the last image + */ + const imageComponents = currentImages.map((image, index) => { + const isLandscapeImage = index === 0 && currentImages.length !== 2; + const imageWidth = isLandscapeImage ? (currentWidth - borderOffset) : ratioWidth; + const imageHeight = isLandscapeImage ? null : ratioHeight; + + // When in compact the count of currentImages is 1 + const count = (index === 3 || compact) ? images.length - currentImages.length : null; + + return this.renderImage( + image, + imageWidth, + imageHeight, + () => { onImageTapped(index); }, + count, + ); + }); + + return ( + + {imageComponents} + + ); + } + + render() { + const { images } = this.props; + + // If we don't have anything to show then don't show it + if (isEmpty(images)) return null; + + return this.renderImages(images); } } From 2b63407c9928c60a6e37991a711a4581556ed274 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 12:01:18 +1000 Subject: [PATCH 014/137] Added image lightbox. --- package.json | 1 + .../components/EmbeddedContent/component.js | 81 +++++++++++++++++-- .../Feed/components/EmbeddedContent/styles.js | 27 ++++++- yarn.lock | 10 +++ 4 files changed, 110 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 3cfb41e81..b132e0067 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "react-native-htmlview": "^0.12.1", "react-native-hyperlink": "^0.0.12", "react-native-image-crop-picker": "^0.19.3", + "react-native-image-zoom-viewer": "^2.2.5", "react-native-keyboard-aware-scroll-view": "^0.4.4", "react-native-linear-gradient": "^2.4.0", "react-native-modal-selector": "^0.0.25", diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 094c7c240..25a3fa093 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -1,8 +1,7 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, ViewPropTypes, WebView, Platform, TouchableOpacity } from 'react-native'; +import { View, ViewPropTypes, WebView, Platform, TouchableOpacity, Modal } from 'react-native'; import FastImage from 'react-native-fast-image'; -import { PostImage } from 'kitsu/screens/Feed/components/PostImage'; import YouTube from 'react-native-youtube'; import { StyledText } from 'kitsu/components/StyledText'; import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; @@ -10,6 +9,8 @@ import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; import { startCase } from 'lodash'; import { ImageGrid } from 'kitsu/screens/Feed/components/ImageGrid'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import Icon from 'react-native-vector-icons/Ionicons'; import { styles } from './styles'; export class EmbeddedContent extends PureComponent { @@ -59,6 +60,62 @@ export class EmbeddedContent extends PureComponent { compact: false, } + state = { + imageModalVisible: false, + }; + + shareImage = (image) => { + console.log(image); + } + + /** + * Render the image lightbox modal + * + * @param {[string]} images An array of image urls. + */ + renderImageModal(images) { + const { imageModalVisible } = this.state; + const closeModal = () => { this.setState({ imageModalVisible: false }); }; + const imageUrls = [ + { url: images[0] }, + { url: 'https://media.kitsu.io/anime/cover_images/1/original.jpg?1519178801' }, + { url: 'https://media.kitsu.io/anime/cover_images/7/original.jpg' }, + ]; + return ( + + ( + + {/* Close */} + + + + + {/* Share */} + this.shareImage(imageUrls[currentIndex])} + > + + + + )} + footerContainerStyle={styles.imageModalFooterContainer} + /> + + ); + } + /** * Render an image embed. * This will render the image with given image width or maxWidth if it exceeds it. @@ -70,6 +127,8 @@ export class EmbeddedContent extends PureComponent { if (!embed.image) return null; const { maxWidth, minWidth, borderRadius, compact } = this.props; + const { imageModalVisible } = this.state; + const imageWidth = embed.image.width || maxWidth; let width = parseInt(imageWidth, 10); @@ -77,12 +136,18 @@ export class EmbeddedContent extends PureComponent { if (width > maxWidth) width = maxWidth; return ( - + + { + this.setState({ imageModalVisible: true }); + }} + /> + {this.renderImageModal([embed.image.url])} + ); } diff --git a/src/screens/Feed/components/EmbeddedContent/styles.js b/src/screens/Feed/components/EmbeddedContent/styles.js index 67714d3a9..1f71b46be 100644 --- a/src/screens/Feed/components/EmbeddedContent/styles.js +++ b/src/screens/Feed/components/EmbeddedContent/styles.js @@ -1,5 +1,6 @@ -import { StyleSheet } from 'react-native'; +import { StyleSheet, Platform } from 'react-native'; import * as colors from 'kitsu/constants/colors'; +import { isX, safeAreaInsetX } from 'kitsu/utils/isX'; export const styles = StyleSheet.create({ mediaPoster: { @@ -18,4 +19,28 @@ export const styles = StyleSheet.create({ height: 64, borderRadius: 32, }, + imageModalFooterContainer: { + bottom: 44.96 + (isX ? safeAreaInsetX.bottom : 0), + position: 'relative', + }, + imageModalFooter: { + flexDirection: 'row', + justifyContent: 'space-between', + height: 44.96, + }, + icon: { + color: colors.white, + marginHorizontal: 8, + fontSize: Platform.select({ ios: 30, android: 28 }), + backgroundColor: 'transparent', + }, + closeIcon: { + fontSize: Platform.select({ ios: 36, android: 28 }), + }, + iconContainer: { + height: '100%', + paddingHorizontal: 12, + alignItems: 'center', + justifyContent: 'center', + }, }); diff --git a/yarn.lock b/yarn.lock index 56de6d435..9f49c1dd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7835,6 +7835,16 @@ react-native-image-crop-picker@^0.19.3: version "0.19.3" resolved "https://registry.yarnpkg.com/react-native-image-crop-picker/-/react-native-image-crop-picker-0.19.3.tgz#ef4f10875fd9b6eff10df2b55e3cdb966b875d70" +react-native-image-pan-zoom@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/react-native-image-pan-zoom/-/react-native-image-pan-zoom-2.1.3.tgz#1f1847518eb0d10a43fce20ee387a9f273dacd9a" + +react-native-image-zoom-viewer@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/react-native-image-zoom-viewer/-/react-native-image-zoom-viewer-2.2.5.tgz#ad06f7b4666ef554ab2a900b92b56d2658570464" + dependencies: + react-native-image-pan-zoom "^2.1.2" + react-native-iphone-x-helper@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.0.2.tgz#7dbca530930f7c1ce8633cc8fd13ba94102992e1" From 7abc6b2e01031b7e94fbc5797f1fd16bb9c48010 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 12:11:40 +1000 Subject: [PATCH 015/137] Added react-native-share --- android/app/build.gradle | 1 + android/app/src/main/assets/fonts/Feather.ttf | Bin 0 -> 55288 bytes .../assets/fonts/MaterialCommunityIcons.ttf | Bin 292556 -> 302940 bytes .../app/src/main/assets/fonts/Octicons.ttf | Bin 27428 -> 43920 bytes .../src/main/assets/fonts/SimpleLineIcons.ttf | Bin .../animetrackerandroid/MainApplication.java | 2 ++ android/settings.gradle | 2 ++ ios/Podfile | 2 ++ ios/kitsu_mobile.xcodeproj/project.pbxproj | 5 ++++- ios/kitsu_mobile/Info.plist | 3 ++- package.json | 1 + yarn.lock | 4 ++++ 12 files changed, 18 insertions(+), 2 deletions(-) create mode 100755 android/app/src/main/assets/fonts/Feather.ttf mode change 100644 => 100755 android/app/src/main/assets/fonts/SimpleLineIcons.ttf diff --git a/android/app/build.gradle b/android/app/build.gradle index 93f03ff4b..8a92e9f14 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -173,6 +173,7 @@ android { } dependencies { + compile project(':react-native-share') compile project(':react-native-fast-image') compile project(':react-native-image-crop-picker') compile project(':react-native-sentry') diff --git a/android/app/src/main/assets/fonts/Feather.ttf b/android/app/src/main/assets/fonts/Feather.ttf new file mode 100755 index 0000000000000000000000000000000000000000..244854c5492eecee3ff136fbe461a517079dcdde GIT binary patch literal 55288 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 literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf index 69404e3d9758bf3d6a7e4ce27e5362089366542f..c9a3a3055794081d785b9a3be8700426be5bb07d 100644 GIT binary patch delta 21410 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 diff --git a/android/app/src/main/assets/fonts/Octicons.ttf b/android/app/src/main/assets/fonts/Octicons.ttf index 5b1f7d6ea2c870df4f29f4b40a300334844d2214..ff0dda18470bed62d7090c8dd6762dba05e098c7 100644 GIT binary patch literal 43920 zcmdqK4U}BzS>O4-_xskpRkyyYx~sdoyQ zJ(|&IJY$VUGX@(-FtLGzJH&%U+vTpLzY?DE09_ z;PcM)ThG7e^ba?_N2%|bQ7Zba=XYMc#r8a(@3IV@f9d_#|IdHXW4)L=FWSb`xig=JD+6zLwx=%w_bkrwcq(CKYUfG?iQC{H*%G;&Z?ERqEpFpHrc_tdb9mk2KzC-W=CvO`bF9S?CY3Cg(Gw z9DRf36a1*Fs*BGpe($ceo7h;%^GQX>K-QE1|+-`e!ad&C=vE8@qKEdz4d-vAvdw0Kb_d~m1zx$2+?%(Ej zKf3#!yC2*A9)9-+cRw}$-Ouj+Jiq%t@BYf}ukZfm?`rwoU;Fs4UCX<9J8va_nEb!V ze@gyi@(0O(NPa*0z2tY3-Q?dTzmxpiMVy)`Zk}-aa`pV zDgJOM9TpIAlXSVYA{wCi~R978VtD|EX-?H^NKC^6PU1JaJ*m_4fuIpSv zT)9sv*Kscts?$emdC#9dJXlT7ztUbemrxt5uXPvOEw56pRr%{x`fDqL;lS^Et*M!k z7wM*syrCNeQIvNrE6_z9SnZ}YeX)=YGDVL^F%x8GLNDX{xr`UuPV8&#$4)2awCESP zW;ti+qlhz~R|nM*^$nx1r|sH6#K)=9l~La+Mmii{WrOr>9! zE9Noqnqe4w-Uk11u{jttJ=W5HZ_|tA!%goD8#V{h4oLpj{}X+GUNu!qEvhATd3156 zF+Ei;iFJGTEg+%n|wcTRB(-X?%0-dP05J5tXx+=rL?Or z6yz~IHI)zjS-O}JTJbA%bZdQWxZYi7sG4oHA#c6awN{nqfM=)f6}|Ks$KG5nS2X|U zW8aR7k?qI(-vl(PO&@RNmUHR#-09aG*Ym;A2b5j2u$@mFXVLWHTyxem86&5Z zEaea7vhkg+ERDO;m#(U{>CEDII(i^VvOm*_VhOtm__dxj?Q z>Pt%lx{v-G45U*xW%`cC@>RyN$7pRc1COb`8tT>zL3kr!BA(aGhSx!hV1Cj~EGje{_$|L-`6;gXQ{JzgekN z#F|ESiw-Mu)uO$6>c!EG96NQ|GmWgTd_T0d676lOQ2RO*`R!=mxrw+&AtT0B#_}>E zzjbJ#pY4Dqh;+bD2QF%R(iDddNi!Tea_C60Rx6Y`i>26~G3{VP`P!l=reURz78g0* zMbJ;gya;)3tyNxQ`x%6~!*v!tKg#BEvj{Z)-CQo0PlfuTL-Erw^SJUa(OVfwj zbJaWcMo#;!_1+p?Cf3HFyXY^r{AGPudo{5;=s+<+#QdlZXY@+By-fGc9GnS~jBQt4 z%XUJ>qJvq1@~c=nbWtjTneWBDB}g?po7W` z#@4^cG`XJZqid7vi7*WrWPw&(kjrShDV_D|y)H<9(HGPnijw{O7qnz9sQJfSP?HN9 zyzznX72}P#<2B5d{rhQU*SX4QL!lERsPXTY~^3(seE?lK|5eO^4Mg&x{SS= zYN(abGKNp!yO@JIgA2fXe3R>gg3{ZCLjRQG*AEYCes_3G*L;@#x>&WwG-?g8i;gCV z8%0^3ZW0@d7Nd4!kR(nNIr2;v&WK^;otfCNaxU2G;wz~KMyJG#tyRjRtaQv7ZQnZshcNj+6Qt(~Ot*jNXmYfOcx|dQPURmg$Nw zky@j1sBz9;taVx|IoyKpxhgwedS)ek=-Z0Q=qK7-8 zfaOt?>pGegmo^5{<>?SPYObqZlu@7R9J!Vpv*E<(K1VADXa)$s0B_Q17u zFiB|jOAG{kg{#xs#dg1tcl{}35A$@=#3!_z$FMf6VJ>whCm|wd5GUiqpJ~?PqN1rL z=a5liB~51EidxshQKEGi9Mq+PwH517pL_IEWn=L=s7~hwqY)ebhRP>}LjFc&G9Hvy z(|#b0i&>Bf@Y*uiOR<=>vC8IR%%j|tPVzYn--0TY3#DgJx<$8K#PmWByO&tFGL&3} z#rqz_^qr%5x8!h1zHsYHbG$2~QKvIAQ!dLGUdL!Twk%F&r`y5J6fbjTZie9@vmrI$ zqEf`1z`sk!`t&`&kH#!8!i5ipabj2)(EdwmTl+n>yWqF1b^V#Uao*o*7*+@0yb ztYB149zh`cq7E4o6B|b6Z4+15%1KP{2YQCW}zO!{iXBb_P zX8O~WPVCrt=rQ^ydy{T*vbmeMAx;ht6?KV%y`^w-tnj9>_57R4&jfzvCPO4IfCOXH z!_e`9YXuFAnYqLwBb}I0+lLQJYhHZYTONP-p@$wkeERSyjD-I3(Jn4u)QpFet!3yaV`AudkuYqUj*{LE&uq@9DJaa(0h+9Y$4%g>MtK~oEgVC zfEAT^GY4imwv%M=?YAb|*&H6|%p9;YiBko&NzufMXq<$3e{yu()rqlNK1Xw zm_=_mn>q-5#HjBH8;eSOGhjhnd&(?u1N2B)lt8c z3YG0dN3QQO6g?li4wN}Povd~O+X-%B;n>0WtdQ?6@;!&N5DRc8#!#fySWKF&F*<+u z?=gD+Oh0&KbZB8A3+SZOLT3S_qS>fd%gpK0-U-Vqgs*{|%zpSg|-} zf2>{yr#061I)0RK95(qCeoSjmx3sZ4e6%-%y<9Ao9WTh!C!WC^FX9JCpR};M#OnIU z=)9LcI*Nq1lEA|2JNzqCGzC>kp zlHJK;B!~qL(kJ!?(gB+TTRL*KN27K-2u2T%9z65F$&LH(YlDiet}Gupbg;Dmu+S(M zqFnx-98F)BQomPvu2SnrpstGw0>?AZpwZMSF%dE;01f3FeSc5KJq z68?mB#&SY!6`hQOCxt?@u|04jfI++C-FkM@w(0KreN%cs%UJ`RjWhD*$(|eGK)N1- zFc*YwZ!p=_%&(Xh-JnHFYB1{4V!m?mFwo=3OKBm5Hhv<9@-8dSvz}6@(+ed7^cC`f zIEBn?uhqrg9jtn*gEbuC@&l!k+i~TkmH~ebjOkrGz`FpkEAxx7A{eCLkIQORJwJN3 zQM5v@rR{KrNnXhKxTemQ@-iVj*>SDdtiNyOU`{Ky^J#S^7znX&472KY|NiF{CVyn!xq}b$!r*ky6 zZDSk(9C^5LzE?kl51Y$%a=8I6Sq>5E3Py?N>iYcKv%IlzV|~2XmhofLYu?01SWpMR zd5)_0kG^cCV5uMgr^$zwr|m6ZMlfWYB%mGbah(pUPIxV5c176S0Itf)xYjikk@hnB zT2}kE?O$f$+fOOmw=c9>S^?k~$hmc(1?oIMSFdJc09;Eg=!Kk-g=I!vYq49|*9d4U zgUO?f`h$rBF97X^L0=Q&5QyvQJB}Yjc8lxp<#J1PG)HyMac2jHnjND04~q-GDi@!| z3&e*HvDD|pQg2S7jr7)B9pMy(zS^9ft`rLy{D@Ej9u_{mw)LxT)HLN{W!7k#>Z}&` z;k3q37kA0nE;zO|&~lK8ci2ad+DqMz*TF{;*REK+&$3U~>!)pN=JKH4Xw(O#Aec^l zTujXIn7qiC^o_Qusjbo30O9R0)aVGGf4o)<7)xCPTp6Qp^t`@|q?6Xy_60%G?qFu+ zQmK^BVE7K06HNQH#no!rYb~x#aI*Wb;bzMH*3?vMst0KJ2y5k;8P=v+ezS>Tyzjik zmuP_We(UI)h=qi6T1U$|(9XTB(?egGSgG z$1V1|8b|`H96`yDazJ7IRUAFsRpyl#I&FX#pa#DtR~k=eGI6;u6_j&@Ot`v#rP-7n z>Y4mhL8e`+w@I z!h6TpIA?%D4xX7~$*L>fn5(xF9JZvARKy|31fHXEIvdL;4 zS&YwPBvmTB40`ks=a9-YId2;~v4t%ErqoUvGG}bZy}|YPUWh*N0Hi#uZvtpoj7F~n zqE~>Fg3E}&%u}f9%!S72zVw@BXns*&y)w!l>~`9vLaW$csTA@?+M}9=WiP?D!5YOV zO)VV3w?s?rpOH+pI%+lMi3kIbEIRw5*ctwS$0X*GnuW5QL!acd+$hxgW?tt5uD;fQhtfY%@Ay{SesWTftZk zG0_=hk8awYXK&h@2B0%z;Xk4MF5;?ADWb6iwj9hUrhyDDr06(YhlOun2IUp?XzL55 zN~v8kj(OGhTE`5Gy*7@_jy3r^9fy%r%S1_~(yaK0>iK*e6+`2qGXy)=%s1uy$Ja%>xwa<5OvJJ;AH zLQ!Ein|{2Ag(!Z{5j6mHK1qz>_UProG0TnjELs7b`L-1U(TXV|5POJ~hKYhD7k~hG z-YYWPF=Vfam?g3Z#^C#zODdD`ui%*a+YdiKyqOTGv0>&4YOUt4u8FDD}k;CY7Ki}D*`J=F8% zNEY%FvTey)^}JP_H}CkqZ^+oNU;jhm?^p5mWsDwB%~3;albOa8utX#XVuHWL2&jPq z;I470(%s!b)vvCA!!6Ef(VfTikWpcEPg~t#BMt*Q!bpw@sAOE*U#xO|R_(}PZ`#gU zfj8|QKImkK7qg39i0#OA{7l`()2$DVdJQkMa(2T#YR2vV&ACZDbymH7bZN%5u$S>& zup$|!*mq}@>uCrSMw2MZm}WAJcSLwwM3Vz!iCtphi&yO1+j!iw{%oN*Xc21+{l+BL zD2NJvP^BwwvcW&WUTT$106E~;`hqP;Y_HyAo)!Po!UkA3c(==Q_48t>0$ey;hlILc=ec4d>@gI_hqA`kyfrD7hukdGa@dC*jNJ8 zXtiA|7Wf}KAMN$kF4jdG%c3$~iWZ(~d-K(#0zU4=z4lafzF0{FNu0#aQ=R3bJBwhN z$J7aZa1`aVmDNGaUdg2v56%7 zTVqg*-ZEnvnn&M&hS(6@zNlRSg1pA{db7FI#2RlTNte(dkV~;nxB-+O047BgB|0H6 zFqZbc(gEV?m0yTGHF-vc<#(n;$uhV@0z5!9OF;U zQ63W8Bc?yXfCh@G$UxsZ#LN`L+-7Ug0`m;+QM^bo|_Z2~k&yLl;y;%1A*EXG#|OrjlD00ONPQ(-P5ON0lu zXSav}=`d2oVnj2$HogJ#{4&iY_9KCuJMbECaty#0X)xBi0JgrkjYI4f5oDg1&*$fR z7t`3((|KpZkVWO#Vk=xk;&x!LfaE0Ff_XHXN7Zl%*0}{8Z64IQvnbE#HfUPrc3#Iw zr`W$$&z$t$SYz!L_9tGw7{^7+h0A8V6osV^}C(&)sVAUSZL**tLg z0KRf}vDs;Ym(9=3Oam8mh?ZhU3SLm7FV@kgK0V)BA9fMg;N!3u*88i-Pl-LwS|+6W zaN^Y~@lsr=69?LR+Z%hBaTf=gF)W{%CGvdyNXLqB{!Yu8e+JPi_CMCnaI;qrlkUL0 zGMa=<>(OFo=&u}lw2CGr0!Pe?$tv)EMto{^vXDa<+ek7l+m?>A^>zirScccWpxgSe z4fSP+!Qgjm>%O3&M6)(KoqBPj5{5_X%uhP7*Q|7km0}nsojn?~*POS>;yxzun5)aCk=u#1UcT+$K zzfi!bu+P-%y|~dh(`=q;G)z>~?t5OJP`xdEgU?7HuW`Cq?3#Zwms6ePsoJP40s~_e zQYK321%`@k%yz@{Lblb5XHeVp!d>5+8db5M49}A7DJWVf3Me{c7{LnL;7c9(_TAru z1Ih$Mo8NWJBK!%#8BHvIsVGNXqSxMVOt_sKQyHUmlVO!INz;=yM>g`TD+fNqft%?$ zi*Nl7^%fW=*l6`yXsb=eR>s-)^&^Ys>uUpyGK7BDNA_cJf=Q1`l0C}=$PIrX-J2@ zg1hF2&UIx+0?{Ja<4DIhp{K=GoR@(mSg&}R0qh8nKvl^4g=dfn*<6@?MtE&WR7_yH z`4q7eu5f%;hfwa39tqGcxl5;4w&nOg(*#m!9ANo+cHF5MNOCl3u1!B$8U??*DEg%X_n8&JE1!g&l!<)A30;1e@@~G7f zG%G9s31(o3Gm?3@?2o^S_lb)_6i7Ims7l9q&|piQ6k(e9@nTcD(q2fG3!}#{yBMW_ zdoZV*0AJRJSOc~RyT*oHBVHSd7FlzNg(bF`rQkQ4D5J0;@q_p|w*Zt2@Xu@oO^|sz zeqO!m!7NGty(cevoc+eqc>F3f!X`iGeTKn{EUa`poz2aT87UJkhWObM34UbsAd($a z+{k+&I~m~;B3y{C6YMhzfxy=#h%wU9uCgv+5#V6t=kiQg;OVNI=%Rz(Cu0mnHUYf)ykAWl%xJm)fu zXzwX3MDGF!VWGH?_r*OB6?0Pe-v}1=#1{+pp%EQSp}Qamj?W|Is08%i;;5a?U~s#5 z0W{;Q=xqxH$TZ~owY6O;L+wU<;EB}GGkqp*+dtndHhaB#uih;#6?@I4n3dBAKz>bi=s_SsF z@EdNR%i)e@Z6IO@>`ZPtFXzl05pHG% zYv`*+?+>(-LGwBpJ0nQDZSgze+hzoZhI698iV(4{CQQ?eBVo!&#X$r=9jQgjV7|h{ zzr=LTc|uP2eeVj_?QO>qcIq7hy0D#+XfZw@@+_YhnvJnU2vFAkMB+Jdofw*ZF;^Cg zbdPu5gc2l3#2Z-W#O=nogXo6}mglTmfOVT{?EiK2tC-Ptg5Tv$d(Jd4Nj+D$u*)l@ za;Z|jr3!Pp7!-;-ke^hLRa{%PgP#Y;hqPpc_+dTM7zJP=gg&a8BD%}03F zRNbo8jo)1nzq^`Gs+Zv9l3y; z2&n_})U;xCs)_}TeM`_fSID8jB2iurG2!g|9mfU@CgRyl8>Y^X=Y-MEbV?DOF?f!T zAY>Ud9^NkyG`i)bZ!iue zzhh4(pJ%*@?*h`DuB+*zApw9ktL`nL21k*BHjoFdi}g{q`WsTbR{=5)?#x0bDA z`jlm21jGsk<JM=xRF zI(Fd5YAA{@w6_l&n4Z>3oLNaVn(j;s^>=Qz0sA8%A|_#;DP7O+8_jU<=#ISs3k1!` zrguas;7+lqtutr^ff0ZP@eLqTkHgc0h44J16rfMG2rYzBi6jk+9bU#h&!&19F;*Rw zu*2{l0%Fg?9(n<67n)@SC4<$AS(jAoTBh@G(W;fQ*egr5#cC$*x zSK1&bA~3LN+-cMHcYVh;-@$6cKT|Ih^2SYJ2=<6r^(0=!L+qqHLSqJxWLOOe#4k$7g{H>BG)i(wz^}L?Owu?!W99^(F!Nzi@JUE; zaoo->*K!V74Bw^_+|9S?A2*jiAWkl>*<|V&xcMm|BF!1c-aE^9-r!lu8;2v$<%%tP z37!Jn3V_Z2sF#f`jX=R7H;6JZ8^~A8t4k~qH^i2uKl=*q7oZ z_KH0L^tOT`etyP@S(l5tZ@fP7K`wIKfS&1qCY&EVD!v^3aE*xpu%)!{A0*g9k_!;K ziC2>*A%u_cDHwkt>V4_Z;(^uz}-yoHOzqg67&?eP4 z+S~{6wuFHML<#j}{B-sk;XQUh;#e{8HhUC#I`enpf^8XTGM3-q%dD)|I(RbaXGKQh zfJ;e6(!yqf+c$9bH;zPWK!AYKie_ArYoBGC;-epmC%fjO~ZnC+=yv zI+VG_TdbjBMUq?C1rh^lPq;8qL|#i2dx2AT0{_Gt)?E};HlNJ~IgSr3$Dl2~VO`YN zxQ!&=HB#WDNH*L|Ch)65w7_WtAHsH$tcEe!R=l=?$>~V#9MLb8{$?|7%D;J$-(`T( zcAKXQ*6XUHJ><;R$}5OyVKV-i$ZIMPs#yImwEZmDW1Un|xKOC_1a1LLxg3^WwU z5wt+LJ6`&INup@2Jv4Hh$$$Eu*bSbo&^I{y31%mp`QRUAJdhlGT5-I_H2C`)jga&n zo}pk;vXp1j%*BaKDH%V#(NV78EYr?h2TI*~g%;FMHCdq8l)k_Z)%jb7a9vBYY|-O% zU`?!fXbKgh$_U*8=XE+w!bMQpFP3uge3yNyDLJt9hjB|TuQs3?Wawj=CNSY z)yC_SWh_itr|dY)?+I0@;T=p?tsh-lRbW#_J{??;h9Z{o@sL^ZF8q(TrC~G0m2^Kq!aO_4&O#FyI za~2+R9aBukA+5+rmONrfvAi}VZ5I^R#&M+0Vaa+v z&_R-|*V}b?XsOfkrv9DT*T3Cy|5nERDWLMtn- z&8&sr>yXDK#sK@VGaL)Fy!d^8gw}c#e`ZFtMsqV+iwVPa64LI3c=QXML3`Cicf87~ zAw)@lXGr21YvOd9)dN*VMwk?vE4<<7d3QQj3B3IDLLtf#zjfpt!_?R^lUP8472H)O z6OaLfAY3-|2c|dIvpR$5|9dvEheo`j*EpoZkkEKL-+z zWI1z}H$O?&9n)P2UNdyZUR||ZD&%6Z!$HJW@3zD7&&w!su-5TXocakk?IUg`Ahj&t zxc-H1W9XBq2A9k(^7PJN{mN7@vjAhBe=Oki&F5XEfP?%RG-Tm@hns`J8KjiV9C?U) zmOkG6PINePDy@4V8eFm#533hO1X6^kEc7L;M5YV5rH*(vq?mcZGdVO+2J;yK0!{;$ z9HR-;N;D6SFFt4(T7b!+wSDklr*rTyqj)d>2uQnKlAN!+L{MqMeZV>x<0?K$f3@9D z(M17DOj09a9x2f?2?e-!p0`4BX>fQjFj$Bune{*d8SuC`rVNN%T;lp^Ibquqa8y&jIz*)xxMe4QbbcvyEg7Qe<_qqZ}xNIAi+ zEVPUm9#jls23HaI1gtsnR6^Dn)m{XT1*Ij`3{D@+d`TOmnuzOLt_-l0`jh1I2~|Xr z{FS24C;9Cr@zv%6>R@iKc!*%Pl9d;85|MFiN`l{t#ZwWt2J$p-F@E6m$?%d*f~7Ir z8Tn>nV7>ygFKsNvTrVDn0n-o-1Dp?9j<)S!!Fpt!jGo> zUa9jV91R;xMlchiZ87#QxV8r~iVOweyS*X@vZagYGQ8q@bd>-j(6-tO82y3`awRom zETmbW1|Y;17rp@r%^W@6q#O#@0!-TLaTzqX@SO#_p{AE%XQtI_Bzxq8qYo5_6k(Sk zoVE!2*i<(-$Mv0s+zf-9K$IW(9)>VpGj^Nk`Ir=Aff0nfDf&L+XF=YOf^?oBZ$v2Q zTry9MtP|feRNH$@DO1qLbXcL@?;1IWKUafpFup2?2;D{8B&qI1SDNP}ra0MhwSy1V zSa%!Jm6)bkhbX9!qsG$Q^A^k=bFP3uU9-ngq&;}Bc_n(D#^%x*0(E*itqJjg(O;Wp z4lR=}=n|I4U9p3uT!blfxIG2c&f7Yw-JW)i&^YIi=`OZvS|>wdyznEbE+9E5foEbX zfr+i)YEnyzfQ0W$97Yb6FgHH~Iu7?WZ`Wj9?nkOG&FLEBxnM6@qr)b~$W6wX+O zS?H}m)LW?v>QJdk5ea{tUI$w8Lpye?ViBX4HLO(GmNPX%>gUmZAV8i~nbA~&3UMYk zNs6*oEw?Rm!3-99SMZXf%;~#$G~MCRW>~F;9phTlW@)TOcu#^gogF;DLBOBHBLKI3K{^ zKdz5y$}}~-!=o?<`Zj^Y!PH6$H|zoaMK08TiLk+IwAUZX)Rr67ZA^$bz&&Xwh2qzKKztM-ZiLHbb7^ zhelsB16ky-)^QUBV{a|#xB#!0v|=oqD28B~Y8Z*c8JhqQPUM>h!ak-aG5Le6Nc(Ii zlfA66SxH#PW-g4Y=13wSs8C}Z1$jelufn(qOu&Q7mefjklY(d%wj?FiBm^lioA5=( z*(7~aT!x8X7rSvYHTJrQC!(vpEzdQqz_&;}^GS$j(1U5h_($D=dMfXhFtmK?ZAmKuF=M27 zkQW61cAk>DIv0G;)FCJnHp_VP{ygBE$(J$83T|$CVQEH?pofwHBuPQN7@~?vg9!vS zl{BDwhJ43($>hxlbA_~-8Oi?1`iLQk(!qcmVq^;;wYbsjZ^%(&y)Yyn)ReyH4n<$| zJPWQoRC~)iI#%7Hz#lvX_*_MrYK#y zHZ-h(;UcL}6w~pmCTVSIDOdJ;naI4JH=7D&gip_ZC|z*=(vBAmUP5dErGc2yTiFQI zB&DcfNf_AIAhldDoktM~EQq{;PtY4&t$1Zz@54zsQ)PtbN`AHzhjR;2ym&~uN?G7| zuhUcK(CrO%XtYQ%gepUmSQrA4E(1#2^uo8=*w%BBHfjuOtQx2$@(?p_TA~WvXQY`OFjChOOHc8$i+*$Mv z!a;V>D^%zbyxz*9R^$8B?a}*JyQi`cTWoVicg9@rSoNH*Wq)zOY zM9@oX2_Sc=xJnN7Gzt>?LAMBp52f}7d@R2vit?&7Ee+fw*y_*C`9&feNOxB2y~Vk? zML>FDnq!$R^IB{K>Y&BYq2T#tDTqN90>XXI%fl`9ZW4M1OER+D)It-(op7F%|H96t zHjYw4R!p4}LTHd}N+BRE^>GY4MvCM3F#ac~-v)exW3Z#B;c7?~mz*2qNZd~l^$F|+C$?$vIIpv|6mxMLiIh9`_Hk;g9zS^; zMhGWz|9!)io}fpCLb+O~wu*~}^j$%qihAy1rC`RLlnk_W1kO4l7W)p^w#ynUaB;^# zGq84|&i zI4y@KqSmnoAEzZ7pg3#l5jeV+)C=mX?H?blyr!#j@75kBXWf4BsT0SsN60;LwqCu_ zJL*&}Yz}fxc_nK#9-g=6QH$<4R`E|&+?;O4@O7qVn$t5k7xhe~Ia9%itjtxMIU)yD zHzZ<_cNy{oE|@}g9kDb|0O$q)rLV8IHQ{of7{}CXZFZ`5OVvuVwbD%$<;3c|1wDMO z+MK%vR9ekesuIBkk)_8Ps=m+wN^Ply`PKqG8CXPe=hf`g{Oq*@nt(?_zyoA9$rX}k zJG!WHQPKF_87s^@iyLA+P0ok)I3z$x*7@uga4FR+NXK9DYsqmfKl?>oi<>XPF8fQ_ zF{7XRGhD~Kse1R9VuW3RgZY*xo;Z7UeciUd`mcZ0SANC&zWlwnZ{2+9i5H%D;rZ*& zUc36PcRc;%6~U{|zUA!W+mEh4vi=BRu+b?hg{)DX>F^SDnHKDZ-DoW=l!|Nld{-)G zwEOq#S=|x|gGYe82bd-?uuK)s;aWm`kqmmsn&lNto^>e>f_vbv;68NMJ^2z=Y#+h2 zQYo*utV!5bqPW&z2&S$X>D^SR!;- zML>|wDU}UT#r86*2&F~1)zBz)hbm0yKEC5aJr9n9C-^8*QY$TzOo>^zRF>2l^9u5M z-W((XkU*pRfp7r=cYAtzTn=l27(8g)fWUPUo%w|F{KPp zw-1F(X>O>6^dqULB~|WfYCK#0BB4*j2IDm{elhkiD7asn2~`}Or72lzkxjunDzZr` z8gDsgo<%_q#ZF1jcf#GD^sdxU+^e5xwNg^|&#Q8#7?*Dlp^J;xiOqO_`-1Q}0 ziL=?tjV?8N3fbhwL0u?i3)c_nQj{%S7tW9++;hi*doGC+*ITdx33c3PYcMANdI#*p z4zH_bb*A3DL4>b9a~(9NK7IYDZcNQiHEt~H*}19N>&Nt5ZEEiN0VoV{B@^!~GO{9q z>CenFSjA!5SJp2o+7(rssu9BbXMggg#Fgx=zarOi zW%R*|7axE8vBx$yPj1|IUs`zi;KA9MdOgL6w7PitBB8s--}X4cyT>j(M)+>?(MX#|OU@b2uQBxg)dy%|?ZV-CH$V|i(z3hb^4(7LbC*PB0M zznWl^DfIHD&r<+EoErJVMq_U7Tf1wWAukhBpmOtg<2qk_<0b?Rvv6XsOWdKN9vy8~ zppfDDN#q`G8vzHY&60*SCFC-d-i8=|yRKhOIO%nhiAQiJF=Ob2m%0o-z zAhk4l#>5e~MP?6a8)o)UWQKAo*M(zd#y*n>w~6eZy(raW2>fwfcdzK#q}#^W3q+hI zrLt*y@V~TS({qfmeK!cU6v6&m>WR_YX3O{pgwBA2$-sg6i}&nV=gboIL^Dc*QX`7< zWjAmuyiUQbq*RY*Lls<@t5I{v)I`jbTY;qFiPbNdbbsA5Aje?UAA(rHni>kmL4l~N zBAjCoA=tfBQz*o!W1EH0wD}~aq75ImrfdpM@L-7~mWR}ni%jH#ynXc*qc5j;XA+Z? zBv}IZUev0DS7M7oBXx(?r)q?vI8T-fNbe>A7T~++DMFYrAht7LN=wFr z6xO}#dtX34BsD|%Hr2%i6W)K!#Zemzg?vcH!zNY@j7wJcRVp15hEdQA0uD}zR4@Pu z+nV1=7=Z)Pt9v=RIEEXBt5*+eH5hx7<89zv%6=fGaQzH2mlFGmP1(`x2M0whjbjyn zh=vo0VzqHRIR9&M=y1;%@*gm z9fS6$B8Ss&Z(;UrVy>M9k|29g*v=4+NK7Fz#`G3z!9*`J8qfnKWNH*ii5{s46}U_r zsgQp7(1A8WACy3hs4BJ9m^`NVmejce$Ts(Rpahgy3xXxwvuwD8x~SbEHNvS0e!{$A zda;dS;nMKb;aN;ei%}^2WbW|Z`}DIR^l+J5O)%MQu#Xuvk0tTA{>9M|5E<+Ic4UW{ zN7t=#WkAiNLzOb6!?Oo%t3(9sF&%8^a!co>*n`mah@XUVACFtATq%%FeXEXDnw8Yj ztdnF(QByYf1PnYfcY+L61S_hLREV9VQI%`Zm$aK#1QVTDlj2uYrKpGlOKjJVqi4lR zr8lk#91T;`(HF*k>nry>uA9%|e1C}!Jc5^ak82$t6V99DDg8NLEiTkxVPSSwk;b-l z?(9Pkj!vCiII(cz{-HQXN0zz=X6I*xcLtPRtJ0aJh4w;=do&Oa$1}o%5eKG%FvdM% zsI8Ry6)e=gBxcm4m>=QBbp$jFK!)FVSH$)Tc@F(m_MLcH2=`*n3#fyDvy;pD7WD=k z?Ny_g0ISPwa$-W*PH+$i4F`!rc1}n^8*3SzjFFZjpSF(TpVC1n_@RqQNoR7$ogxL^ zOC*PoPm}6+v2~?3^_1EkZRIJ8;zAK{+-eajp^XS)IudJ{kUp+4`vinzF+t&^9xWAo zOZ%!+2Pq17$9_R@13j&`JfGOnq&n{sggXG}Y;>m}@8*+7v4Ur3A7dWitR{sqZ4y~bE9pQGPLd2%M)31A&b_AY z6V&_=xKj(cW)aV$h(Glr1Y~DqQ&}khccN}&CNyX=sj!k1D6~NChrm5veDcIos?9Zg zqRAbaBrj-N>YOr2W3gAp4g8cQQxaRseVj-)_(u!{P#a@O$ArqwR!Tyamp~Q zks|+|=X=~o;(I$So5UJCr4MSI`}(i7AZl;@w|e@&(~VDEvT8r1!_VlchjoP;jl5T9 zn>z7yK7&LQ6zWG+SglWoWb@XiY69@N^(k7?hcWBZz?q7h0V%9FZbhQb-ZXSe&#vKg zQE18Lt~-(CMw0RvQzq*sHyUwcU_q*emx?zPB}s}>!Z~rXAiGJKBhVm)x{mlc)>%Bk*(NKH8LPk(VIPMsJ= z_Fwp!H#zgq{He~If}0HRzpzFh{g|9}H3S&`!bZxt!T(}UTR^?jTK&vV|KtDW$N$l% zfAmLw_y>RB`~Kl4|G{^E?7P16!{7QX-z+fSmw(yIH(z@39Zz3=;%#p^zl{rf<}^jY zk1dyq>LdCiv&In>>EQRM@GzuU&nZYhEh@QL$O}r$A_}^_b&B>#F*E9J_18(WSy}9} zQsG82i|s|P+gkLi7W`!GCkj5=l-^wf1wZ)Zwt=#8eHSUeJ zT9zWMz2Pcsm=%vYK$P^70&#t`BuA)uFmCvMwKu?w?eWdk?iyRxS}V0xijS{K4I$RO z8t-e>rNUH+(tP+*1o?!23;;;*-4P^Eaz=sYYbS>d!vA3vBTks;(3fpbx{8S;SncZ2_k-W(75Pvkkhc1$J zIgY%M!^sZvRkM(H<}>-!NPJFQjw9mMe8`J195}EQ@{SO7S62Bt=#bebJrX}8t}%8s z86isY?EEqRrahYP&cVabn{v|~;)eTT$T*bb98zSBN*@&78&bXwUyAsuSRbg4Aw~J* z1Nz)7Hxc=+Q?ejH86Lp#T+WGOCqwD*aJkHf0Hf6Su=n@?xr6M`&bpaqST z@JyM4oa(8FvMcJsv1P5+R+opzhD!%Ktyzq-G^LbO$fNpbmP@UTc`Gszu)%nyG#1KA zc=*ffYs*}`B#&XX)x7TNX^rw^y<4cxlpqI$8Nx`pY{+nf3qU-VyZ7bmC3L^H?3hR_;lMQ@J}(})qYL-D*=;dj?@T{i=jegBuHvLX|Y1T!GV&b5_w(f zbd&CB9MyW0BwCK~+gfX9%VE4ZK7bUZNyzdw%FWLy9)lBrmb>1p@Fhm|-a= zNvSz*ca|DsDQh?_0FRMDIeJdOrWTUq;!XgVv?2uI1n%NBwlA^PXj}fy;ASqR&=EL| zJYZ!)O%i-;!xP_g@4BSI^OU-OG)Qyk0k*Jn4Vf1cY=_;1(QprjX#f5(nYT{}Bqg)# zI}M>u;?NhJY}P4`&jd~{o+A@R$~&1ek+Trn*28TTUT+Q0kh`vs17lT?FxFPJjD0RM zncxM{OePj^F%r(y@&NI2ZUS}@v3GC4ieyHBzQJg{D|9dH@HCGpuEkVC7HA~}CL^N{ z_Mj617X?=lTenh!0te&mitoSG_m9a<8F@A(llP3j?DO9fDjTRp(XQOV8=9&ILSRdN zFYR^@qyopN-Rmt0&cSsX9)Q%a%n~*EccThS!nm0Tt8i;BXXPlY2I(yY*WV`QJycIO zvajbg$!TN&AjmR+Pw=l9baK0?G#Ta@8j{F${0u)E_*pn`3_NI{dlC3aU5dtN?^kUq zwYd>hg7{7N6T)L5D>d~SzQ|v_GHUt0$!eGMj(I2prrKGlK>3ht!4#qw7m+jqT6k#c zVG+KUvTa>cwvG6GTDGlb%C>=hNq)7ErFo$kTO#afYL)PA{|eAV5#PgjA88C@T)0if z*hJ=@r%7g|&Mk%J9LAM6c4U$p60{+(P`(WUAC8&Kr@-n$i6hbQj@5e z{>n5eP6iZmQPMkd3V<OFOe^y7nz%K*Pq9cuo90QJXo(ob~Z^a^=^G!d}ji%!s3DaoS}lPs_9y3A_XS3z*5DJ?q97S z5oDC^Jw@1xJQX6pP`W3N-T;(-lK2nzlX~0op!%hewWgot-n&PMjGj>cVHEd!R-CPt zC{S!sf=Oii2fDs|Rz%5OryUC?T>EMm2wdJv=m2PU6K16nd;uf61A&} z6xk={Y7&XcG&3zMja(z4i;Bp=J(aQ)`xew;Z@Ip>I^<@5i>nn=(+J3#*);INrrgnw zM{C~m=DlEpGI$p&lxUQEV2U+%x$%x0$qrb=6rZAeG7pn~Vem-=+v|Vy`tPIB-^Q%- zJ~L-<+!c7Wzy$*ezL+9-N5#EFU!=D{o2SK~~|Jhh--Nh!~9 zg*S=B%iMzvC^xzhGgZVcO0<8GGy_yJ^fQ_Sq9Zi@3vWKNW-(CI+|H-1os^ zcb$NmSkcJ5BKLifs)yXDCM&s;6bti1H@CMjXW8Tli2|29>TY^PKf|q~2#>C!?*6#B}lQI12~|*p z6*rNELby&=3?7GIg~y=7^l*OssiT&4l$&+ojp74&c%;7gD6d^J` zYTg3P!?^|K!@S6qjC-+vjIO{E9P0WgH_)(owhqjPj>G+gQw{Ng;x1bbMXgEQu?te0 zAR@{^4R25G+rWKx#XvB{3()_GR#KMF$tBqExwL>Lln#ns(<((O;TK~HYL-B>OPI_; z$&}(FGG;v)voHQ}$3m_lnmi6_>g`CWgg@)iu8bDf*I`o)DfA^bu{C$X=`5s4cMApN zL2I>;uZRMnjJ_C(7>F2&)DNdiHshNeu_+mn#)kYH;_D**(ze?W?+5y zhifU>!Fb)EL=x#;T_--b;=_+->=|eRIk*bl-Bc`Pm{N;K3cCQA6Y9z=a%H-($PI5Z zvCqxErECIaNeO++l@}cgHkM=@>JAQYT$egZSN7h4o31)E^z zEr2zh!vKXymKM~<*Eg3(A|*v_uq6pv@8Ak+gGor-EYKI`=awnKdZ0bGHcuMypxu@` z?7&f?$5IG_i|8(<7Y*VfS61^^*SoZXUjgs(x$(y-%{1&^jR`P9VguyjeuG5OsbsoX zfa~VPi(EFhbR)sVJ3!Itpvv`7uMkfk|NgLKWB=D#ACL|auq;OL1UM24sYuq+WW_bPRU5Uy*ft@8~kV9uX@W*8{YGrN! zo{jwZKvHaC$te;ZMK`H%YN@ zv7y^pLboHCk~|!f5gSTIEICuA9Jfd5LL&~i>xJiUn=Jj5LPsHg>X?*Qa?HkBl`dP9 z(qrP)R;WqMloYOQ1Qz1sQaz2)!o(loLk&B*SCE zQb}FpeJm9`MbF+YQD~6vp45lsCTpl#MmqgW3eLEcH}J5zolOTnwqrz)ywLYFM#rn$ zOWXqrt1n#~maPaH=4Hwk2;ii&NAuH>;G|n5ds>@B#jHDZ=?|96X@zU1mxT8r{!=z< z57;9vwzM=~o^RG+fO5_h`nE2{ozm=VsWT`bDF{f(O~IIE^hb(4KvX`NWsG>BXv$8PIr=#fzQ`Xj zqe+Z3Y4RRv^2PuKeC2j+y}u~mbWbil;ninsfjG;8wcWMB!azl zQ7DU~dN9PvtKbR8ci2A{=wKQy(^l+OxcLFqBZ}EL$#TP2uVhz&hqBrJ!m^yZ)CW_r zq0aM@k%HaAxuzDsNJ^U-(Xz+!$_>K*ezgkW0k85JxdLe+vA;;1SF&`Atrl zhsZI>Cy^{A@?8oT8L-s2vMp}xXoFuuvjURe0oUQO^}Q--5fFkuLgUZYXVYR%_o$>b zuJ&UHGNinuMSq@NcARBr(Q#Ui^K_7z3KnL}mb69_0e7~{nc7<1Q|5OuOfF;DtqbNT zf&Z1G&Dn}akJ^;n zlg_x$hT=vMtF>jTm9xrCYqdL;C?a7d(na1Q__~WI(wT!Z{GW|{Kgtzz>0*H~&3`jp z)B!UsZ_T@Cb{*W=jlFwj$8cBlZYh{A>y!g%yCk`tF zmq>^q!i1Z35I2kQey3jp`qlV|Y0<41mobi__&QTo%p{a9v_Nrng$0%@DG@&&$ROVE8$4N)A5T9>KNYDXvga>57nMOf##tvZoWIidcBj3i z)@ph!qtQvBB{5^Lx+$qm*Vz&PaZT=`3(-ePB&NW?n;-y_Ac(;vHv^Jne*nu~55y8{ z3^R@CCw;rbvC=w^2E9cdze=}DWCOC%r26nU;nyTr81XFjpfUf}`xr065L}X%F)vfF zZ;5{fsyd>EFKgWE!y+h41y~9ipl2zs#_gfH!%lf7KfkbW+M1p1R2CMD4J0=Erm+pN z(8R{o*tl|DNDD4Ky%P>ZuP4CaC$~^65-=X~Ex5mGfUC#bQZa#NB_f?5XM#+bgf1Uqu{x=JQ!bc0gQv8Whru1~_yUO$B zwetJQyOp?du<}UddgbHQtJP0df2^izquQqVXMdrYYaVI7)ciMde>8u5{u8b9t)FgJ+ZWs4)&BL)W1W{epFVKv zz-JHq>f+MkXS)}>pYDF{;Naj}4}SFEFB~c!`o=@MOQ)7Te0cTfCzg*df4Eoey|eeJ zmHf)LuY79d7gv4{6l;2QdG*ZdPpt)OZ(sW~>gV6zcj~^+-e11|1NZ;j@ulNuj{m`l zGaG}AKjJpYl#`rg7P#+)+SkuJEr>3eEC ztN(iZ-c|GJpN-#pZ2z|}UwiF^YcJn?^{vl6|K68&Za?z!&DS1z`S$bA&95%^X#dH_ zyj@v2Iy}1CTNzBYJ@MS_S6_Jf=6tWWvWyVj+ZXfbntDyW!0XGHGOwz)s^=(z_+IrA z^7^)V#B6=dEN`>@IZkO+EhFIP)p4G0{C2u^1**7EM~<>@kN1N&?e_$~bep5SV19p| zy<|W6UHNBIVnKB|`~xzp1tdR6!J znqJofJ=FK<`}J`EybZ7)ap_0;0ewb4s2|b~>qqoivf0k*E&Zr|OmFM+`T}gk$MswE zTlL%YMSY1`eObR`dR&)zOJ9wH`G)51^sUQqJBxg zN8i*h>s$I2eOte(U(@eZKcK%%f4P32e!u<-{gwKw^k36|U4OOyfc_f&H}nVfhxFI# zuhUHkuHOnhIIv@7{QB=k{y%SM1!%y!68JH(opX%zIyY#<~66 zt(PNtIePu&+b=%%Y-rx!dhe?@ChuN)$$94GmtPDRhA&^=x%OQC|Lg49n%g$6FeqL` zQX=KVwbF)d3I>*&iU8xLiK8Tnqwpd%Q7`hXC6cD)5?GRmK!C=@vi#JS&SW@~{+5N@ z&ZK$DWB*nAodrorvD3_CY;(Uodw@OXJC}uJ85%i}F^yf<2>8R8htb-E1;+-Y<9JZD zTtBuA+duJKpV{l_G@jC=c+5`+J`3#J$O)s;&~dq8`8H2c#2-gxDVuQHVMPg_IMWnN z?O`@zqpFnJPQYPIaGFlTcrfwp*yV*OD#Z5+pJU*sWwO)qCle=?1*>#J?nQa#@*paNpwt@YMi|xtW;?zS z`6oQcN51cd#n2gfh95_Tz_*ThlnuhLV7bn8db%o?9B&<^&phV|i%{4Vn?G_aZcO|E zs42wW(0A>;HRjfFZo(Y5L?0j>Ofp!0V#L$66a*B{a*B!iIdu6j%1#{*d=I1iC}7iZ zB?=tojleuDu2})N21^J^9$sRjARe5S1_8olu`tRaWE+d@fN7K$WjTko$8)wb9A^0` ze{oKWVLPD}ht#IZb8DyWX=NHXh=TKoBQc^Y=dv+fIXdG~E3|J86D8GtuOcGpmk#|Py`GL*h_`00VC;5l5 zAMxU&w8w@;3jy|Q7UYPPGWlsR+r~u_27KZ_;&w$&kbKV2IbZVNhrKcO1Lq04J448j zn=ho%2`7vShvHS5Aj)9`8cQ<9WKC(pM~D(+704b1zL)A2sRF6YiXo38#~Xzun}uUp zO{-&Eh+?Ra?*^)f2Oe{ClQ`n*mJ?Wrb?8DlkD3j6EB$hTPy7JQC7onlc2YzyoeaWw zid-fjsj_)^jNmMrYhl3IF%NPB?z;IC7Fpv$ICi*eqhGr=V*D79b)N8ogCumUV#LB@ zN-|1vnXrYBQt-4KdkaYsw{oT-4|BxUDq6;1z=JX@4h@;Qc@)2UTAkPE+#-2yXYiCP z{~O8qfj&p{rX2c3e=orwq3Ehm9`w4Vsvdr&RPP*$!o5#=;?0_P&Fl}=*@K=~*<%03 zPiRmqOB>Ycb)lF-X=|M`JTKApUdxo*U8^e!-CkW} zx6Her_Uc-_HtVV4=m?@cv!;q2LOZ6ZCaE^F>1#*z`AiizY5gW?esk1QVa<%G^dgZy zBr2_y3Ed)et6%Hm+r?`l(=bgGh9l?5^3<%(|(Hy?Z^Z z)yTE^{)WiwVzu2k1K*OV0;XC^1LInYiIu@nWGrkT^4o@3)m1Wet!;gkQwC6hv3q@! zRQerhYEeI1T~pfK)^>f#eM!F@i*kCGOamsg;dfu{&NN1Gk$fpN;#8 zXf0DzXm%H~3TB4bz-_KbN>ngl!E8}&_tjZn6;+UCh%5Tx{a%u@JLYv!;o4(Eyr3W6 z=^frng|#~5SEc+#JyAB=4|>VQ1_H=hVxvJhi%f1M>-15Szk%c1&?049oZRRhIsq1-;h7t>@mT-B9CS?S*I zi4Co#cEuW!uZ)fREwzvB|3yE=x2m*Svwreop&{Z%?N!k9Blvc;VTfyblA&=EJk$7+ zo@8nKv7Y2;{E43AX?$5v3N+UAWR=FB>PeBtpXo`7#$W1SA>~~Z`e0a7nKGO5+Fk_jCC73hYwhAB}bRN8_vTk46pt(RdyH(YOWw zXuJXcX#55IqwzKPN29K*yRv)?9kgEQt8Jo~a)DtKI^}9p7e+%EsKVD#00+p_=a!+y zb~NgU|5pQPXo#E3&}KHp>)S~_bFJG$BclNR>LN4GF2A9xZ%KQ94ZTeF*=~R)^IY>t zu5A8O_W90jZ6|pna}6H73IAd6b1&(mDAd?Hc0N_o*U*EvUbZkSLp5YEwO+ z!UvTf&1MJM0UAvYCj=TRy1}gs{;41P@1R3%qPXx|s)$m%!DmfPRd;8&*E{FSYBRlu z$l;#QQbnJ7#onFX(-k$V)}F51$i8g0sDBpGim@Md)b>%ii00)oM9;`H(&J*K-M2N7 zZ8IA!Y^BX=zS|LtoSOhQ-J_SsHN!w&oK3xnJR_j}GJFoYUy4$T4F=aEo27rtc) z?#OWQmNWvNIIE~bp6`W>c$YX(v3vf;oC9qa)VwFfqKM|8s{7gjZAQ`Bm6VYKb4Hc> zy{5X0)0Hfq3vsh^$_rbVeT1duL7oQc+2rbL^T@zPL%ct?puGr9pHBL3ySNDDZS;dC zv9^zZ*#r{cl$661$tAMr;0Wmns&)i1=m zZq9A&5*Z6p_sRb{F;6DW{aCtu0GF?&#fc{c)Zx{pcoVhwo9~c+gr1AHEQz6S+0scZd1pZ1o1p1^y zfRRoMU_d$qEYcxhlMVr{i+7ha4{0K9Lp+k`1E8_YCy4hjadh$CQu}k7NbO^ZNZXZ& zR42OFU8;ICk*dB#q&k&|R3GZ%{iSL^6R8?XM5>WQq#El_@!E*RgIB8|idRzeJ5JKDoLeR=~a?S-7Tq0QcLQ`bhlb+Nj*J1Gu1Pm@p#5~8rzHw#^W+G z_KY9cZF{f{I7xvG0fS){XC23v5J9pez$QC9lI*g%AVSE!F?-p$z|AEjH&>g@683&B z!R!Kg8TEdDr%F9NZ6}*gKA*jRT(#Vrp4yTzrOuzl0>)S**^2;J2(IAmor?|<;joxlFa&jY?6*>vxl?|gidqI3uDQARQ!xbw|-ed%%Q z$C7mCHzi4)+QeD`sUBw`IFIg z>*cL4$V6Ylb5L@##XIz+tuIImvb2Ss$s}sxS4N*>BIR?mAZ0}ozv-5;qy>@Uqaj`7 zhST+QH&U+ku0N8-q^D4);~Kz~FbKdPtVY25fwZ-?^&jJ$>U}711)*p(bfZkZqU06y z+?nzJt9wDaq*?FpM(It`!_qsY4@n=BJ|q3E^mU5SF?y6fKFN2p z@2u}p-@AR!`+nbl$p35p%Yo^@PX}HI{Jt7h52-h(pHyECE(b3JKN5T~__v|8&;y|t zLNA7X9G(hqgr5k1A^hXWHIXMGAB%h~dUy0=(Qj)B?U?ov?Ypss*u$~EjMw6K$G?@3 z6Za;*o;;TNfAxSqt>3Iat^bz(o%Bljf%J=+aArC4&P*?x$R5pp%UCl$V0=60%YAsv z9DC!~uZ&Mm_$F2+-ZRn5`|>OKr}KYS2p0|%K2o?`3>Mdlzc!hlJU!W;{H|%5H<(YD z7tLQWf6M$m^W{>ubgJ}pIbU8b|8)5~m2&0Xm2Xewr#7cPH1(OO|5CN8o7KOr-B5d~ z_PN@h*WXzGTKzlIiRoLXKQR5LGka!E&pbWz_1T5lch7!pZhWpb*PJ^rcYN;sbAPs{ zHy@ZkKL4KikIjD$m?I0C^$YYmAeSmFe43=iwa=(N>3hvj2mF7s_8CRSt@LSyll`3h z88tvJuYCq6`n_f=*-F-1$x8A)kKKJYy>9raB(+ed0^AoeBKyUJrDNQj|@n?BV7pT2_kkF?R+NHMY7+3=%Q0GqK%AKWu zr>0WFcLw7j<$jY)^Sdui_iSLB`_U7HP%NYd{;Ok}4n_SG>FsU}I) zOsU;H;Oibx4$^X`navb^Mo}>W*MgTi zRmU<-UCk8pGqLh&Ip_Clx~|EAiPCC0(J7XK&sHZUn8cYFkiFzcamkR1lBBnqnRJZs zB4yHnIqEjs%e6Vm7`WnMzWu#gE>W6(?V)$Q<@%|5bM@9+SIIf8m&OCKx>#M=`)8er z+&#a3aP_T{6ymypmkyw)QUnlmz?hesQkUUi{4ioFjxNT{@Q!Yhp{n%?x|v+=>?5Pw zYG(cQO0uO_)MN_-hR;Bp`?_|?G%s<--0PNk?kxJnW7fby`D0(~_ zG_H#T_Zf0%ZO!K+gZi=5&^&X72C3M4R625m)ICSS{<%3t@gKn`;Dh;fApaDk8Qi01 z8T1!u<#o2rJw{?B(`p+)trCtF?t!`7%b_?sx@Kv*ZS~Ay-|Sgr>DrdW*@UynH>TNV z)G|%U58BYD0s2;v>e8ZgL^=)3YGw;m5z||)?Wc->%6BgG0-;HDuLTUfyId;=GHD}I zL&;W?F+**4y6J%0K0tU&r2xIHSL;* zi>2}N4Z7utCvI6eT`1+BSUdB~GrWdJV|@kpD!@AQhR2ogbVB?2GwhSJB>~6ymK#ajUZDCo=JfZmel6)5UcZJ~7lX`1LIpza z2VR2`w_ELc*WjVV(PheEw7OUhYEdp=@(a{8RLnZRMfP3c+ju_l(e&HGciC=2JX%^k zx~^MCS4+XD>gIrgnWf?+%9(=!kNjk@gx9>JXi_ejmSvVGqy@Kgdq5G$@8%XT1nr&_ zSTYAZX|PbPlS`gVH13I=M1*`+ya|-Tl<^t~$n7 z=g#3!y({1I;otTAk4>W<5BE@<&4iV(ahSuN4TRsZ)-BWAl12+35C6Sqaz=HMt?7+K zqQM8|-vo`YEpQgo{n*}BVDhds3^Sp#s$}aYm19F4e>9C}ZO9CAUl$eXDn05^wiKO#;RSV1P=A zzM}+L;%!G%#dUyYdbp_q;+Q0*n%Oj1;BuEKQr4iF(mVjNQ>W~cpMMhH!HN5_agv(* zmu_CFZb?n*iS*ascVc`!O;UCE?9$E6{mm_KSl^Dinfu+0+L?Z#{*Hj*-q(<(j|g?Q zm2EXU^#x1|m}EsA5$;Tkj3P4#QQ!b=m#Ed-Hh8l>{ylNV4Zb%CEFRcZecGG}`X*9| zf}tJ}SZ$^C01}Lu$Z>r-Q;z$++~eUSxi!pl4f;34nXrj0 z8c?^Hln_S1y1+x)rDTapEFfS?zy_FimjjmL^m+qEyo(zfmrV+VG?z}=)lSt0eF6cs zu(TwXGoUAeS(pQ?D;DugcYRs0V2IEgyfIO&PUu?C#!D8)PV`;B8b5--4`_!~w4Et! ztAo~Lo1Nt;4`E2MF)Y^HbNAi%+&>7oqs$IBK(U9d=*OmqaD=^Q`NwyaRLoJmdQ zv{~}UGgYI0a5kO|2S^F!Qno$cYR#Woo!(!F;gz1fx7*$~t3*vBJE{5VzOWt(w@b6( zSSq9hw5&F}GF{)>ykTrA&;3VxJsB$?tz!l&U6yAVUH|^}%CFYmfoN{;?`v*qEF|x4 zZ4a#_^VORh%WD4Jt>w0wz&oZH5s(MajP4@NxKiWdMXdZyUi}xzc1evO1)_VPnUG<6 zz*JBGmXBN^vF#Dc7PE4Qk<{mPb$OFf1dCwk*cM?quyC}wi4$W7zLbWb!5pz8$ z%|R;VnpyUNm|J(HBj^?*v503DniM~R=w`ZAC;%;^O#_AnvZ-s1ZSuVX@x|73$7;~V zaB!)?E$Cx~vP@&!;vRQHMm@XVXxM$6B&L9DjUtwnSxTM&FP5sMc4@bCqLwmPbD5GK zixXYMLIS`cYDE74#vEF#8sHc>J+sF`FEUJ=-`pp`C7CWuQV*vAj{v$+;vpGWz<6`3 zFUDgeGntS8B&_llOXqbQyyUCuw&aL0=@?zL%h={3e-j#tTEogngHAGG22exF5Z8sB3p~OBe#E5;WEW@`J~3_GA~ic*p3|E9-0@P3D`}wd zBHtwz6#vLWYU12e=Mw5eA9+ZTWpOXd3ZC$N-@PYJ+*8 z$^0zi#!VToA$k05f>LoCf%}54^fAg);Fzo|wp5R;%u&`Tb-ErlGbI5&SK2^dsN6gT zpGxf8lJ+G&#rKXweTSqzpD^>tpU&l`-ARU&L14M~`1mC7DGRBz4ExS#-E51xo~i*H z&oG^2>OEq6E>^o(1&BZ^=RcfYUq8LxUp%z9c!+ElunUwMWtrvx+3Tk_IDgT_u>#;f zDOPMptk^}?D7V3vc;M+f!Bi^v@tq0`{Zt?n9`?hbz=d15YJt4kEuuT_7&@?V?4$!b z2Tza!xA{8!)# z#GnJUudKmg7O7+9*Mi6Oc^a^`xBApW{j38Q+}U7Wiv@+X)ov+32F2K^hOoX{LQ*9O z^`H;29bdbb01+FlXuD5l(%$URa%i!YhC6XM|qjiGkvlb58 zvb&E=Lc5|hpl)cHCuyT5OaVwKh&^)%re>}d%0kA_7FnEO?}l+@hPKDigMqH^u6?s{ zSrE$IRa;0G^E23P`>V_k*W2+Vx7{_{D;p~-8?V;v=Q#sX_pbVlS05Xu#k=b!3_D4$ zR(H?3s@?!3Ea-+}d<~U$&NP;R3WDATFYSp1?Tt8-a)+EANPq)G+D_%+N8P->G5BP9 zRuy+tgys%8jWu~Nrz=_l%TRc;&u178@W+y)s1zs15+79gKdfGG8jl`LfJV>p7#HP9 zib054@Ga7TfV`Uo$$MV6IvNbhr;`vf3eMdSxY@ z4vrsc&SuIpGv#o^7n`2iV`hha5bG27Zg8n8z{4is@re=Z3(Xo@`!u-T5 zvG2g-#2xle>JDV^ zpeeipMQ#N*T@-@^F0Kx}R?^2Ua}u>ob7dOHXYXo3ma^BXicvzz+BZorZS>>WLUr@%=F=FsSO*tRUJ2z*eNs}nlZ!(Ea&0oxK^ zIcu!5_MyA)oHE<8Y%;BltH!3+bC`TdOs5Azj?jRk%hGY_3|e~CsAQ6zZl`-d#;I0^ zw2x~Ca9BMGw6fv}=~#I<*O3Oz9a+#6SE*HP*DK9d(}1v~!alENjjYjW;k;vHy?AH>7gDT z0Qzj%7nDEzl&xY>`Jz$NoGHarg%q)zg^VHQG$=&{cEjcc>koLmFkZT5Mxh)EMai>q zj;2}&u7jS#Vma1TAIjNi+6QJ&(+3t1K$tpV(Et-du8RNy_%<$8ULBj*eyMlsnKDKi zlVn_tS^b{rID0D<(n_%KS|f%&f?*B^U}-bcCtHR=JMfLy3R{S;!U?fbU;=5^Tu`kY z^T{iv=QxX%l17!v-mB)rTPT=1uvNooot%bA`2TAf721LG%%h4@Sxat9jdt}y_G0@2~w^G@S6M}LiFy>dKYQFTZZ;?lsk8A#iv8ONVQ zTf?mvu|9vB;|ugkt0-e}Vf}RA=L!^|)nc7tsxb|kJ8i{tG=_1gWR z#B8AwiF6z0Eywl9LU(^VlRpw}dbrVtY!`s{4T7)GzuOgE*bQI-Hdvpmx9SxYMo{QT z-8#$N21q(|br?|wAW86C;oRTY(6tTIwgw>88=AiBv1i*LT{zj+269cyGEsbV2lD0W z7+4oQr~vR+Roih^vEu{`7n*kaAloDlQfrbe%#-BvST6PV#|u;YrqZo!WpyeaJ0Kn_ z>1FS6_}4;G`c)cb#|qU|R)V>7{J?=2Uaq9yE(9%Zhsr0&yFKvvE-c~4r0b;(wyse{ zpopghK#_)0y^laDyX^H~atI2_6cP)muD0-0ug$>)UC#uN*#b$0W(g%+xHJ9UmEJ)Z z4G{T(xaB(qGkLz*6h^Hv7m!iphJ{?U*f|N^A7b?M z@FMk1>r0xZq?BajoW)P)B1t@H8XIJ6Q-~JdQVi|72xLdg)*{zw2Gd|b2fwt?-zKQV z5zH~7nA8??ys{dTDHWm(=aU`5T1zB_WUW4B>CjYZBX>et(++tx( zS+1nP)de5J*fZ9dwPrh= zi+G#?QFX@+6azGaWnl~JL+ZA{KZMZWjm(laS}<|T-Vk9bdF3pzp#@|OZdq8V>fH>B z5XMM+?m+;o77E_T=$fuI#OTnfJ60GzHdncY+$>Bf7*HW!`vZ3@cyRteOA#G)2jwrk zRCGGjm-C63OyX+DLo-42H zC9h{j-&dKE7fd%x*WBwkw{1s9Z~2F(gf^ z-l{V8ftw0J7r5s7GvM@KzlYigRA%LcV5Na%ctPqlX0k8!gRy(5nt3lLD@-(yvHAHe! z38;z^4Ep7u5@;YtQDQ+T2T&8_AleZN`mVv4K= z!fH%W)DUVR3aT=Nec?zPy;Q>l6+_V!13iVFLp~Jn$*Nz6o`V+1zF;yaqoF>SU==>d zkB0KF_>@>kfiFVI`~4wbCY}gIxsd9kF;aqx3}Ep9Tq`^{QLc*oa@gm`?BEU>PK3J? zg3~-K2ghU|ygpyY5GpY)NfIspk z$0^R1^y0@q{-Wb>y`bY58w;|M8+%lcO5n6?T7hne?zGWxVS`ceAd)KzX3G>>$^aJ= z;tq}hK_u_ncHhDyfBVo6Elbpo*~8e!h2GR)AHEI=Z>Jd!Vk&}}@P!+-YqS`Yd{qfQ zNDVs@ZPtT5MU)`kOgE;db9`z%?>L3eKMA?efh(l9+1q3Tki~^@T0u!JI6ZBluWvhb zk<%}p`p(7U_uO;*;*NPtN@dLBw(JcO&A~1ZJ0N@4OKPh*Nm)qYaH6@8reqieR-!5S zNGQF>M5NK4G&oiI`E~CjZO37#&_uY)g=KpTQdq7Gl`XOW!!pz?#9STk|*5Rw=<%e6Ng+-n^fOU1IeR2;EnaMC=Q981MhImWR7 z`zV29ee@~>sI$4Q-h$lFYIZyARzOd(Kw4o16E`S{ zo8-=yFIowN6j|nfrpP?jK@aloLO3kj(a2aXs@)-%>oI5+lt?WsCR1d}k;tCQ-YW=+ z=_L}qi;nZ%Ljh=`DUMw*1BceT(J(&I&hQjTWBaDBsZSJ0&KIiJ?^zrJV=zarp?kbu zLC2Zyj!B?aQr3VNR<0x9hyS>XU6-~C>I*EP$Bq#l>n5~{1%hRnUsmMGR5vy?K0Y;0 zzjUnIJx0DMI%ir$Z$@hPqwhY7rQ1dfd2Gg)utSi!$9{!3ziFo%XPC1tYd z2QJica2n$&mQI_^K|3w7OlsK8QRT93egV-G;yw0cv(K}R7dekfKJ&=|R8iX^XxL^C z7iO9kbmS|3HrLlZK+jARHQ@ro*}?;^B<{q+V8n9!$T54M<0BuMP__p>ldHzp5npr1 z=jye22s$owwG3~7ly~*o^~C>-7Q1wT@zI7} zj21Et=AjmY#<8YMl{mZzqKD8gIp_%5RX4*aDCOq2F^yAe`zuamKL&3)=YTiT%I=h$ z*)xxvI&x&Lw5nCdW{b^cadOFiMT*H|=dMWy>qNw#zy{#SCn7$Xo%ISZ8HOIRF=w8W z%_ghYKX$%x-m!Ti*s=pAO14M?9pjjN%m>FTOu}xs4-u9Rfks0ual3VZxZeu*(7k1a ztO6S=Uq?k+uySMmScvI#LB{yP0ZNs!T4${jGYoY~kkxt@G?2-98)uO(veAT4=-XPr zJ%4X>0})w+v(3x7$-HeMXM`s+iY@z+iFiB|P3dELZc6iy2T%cZF3v0>r>{!N( zMndr%R>M?!&}D*$ecBA9mnK2E%@5YI#0g0hO?t! z4#cfo@sReX4y`UM9zJyX>=Ul{w158C^x2z^WzxZk8*jL4`q=Qf>02M0+dH@Cb^8u} z^zTNlQyzbTuYI&&LaIVWng<;b9_=eKC9hRs=qqq!dlli$!lIWkpwnS@H ziWH4}I-Q@5WlKihoY0M2HsMcvu{jx1{Gn{YG_y_8GH=oTO3TL2pHpwVKAx()qXA7a zq=n&ldt8pDVj5h4x>|_FNXe$s6S$9Q!JyhCIy;e~Z1(POXfDu#-YC%|{e(U#5wM{l zU5EJWN2Iq)KQH|ojK^N~tHR7t!2s~F+=AH<>xAbA83=Sk|2oy>TAVUj7)-iC09&L$ zh9z{A7iB?7RJVA!T^Dt^>HIFX!YsEcUM>S*&M4w@x6?3)J1PTGKzc|op&r~p^v|ei z4`b0d(MSOO2Gs1ZsmU;1k5Nj7DgxVv2DLp93a6|Z#00d#Z>VW{ z3qrC3wcENV;x@^~RV>l?@CSnN#gm~a2qrAL=~E#@1Y8_mvhB;_3*^N(R6y4^;X%gk z3>aAvSBvdruX!X`nOT}i^=Z=%{nXu)tztT8UlirHz6u$k54qo!VPKG}wb#(}`T+$e z82!{*SzUnJBVh14mJO6ZVmZJ@M0Bg07Ccle_~*X)+}+1Qp=7Q)l^&1AGfR_)i`j~* z#9lNkzXugO^HXl-@1 zmbu|g;b15=se}|IB3EAHh!6Eru_1Ox`GRfjfoH?Y^u}~xVO{mXt7}IxazGyb2!^@b zzh)G%1~_3HAYTbvQ{S~27(%KO(hGyjbg%3H_Kp1Y&f5?N<7V~t-<^rcfpadM7 zhw0%BXa`A8^8BdDE;t*uVX~75^Fc2qUV14pxZF4Ueba_UgD=fS;=@Z0cAvx}&kY-7 zIu|cG!@>FK>GxQ+%|0H1bCZB`4wlBYbeOq!7DET|kO#P412yhejBFY!2ceoQJhCN= z*#LA-xNhn-w5S7Kz;V4i19&z2cfe`+?Z-Bc%_V*Q)>HJuVDN{E@52e7&+_>aT|B{Z zimi}9o_H|z0(@>8#@Lt7Q!j8w$M$Qb`xJy;guA~@%41h7xck= z%_kmr#*?3b=Rb+|gIaPJ9d_rr(QY7H9T>CVZiO7q+f_&^MjjJLYdsbz{@~!j^5{!< z4?mZPMjjKh@K_}J*eC-fU<;BY3u9!#x}XdH94xtRNH}|*@CLe? zaUIr3BUu`wolF5t!p2rwpbnw}uW$t2FES*a;#DSR>r&*Km#rlU1bjgbuHF?ssK+3K-dA3t@h zI-AZ>K+n~(Q_fVm8wuxzFI~T|Qp}i%*;Db!US(+cXR_OPTotYd6j% zlXEw&9hhI-2TzC|k3@25qJ6`Et3k+;vxQ$|PN2K8nm(fEvXFrVw#=^CRW;WbL~Pg>x%@jK9q1d9Zo4eaC1csri&B#dK!CoGnH(u z64v|?H2`menw!`I%RcD1x%GYY^Miuka6~s`e_gCc%omoaShO`5PwE-4j5@VdP;E7X z5Gd8mUB()^oXcGf1~2CZ{ma;owgFP)SeGs8=F}CU6*c$$oZ3~Cu9{o^*76_yO*hjW z{+B;W-jKW@^(~r6cHx_FaR|J+kCoAeb@w{KfdML{wOxaxxd268&2mrxo4+&5&{A~m^i!uX8bH`auK{skTm*c*XTyreEk4zr zI*k(4f9NEN^f<)62NTE1f3It+PIiE`WXte>mzepl8_|mF7)UDaCryat@7_H;J`NXq_9@*ki}UxCq(n%&w=!9d+~%e zPnpH;I8=*0o*WNvQr`siwFLFWY>(O!#n?Ur|AN?~20q1`VwqEIZoIkmNTKk^^=B*B z_N~S*|N5%+zx`ilM(eE)+NOv|1pF!y+r*%xA*M^%#eiubc$gYSgzZ?Gk<*}$`7p5> z#F{V@*4k8UHM7%y;8>T6)BM8#2^33At<9g=;Yx7%?T_f=^gj4=N}x92_Y6iL8Vdye z-3eb=>q0AP%vTngA0^+;hmHEFgYs;pws7tGr*Gf4^8te+;-o>_ehaj13fhT<9mh8y z=HgB0FX#w^0%OX;Z3M$)y2gTuxEtkV1-SXoh zdL`x61wP*GKW4a##PWPa62&~501j^ezw%GJM!NWp9Rt{M;@s!o! zXOW0CG2lLgxlNeoKJY2M{mUAw(jn<6Vr)hl5E>(h&VKj`S^sgP{dn(X8|$Txy>Gi3 z4Bvt7wU@)Qpewc94M4VOGO6v^*hPh=nOLS*x-hUs`+46CKJ4`DqfhALV898M zz&rcHeTHoc{pJ41+hZK&{Z%ei6FV^3%qYgyZ8V0FRVf_a5R-+^v17JW@5rNrjH1>?8=FSg|J12Mjvd7wZQodyre8EUTy2 z$g1Hd#f4_Yh5I3JRNzAZxWT_p;r{9XB3GF?80<{)v$6dZ_{q!&sG0GmopmI}W!|hz zy?)Qm01og}o9=k`h1|nyDdt8W zyL(1patB$~UMG4Wv)z#5F^n}+}QXu=5`4X&pF+V}TPy1+FtR?`?IXozsp zKrTnf6w7%Cca9^r7rq)5LB%3!3;P~n>fj;}Lm-aOyR>*bmD1A_;fX1~ZABV-$_)4u zevE>x7@2T>e5~kGgFlOSov~6~X-`(@2(0kF$y|OsoX#mIW}$e%OzDk?W&5Y{;k*v( zd@S)mG+S=@Y9;)Z063K-nZQjOSQ=&d3d<3046KI=R7Q4R@YO?0n>=X7wCl8$#b+AnD;4aAglHg7>LeynrR7Is;&+csrW-B?D!H-Gm4J_vD z&hQfKN}jI(GlsX5UQGL(;JS=T*mC2p#Qm`Fx)I13X7;?#h6A!0w<^@bRM@~H8;gLc zf^7*N-v@Fb!FI&i=8S<`1QsyI;dg|uLfA8U0)9!V0%PFMVv8FPG#$Wb2q0}wUtxKX zofmNLW?BZ{gIH8}Qwz(}Enp4c04hdRP$_q>1f(yGNbhXWFmE}g9gjKChaH#VrPYcVUdj ztN#WP?^539@?r%jA$TpWNv0(@5Pr#+DvWa5o=%Jqyj9!j4uF~t{_wRKusE^%_m#JU z9wTzUZ&?Jx0Sr;@4=A|5OQAdN(}85$$(o;BeN zfQ1@gdZCy|CKGGZ^?9PX`t%w<6^qmLH`J$J&L(t3_VNk8h&Q@*lDD0|EvX<{MaM6P z^hGtpm)$qS+uL;&Mb&>gdhtpX*;9L#m-mFTh8WMFXGi8=1Ck_At8@TuFwc>2 zQ}dRaGI|Zq4&rvfkZKi_T0S5jlsm%kQj}HXWDw!cQpj?dptIHIV#!oCEh}Kgaw2B> zqB&L1Pc@>s9CTFdQbW9|mR*|6RReOk;H4#JrdS7e>S3J2iI5jD4PV{7ivdZu;{P=s-kPkqQ$ z>{U~ZI&^95qM-gG#rM6h_{c9FK1|a2=TDq?{(SoV??+Kr4&(CMaa-huA$19R{ZvH! zAuvG5ePjWQC2V^T~L%oYlksPtu?jW#5%#WA8U2 zKEHV~+X~H2zgwRQYmrp8G!+lul2|dqk?75<+Zk+j0tYr>bNw>X$iKc_uwwb@y69Uej5+rbgEyd*h0;2A%0$`C+FnZrwcy0L?5sw9+|Mxx2F%B zzV^V4$2Pz4!VAT7v9~<%#y1{1M9JU$o8hNKy(Vy;eW5HZz*gf}Pv8 z(nX(u9rWhm$Hgpr!53FO4S(^f)E)EfT$$efmD`=XqbgZwO%^}y#F1PaKfrvj2GY)C z+LhbH-ZeHZH1T6LoPlUj4xhr-L^uZ8_2m|A5mhD*QFd{nkV*PfH8WnwSY!42Sa%^9 zda<;on6OJ@Ps(iOtL@@UVImxqGnzh6rLT}bUonmAtXyWSw3IDmYU9pWJ?|?P{}aso z@ub<$o5gD?k&JDYCI!#y!}{FE+#G;4vdgOyjRZaB%@?2|9E9BLK(GQk!XvVGI8b1e zWKk_W9|B9mP!#8wNba_6TKdnV%!O@6=d zfzm?sSn`8~?*k7Z8v_sdckozd-Ih>=Y6p}|j^^Bx*LD0p$Id_ESbrgh2^Rvd8%s!I zSmxqG66_@oL{a`BBF<)w4-aC6IfUg+(&#`*%QUg%1YfezE|X_CSyCayk=b|CC8>`! zk92qn`?y6|fXl~5=}Soi$tb<6o@xm{PKVNVpVyzzS6CLCcIg?*AuzUJ)2gspxSLk7 z;}@G&@f%oK>}sfBqiaDHKaT|iCWNz11j%nY?zYwK2WUmC_Tsoa+NpYF&noXj^FE+o z;4{G8Ct)8hz*4mr>n@ETHZVK3>H#0vpt1v7p}Axl%p18(4PH3+p3%KdPBmL7WaHWQ zMvB{BKx&`ZGnqM5pU8nvVkxG-xLnH=rf2fm#B%nxBhkbTuiynbejm-w-ftMfzG@w z6BoF1*?tS#x`h4^bF1{ox?)u`#E^TV$|JDXc20`lnt^NdTcxS@rwX9ZhgEceP+FffoE5GXaQd z=wHJ88G(Hid!BpmM`%e1rG; zFdYVrb_+!J$}fGf)ez>TZAGOhe)SdJy}o6e{pCHPvOUYWxq^F_hNJHEQ+?B!yZ6>H zxaQ!Z8@sh#v04f5;ol2i9%xlg%F%f`&we2YOqdlRu^8WfeDU$ow?Dc;ic81PUQ4uB zs#3Q?DvUD&_+?CcFdPiX9H3N8`VEf~VmAfWsgUk*4k9|vy_Y3b`Z@1jLC^o(yZ1>! z8u#w~u(}`d?gL0akI^C@ha+5r!@Wn~zjTjxF9YsV-n{~-ANKBjs3+*%`(Yugc=rLM zpOOya7gaZ4L;N_|G89(!}2ChKShSgZtwscb9ZO?$%NEQItN5Xun60 z`hX-IesJ@x58rd{`~`FR%#7J=EOqyo#~-}weslfdNAEfN$RiJ;%t=&w0k54AuRMZ; zGZ*eT^WX!xyAd^?liq^b??m0wjdz`U%l&ua=BOxoL0lh3iMvFb7SJjayS~j=ROzO+ zMSLj#*0bAs>F9$GTsZpR!{_cYn+pwd)f@rFZF_!co}2p*Ht!SwKa8&4BbsBPTCSLz z!GESCox1DcNA7v>0khFqT4*#HNcjgk%N&zGTYdihm{<9H4r%-!1mKy)Hb88kqyVri zNZ3V05o|2f1hG$0lCaH#(v+brG{qdE6~__amxn6E6yBr~m8n8gRHYi#X_{te7Gl>P znit%mK}*!67A;d7w6#ks_$BUDI9S*4tIEtTELx{SbeOK8BXpFm#c%OnN5|;|{*T6M z=mt7T8}wSbk#3@!>2-99ZlPQ0_4Ee1jowJN(`mYcY`T-)L}%zM-9>lPIjpmL=w7;y z?x#1?1N0zm(nItxJwg}gE%=rH$LMi-E4_{0PEXKJ(NELQfF`_y-bqi=Q}ix+H~lQV zhu%w1)BEWC^bCD~K1dhopV5ctS^7Ep=ky%?JUvgpKrhh$1Rd!Y=_B+@)T58m$LN>o zSLk2BkNB(fYxD{FBz=nhCH*@62K_6#M4wjQ^1wYuml_T4y5wD(-nHdjm%VG-yLP;5 z*SoHG*S+3#-Mb$0u7|zrHQx1zcRlJ}mpu4O9{eQ_{*niO$%DV-!C&&=FM05nJorl< z{3Q?mk_UgugTLg#U-IBDdGMPa{H6!L>A`P$@S7g|rU$?2!Ebu-n;!h82fyjTZ+h^X z9{i>Uzv;nmdhlBw{FVnF5x-(yS|0qC2fyXPZ+Y-r9{iREzvaPidGK2v{FVp5<-u=x z@LL}IWe@(c2Y=avk62;Rj%5%2vIl?JgTL&-U-sZHd+?V%_{$#rWe@(c2Y=avzwE(p zd+^&H{I&-lULFCz?ZIz*@Y^2zwg%s4O@Vg%Tt_Q#C!S8zTS3LMD9{d##{)z{G#e=`%!C&#< zuXylRJoqaf{1p%WiU)tigTLazU-96tc<}dn@b`M~_j>U6dhqvp@b`M~_j>U6dhqvp z@b`M~_j>U6dhqvp@b`M~_j>U6dhpjh`0F10br1f!2Y=mzzwW_b_u#L4@Yg-~>mK}d p5B|Cbf8B$>?!jO8;IAJQypQl-a+o6$KmG4t{UUaDT>U?y{u>o-lCA&% diff --git a/android/app/src/main/assets/fonts/SimpleLineIcons.ttf b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf old mode 100644 new mode 100755 diff --git a/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java b/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java index 9c070d745..44acc6d74 100644 --- a/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java +++ b/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java @@ -4,6 +4,7 @@ import android.support.multidex.MultiDexApplication; import com.facebook.react.ReactApplication; +import cl.json.RNSharePackage; import com.dylanvann.fastimage.FastImageViewPackage; import com.reactnative.ivpusic.imagepicker.PickerPackage; import com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage; @@ -51,6 +52,7 @@ public boolean getUseDeveloperSupport() { protected List getPackages() { return Arrays.asList( new MainReactPackage(), + new RNSharePackage(), new FastImageViewPackage(), new PickerPackage(), new ReactNativeOneSignalPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index 308549e23..4cd59bf3e 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'kitsu_mobile' +include ':react-native-share' +project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android') include ':react-native-fast-image' project(':react-native-fast-image').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fast-image/android') include ':react-native-image-crop-picker' diff --git a/ios/Podfile b/ios/Podfile index 34e164ea3..c96557971 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -9,4 +9,6 @@ target 'kitsu_mobile' do pod 'RSKImageCropper' pod 'QBImagePickerController' + pod 'RNShare', :path => '../node_modules/react-native-share' + end diff --git a/ios/kitsu_mobile.xcodeproj/project.pbxproj b/ios/kitsu_mobile.xcodeproj/project.pbxproj index 22b12b19a..262b23f86 100644 --- a/ios/kitsu_mobile.xcodeproj/project.pbxproj +++ b/ios/kitsu_mobile.xcodeproj/project.pbxproj @@ -5,7 +5,6 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; @@ -110,6 +109,7 @@ F743ACFD56F641BEA63F5B1D /* OpenSans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 008C13A99553484BA0B2963B /* OpenSans-Italic.ttf */; }; FD2D5EEC2CE94BD494A797F8 /* libRCTYouTube.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0D65E0D5748EFB8A14463 /* libRCTYouTube.a */; }; FFF738ABC088423B91E45FD7 /* config.json in Resources */ = {isa = PBXBuildFile; fileRef = 694A904745DB4D368E2CB836 /* config.json */; }; + 8E89B77EBCA9429F8C758BEA /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D175092F95B42B6B519865B /* Feather.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -608,6 +608,7 @@ FD61A198D0A948A68EDEFB8F /* Asap-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Asap-Medium.otf"; path = "../src/assets/fonts/open-sans/Asap-Medium.otf"; sourceTree = ""; }; FF0AD57CF1A14A05AB0F02EE /* libRNShimmer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNShimmer.a; sourceTree = ""; }; FF2549FBAE04493884146CC1 /* libimageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libimageCropPicker.a; sourceTree = ""; }; + 7D175092F95B42B6B519865B /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1103,6 +1104,7 @@ FD61A198D0A948A68EDEFB8F /* Asap-Medium.otf */, D09185B7DA82492DB020FF6E /* Asap-MediumItalic.otf */, AF1612BF0E7648D38C63F6DF /* Asap-Regular.otf */, + 7D175092F95B42B6B519865B /* Feather.ttf */, ); name = Resources; sourceTree = ""; @@ -1781,6 +1783,7 @@ 288C7B16940D4F52A8F13835 /* Asap-Medium.otf in Resources */, BD13B2760710464A96D6B1ED /* Asap-MediumItalic.otf in Resources */, 4B62A4963BFB4F8A90260E13 /* Asap-Regular.otf in Resources */, + 8E89B77EBCA9429F8C758BEA /* Feather.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/kitsu_mobile/Info.plist b/ios/kitsu_mobile/Info.plist index ca68ffbd7..8874416fb 100644 --- a/ios/kitsu_mobile/Info.plist +++ b/ios/kitsu_mobile/Info.plist @@ -70,7 +70,7 @@ NSCameraUsageDescription Kitsu needs to access your camera to let you upload photos. NSLocationWhenInUseUsageDescription - + NSPhotoLibraryUsageDescription Kitsu needs to access your photo library to let you upload photos. UIAppFonts @@ -128,6 +128,7 @@ Asap-Medium.otf Asap-MediumItalic.otf Asap-Regular.otf + Feather.ttf UIBackgroundModes diff --git a/package.json b/package.json index b132e0067..378382fca 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "react-native-onesignal": "^3.1.1", "react-native-scrollable-tab-view": "hummingbird-me/react-native-scrollable-tab-view#fixes_android", "react-native-sentry": "^0.34.1", + "react-native-share": "^1.0.27", "react-native-snap-carousel": "^3.6.0", "react-native-swipeable": "^0.6.0", "react-native-vector-icons": "^4.5.0", diff --git a/yarn.lock b/yarn.lock index 9f49c1dd2..420e07172 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7902,6 +7902,10 @@ react-native-sentry@^0.34.1: "@sentry/wizard" "^0.8.1" raven-js "^3.22.1" +react-native-share@^1.0.27: + version "1.0.27" + resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-1.0.27.tgz#1861afe0d1256bde95d19520ca5d5c3cd348ffad" + react-native-snap-carousel@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/react-native-snap-carousel/-/react-native-snap-carousel-3.6.0.tgz#bbd4c988314500af4a695f787f592fdfcd5c3df1" From 39da3d403c92108c7bb7cfdef6d247dbe642a11f Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 12:41:55 +1000 Subject: [PATCH 016/137] Added image url sharing. Added custom image renderer. --- .../components/EmbeddedContent/component.js | 41 +++++++++++++++---- .../Feed/components/EmbeddedContent/styles.js | 7 ++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 25a3fa093..89a77c213 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -1,16 +1,17 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, ViewPropTypes, WebView, Platform, TouchableOpacity, Modal } from 'react-native'; +import { View, ViewPropTypes, WebView, Platform, TouchableOpacity, Modal, Image, ActivityIndicator } from 'react-native'; import FastImage from 'react-native-fast-image'; import YouTube from 'react-native-youtube'; import { StyledText } from 'kitsu/components/StyledText'; import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; -import { startCase } from 'lodash'; +import { startCase, isEmpty } from 'lodash'; import { ImageGrid } from 'kitsu/screens/Feed/components/ImageGrid'; import ImageViewer from 'react-native-image-zoom-viewer'; import Icon from 'react-native-vector-icons/Ionicons'; +import Share from 'react-native-share'; import { styles } from './styles'; export class EmbeddedContent extends PureComponent { @@ -65,7 +66,20 @@ export class EmbeddedContent extends PureComponent { }; shareImage = (image) => { - console.log(image); + // This only shares the url + // If we can get the base64 representation of an image when we can allow users to share that directly + // TODO: Add a download option on top of the share image url option + const url = typeof image === 'string' ? image : (image && image.url) || null; + if (!isEmpty(url)) { + try { + Share.open({ + url, + message: '', + }); + } catch (error) { + console.warn('Failed to share image.', error); + } + } } /** @@ -75,12 +89,12 @@ export class EmbeddedContent extends PureComponent { */ renderImageModal(images) { const { imageModalVisible } = this.state; + const closeModal = () => { this.setState({ imageModalVisible: false }); }; - const imageUrls = [ - { url: images[0] }, - { url: 'https://media.kitsu.io/anime/cover_images/1/original.jpg?1519178801' }, - { url: 'https://media.kitsu.io/anime/cover_images/7/original.jpg' }, - ]; + const imageUrls = images.map(i => ({ + url: i, + })); + return ( ( + + + + )} + renderImage={props => ( + + )} renderFooter={currentIndex => ( {/* Close */} diff --git a/src/screens/Feed/components/EmbeddedContent/styles.js b/src/screens/Feed/components/EmbeddedContent/styles.js index 1f71b46be..388274acd 100644 --- a/src/screens/Feed/components/EmbeddedContent/styles.js +++ b/src/screens/Feed/components/EmbeddedContent/styles.js @@ -43,4 +43,11 @@ export const styles = StyleSheet.create({ alignItems: 'center', justifyContent: 'center', }, + loading: { + width: '100%', + height: '100%', + alignItems: 'center', + justifyContent: 'center', + backgroundColor: 'transparent', + }, }); From 8763d6598050efb2913344590108ebd72a7855dd Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 13:11:28 +1000 Subject: [PATCH 017/137] Open tapped image first in imagebox. --- .../Feed/components/EmbeddedContent/component.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index 89a77c213..a0f080942 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -63,6 +63,7 @@ export class EmbeddedContent extends PureComponent { state = { imageModalVisible: false, + imageIndex: 0, }; shareImage = (image) => { @@ -88,13 +89,15 @@ export class EmbeddedContent extends PureComponent { * @param {[string]} images An array of image urls. */ renderImageModal(images) { - const { imageModalVisible } = this.state; + const { imageModalVisible, imageIndex } = this.state; const closeModal = () => { this.setState({ imageModalVisible: false }); }; const imageUrls = images.map(i => ({ url: i, })); + const currentIndex = Math.min(images.length - 1, Math.max(imageIndex, 0)); + return ( ( @@ -152,7 +156,6 @@ export class EmbeddedContent extends PureComponent { if (!embed.image) return null; const { maxWidth, minWidth, borderRadius, compact } = this.props; - const { imageModalVisible } = this.state; const imageWidth = embed.image.width || maxWidth; @@ -167,8 +170,8 @@ export class EmbeddedContent extends PureComponent { width={width} borderRadius={borderRadius} compact={compact} - onImageTapped={() => { - this.setState({ imageModalVisible: true }); + onImageTapped={(index) => { + this.setState({ imageIndex: (index || 0), imageModalVisible: true }); }} /> {this.renderImageModal([embed.image.url])} From 25440b3c2b04c33f077cf6882fb2a98a1aab0d38 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 14:21:37 +1000 Subject: [PATCH 018/137] Moved image light box to its own component --- src/components/ImageLightbox/component.js | 127 ++++++++++++++++++ src/components/ImageLightbox/index.js | 1 + src/components/ImageLightbox/styles.js | 37 +++++ .../components/EmbeddedContent/component.js | 100 ++------------ 4 files changed, 179 insertions(+), 86 deletions(-) create mode 100644 src/components/ImageLightbox/component.js create mode 100644 src/components/ImageLightbox/index.js create mode 100644 src/components/ImageLightbox/styles.js diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js new file mode 100644 index 000000000..1db95a571 --- /dev/null +++ b/src/components/ImageLightbox/component.js @@ -0,0 +1,127 @@ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import { View, Platform, TouchableOpacity, Modal, ActivityIndicator } from 'react-native'; +import FastImage from 'react-native-fast-image'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import Icon from 'react-native-vector-icons/Ionicons'; +import Share from 'react-native-share'; +import { isEmpty } from 'lodash'; +import { styles } from './styles'; + +export class ImageLightbox extends PureComponent { + static propTypes = { + images: PropTypes.arrayOf(PropTypes.string).isRequired, + visible: PropTypes.bool, + initialImageIndex: PropTypes.number, + onClose: PropTypes.func.isRequired, + onShare: PropTypes.func, + onDownload: PropTypes.func, + } + + static defaultProps = { + visible: false, + initialImageIndex: 0, + onShare: null, + onDownload: null, + } + + shareImage = (image) => { + // This only shares the url + // If we can get the base64 representation of an image when we can allow users to share that directly + // TODO: Add a download option on top of the share image url option + const url = typeof image === 'string' ? image : (image && image.url) || null; + if (!isEmpty(url)) { + try { + Share.open({ + url, + }); + } catch (error) { + console.warn('Failed to share image.', error); + } + } + } + + downloadImage = (image) => { + console.log(image); + } + + renderFooter(imageUrls) { + const { onClose, onShare, onDownload } = this.props; + const shareImage = onShare || this.shareImage; + const downloadImage = onDownload || this.downloadImage; + + return currentIndex => ( + + {/* Close */} + + + + + {/* Share */} + shareImage(imageUrls[currentIndex])} + > + + + + {/* Download */} + downloadImage(imageUrls[currentIndex])} + > + + + + ); + } + + render() { + const { images, visible, initialImageIndex, onClose, onShare, onDownload } = this.props; + + if (isEmpty(images)) return null; + + const imageUrls = images.map(i => ({ + url: i, + })); + + // Cap the initialIndexValue between 0 and images.length - 1 + const index = Math.min(images.length - 1, Math.max(initialImageIndex, 0)); + + const shareImage = onShare || this.shareImage; + + return ( + + ( + + + + )} + renderImage={props => ( + + )} + renderFooter={this.renderFooter(imageUrls)} + footerContainerStyle={styles.imageModalFooterContainer} + /> + + ); + } +} diff --git a/src/components/ImageLightbox/index.js b/src/components/ImageLightbox/index.js new file mode 100644 index 000000000..bb824842c --- /dev/null +++ b/src/components/ImageLightbox/index.js @@ -0,0 +1 @@ +export * from './component'; diff --git a/src/components/ImageLightbox/styles.js b/src/components/ImageLightbox/styles.js new file mode 100644 index 000000000..1b147d203 --- /dev/null +++ b/src/components/ImageLightbox/styles.js @@ -0,0 +1,37 @@ +import { StyleSheet, Platform } from 'react-native'; +import * as colors from 'kitsu/constants/colors'; +import { isX, safeAreaInsetX } from 'kitsu/utils/isX'; + +export const styles = StyleSheet.create({ + imageModalFooterContainer: { + bottom: 44.96 + (isX ? safeAreaInsetX.bottom : 0), + position: 'relative', + }, + imageModalFooter: { + flexDirection: 'row', + justifyContent: 'space-between', + height: 44.96, + }, + icon: { + color: colors.white, + marginHorizontal: 8, + fontSize: Platform.select({ ios: 30, android: 28 }), + backgroundColor: 'transparent', + }, + closeIcon: { + fontSize: Platform.select({ ios: 36, android: 28 }), + }, + iconContainer: { + height: '100%', + paddingHorizontal: 12, + alignItems: 'center', + justifyContent: 'center', + }, + loading: { + width: '100%', + height: '100%', + alignItems: 'center', + justifyContent: 'center', + backgroundColor: 'transparent', + }, +}); diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index a0f080942..17daaf868 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -1,19 +1,18 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, ViewPropTypes, WebView, Platform, TouchableOpacity, Modal, Image, ActivityIndicator } from 'react-native'; +import { View, ViewPropTypes, WebView, Platform, TouchableOpacity } from 'react-native'; import FastImage from 'react-native-fast-image'; import YouTube from 'react-native-youtube'; import { StyledText } from 'kitsu/components/StyledText'; import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; -import { startCase, isEmpty } from 'lodash'; +import { startCase } from 'lodash'; import { ImageGrid } from 'kitsu/screens/Feed/components/ImageGrid'; -import ImageViewer from 'react-native-image-zoom-viewer'; -import Icon from 'react-native-vector-icons/Ionicons'; -import Share from 'react-native-share'; +import { ImageLightbox } from 'kitsu/components/ImageLightbox'; import { styles } from './styles'; + export class EmbeddedContent extends PureComponent { // The reason for the combination of string or number is that // sometimes the embeds return width/height as strings @@ -66,85 +65,6 @@ export class EmbeddedContent extends PureComponent { imageIndex: 0, }; - shareImage = (image) => { - // This only shares the url - // If we can get the base64 representation of an image when we can allow users to share that directly - // TODO: Add a download option on top of the share image url option - const url = typeof image === 'string' ? image : (image && image.url) || null; - if (!isEmpty(url)) { - try { - Share.open({ - url, - message: '', - }); - } catch (error) { - console.warn('Failed to share image.', error); - } - } - } - - /** - * Render the image lightbox modal - * - * @param {[string]} images An array of image urls. - */ - renderImageModal(images) { - const { imageModalVisible, imageIndex } = this.state; - - const closeModal = () => { this.setState({ imageModalVisible: false }); }; - const imageUrls = images.map(i => ({ - url: i, - })); - - const currentIndex = Math.min(images.length - 1, Math.max(imageIndex, 0)); - - return ( - - ( - - - - )} - renderImage={props => ( - - )} - renderFooter={currentIndex => ( - - {/* Close */} - - - - - {/* Share */} - this.shareImage(imageUrls[currentIndex])} - > - - - - )} - footerContainerStyle={styles.imageModalFooterContainer} - /> - - ); - } - /** * Render an image embed. * This will render the image with given image width or maxWidth if it exceeds it. @@ -156,6 +76,7 @@ export class EmbeddedContent extends PureComponent { if (!embed.image) return null; const { maxWidth, minWidth, borderRadius, compact } = this.props; + const { imageModalVisible, imageIndex } = this.state; const imageWidth = embed.image.width || maxWidth; @@ -163,10 +84,12 @@ export class EmbeddedContent extends PureComponent { if (minWidth && width < minWidth) width = minWidth; if (width > maxWidth) width = maxWidth; + const images = [embed.image.url]; + return ( - {this.renderImageModal([embed.image.url])} + this.setState({ imageModalVisible: false })} + /> ); } From db23af16a37422aa61946fa56e9146c5537bb0a6 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 15:57:39 +1000 Subject: [PATCH 019/137] removed react-native-share. --- android/app/build.gradle | 1 - .../animetrackerandroid/MainApplication.java | 2 -- android/settings.gradle | 2 -- ios/Podfile | 2 -- ios/kitsu_mobile.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++++ ios/kitsu_mobile/Info.plist | 2 ++ package.json | 3 +-- src/components/ImageLightbox/component.js | 20 +++++++------------ yarn.lock | 8 ++------ 10 files changed, 22 insertions(+), 30 deletions(-) create mode 100644 ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/android/app/build.gradle b/android/app/build.gradle index 8a92e9f14..93f03ff4b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -173,7 +173,6 @@ android { } dependencies { - compile project(':react-native-share') compile project(':react-native-fast-image') compile project(':react-native-image-crop-picker') compile project(':react-native-sentry') diff --git a/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java b/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java index 44acc6d74..9c070d745 100644 --- a/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java +++ b/android/app/src/main/java/com/everfox/animetrackerandroid/MainApplication.java @@ -4,7 +4,6 @@ import android.support.multidex.MultiDexApplication; import com.facebook.react.ReactApplication; -import cl.json.RNSharePackage; import com.dylanvann.fastimage.FastImageViewPackage; import com.reactnative.ivpusic.imagepicker.PickerPackage; import com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage; @@ -52,7 +51,6 @@ public boolean getUseDeveloperSupport() { protected List getPackages() { return Arrays.asList( new MainReactPackage(), - new RNSharePackage(), new FastImageViewPackage(), new PickerPackage(), new ReactNativeOneSignalPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index 4cd59bf3e..308549e23 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,6 +1,4 @@ rootProject.name = 'kitsu_mobile' -include ':react-native-share' -project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android') include ':react-native-fast-image' project(':react-native-fast-image').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fast-image/android') include ':react-native-image-crop-picker' diff --git a/ios/Podfile b/ios/Podfile index c96557971..34e164ea3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -9,6 +9,4 @@ target 'kitsu_mobile' do pod 'RSKImageCropper' pod 'QBImagePickerController' - pod 'RNShare', :path => '../node_modules/react-native-share' - end diff --git a/ios/kitsu_mobile.xcodeproj/project.pbxproj b/ios/kitsu_mobile.xcodeproj/project.pbxproj index 262b23f86..5a6c6665a 100644 --- a/ios/kitsu_mobile.xcodeproj/project.pbxproj +++ b/ios/kitsu_mobile.xcodeproj/project.pbxproj @@ -74,6 +74,7 @@ 850F5E73CB14449E8114D769 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 963051146E3F4F7E8C217E5F /* Roboto.ttf */; }; 8D962F8E5AD84C4D8F4F621C /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 74F436878F9E4560BCD4200F /* libBVLinearGradient.a */; }; 8E348D7BD45D4DD0AC21E616 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B869BF9CEB9045B9B66181ED /* Octicons.ttf */; }; + 8E89B77EBCA9429F8C758BEA /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D175092F95B42B6B519865B /* Feather.ttf */; }; 9041714829564E9D8BE28664 /* YTPlayerView-iframe-player.html in Resources */ = {isa = PBXBuildFile; fileRef = 989E5E4013234F90B41CF380 /* YTPlayerView-iframe-player.html */; }; 94E30BF7C7234CC38B7CED7F /* OpenSans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 65044F9025D84791BCFD431C /* OpenSans-BoldItalic.ttf */; }; 9DFB739923C9440F905DA966 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2D4F4EAF6DFA486ABCA0A51F /* Foundation.ttf */; }; @@ -109,7 +110,6 @@ F743ACFD56F641BEA63F5B1D /* OpenSans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 008C13A99553484BA0B2963B /* OpenSans-Italic.ttf */; }; FD2D5EEC2CE94BD494A797F8 /* libRCTYouTube.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DDA0D65E0D5748EFB8A14463 /* libRCTYouTube.a */; }; FFF738ABC088423B91E45FD7 /* config.json in Resources */ = {isa = PBXBuildFile; fileRef = 694A904745DB4D368E2CB836 /* config.json */; }; - 8E89B77EBCA9429F8C758BEA /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D175092F95B42B6B519865B /* Feather.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -566,6 +566,7 @@ 7BE3B0DA1ECFF1DE0012FD5C /* fontello.woff */ = {isa = PBXFileReference; lastKnownFileType = file; path = fontello.woff; sourceTree = ""; }; 7BE3B0DB1ECFF1DE0012FD5C /* fontello.woff2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = fontello.woff2; sourceTree = ""; }; 7C942891D5B742A5A333F108 /* fontello.eot */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = fontello.eot; path = ../src/assets/fonts/icons/font/fontello.eot; sourceTree = ""; }; + 7D175092F95B42B6B519865B /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; 80BDB36AC10F4D1799DC4612 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 8585F7A95063461683F52E0D /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = ""; }; @@ -608,7 +609,6 @@ FD61A198D0A948A68EDEFB8F /* Asap-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Asap-Medium.otf"; path = "../src/assets/fonts/open-sans/Asap-Medium.otf"; sourceTree = ""; }; FF0AD57CF1A14A05AB0F02EE /* libRNShimmer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNShimmer.a; sourceTree = ""; }; FF2549FBAE04493884146CC1 /* libimageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libimageCropPicker.a; sourceTree = ""; }; - 7D175092F95B42B6B519865B /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/kitsu_mobile/Info.plist b/ios/kitsu_mobile/Info.plist index 8874416fb..770e28b33 100644 --- a/ios/kitsu_mobile/Info.plist +++ b/ios/kitsu_mobile/Info.plist @@ -73,6 +73,8 @@ NSPhotoLibraryUsageDescription Kitsu needs to access your photo library to let you upload photos. + NSPhotoLibraryAddUsageDescription + Kitsu needs to access your photo library to allow you to download photos. UIAppFonts fontello.ttf diff --git a/package.json b/package.json index 378382fca..17e6ea826 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@ptomasroos/react-native-multi-slider": "^0.0.12", "algoliasearch": "^3.24.12", "base-64": "^0.1.0", - "client-oauth2": "https://github.com/magneticz/js-client-oauth2.git", + "client-oauth2": "https://github.com/hummingbird-me/js-client-oauth2.git", "devour-client": "^1.4.3", "getstream": "^3.12.3", "lodash": "^4.17.5", @@ -44,7 +44,6 @@ "react-native-onesignal": "^3.1.1", "react-native-scrollable-tab-view": "hummingbird-me/react-native-scrollable-tab-view#fixes_android", "react-native-sentry": "^0.34.1", - "react-native-share": "^1.0.27", "react-native-snap-carousel": "^3.6.0", "react-native-swipeable": "^0.6.0", "react-native-vector-icons": "^4.5.0", diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js index 1db95a571..1c8fdd02e 100644 --- a/src/components/ImageLightbox/component.js +++ b/src/components/ImageLightbox/component.js @@ -1,10 +1,9 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Platform, TouchableOpacity, Modal, ActivityIndicator } from 'react-native'; +import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, CameraRoll, Share } from 'react-native'; import FastImage from 'react-native-fast-image'; import ImageViewer from 'react-native-image-zoom-viewer'; import Icon from 'react-native-vector-icons/Ionicons'; -import Share from 'react-native-share'; import { isEmpty } from 'lodash'; import { styles } from './styles'; @@ -27,22 +26,17 @@ export class ImageLightbox extends PureComponent { shareImage = (image) => { // This only shares the url - // If we can get the base64 representation of an image when we can allow users to share that directly - // TODO: Add a download option on top of the share image url option const url = typeof image === 'string' ? image : (image && image.url) || null; - if (!isEmpty(url)) { - try { - Share.open({ - url, - }); - } catch (error) { - console.warn('Failed to share image.', error); - } - } + if (isEmpty(url)) return; + Share.share({ url }); } downloadImage = (image) => { console.log(image); + const url = typeof image === 'string' ? image : (image && image.url) || null; + if (isEmpty(url)) return; + + CameraRoll.saveToCameraRoll(url); } renderFooter(imageUrls) { diff --git a/yarn.lock b/yarn.lock index 420e07172..1ce968202 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2312,9 +2312,9 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" -"client-oauth2@https://github.com/magneticz/js-client-oauth2.git": +"client-oauth2@https://github.com/hummingbird-me/js-client-oauth2.git": version "4.1.0" - resolved "https://github.com/magneticz/js-client-oauth2.git#3e62337a58915bd3f4fc5bb5be2be4054b2f98c0" + resolved "https://github.com/hummingbird-me/js-client-oauth2.git#3e62337a58915bd3f4fc5bb5be2be4054b2f98c0" dependencies: base-64 "^0.1.0" popsicle "^9.1.0" @@ -7902,10 +7902,6 @@ react-native-sentry@^0.34.1: "@sentry/wizard" "^0.8.1" raven-js "^3.22.1" -react-native-share@^1.0.27: - version "1.0.27" - resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-1.0.27.tgz#1861afe0d1256bde95d19520ca5d5c3cd348ffad" - react-native-snap-carousel@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/react-native-snap-carousel/-/react-native-snap-carousel-3.6.0.tgz#bbd4c988314500af4a695f787f592fdfcd5c3df1" From e958a6c230bd11a6542b3e552b6ccab75d2ce1a0 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 16:41:39 +1000 Subject: [PATCH 020/137] Disabled image downloading for now ... --- src/components/ImageLightbox/component.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js index 1c8fdd02e..26b0487f8 100644 --- a/src/components/ImageLightbox/component.js +++ b/src/components/ImageLightbox/component.js @@ -33,10 +33,6 @@ export class ImageLightbox extends PureComponent { downloadImage = (image) => { console.log(image); - const url = typeof image === 'string' ? image : (image && image.url) || null; - if (isEmpty(url)) return; - - CameraRoll.saveToCameraRoll(url); } renderFooter(imageUrls) { @@ -66,7 +62,15 @@ export class ImageLightbox extends PureComponent { {/* Download */} - downloadImage(imageUrls[currentIndex])} > @@ -74,7 +78,7 @@ export class ImageLightbox extends PureComponent { style={[styles.icon, styles.downloadIcon]} name={Platform.select({ ios: 'ios-cloud-download-outline', android: 'md-cloud-download' })} /> - + */} ); } From 27d9709b833d0bc8b3c1d40c5ddbd904de5506f6 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Wed, 6 Jun 2018 17:25:28 +1000 Subject: [PATCH 021/137] Added height restrictions for embeds on tablets. --- src/screens/Feed/components/ImageGrid/component.js | 4 ++-- src/screens/Feed/components/PostImage/component.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/screens/Feed/components/ImageGrid/component.js b/src/screens/Feed/components/ImageGrid/component.js index c7f7a1098..5433b4238 100644 --- a/src/screens/Feed/components/ImageGrid/component.js +++ b/src/screens/Feed/components/ImageGrid/component.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Image, Text, TouchableOpacity } from 'react-native'; +import { View, Image, Text, TouchableOpacity, Dimensions } from 'react-native'; import { PostImage } from 'kitsu/screens/Feed/components/PostImage'; import { scene } from 'kitsu/screens/Profiles/constants'; import { isEmpty, isNull } from 'lodash'; @@ -19,7 +19,7 @@ export class ImageGrid extends PureComponent { static defaultProps = { images: [], - heightToWidthRatio: 1, + heightToWidthRatio: Dimensions.get('window').width > 600 ? (1 / 2) : 1, width: null, compact: false, imageBorderWidth: 1, diff --git a/src/screens/Feed/components/PostImage/component.js b/src/screens/Feed/components/PostImage/component.js index aea427410..3be1a38dc 100644 --- a/src/screens/Feed/components/PostImage/component.js +++ b/src/screens/Feed/components/PostImage/component.js @@ -10,6 +10,7 @@ export class PostImage extends PureComponent { width: PropTypes.number, height: PropTypes.number, borderRadius: PropTypes.number, + maxAutoHeight: PropTypes.number, }; static defaultProps = { @@ -17,6 +18,7 @@ export class PostImage extends PureComponent { width: null, height: null, borderRadius: 0, + maxAutoHeight: 350, }; state = { @@ -57,7 +59,7 @@ export class PostImage extends PureComponent { if (this.props.width && !this.props.height) { this.setState({ width: this.props.width, - height: height * (this.props.width / width), + height: Math.min(this.props.maxAutoHeight, height * (this.props.width / width)), }); } else if (!this.props.width && this.props.height) { this.setState({ From b951f859c50e318cff9b04cfc928f52234d2934d Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Thu, 7 Jun 2018 09:06:12 +1000 Subject: [PATCH 022/137] Added open url icon to lightbox. --- src/components/ImageLightbox/component.js | 129 ++++++++++++++-------- src/components/ImageLightbox/styles.js | 3 + 2 files changed, 84 insertions(+), 48 deletions(-) diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js index 26b0487f8..ff00d5b7d 100644 --- a/src/components/ImageLightbox/component.js +++ b/src/components/ImageLightbox/component.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, CameraRoll, Share } from 'react-native'; +import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, Share, Linking } from 'react-native'; import FastImage from 'react-native-fast-image'; import ImageViewer from 'react-native-image-zoom-viewer'; import Icon from 'react-native-vector-icons/Ionicons'; @@ -15,6 +15,7 @@ export class ImageLightbox extends PureComponent { onClose: PropTypes.func.isRequired, onShare: PropTypes.func, onDownload: PropTypes.func, + onOpen: PropTypes.func, } static defaultProps = { @@ -22,65 +23,97 @@ export class ImageLightbox extends PureComponent { initialImageIndex: 0, onShare: null, onDownload: null, + onOpen: null, } - shareImage = (image) => { - // This only shares the url - const url = typeof image === 'string' ? image : (image && image.url) || null; + shareImage = (url) => { if (isEmpty(url)) return; Share.share({ url }); } - downloadImage = (image) => { - console.log(image); + downloadImage = (url) => { + console.log(url); + } + + openImage = async (url) => { + if (isEmpty(url)) return; + + try { + const supported = await Linking.canOpenURL(url); + if (supported) { + Linking.openURL(url); + } + } catch (e) { + console.log(`Error handling ${url}: ${e}`); + } } renderFooter(imageUrls) { - const { onClose, onShare, onDownload } = this.props; + const { onClose, onShare, onDownload, onOpen } = this.props; const shareImage = onShare || this.shareImage; const downloadImage = onDownload || this.downloadImage; + const openImage = onOpen || this.openImage; - return currentIndex => ( - - {/* Close */} - - - - - {/* Share */} - shareImage(imageUrls[currentIndex])} - > - - - - {/* Download */} - {/* - Disabled for now ... - Several issues with this at the moment: - 1. Need to find a way to download images to gallery on android. - 2. `CameraRoll` has `saveToCameraRoll` which can save remote urls to iOS only. - see: https://facebook.github.io/react-native/docs/cameraroll.html#savetocameraroll - 3. To get `CameraRoll.saveToCameraRoll` to work, you need to ask user for permission beforehand, otherwise app just crashes. - */} - {/* downloadImage(imageUrls[currentIndex])} - > - - */} - - ); + return (currentIndex) => { + const currentImage = imageUrls[currentIndex]; + const url = typeof currentImage === 'string' ? currentImage : (currentImage && currentImage.url) || null; + const isRemoteUrl = url && url.includes('http'); + + return ( + + {/* Close */} + + + + + {/* Open */} + {isRemoteUrl && + openImage(url)} + > + + + } + + {/* Share */} + shareImage(url)} + > + + + + {/* Download */} + {/* + Disabled for now ... + Several issues with this at the moment: + 1. Need to find a way to download images to gallery on android. + 2. `CameraRoll` has `saveToCameraRoll` which can save remote urls to iOS only. + see: https://facebook.github.io/react-native/docs/cameraroll.html#savetocameraroll + 3. To get `CameraRoll.saveToCameraRoll` to work, you need to ask user for permission beforehand, otherwise app just crashes. + */} + {/* downloadImage(url)} + > + + */} + + ); + } } render() { diff --git a/src/components/ImageLightbox/styles.js b/src/components/ImageLightbox/styles.js index 1b147d203..966a978d5 100644 --- a/src/components/ImageLightbox/styles.js +++ b/src/components/ImageLightbox/styles.js @@ -21,6 +21,9 @@ export const styles = StyleSheet.create({ closeIcon: { fontSize: Platform.select({ ios: 36, android: 28 }), }, + openIcon: { + fontSize: 28, + }, iconContainer: { height: '100%', paddingHorizontal: 12, From 4d18fa864dba2e20555d2da1ff789bde21856add Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Thu, 7 Jun 2018 09:53:22 +1000 Subject: [PATCH 023/137] Fixed display of data uri on android. --- src/common/utils/url.js | 14 +++++++- src/components/ImageLightbox/component.js | 32 +++++++++++++++---- .../Feed/components/PostImage/component.js | 17 ++++++++-- 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/common/utils/url.js b/src/common/utils/url.js index dd78b2582..df7113d8b 100644 --- a/src/common/utils/url.js +++ b/src/common/utils/url.js @@ -1,10 +1,22 @@ import { Linking } from 'react-native'; +/** + * Checks whether a url is a data url. + * E.g data:image/png;base64, data:text/plain, etc ... + * + * @param {string} url The url to check. + * @returns If the url is a data url. + */ +export function isDataUrl(url) { + const regex = /^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)$/i; + return regex.test((url || '').trim()); +} + /** * Open the given url in `Linking`. * Checks to see if the url is supported by an app before opening it. * - * @param {any} url The url to open + * @param {string} url The url to open */ async function openUrl(url) { try { diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js index ff00d5b7d..91655fe21 100644 --- a/src/components/ImageLightbox/component.js +++ b/src/components/ImageLightbox/component.js @@ -1,9 +1,10 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, Share, Linking } from 'react-native'; +import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, Share, Linking, Image } from 'react-native'; import FastImage from 'react-native-fast-image'; import ImageViewer from 'react-native-image-zoom-viewer'; import Icon from 'react-native-vector-icons/Ionicons'; +import { isDataUrl } from 'kitsu/common/utils/url'; import { isEmpty } from 'lodash'; import { styles } from './styles'; @@ -113,7 +114,28 @@ export class ImageLightbox extends PureComponent { */} ); - } + }; + } + + renderImage = (props) => { + const uri = (props && props.source && props.source.uri) || ''; + + /* + Data url images don't work on android with FastImage. + Thus we have to fallback to a regular image component. + + Same thing is done in `PostImage` + + Relevant PRs: + - https://github.com/DylanVann/react-native-fast-image/pull/91 + - https://github.com/DylanVann/react-native-fast-image/pull/205 + */ + const ImageComponent = (isDataUrl(uri) && Platform.OS === 'android') ? Image : FastImage; + return ( + + ); } render() { @@ -144,11 +166,7 @@ export class ImageLightbox extends PureComponent { )} - renderImage={props => ( - - )} + renderImage={this.renderImage} renderFooter={this.renderFooter(imageUrls)} footerContainerStyle={styles.imageModalFooterContainer} /> diff --git a/src/screens/Feed/components/PostImage/component.js b/src/screens/Feed/components/PostImage/component.js index 3be1a38dc..fdb619519 100644 --- a/src/screens/Feed/components/PostImage/component.js +++ b/src/screens/Feed/components/PostImage/component.js @@ -1,7 +1,8 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; -import { View, Image } from 'react-native'; +import { View, Image, Platform } from 'react-native'; import FastImage from 'react-native-fast-image'; +import { isDataUrl } from 'kitsu/common/utils/url'; import { styles } from './styles'; export class PostImage extends PureComponent { @@ -82,8 +83,20 @@ export class PostImage extends PureComponent { const { uri, borderRadius } = this.props; const { width, height } = this.state; + /* + Data url images don't work on android with FastImage. + Thus we have to fallback to a regular image component. + + Same thing is done in `ImageLightbox` + + Relevant PRs: + - https://github.com/DylanVann/react-native-fast-image/pull/91 + - https://github.com/DylanVann/react-native-fast-image/pull/205 + */ + const ImageComponent = (isDataUrl(uri) && Platform.OS === 'android') ? Image : FastImage; + return ( - Date: Thu, 7 Jun 2018 15:04:32 +1000 Subject: [PATCH 024/137] Improved look of tap to load image. --- src/assets/img/data-bunny.png | Bin 0 -> 37377 bytes .../components/EmbeddedContent/component.js | 44 +++++++++++++----- .../Feed/components/EmbeddedContent/styles.js | 18 +++++-- 3 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 src/assets/img/data-bunny.png diff --git a/src/assets/img/data-bunny.png b/src/assets/img/data-bunny.png new file mode 100644 index 0000000000000000000000000000000000000000..65696504808445daaeeb16167eb1e5b4186d61b9 GIT binary patch literal 37377 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 JPDHLkV1jovy8ZwF literal 0 HcmV?d00001 diff --git a/src/screens/Feed/components/EmbeddedContent/component.js b/src/screens/Feed/components/EmbeddedContent/component.js index a7313e7af..0c437d86f 100644 --- a/src/screens/Feed/components/EmbeddedContent/component.js +++ b/src/screens/Feed/components/EmbeddedContent/component.js @@ -9,7 +9,8 @@ import { StyledText } from 'kitsu/components/StyledText'; import { ProgressiveImage } from 'kitsu/components/ProgressiveImage'; import * as Layout from 'kitsu/screens/Feed/components/Layout'; import defaultAvatar from 'kitsu/assets/img/default_avatar.png'; -import { startCase } from 'lodash'; +import { startCase, isEmpty } from 'lodash'; +import dataBunny from 'kitsu/assets/img/data-bunny.png'; import { styles } from './styles'; class EmbeddedContent extends PureComponent { @@ -67,6 +68,36 @@ class EmbeddedContent extends PureComponent { this.setState({ visible: !this.state.visible }); } + renderTapToLoad(width) { + const { borderRadius } = this.props; + const showDataBunny = !isNaN(width) && width > 300; + + const textContainerStyle = (!showDataBunny && { alignItems: 'center' }) || {}; + + return ( + + {showDataBunny && + + } + + + Tap to load image + + + Data-saving mode is currently enabled. + + + + ); + } + /** * Render an image embed. * This will render the image with given image width or maxWidth if it exceeds it. @@ -88,16 +119,7 @@ class EmbeddedContent extends PureComponent { if (width > maxWidth) width = maxWidth; if (dataSaver && !visible) { - return ( - - - Tap to load image - - - ); + return this.renderTapToLoad(maxWidth); } // PostImage will auto scale the image diff --git a/src/screens/Feed/components/EmbeddedContent/styles.js b/src/screens/Feed/components/EmbeddedContent/styles.js index f025f8c86..c05a9b535 100644 --- a/src/screens/Feed/components/EmbeddedContent/styles.js +++ b/src/screens/Feed/components/EmbeddedContent/styles.js @@ -1,4 +1,4 @@ -import { StyleSheet } from 'react-native'; +import { StyleSheet, Dimensions } from 'react-native'; import * as colors from 'kitsu/constants/colors'; export const styles = StyleSheet.create({ @@ -19,10 +19,22 @@ export const styles = StyleSheet.create({ borderRadius: 32, }, dataSaver: { - backgroundColor: colors.darkGrey, + backgroundColor: colors.darkPurple, flex: 1, + flexDirection: 'row', height: 150, - alignItems: 'center', + alignItems: 'flex-end', justifyContent: 'center', + paddingHorizontal: 8, + }, + dataBunny: { + height: 135, + width: 80, + }, + dataSaverTextContainer: { + height: '100%', + justifyContent: 'center', + marginLeft: 8, + paddingLeft: 8, }, }); From a5f71f007e24b255e3d18171280014ea3907253d Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Thu, 7 Jun 2018 16:33:05 +1000 Subject: [PATCH 025/137] Fix review issues. --- src/screens/Sidebar/AppSettings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/screens/Sidebar/AppSettings.js b/src/screens/Sidebar/AppSettings.js index 4a2183ec2..0350bed9f 100644 --- a/src/screens/Sidebar/AppSettings.js +++ b/src/screens/Sidebar/AppSettings.js @@ -65,7 +65,6 @@ class AppSettings extends PureComponent { From 5312ea6b43a1be2c0f0a5c2e3b0beec4d848628c Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Thu, 7 Jun 2018 16:48:50 +1000 Subject: [PATCH 026/137] Fixed review issues --- src/components/ImageLightbox/component.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/ImageLightbox/component.js b/src/components/ImageLightbox/component.js index 91655fe21..8a88d4579 100644 --- a/src/components/ImageLightbox/component.js +++ b/src/components/ImageLightbox/component.js @@ -4,7 +4,7 @@ import { View, Platform, TouchableOpacity, Modal, ActivityIndicator, Share, Link import FastImage from 'react-native-fast-image'; import ImageViewer from 'react-native-image-zoom-viewer'; import Icon from 'react-native-vector-icons/Ionicons'; -import { isDataUrl } from 'kitsu/common/utils/url'; +import { isDataUrl, parseURL } from 'kitsu/common/utils/url'; import { isEmpty } from 'lodash'; import { styles } from './styles'; @@ -57,8 +57,11 @@ export class ImageLightbox extends PureComponent { return (currentIndex) => { const currentImage = imageUrls[currentIndex]; - const url = typeof currentImage === 'string' ? currentImage : (currentImage && currentImage.url) || null; - const isRemoteUrl = url && url.includes('http'); + const url = currentImage && currentImage.url; + + // Check if we have a remote URL + const parsed = parseURL(url); + const isRemoteUrl = parsed && parsed.protocol && parsed.protocol.includes('http'); return ( @@ -157,7 +160,7 @@ export class ImageLightbox extends PureComponent { shareImage(i && i.url)} saveToLocalByLongPress={false} backgroundColor={'rgba(0,0,0,0.97)'} index={index} From 2172f5f4d355aa611e0e3cc69e51ace45774ad41 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Thu, 7 Jun 2018 18:21:54 +1000 Subject: [PATCH 027/137] Updated image display on tablets. --- src/screens/Feed/components/ImageGrid/component.js | 2 +- src/screens/Feed/components/PostImage/component.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/screens/Feed/components/ImageGrid/component.js b/src/screens/Feed/components/ImageGrid/component.js index 5433b4238..d220b9c27 100644 --- a/src/screens/Feed/components/ImageGrid/component.js +++ b/src/screens/Feed/components/ImageGrid/component.js @@ -19,7 +19,7 @@ export class ImageGrid extends PureComponent { static defaultProps = { images: [], - heightToWidthRatio: Dimensions.get('window').width > 600 ? (1 / 2) : 1, + heightToWidthRatio: Dimensions.get('window').width > 600 ? (3 / 4) : 1, width: null, compact: false, imageBorderWidth: 1, diff --git a/src/screens/Feed/components/PostImage/component.js b/src/screens/Feed/components/PostImage/component.js index fdb619519..10d3a7b86 100644 --- a/src/screens/Feed/components/PostImage/component.js +++ b/src/screens/Feed/components/PostImage/component.js @@ -11,6 +11,7 @@ export class PostImage extends PureComponent { width: PropTypes.number, height: PropTypes.number, borderRadius: PropTypes.number, + // The maximum height an image can be if the width is set and height is not set. maxAutoHeight: PropTypes.number, }; @@ -19,7 +20,7 @@ export class PostImage extends PureComponent { width: null, height: null, borderRadius: 0, - maxAutoHeight: 350, + maxAutoHeight: 400, }; state = { From b7f4b5a8c6fa3d90746be58a1880bd44d40ec293 Mon Sep 17 00:00:00 2001 From: Mikunj varsani Date: Fri, 8 Jun 2018 10:33:25 +1000 Subject: [PATCH 028/137] Changed iOS icons back to default. --- .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++++++++ .../AppIcon.appiconset/Icon-1024.png | Bin 103183 -> 66226 bytes .../AppIcon.appiconset/Icon-120.png | Bin 6807 -> 5428 bytes .../AppIcon.appiconset/Icon-121.png | Bin 6807 -> 5428 bytes .../AppIcon.appiconset/Icon-152.png | Bin 8729 -> 7043 bytes .../AppIcon.appiconset/Icon-167.png | Bin 9848 -> 7838 bytes .../AppIcon.appiconset/Icon-180.png | Bin 10667 -> 8422 bytes .../AppIcon.appiconset/Icon-20.png | Bin 915 -> 810 bytes .../AppIcon.appiconset/Icon-29.png | Bin 1391 -> 1197 bytes .../AppIcon.appiconset/Icon-40.png | Bin 2055 -> 1665 bytes .../AppIcon.appiconset/Icon-41.png | Bin 2055 -> 1665 bytes .../AppIcon.appiconset/Icon-42.png | Bin 2055 -> 1665 bytes .../AppIcon.appiconset/Icon-58.png | Bin 3129 -> 2542 bytes .../AppIcon.appiconset/Icon-59.png | Bin 3129 -> 2542 bytes .../AppIcon.appiconset/Icon-60.png | Bin 3213 -> 2581 bytes .../AppIcon.appiconset/Icon-76.png | Bin 4191 -> 3283 bytes .../AppIcon.appiconset/Icon-80.png | Bin 4409 -> 3484 bytes .../AppIcon.appiconset/Icon-81.png | Bin 4409 -> 3484 bytes .../AppIcon.appiconset/Icon-87.png | Bin 4801 -> 3814 bytes 19 files changed, 8 insertions(+) create mode 100644 ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/kitsu_mobile.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/kitsu_mobile/Images.xcassets/AppIcon.appiconset/Icon-1024.png b/ios/kitsu_mobile/Images.xcassets/AppIcon.appiconset/Icon-1024.png index 0646d767c358bd3ae10a821809ae74e0e90cead7..051fec32e4c9fa481ca18098c3ad484182f63e22 100644 GIT binary patch literal 66226 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 literal 103183 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 Si;^5G(R*n0p!}ZG>;DJa;mlzG diff --git a/ios/kitsu_mobile/Images.xcassets/AppIcon.appiconset/Icon-120.png b/ios/kitsu_mobile/Images.xcassets/AppIcon.appiconset/Icon-120.png index 64ef4642e6d5e4c3b4b70778f5bb7325c3494c31..4294387a22315284dd05c57ae967092461760e19 100644 GIT binary patch delta 5405 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 Hu0mjfL11m5 literal 6807 zcma)B^;;Cq^G86sq?D9Ky5j()JERUl>UeXcbQ~oh2nW&}d4$wacQn!^p>#+{cgfM+ z@a6L#e1DjoXP#$vXLo1k*?G-;)74QWCZHw2z`!6@S5wk|;=cbQJe;Qy02UvAV$VGF zRTVHQM(B5*1Z+EbZFvlg>UhFCtLINLzMGnfCk6&T>;LGPZ=oy%1A~@VT}j^1*J3|A zB9ju>{QFSWL!$W-O^c_f(@m7*X^TlD0!~5Xe#w2KK9t|$Ka66j0%2070QGdu@T2~d zlQT>x*?1GWd>>?ooXN;Q!*?o3M6`3Z{c^tVRJ=3aZrzUNoD3%Zm&J|WBS4Pb3;6%i z993s&RI(0nr9}?s7^O1|q_#J~tlVt5XxVI5I5y2VeI{|Z?W38r$B#wM)=xKZGg^jCwe_*R}!wImXp)M#(<2o=})a_^<1I)m$_p;09K9j8k4h&asy0uV zTtY&7i);sXziMtC5sR@j5WRp~aC(@wWo3w}r5aKVuDqjBscCu#Q2Wn0Gxo>nBA9_5 z=SJetoZvzRjqUT{+kRos5)96o2^6+*bjGSSIP;z(0|>b%$b8TPPr7ZRV8eA5=ZztT zBA{19>W&RGWN*(O!R$hBxqu$cBndKvcf$dnBW{}hK9D?$V625-m5^l>$$7w%tNz^A zf+y72sr8GwUG#xvl^xm@DIbuU2*WACo;9%FlnvI-SE5L(F)(r+xGZ4cGCGn{tU