···12121313import {isNetworkError} from '#/lib/strings/errors'
1414import {logger} from '#/logger'
1515-import {isIOS} from '#/platform/detection'
1515+import {isAndroid, isIOS} from '#/platform/detection'
1616import {IS_TESTFLIGHT} from '#/env'
17171818const MINIMUM_MINIMIZE_TIME = 15 * 60e3
···192192 if (!isEnabled || currentChannel?.startsWith('pull-request')) {
193193 return
194194 }
195195+196196+ // TEMP: disable wake-from-background OTA loading on Android.
197197+ // This is causing a crash when the thread view is open due to
198198+ // `maintainVisibleContentPosition`. See repro repo for more details:
199199+ // https://github.com/mozzius/ota-crash-repro
200200+ // Old Arch only - re-enable once we're on the New Archictecture! -sfn
201201+ if (isAndroid) return
195202196203 const subscription = AppState.addEventListener(
197204 'change',
+10-3
src/lib/media/manip.ts
···432432433433async function downloadImage(uri: string, path: string, timeout: number) {
434434 const dlResumable = createDownloadResumable(uri, path, {cache: true})
435435-436436- const to1 = setTimeout(() => dlResumable.cancelAsync(), timeout)
435435+ let timedOut = false
436436+ const to1 = setTimeout(() => {
437437+ timedOut = true
438438+ dlResumable.cancelAsync()
439439+ }, timeout)
437440438441 const dlRes = await dlResumable.downloadAsync()
439442 clearTimeout(to1)
440443441444 if (!dlRes?.uri) {
442442- throw new Error('Failed to download image - dlRes is undefined')
445445+ if (timedOut) {
446446+ throw new Error('Failed to download image - timed out')
447447+ } else {
448448+ throw new Error('Failed to download image - dlRes is undefined')
449449+ }
443450 }
444451445452 return normalizePath(dlRes.uri)
···11import {AccordionAnimation} from '#/lib/custom-animations/AccordionAnimation'
22-import {useGate} from '#/lib/statsig/statsig'
32import {isAndroid} from '#/platform/detection'
43import {useSuggestedFollowsByActorQuery} from '#/state/queries/suggested-follows'
54import {ProfileGrid} from '#/components/FeedInterstitials'
···2726 isExpanded: boolean
2827 actorDid: string
2928}) {
3030- const gate = useGate()
3129 const {isLoading, data, error} = useSuggestedFollowsByActorQuery({
3230 did: actorDid,
3331 })
···4038 * Blocking the ability to scroll on Android is too much of a trade-off for now.
4139 **/
4240 if (isAndroid) return null
4343-4444- if (!gate('post_follow_profile_suggested_accounts')) return null
45414642 return (
4743 <AccordionAnimation isExpanded={isExpanded}>
+1-1
src/view/com/composer/Composer.tsx
···580580 label={_(msg`View post`)}
581581 onPress={() => {
582582 const {host: name, rkey} = new AtUri(postUri)
583583- navigation.navigate('PostThread', {name, rkey})
583583+ navigation.push('PostThread', {name, rkey})
584584 }}>
585585 <Trans context="Action to view the post the user just created">
586586 View