diff --git a/lib/components/base-edit-thread-avatar-provider.react.js b/lib/components/base-edit-thread-avatar-provider.react.js
--- a/lib/components/base-edit-thread-avatar-provider.react.js
+++ b/lib/components/base-edit-thread-avatar-provider.react.js
@@ -12,10 +12,7 @@
   ImageAvatarDBContent,
 } from '../types/avatar-types.js';
 import type { LoadingStatus } from '../types/loading-types.js';
-import type {
-  MediaLibrarySelection,
-  NativeMediaSelection,
-} from '../types/media-types.js';
+import type { NativeMediaSelection } from '../types/media-types.js';
 import type { UpdateThreadRequest } from '../types/thread-types.js';
 import {
   useDispatchActionPromise,
@@ -25,7 +22,6 @@
 
 export type EditThreadAvatarContextType = {
   +threadAvatarSaveInProgress: boolean,
-  +selectFromGalleryAndUpdateThreadAvatar: (threadID: string) => Promise<void>,
   +updateImageThreadAvatar: (
     selection: NativeMediaSelection,
     threadID: string,
@@ -41,7 +37,6 @@
 
 type Props = {
   +displayFailureAlert: () => mixed,
-  +selectFromGallery: () => Promise<?MediaLibrarySelection>,
   +useUploadSelectedMedia: (
     setProcessingOrUploadInProgress?: (inProgress: boolean) => mixed,
   ) => (selection: NativeMediaSelection) => Promise<?ImageAvatarDBContent>,
@@ -51,7 +46,6 @@
 function BaseEditThreadAvatarProvider(props: Props): React.Node {
   const {
     displayFailureAlert,
-    selectFromGallery,
     useUploadSelectedMedia,
     activeThreadID,
     children,
@@ -135,17 +129,6 @@
     ],
   );
 
-  const selectFromGalleryAndUpdateThreadAvatar = React.useCallback(
-    async (threadID: string) => {
-      const selection: ?MediaLibrarySelection = await selectFromGallery();
-      if (!selection) {
-        return;
-      }
-      await updateImageThreadAvatar(selection, threadID);
-    },
-    [selectFromGallery, updateImageThreadAvatar],
-  );
-
   const setThreadAvatar = React.useCallback(
     async (threadID: string, avatarRequest: UpdateUserAvatarRequest) => {
       const updateThreadRequest: UpdateThreadRequest = {
@@ -174,16 +157,10 @@
   const context = React.useMemo(
     () => ({
       threadAvatarSaveInProgress,
-      selectFromGalleryAndUpdateThreadAvatar,
       updateImageThreadAvatar,
       setThreadAvatar,
     }),
-    [
-      threadAvatarSaveInProgress,
-      selectFromGalleryAndUpdateThreadAvatar,
-      updateImageThreadAvatar,
-      setThreadAvatar,
-    ],
+    [threadAvatarSaveInProgress, updateImageThreadAvatar, setThreadAvatar],
   );
 
   return (
diff --git a/native/avatars/avatar-hooks.js b/native/avatars/avatar-hooks.js
--- a/native/avatars/avatar-hooks.js
+++ b/native/avatars/avatar-hooks.js
@@ -9,6 +9,7 @@
 import { useSafeAreaInsets } from 'react-native-safe-area-context';
 
 import { uploadMultimedia } from 'lib/actions/upload-actions.js';
+import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
 import { EditUserAvatarContext } from 'lib/components/edit-user-avatar-provider.react.js';
 import {
   extensionFromFilename,
@@ -307,6 +308,27 @@
   return selectFromGalleryAndUpdateUserAvatar;
 }
 
+function useSelectFromGalleryAndUpdateThreadAvatar(): (
+  threadID: string,
+) => Promise<void> {
+  const editThreadAvatarContext = React.useContext(EditThreadAvatarContext);
+  invariant(editThreadAvatarContext, 'editThreadAvatarContext must be defined');
+  const { updateImageThreadAvatar } = editThreadAvatarContext;
+
+  const selectFromGalleryAndUpdateThreadAvatar = React.useCallback(
+    async (threadID: string): Promise<void> => {
+      const selection: ?MediaLibrarySelection = await selectFromGallery();
+      if (!selection) {
+        return;
+      }
+      await updateImageThreadAvatar(selection, threadID);
+    },
+    [updateImageThreadAvatar],
+  );
+
+  return selectFromGalleryAndUpdateThreadAvatar;
+}
+
 type ShowAvatarActionSheetOptions = {
   +id: 'emoji' | 'image' | 'camera' | 'ens' | 'cancel' | 'remove',
   +onPress?: () => mixed,
@@ -440,4 +462,5 @@
   useSelectFromGalleryAndUpdateUserAvatar,
   useNativeSetUserAvatar,
   useNativeUpdateUserImageAvatar,
+  useSelectFromGalleryAndUpdateThreadAvatar,
 };
diff --git a/native/avatars/edit-thread-avatar.react.js b/native/avatars/edit-thread-avatar.react.js
--- a/native/avatars/edit-thread-avatar.react.js
+++ b/native/avatars/edit-thread-avatar.react.js
@@ -8,7 +8,10 @@
 import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
 import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
 
-import { useShowAvatarActionSheet } from './avatar-hooks.js';
+import {
+  useSelectFromGalleryAndUpdateThreadAvatar,
+  useShowAvatarActionSheet,
+} from './avatar-hooks.js';
 import EditAvatarBadge from './edit-avatar-badge.react.js';
 import ThreadAvatar from './thread-avatar.react.js';
 import {
@@ -27,11 +30,11 @@
 
   const editThreadAvatarContext = React.useContext(EditThreadAvatarContext);
   invariant(editThreadAvatarContext, 'editThreadAvatarContext should be set');
-  const {
-    threadAvatarSaveInProgress,
-    selectFromGalleryAndUpdateThreadAvatar,
-    setThreadAvatar,
-  } = editThreadAvatarContext;
+  const { threadAvatarSaveInProgress, setThreadAvatar } =
+    editThreadAvatarContext;
+
+  const selectFromGalleryAndUpdateThreadAvatar =
+    useSelectFromGalleryAndUpdateThreadAvatar();
 
   const { navigate } = useNavigation();
 
diff --git a/native/avatars/native-edit-thread-avatar-provider.react.js b/native/avatars/native-edit-thread-avatar-provider.react.js
--- a/native/avatars/native-edit-thread-avatar-provider.react.js
+++ b/native/avatars/native-edit-thread-avatar-provider.react.js
@@ -4,7 +4,7 @@
 
 import { BaseEditThreadAvatarProvider } from 'lib/components/base-edit-thread-avatar-provider.react.js';
 
-import { selectFromGallery, useUploadSelectedMedia } from './avatar-hooks.js';
+import { useUploadSelectedMedia } from './avatar-hooks.js';
 import { activeThreadSelector } from '../navigation/nav-selectors.js';
 import { NavContext } from '../navigation/navigation-context.js';
 import Alert from '../utils/alert.js';
@@ -32,7 +32,6 @@
   return (
     <BaseEditThreadAvatarProvider
       displayFailureAlert={displayAvatarUpdateFailureAlert}
-      selectFromGallery={selectFromGallery}
       useUploadSelectedMedia={useUploadSelectedMedia}
       activeThreadID={activeThreadID}
     >