diff options
Diffstat (limited to 'src/view/screens')
-rw-r--r-- | src/view/screens/AccessibilitySettings.tsx | 132 | ||||
-rw-r--r-- | src/view/screens/Settings/index.tsx | 71 |
2 files changed, 161 insertions, 42 deletions
diff --git a/src/view/screens/AccessibilitySettings.tsx b/src/view/screens/AccessibilitySettings.tsx new file mode 100644 index 000000000..ac0d985f1 --- /dev/null +++ b/src/view/screens/AccessibilitySettings.tsx @@ -0,0 +1,132 @@ +import React from 'react' +import {StyleSheet, View} from 'react-native' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' +import {useFocusEffect} from '@react-navigation/native' + +import {isNative} from '#/platform/detection' +import {useSetMinimalShellMode} from '#/state/shell' +import {useAnalytics} from 'lib/analytics/analytics' +import {usePalette} from 'lib/hooks/usePalette' +import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' +import {CommonNavigatorParams, NativeStackScreenProps} from 'lib/routes/types' +import {s} from 'lib/styles' +import { + useAutoplayDisabled, + useHapticsDisabled, + useRequireAltTextEnabled, + useSetAutoplayDisabled, + useSetHapticsDisabled, + useSetRequireAltTextEnabled, +} from 'state/preferences' +import {ToggleButton} from 'view/com/util/forms/ToggleButton' +import {SimpleViewHeader} from '../com/util/SimpleViewHeader' +import {Text} from '../com/util/text/Text' +import {ScrollView} from '../com/util/Views' + +type Props = NativeStackScreenProps< + CommonNavigatorParams, + 'AccessibilitySettings' +> +export function AccessibilitySettingsScreen({}: Props) { + const pal = usePalette('default') + const setMinimalShellMode = useSetMinimalShellMode() + const {screen} = useAnalytics() + const {isMobile} = useWebMediaQueries() + const {_} = useLingui() + + const requireAltTextEnabled = useRequireAltTextEnabled() + const setRequireAltTextEnabled = useSetRequireAltTextEnabled() + const autoplayDisabled = useAutoplayDisabled() + const setAutoplayDisabled = useSetAutoplayDisabled() + const hapticsDisabled = useHapticsDisabled() + const setHapticsDisabled = useSetHapticsDisabled() + + useFocusEffect( + React.useCallback(() => { + screen('PreferencesExternalEmbeds') + setMinimalShellMode(false) + }, [screen, setMinimalShellMode]), + ) + + return ( + <View style={s.hContentRegion} testID="accessibilitySettingsScreen"> + <SimpleViewHeader + showBackButton={isMobile} + style={[ + pal.border, + {borderBottomWidth: 1}, + !isMobile && {borderLeftWidth: 1, borderRightWidth: 1}, + ]}> + <View style={{flex: 1}}> + <Text type="title-lg" style={[pal.text, {fontWeight: 'bold'}]}> + <Trans>Accessibility Settings</Trans> + </Text> + </View> + </SimpleViewHeader> + <ScrollView + // @ts-ignore web only -prf + dataSet={{'stable-gutters': 1}} + style={s.flex1} + contentContainerStyle={[ + s.flex1, + {paddingBottom: 200}, + isMobile && pal.viewLight, + ]}> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + <Trans>Alt text</Trans> + </Text> + <View style={[pal.view, styles.toggleCard]}> + <ToggleButton + type="default-light" + label={_(msg`Require alt text before posting`)} + labelType="lg" + isSelected={requireAltTextEnabled} + onPress={() => setRequireAltTextEnabled(!requireAltTextEnabled)} + /> + </View> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + <Trans>Media</Trans> + </Text> + <View style={[pal.view, styles.toggleCard]}> + <ToggleButton + type="default-light" + label={_(msg`Disable autoplay for GIFs`)} + labelType="lg" + isSelected={autoplayDisabled} + onPress={() => setAutoplayDisabled(!autoplayDisabled)} + /> + </View> + {isNative && ( + <> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + <Trans>Haptics</Trans> + </Text> + <View style={[pal.view, styles.toggleCard]}> + <ToggleButton + type="default-light" + label={_(msg`Disable haptic feedback`)} + labelType="lg" + isSelected={hapticsDisabled} + onPress={() => setHapticsDisabled(!hapticsDisabled)} + /> + </View> + </> + )} + </ScrollView> + </View> + ) +} + +const styles = StyleSheet.create({ + heading: { + paddingHorizontal: 18, + paddingTop: 14, + paddingBottom: 6, + }, + toggleCard: { + paddingVertical: 8, + paddingHorizontal: 6, + marginBottom: 1, + }, +}) diff --git a/src/view/screens/Settings/index.tsx b/src/view/screens/Settings/index.tsx index b97faafad..bb38da676 100644 --- a/src/view/screens/Settings/index.tsx +++ b/src/view/screens/Settings/index.tsx @@ -20,15 +20,11 @@ import {useLingui} from '@lingui/react' import {useFocusEffect, useNavigation} from '@react-navigation/native' import {useQueryClient} from '@tanstack/react-query' -import {isIOS, isNative} from '#/platform/detection' +import {isNative} from '#/platform/detection' import {useModalControls} from '#/state/modals' import {clearLegacyStorage} from '#/state/persisted/legacy' import {clear as clearStorage} from '#/state/persisted/store' import { - useRequireAltTextEnabled, - useSetRequireAltTextEnabled, -} from '#/state/preferences' -import { useInAppBrowser, useSetInAppBrowser, } from '#/state/preferences/in-app-browser' @@ -56,10 +52,6 @@ import {makeProfileLink} from 'lib/routes/links' import {CommonNavigatorParams, NativeStackScreenProps} from 'lib/routes/types' import {NavigationProp} from 'lib/routes/types' import {colors, s} from 'lib/styles' -import { - useHapticsDisabled, - useSetHapticsDisabled, -} from 'state/preferences/disable-haptics' import {AccountDropdownBtn} from 'view/com/util/AccountDropdownBtn' import {SelectableBtn} from 'view/com/util/forms/SelectableBtn' import {ToggleButton} from 'view/com/util/forms/ToggleButton' @@ -162,12 +154,8 @@ export function SettingsScreen({}: Props) { const pal = usePalette('default') const {_} = useLingui() const setMinimalShellMode = useSetMinimalShellMode() - const requireAltTextEnabled = useRequireAltTextEnabled() - const setRequireAltTextEnabled = useSetRequireAltTextEnabled() const inAppBrowserPref = useInAppBrowser() const setUseInAppBrowser = useSetInAppBrowser() - const isHapticsDisabled = useHapticsDisabled() - const setHapticsDisabled = useSetHapticsDisabled() const onboardingDispatch = useOnboardingDispatch() const navigation = useNavigation<NavigationProp>() const {isMobile} = useWebMediaQueries() @@ -282,6 +270,10 @@ export function SettingsScreen({}: Props) { navigation.navigate('SavedFeeds') }, [navigation]) + const onPressAccessibilitySettings = React.useCallback(() => { + navigation.navigate('AccessibilitySettings') + }, [navigation]) + const onPressStatusPage = React.useCallback(() => { Linking.openURL(STATUS_PAGE_URL) }, []) @@ -318,7 +310,7 @@ export function SettingsScreen({}: Props) { </View> </SimpleViewHeader> <ScrollView - style={[s.hContentRegion]} + style={s.hContentRegion} contentContainerStyle={isMobile && pal.viewLight} scrollIndicatorInsets={{right: 1}} // @ts-ignore web only -prf @@ -418,21 +410,6 @@ export function SettingsScreen({}: Props) { <View style={styles.spacer20} /> <Text type="xl-bold" style={[pal.text, styles.heading]}> - <Trans>Accessibility</Trans> - </Text> - <View style={[pal.view, styles.toggleCard]}> - <ToggleButton - type="default-light" - label={_(msg`Require alt text before posting`)} - labelType="lg" - isSelected={requireAltTextEnabled} - onPress={() => setRequireAltTextEnabled(!requireAltTextEnabled)} - /> - </View> - - <View style={styles.spacer20} /> - - <Text type="xl-bold" style={[pal.text, styles.heading]}> <Trans>Appearance</Trans> </Text> <View> @@ -493,6 +470,29 @@ export function SettingsScreen({}: Props) { <Trans>Basics</Trans> </Text> <TouchableOpacity + testID="accessibilitySettingsBtn" + style={[ + styles.linkCard, + pal.view, + isSwitchingAccounts && styles.dimmed, + ]} + onPress={ + isSwitchingAccounts ? undefined : onPressAccessibilitySettings + } + accessibilityRole="button" + accessibilityLabel={_(msg`Accessibility settings`)} + accessibilityHint={_(msg`Opens accessibility settings`)}> + <View style={[styles.iconContainer, pal.btn]}> + <FontAwesomeIcon + icon="universal-access" + style={pal.text as FontAwesomeIconStyle} + /> + </View> + <Text type="lg" style={pal.text}> + <Trans>Accessibility</Trans> + </Text> + </TouchableOpacity> + <TouchableOpacity testID="preferencesHomeFeedButton" style={[ styles.linkCard, @@ -689,19 +689,6 @@ export function SettingsScreen({}: Props) { /> </View> )} - {isNative && ( - <View style={[pal.view, styles.toggleCard]}> - <ToggleButton - type="default-light" - label={ - isIOS ? _(msg`Disable haptics`) : _(msg`Disable vibrations`) - } - labelType="lg" - isSelected={isHapticsDisabled} - onPress={() => setHapticsDisabled(!isHapticsDisabled)} - /> - </View> - )} <View style={styles.spacer20} /> <Text type="xl-bold" style={[pal.text, styles.heading]}> <Trans>Account</Trans> |