Skip to content

Commit

Permalink
Accessibility fixes: add missing labels, dynamically scale home header (
Browse files Browse the repository at this point in the history
#1516)

* Improve labels

* Dynanically adjust home header to account for font scaling
  • Loading branch information
pfrazee authored Sep 23, 2023
1 parent 88b95df commit b7697f0
Show file tree
Hide file tree
Showing 10 changed files with 52 additions and 32 deletions.
4 changes: 2 additions & 2 deletions src/view/com/posts/FeedItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,9 @@ export const FeedItem = observer(function FeedItemImpl({
<Link
style={styles.includeReason}
href={makeProfileLink(item.reasonRepost.by)}
title={sanitizeDisplayName(
title={`Reposted by ${sanitizeDisplayName(
item.reasonRepost.by.displayName || item.reasonRepost.by.handle,
)}>
)}`}>
<FontAwesomeIcon
icon="retweet"
style={{
Expand Down
4 changes: 3 additions & 1 deletion src/view/com/profile/ProfileHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,9 @@ const ProfileHeaderLoaded = observer(function ProfileHeaderLoadedImpl({
{dropdownItems?.length ? (
<NativeDropdown
testID="profileHeaderDropdownBtn"
items={dropdownItems}>
items={dropdownItems}
accessibilityLabel="More options"
accessibilityHint="">
<View style={[styles.btn, styles.secondaryBtn, pal.btn]}>
<FontAwesomeIcon icon="ellipsis" size={20} style={[pal.text]} />
</View>
Expand Down
4 changes: 3 additions & 1 deletion src/view/com/util/Link.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ export const TextLink = observer(function TextLink({
dataSet,
title,
onPress,
...orgProps
}: {
testID?: string
type?: TypographyVariant
Expand Down Expand Up @@ -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}
</Text>
)
Expand Down
6 changes: 5 additions & 1 deletion src/view/com/util/UserAvatar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,11 @@ export function UserAvatar({

// onSelectNewAvatar is only passed as prop on the EditProfile component
return onSelectNewAvatar ? (
<NativeDropdown testID="changeAvatarBtn" items={dropdownItems}>
<NativeDropdown
testID="changeAvatarBtn"
items={dropdownItems}
accessibilityLabel="Image options"
accessibilityHint="">
{avatar ? (
<HighPriorityImage
testID="userAvatarImage"
Expand Down
6 changes: 5 additions & 1 deletion src/view/com/util/UserBanner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,11 @@ export function UserBanner({

// setUserBanner is only passed as prop on the EditProfile component
return onSelectNewBanner ? (
<NativeDropdown testID="changeBannerBtn" items={dropdownItems}>
<NativeDropdown
testID="changeBannerBtn"
items={dropdownItems}
accessibilityLabel="Image options"
accessibilityHint="">
{banner ? (
<Image
testID="userBannerImage"
Expand Down
6 changes: 5 additions & 1 deletion src/view/screens/CustomFeed.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,11 @@ export const CustomFeedScreenInner = observer(
)}
</>
) : null}
<NativeDropdown testID="feedHeaderDropdownBtn" items={dropdownItems}>
<NativeDropdown
testID="feedHeaderDropdownBtn"
items={dropdownItems}
accessibilityLabel="More options"
accessibilityHint="">
<View
style={{
paddingLeft: 12,
Expand Down
5 changes: 4 additions & 1 deletion src/view/screens/Feeds.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ export const FeedsScreen = withAuthRequired(
<Text type="title-lg" style={[pal.text, s.bold]}>
My Feeds
</Text>
<Link href="/settings/saved-feeds">
<Link
href="/settings/saved-feeds"
accessibilityLabel="Edit My Feeds"
accessibilityHint="">
<CogIcon strokeWidth={1.5} style={pal.icon} size={28} />
</Link>
</View>
Expand Down
42 changes: 19 additions & 23 deletions src/view/screens/Home.tsx
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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<HomeTabNavigatorParams, 'Home'>
Expand Down Expand Up @@ -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<FlatList>(null)
const {appState} = useAppState({
onForeground: () => doPoll(true),
Expand Down Expand Up @@ -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(() => {
Expand Down Expand Up @@ -301,6 +281,8 @@ const FeedPage = observer(function FeedPageImpl({
type="title-lg"
href="/settings/home-feed"
style={{fontWeight: 'bold'}}
accessibilityLabel="Feed Preferences"
accessibilityHint=""
text={
<FontAwesomeIcon
icon="sliders"
Expand Down Expand Up @@ -347,3 +329,17 @@ const FeedPage = observer(function FeedPageImpl({
</View>
)
})

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
}
6 changes: 5 additions & 1 deletion src/view/screens/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -651,7 +651,11 @@ function AccountDropdownBtn({handle}: {handle: string}) {
]
return (
<Pressable accessibilityRole="button" style={s.pl10}>
<NativeDropdown testID="accountSettingsDropdownBtn" items={items}>
<NativeDropdown
testID="accountSettingsDropdownBtn"
items={items}
accessibilityLabel="Account options"
accessibilityHint="">
<FontAwesomeIcon
icon="ellipsis-h"
style={pal.textLight as FontAwesomeIconStyle}
Expand Down
1 change: 1 addition & 0 deletions src/view/shell/desktop/LeftNav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const ProfileCard = observer(function ProfileCardImpl() {
<Link
href={makeProfileLink(store.me)}
style={[styles.profileCard, !isDesktop && styles.profileCardTablet]}
title="My Profile"
asAnchor>
<UserAvatar avatar={store.me.avatar} size={size} />
</Link>
Expand Down

0 comments on commit b7697f0

Please sign in to comment.