From b7697f08d65a0095bfc06578d689b8b8f61bef69 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Fri, 22 Sep 2023 17:04:47 -0700 Subject: [PATCH] Accessibility fixes: add missing labels, dynamically scale home header (#1516) * Improve labels * Dynanically adjust home header to account for font scaling --- src/view/com/posts/FeedItem.tsx | 4 +-- src/view/com/profile/ProfileHeader.tsx | 4 ++- src/view/com/util/Link.tsx | 4 ++- src/view/com/util/UserAvatar.tsx | 6 +++- src/view/com/util/UserBanner.tsx | 6 +++- src/view/screens/CustomFeed.tsx | 6 +++- src/view/screens/Feeds.tsx | 5 ++- src/view/screens/Home.tsx | 42 ++++++++++++-------------- src/view/screens/Settings.tsx | 6 +++- src/view/shell/desktop/LeftNav.tsx | 1 + 10 files changed, 52 insertions(+), 32 deletions(-) diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx index 71be3969..f6b6e533 100644 --- a/src/view/com/posts/FeedItem.tsx +++ b/src/view/com/posts/FeedItem.tsx @@ -203,9 +203,9 @@ export const FeedItem = observer(function FeedItemImpl({ + )}`}> + items={dropdownItems} + accessibilityLabel="More options" + accessibilityHint=""> diff --git a/src/view/com/util/Link.tsx b/src/view/com/util/Link.tsx index 1a6f047f..8734cf32 100644 --- a/src/view/com/util/Link.tsx +++ b/src/view/com/util/Link.tsx @@ -142,6 +142,7 @@ export const TextLink = observer(function TextLink({ dataSet, title, onPress, + ...orgProps }: { testID?: string type?: TypographyVariant @@ -190,7 +191,8 @@ export const TextLink = observer(function TextLink({ title={title} // @ts-ignore web only -prf hrefAttrs={hrefAttrs} // hack to get open in new tab to work on safari. without this, safari will open in a new window - {...props}> + {...props} + {...orgProps}> {text} ) diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index 7a42ab4d..80d506b4 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -230,7 +230,11 @@ export function UserAvatar({ // onSelectNewAvatar is only passed as prop on the EditProfile component return onSelectNewAvatar ? ( - + {avatar ? ( + {banner ? ( ) : null} - + My Feeds - + diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 60cda31d..e53d4a08 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -1,5 +1,5 @@ import React from 'react' -import {FlatList, View} from 'react-native' +import {FlatList, View, useWindowDimensions} from 'react-native' import {useFocusEffect, useIsFocused} from '@react-navigation/native' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {FontAwesomeIconStyle} from '@fortawesome/react-native-fontawesome' @@ -26,9 +26,6 @@ import {useAnalytics} from 'lib/analytics/analytics' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {ComposeIcon2} from 'lib/icons' -const HEADER_OFFSET_MOBILE = 78 -const HEADER_OFFSET_TABLET = 50 -const HEADER_OFFSET_DESKTOP = 0 const POLL_FREQ = 30e3 // 30sec type Props = NativeStackScreenProps @@ -160,16 +157,10 @@ const FeedPage = observer(function FeedPageImpl({ }) { const store = useStores() const pal = usePalette('default') - const {isMobile, isTablet, isDesktop} = useWebMediaQueries() + const {isDesktop} = useWebMediaQueries() const [onMainScroll, isScrolledDown, resetMainScroll] = useOnMainScroll(store) const {screen, track} = useAnalytics() - const [headerOffset, setHeaderOffset] = React.useState( - isMobile - ? HEADER_OFFSET_MOBILE - : isTablet - ? HEADER_OFFSET_TABLET - : HEADER_OFFSET_DESKTOP, - ) + const headerOffset = useHeaderOffset() const scrollElRef = React.useRef(null) const {appState} = useAppState({ onForeground: () => doPoll(true), @@ -214,17 +205,6 @@ const FeedPage = observer(function FeedPageImpl({ } }, [isPageFocused, scrollToTop, feed]) - // listens for resize events - React.useEffect(() => { - setHeaderOffset( - isMobile - ? HEADER_OFFSET_MOBILE - : isTablet - ? HEADER_OFFSET_TABLET - : HEADER_OFFSET_DESKTOP, - ) - }, [isMobile, isTablet]) - // fires when page within screen is activated/deactivated // - check for latest React.useEffect(() => { @@ -301,6 +281,8 @@ const FeedPage = observer(function FeedPageImpl({ type="title-lg" href="/settings/home-feed" style={{fontWeight: 'bold'}} + accessibilityLabel="Feed Preferences" + accessibilityHint="" text={ ) }) + +function useHeaderOffset() { + const {isDesktop, isTablet} = useWebMediaQueries() + const {fontScale} = useWindowDimensions() + if (isDesktop) { + return 0 + } + if (isTablet) { + return 50 + } + // default text takes 44px, plus 34px of pad + // scale the 44px by the font scale + return 34 + 44 * fontScale +} diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index 4783f335..7b17b534 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -651,7 +651,11 @@ function AccountDropdownBtn({handle}: {handle: string}) { ] return ( - +