diff --git a/.gitignore b/.gitignore index f3993513..3401c6fc 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ web-build/ .DS_Store .env -coverage/ \ No newline at end of file +coverage/ +builds/ \ No newline at end of file diff --git a/App.tsx b/App.tsx index 6e91c96a..102ac0b8 100644 --- a/App.tsx +++ b/App.tsx @@ -1,26 +1,27 @@ import { ActionSheetProvider } from '@expo/react-native-action-sheet' +import i18n from '@root/i18n/i18n' import Index from '@root/Index' -import dev from '@root/startup/dev' -import sentry from '@root/startup/sentry' -import log from '@root/startup/log' import audio from '@root/startup/audio' -import onlineStatus from '@root/startup/onlineStatus' +import dev from '@root/startup/dev' +import log from '@root/startup/log' import netInfo from '@root/startup/netInfo' +import onlineStatus from '@root/startup/onlineStatus' +import sentry from '@root/startup/sentry' import { persistor, store } from '@root/store' +import { getSettingsLanguage } from '@utils/slices/settingsSlice' import ThemeManager from '@utils/styles/ThemeManager' import * as SplashScreen from 'expo-splash-screen' import React, { useCallback, useEffect, useState } from 'react' +import { LogBox, Platform } from 'react-native' import { enableScreens } from 'react-native-screens' import { QueryClient, QueryClientProvider } from 'react-query' import { Provider } from 'react-redux' import { PersistGate } from 'redux-persist/integration/react' -import { LogBox, Platform } from 'react-native' if (Platform.OS === 'android') { LogBox.ignoreLogs(['Setting a timer for a long period of time']) } - dev() sentry() audio() @@ -68,12 +69,12 @@ const App: React.FC = () => { } }, []) - const main = useCallback( + const children = useCallback( bootstrapped => { log('log', 'App', 'bootstrapped') if (bootstrapped) { log('log', 'App', 'loading actual app :)') - require('@root/i18n/i18n') + i18n.changeLanguage(getSettingsLanguage(store.getState())) return ( @@ -94,7 +95,7 @@ const App: React.FC = () => { diff --git a/app.config.ts b/app.config.ts index ba65cc02..b233ea7e 100644 --- a/app.config.ts +++ b/app.config.ts @@ -37,7 +37,7 @@ export default (): ExpoConfig => ({ ] }, ios: { - buildNumber: '2', + buildNumber: '4', config: { usesNonExemptEncryption: false }, bundleIdentifier: 'com.xmflsct.app.tooot', googleServicesFile: './configs/GoogleService-Info.plist', @@ -50,7 +50,7 @@ export default (): ExpoConfig => ({ zh: './src/i18n/zh-Hans/system.json' }, android: { - versionCode: 2, + versionCode: 4, package: 'com.xmflsct.app.tooot', googleServicesFile: './configs/google-services.json', permissions: ['CAMERA', 'VIBRATE'] diff --git a/build/android.sh b/build/android.sh new file mode 100755 index 00000000..35d32812 --- /dev/null +++ b/build/android.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ $# -ne 1 ]; then + echo "Arguments incorrect. Use 'xxx'" + exit 1 +fi + +JAVA_HOME=`/usr/libexec/java_home -v 1.8.0` \ +EXPO_USERNAME='xmflsct' \ +EXPO_PASSWORD=',8d_AJ1HmYJo8lbve&QoB40t3ImGdF)Dd' \ +EXPO_ANDROID_KEYSTORE_PASSWORD="9c54265087704801ba5d3d88809110a1" \ +EXPO_ANDROID_KEY_PASSWORD="748bb2e11529497dad7831c409175b94" \ +turtle build:android \ + --release-channel $1 \ + --type app-bundle \ + --keystore-path ./tooot.jks \ + --keystore-alias "QHhtZmxzY3QvdG9vb3Q=" \ + --build-dir ./builds \ No newline at end of file diff --git a/package.json b/package.json index a6d50dd0..538e9835 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "ios": "expo start --ios", "web": "expo start --web", "eject": "expo eject", - "test": "jest --watchAll" + "test": "jest --watchAll", + "release": "./publish/publish.sh" }, "dependencies": { "@expo/react-native-action-sheet": "^3.8.0", diff --git a/publish/publish.sh b/publish/publish.sh new file mode 100755 index 00000000..26d261ba --- /dev/null +++ b/publish/publish.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ $# -ne 1 ]; then + echo "Arguments incorrect" + exit 1 +fi + +expo publish --release-channel=$1 \ No newline at end of file diff --git a/src/components/Instance/Auth.tsx b/src/components/Instance/Auth.tsx index 635d58de..c3d800df 100644 --- a/src/components/Instance/Auth.tsx +++ b/src/components/Instance/Auth.tsx @@ -1,7 +1,6 @@ import { useNavigation } from '@react-navigation/native' import { InstanceLocal, localAddInstance } from '@utils/slices/instancesSlice' import * as AuthSession from 'expo-auth-session' -import Constants from 'expo-constants' import React, { useEffect } from 'react' import { useQueryClient } from 'react-query' import { useDispatch } from 'react-redux' @@ -16,17 +15,9 @@ export interface Props { const InstanceAuth = React.memo( ({ instanceDomain, instanceUri, appData, goBack }: Props) => { - let redirectUri: string - switch (Constants.manifest.releaseChannel) { - case 'production': - case 'staging': - case 'testing': - redirectUri = 'tooot://expo-auth-session' - break - default: - redirectUri = 'exp://127.0.0.1:19000' - break - } + + const redirectUri = AuthSession.makeRedirectUri({ useProxy: false }) + const navigation = useNavigation() const queryClient = useQueryClient() const dispatch = useDispatch() diff --git a/src/components/Timelines/Timeline/Shared/HeaderConversation.tsx b/src/components/Timelines/Timeline/Shared/HeaderConversation.tsx index cff0081b..58e417a6 100644 --- a/src/components/Timelines/Timeline/Shared/HeaderConversation.tsx +++ b/src/components/Timelines/Timeline/Shared/HeaderConversation.tsx @@ -23,11 +23,11 @@ const Names: React.FC<{ accounts: Mastodon.Account[] }> = ({ accounts }) => { return ( - {t('shared.header.conversation.withAccounts')}{' '} + {t('shared.header.conversation.withAccounts')} {accounts.map((account, index) => ( - {index !== 0 ? ', ' : undefined} + {index !== 0 ? t('common:separator') : undefined} null, headerRight: () => ( diff --git a/src/screens/Me/Settings.tsx b/src/screens/Me/Settings.tsx index b4efb595..79e5b1ef 100644 --- a/src/screens/Me/Settings.tsx +++ b/src/screens/Me/Settings.tsx @@ -1,310 +1,23 @@ -import analytics from '@components/analytics' -import Button from '@components/Button' -import haptics from '@components/haptics' -import Icon from '@components/Icon' -import { MenuContainer, MenuRow } from '@components/Menu' -import { useActionSheet } from '@expo/react-native-action-sheet' -import { persistor } from '@root/store' -import { - getLocalActiveIndex, - getLocalInstances -} from '@utils/slices/instancesSlice' -import { - changeAnalytics, - changeBrowser, - changeLanguage, - changeTheme, - getSettingsAnalytics, - getSettingsBrowser, - getSettingsLanguage, - getSettingsTheme -} from '@utils/slices/settingsSlice' -import { StyleConstants } from '@utils/styles/constants' -import { useTheme } from '@utils/styles/ThemeManager' import Constants from 'expo-constants' -import * as Linking from 'expo-linking' -import * as StoreReview from 'expo-store-review' -import prettyBytes from 'pretty-bytes' -import React, { useEffect, useState } from 'react' -import { useTranslation } from 'react-i18next' -import { StyleSheet, Text } from 'react-native' -import { CacheManager } from 'react-native-expo-image-cache' +import React from 'react' import { ScrollView } from 'react-native-gesture-handler' -import { useDispatch, useSelector } from 'react-redux' - -const DevDebug: React.FC = () => { - const { showActionSheetWithOptions } = useActionSheet() - const localActiveIndex = useSelector(getLocalActiveIndex) - const localInstances = useSelector(getLocalInstances) - - return ( - - {}} - /> - - showActionSheetWithOptions( - { - options: localInstances - .map(instance => { - return instance.url + ': ' + instance.account.id - }) - .concat(['Cancel']), - cancelButtonIndex: localInstances.length - }, - buttonIndex => {} - ) - } - /> -