diff --git a/src/components/Instance.tsx b/src/components/Instance.tsx index 958c4338..b0039b37 100644 --- a/src/components/Instance.tsx +++ b/src/components/Instance.tsx @@ -1,5 +1,6 @@ import Button from '@components/Button' import Icon from '@components/Icon' +import browserPackage from '@helpers/browserPackage' import { useAppsQuery } from '@utils/queryHooks/apps' import { useInstanceQuery } from '@utils/queryHooks/instance' import { getInstances } from '@utils/slices/instancesSlice' @@ -254,13 +255,19 @@ const ComponentInstance: React.FC = ({ WebBrowser.openBrowserAsync('https://tooot.app/privacy-policy')} + onPress={async () => + WebBrowser.openBrowserAsync('https://tooot.app/privacy-policy', { + browserPackage: await browserPackage() + }) + } />, - WebBrowser.openBrowserAsync('https://tooot.app/terms-of-service') + onPress={async () => + WebBrowser.openBrowserAsync('https://tooot.app/terms-of-service', { + browserPackage: await browserPackage() + }) } /> ]} diff --git a/src/components/Instance/Auth.tsx b/src/components/Instance/Auth.tsx index 9434220d..1a72e2b5 100644 --- a/src/components/Instance/Auth.tsx +++ b/src/components/Instance/Auth.tsx @@ -1,3 +1,4 @@ +import browserPackage from '@helpers/browserPackage' import { useNavigation } from '@react-navigation/native' import { useAppDispatch } from '@root/store' import { InstanceLatest } from '@utils/migrations/instances/migration' @@ -5,9 +6,7 @@ import { TabMeStackNavigationProp } from '@utils/navigation/navigators' import addInstance from '@utils/slices/instances/add' import { checkInstanceFeature } from '@utils/slices/instancesSlice' import * as AuthSession from 'expo-auth-session' -import * as WebBrowser from 'expo-web-browser' import React, { useEffect } from 'react' -import { Platform } from 'react-native' import { useQueryClient } from 'react-query' import { useSelector } from 'react-redux' @@ -47,15 +46,7 @@ const InstanceAuth = React.memo( useEffect(() => { ;(async () => { if (request?.clientId) { - let browserPackage: string | undefined - if (Platform.OS === 'android') { - const tabsSupportingBrowsers = await WebBrowser.getCustomTabsSupportingBrowsersAsync() - browserPackage = - tabsSupportingBrowsers?.preferredBrowserPackage || - tabsSupportingBrowsers.browserPackages[0] || - tabsSupportingBrowsers.servicePackages[0] - } - await promptAsync({ browserPackage }).catch(e => console.log(e)) + await promptAsync({ browserPackage: await browserPackage() }).catch(e => console.log(e)) } })() }, [request]) diff --git a/src/components/openLink.ts b/src/components/openLink.ts index 96531e87..30425685 100644 --- a/src/components/openLink.ts +++ b/src/components/openLink.ts @@ -1,4 +1,5 @@ import apiInstance from '@api/instance' +import browserPackage from '@helpers/browserPackage' import navigationRef from '@helpers/navigationRef' import { matchAccount, matchStatus } from '@helpers/urlMatcher' import { store } from '@root/store' @@ -91,7 +92,8 @@ const openLink = async (url: string, navigation?: any) => { case 'internal': await WebBrowser.openBrowserAsync(encodeURI(url), { dismissButtonStyle: 'close', - enableBarCollapsing: true + enableBarCollapsing: true, + browserPackage: await browserPackage() }) break case 'external': diff --git a/src/helpers/browserPackage.ts b/src/helpers/browserPackage.ts new file mode 100644 index 00000000..b5e3a1b0 --- /dev/null +++ b/src/helpers/browserPackage.ts @@ -0,0 +1,16 @@ +import * as WebBrowser from 'expo-web-browser' +import { Platform } from 'react-native' + +const browserPackage = async () => { + let browserPackage: string | undefined + if (Platform.OS === 'android') { + const tabsSupportingBrowsers = await WebBrowser.getCustomTabsSupportingBrowsersAsync() + browserPackage = + tabsSupportingBrowsers?.preferredBrowserPackage || + tabsSupportingBrowsers.browserPackages[0] || + tabsSupportingBrowsers.servicePackages[0] + } + return browserPackage +} + +export default browserPackage diff --git a/src/screens/Tabs/Me/Push.tsx b/src/screens/Tabs/Me/Push.tsx index 3e75454b..5d498b8b 100644 --- a/src/screens/Tabs/Me/Push.tsx +++ b/src/screens/Tabs/Me/Push.tsx @@ -2,6 +2,7 @@ import Button from '@components/Button' import Icon from '@components/Icon' import { MenuContainer, MenuRow } from '@components/Menu' import CustomText from '@components/Text' +import browserPackage from '@helpers/browserPackage' import { useAppDispatch } from '@root/store' import { isDevelopment } from '@utils/checkEnvironment' import { getExpoToken } from '@utils/slices/appSlice' @@ -153,7 +154,11 @@ const TabMePush: React.FC = () => { WebBrowser.openBrowserAsync('https://tooot.app/how-push-works')} + onPress={async () => + WebBrowser.openBrowserAsync('https://tooot.app/how-push-works', { + browserPackage: await browserPackage() + }) + } /> {alerts} diff --git a/src/screens/Tabs/Me/Root/Settings.tsx b/src/screens/Tabs/Me/Root/Settings.tsx index d7687db4..6ea7d071 100644 --- a/src/screens/Tabs/Me/Root/Settings.tsx +++ b/src/screens/Tabs/Me/Root/Settings.tsx @@ -1,4 +1,5 @@ import { MenuContainer, MenuRow } from '@components/Menu' +import browserPackage from '@helpers/browserPackage' import { useNavigation } from '@react-navigation/native' import { getInstanceActive, getInstanceUrl } from '@utils/slices/instancesSlice' import * as WebBrowser from 'expo-web-browser' @@ -25,11 +26,15 @@ const Settings: React.FC = () => { iconFront='Sliders' iconBack='ExternalLink' title={t('me.stacks.webSettings.name')} - onPress={() => + onPress={async () => WebBrowser.openAuthSessionAsync( `https://${url}/settings/preferences`, 'tooot://tooot', - { dismissButtonStyle: 'done', readerMode: false } + { + browserPackage: await browserPackage(), + dismissButtonStyle: 'done', + readerMode: false + } ) } /> diff --git a/src/screens/Tabs/Me/Settings/Tooot.tsx b/src/screens/Tabs/Me/Settings/Tooot.tsx index cac380dd..ab15f365 100644 --- a/src/screens/Tabs/Me/Settings/Tooot.tsx +++ b/src/screens/Tabs/Me/Settings/Tooot.tsx @@ -14,6 +14,7 @@ import { isDevelopment, isRelease } from '@utils/checkEnvironment' import { Platform } from 'react-native' import Constants from 'expo-constants' import { getExpoToken } from '@utils/slices/appSlice' +import browserPackage from '@helpers/browserPackage' const SettingsTooot: React.FC = () => { const instanceActive = useSelector(getInstanceActive) @@ -52,7 +53,7 @@ const SettingsTooot: React.FC = () => { title={t('me.settings.contact.heading')} content={} iconBack='ChevronRight' - onPress={() => { + onPress={async () => { if (instanceActive !== -1) { navigation.navigate('Screen-Compose', { type: 'conversation', @@ -71,7 +72,9 @@ const SettingsTooot: React.FC = () => { ']' }) } else { - WebBrowser.openBrowserAsync('https://social.xmflsct.com/@tooot') + WebBrowser.openBrowserAsync('https://social.xmflsct.com/@tooot', { + browserPackage: await browserPackage() + }) } }} />