mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2025-12-23 22:18:36 -05:00
Change terminology from gallery to photo library (#2663)
* Update user-facing terminology from gallery to photo library * Update terminology for devs to make the user-facing change easier to remember * Update snapshots
This commit is contained in:
committed by
GitHub
parent
285612ed31
commit
400f118ad9
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
"data": [
|
||||
{
|
||||
"path": "assets/fonts/INatIcon.ttf",
|
||||
"sha1": "89474f5d4caf95704dfaf57d6155f39b9fe2c08a"
|
||||
"sha1": "4f576448e7cb11aa54c32307a73fcc265ea4a920"
|
||||
},
|
||||
{
|
||||
"path": "assets/fonts/Lato-Bold.ttf",
|
||||
|
||||
Binary file not shown.
@@ -15,7 +15,7 @@ export default async function switchPowerMode() {
|
||||
await waitFor( advancedInterfaceRadioButton ).toBeVisible().withTimeout( 10000 );
|
||||
await advancedInterfaceRadioButton.tap();
|
||||
// Tap the settings radio button for power user mode
|
||||
const powerUserRadioButton = element( by.id( "all-observation-option" ) );
|
||||
const powerUserRadioButton = element( by.id( "all-observation-options" ) );
|
||||
await waitFor( powerUserRadioButton ).toBeVisible().withTimeout( 10000 );
|
||||
await powerUserRadioButton.tap();
|
||||
}
|
||||
|
||||
@@ -3,53 +3,65 @@
|
||||
"strings" : {
|
||||
"CFBundleDisplayName" : {
|
||||
"comment" : "Bundle display name",
|
||||
"shouldTranslate" : false,
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "iNat Next"
|
||||
}
|
||||
},
|
||||
"es-MX" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNat Next"
|
||||
}
|
||||
},
|
||||
"hu" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNat Next"
|
||||
}
|
||||
},
|
||||
"id" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNat Next"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shouldTranslate" : false
|
||||
},
|
||||
"CFBundleName" : {
|
||||
"comment" : "Bundle name",
|
||||
"shouldTranslate" : false,
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "iNaturalistReactNative"
|
||||
}
|
||||
},
|
||||
"es-MX" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNaturalistReactNative"
|
||||
}
|
||||
},
|
||||
"hu" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNaturalistReactNative"
|
||||
}
|
||||
},
|
||||
"id" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"state" : "needs_review",
|
||||
"value" : "iNaturalistReactNative"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"shouldTranslate" : false
|
||||
},
|
||||
"NSAppleMusicUsageDescription" : {
|
||||
"comment" : "Description of why we ask for permission to access the music library.",
|
||||
@@ -353,8 +365,16 @@
|
||||
},
|
||||
"NSHumanReadableCopyright" : {
|
||||
"comment" : "Copyright (human-readable)",
|
||||
"shouldTranslate" : false,
|
||||
"extractionState" : "extracted_with_value"
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"shouldTranslate" : false
|
||||
},
|
||||
"NSLocationAlwaysAndWhenInUseUsageDescription" : {
|
||||
"comment" : "Privacy - Location Always and When In Use Usage Description",
|
||||
|
||||
@@ -39,9 +39,9 @@ PODS:
|
||||
- hermes-engine/Pre-built (= 0.73.11)
|
||||
- hermes-engine/Pre-built (0.73.11)
|
||||
- libevent (2.1.12)
|
||||
- MMKV (2.0.0):
|
||||
- MMKVCore (~> 2.0.0)
|
||||
- MMKVCore (2.0.0)
|
||||
- MMKV (2.0.2):
|
||||
- MMKVCore (~> 2.0.2)
|
||||
- MMKVCore (2.0.2)
|
||||
- Mute (0.6.1)
|
||||
- RCT-Folly (2022.05.16.00):
|
||||
- boost
|
||||
@@ -1528,8 +1528,8 @@ SPEC CHECKSUMS:
|
||||
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
|
||||
hermes-engine: d992945b77c506e5164e6a9a77510c9d57472c59
|
||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||
MMKV: f7d1d5945c8765f97f39c3d121f353d46735d801
|
||||
MMKVCore: c04b296010fcb1d1638f2c69405096aac12f6390
|
||||
MMKV: 3eacda84cd1c4fc95cf848d3ecb69d85ed56006c
|
||||
MMKVCore: 508b4d3a8ce031f1b5c8bd235f0517fb3f4c73a9
|
||||
Mute: 20135a96076f140cc82bfc8b810e2d6150d8ec7e
|
||||
RCT-Folly: cd21f1661364f975ae76b3308167ad66b09f53f5
|
||||
RCTRequired: 415e56f7c33799a6483e41e4dce607f3daf1e69b
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
142F12D43DCA4301A4FA8E25 /* INatIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9E61060E5D7F4D7EADE6D77C /* INatIcon.ttf */; };
|
||||
191A91132CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; };
|
||||
191A91142CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; };
|
||||
191A91152CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; };
|
||||
@@ -21,7 +22,6 @@
|
||||
197A169E2A7C2567001A03DC /* taxonomy.json in Resources */ = {isa = PBXBuildFile; fileRef = 197A169C2A7C2567001A03DC /* taxonomy.json */; };
|
||||
3DE2C0F71E184822B561A1ED /* Lato-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3A54425709BB4844AFBC680D /* Lato-Italic.ttf */; };
|
||||
54EB1EFEC1F74152902EED02 /* Lato-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8C2D97D72EED451C887998A8 /* Lato-BoldItalic.ttf */; };
|
||||
59925732D1464B6388BDAEB7 /* INatIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2CFF1354495A49DEA8CEA670 /* INatIcon.ttf */; };
|
||||
5A8D64AB921678B40E0229C8 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
|
||||
725BA058C5384A9185E8036A /* Lato-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 00752F4ADC554701A45A848A /* Lato-Bold.ttf */; };
|
||||
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
|
||||
@@ -87,7 +87,6 @@
|
||||
19A5877328F8E3310016D128 /* iNaturalistReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iNaturalistReactNative-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
20043186B311EE211FEB259A /* libPods-iNaturalistReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iNaturalistReactNative.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2B8BE6258F04B67C38DE834A /* Pods-iNaturalistReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.release.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.release.xcconfig"; sourceTree = "<group>"; };
|
||||
2CFF1354495A49DEA8CEA670 /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = "<group>"; };
|
||||
3A54425709BB4844AFBC680D /* Lato-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Italic.ttf"; path = "../assets/fonts/Lato-Italic.ttf"; sourceTree = "<group>"; };
|
||||
3A9BAF07FCF24F668E2EF5AB /* Lato-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Medium.ttf"; path = "../assets/fonts/Lato-Medium.ttf"; sourceTree = "<group>"; };
|
||||
4B0AEEF6CA584BCF9880EB35 /* Lato-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Regular.ttf"; path = "../assets/fonts/Lato-Regular.ttf"; sourceTree = "<group>"; };
|
||||
@@ -103,6 +102,7 @@
|
||||
8C2D97D72EED451C887998A8 /* Lato-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-BoldItalic.ttf"; path = "../assets/fonts/Lato-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||
8F1AC6762BC1B610002F994B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||
8F346E492CF6912700CED7B4 /* geomodel.mlmodel */ = {isa = PBXFileReference; lastKnownFileType = file.mlmodel; path = geomodel.mlmodel; sourceTree = "<group>"; };
|
||||
9E61060E5D7F4D7EADE6D77C /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = "<group>"; };
|
||||
A336AF0ADEAE537AB1B73F98 /* libPods-iNaturalistReactNative-ShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iNaturalistReactNative-ShareExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
B8FC28F6DD66FAD52B79E072 /* Pods-iNaturalistReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.debug.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
D7AE5BDBC584A83878A04344 /* Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative-ShareExtension/Pods-iNaturalistReactNative-ShareExtension.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
@@ -261,7 +261,7 @@
|
||||
3A9BAF07FCF24F668E2EF5AB /* Lato-Medium.ttf */,
|
||||
69DF855D92EA4ADFB73B47F1 /* Lato-MediumItalic.ttf */,
|
||||
4B0AEEF6CA584BCF9880EB35 /* Lato-Regular.ttf */,
|
||||
2CFF1354495A49DEA8CEA670 /* INatIcon.ttf */,
|
||||
9E61060E5D7F4D7EADE6D77C /* INatIcon.ttf */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
@@ -398,7 +398,7 @@
|
||||
085DD3205807404CAFC32228 /* Lato-Medium.ttf in Resources */,
|
||||
E5DFC1C6FBFA45739CE91C69 /* Lato-MediumItalic.ttf in Resources */,
|
||||
AE4DC81B3A87484CB3FD6750 /* Lato-Regular.ttf in Resources */,
|
||||
59925732D1464B6388BDAEB7 /* INatIcon.ttf in Resources */,
|
||||
142F12D43DCA4301A4FA8E25 /* INatIcon.ttf in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"data": [
|
||||
{
|
||||
"path": "assets/fonts/INatIcon.ttf",
|
||||
"sha1": "89474f5d4caf95704dfaf57d6155f39b9fe2c08a"
|
||||
"sha1": "4f576448e7cb11aa54c32307a73fcc265ea4a920"
|
||||
},
|
||||
{
|
||||
"path": "assets/fonts/Lato-Bold.ttf",
|
||||
|
||||
@@ -2,7 +2,10 @@ import RNFS from "react-native-fs";
|
||||
|
||||
export const computerVisionPath = `${RNFS.DocumentDirectoryPath}/computerVisionSuggestions`;
|
||||
|
||||
export const galleryPhotosPath = `${RNFS.DocumentDirectoryPath}/galleryPhotos`;
|
||||
// note: when changing naming from gallery to photoLibrary in issue MOB-431,
|
||||
// this galleryPhotos path was intentionally left as-is, to avoid any issues
|
||||
// with cleaning caches
|
||||
export const photoLibraryPhotosPath = `${RNFS.DocumentDirectoryPath}/galleryPhotos`;
|
||||
|
||||
export const photoUploadPath = `${RNFS.DocumentDirectoryPath}/photoUploads`;
|
||||
|
||||
|
||||
@@ -64,9 +64,9 @@ const AddObsModal = ( { closeModal, navAndCloseModal }: Props ) => {
|
||||
className: classnames( GREEN_CIRCLE_CLASS, MARGINS.standardCamera )
|
||||
},
|
||||
photoLibrary: {
|
||||
text: t( "Upload-photos-from-your-gallery" ),
|
||||
icon: "gallery",
|
||||
onPress: ( ) => navAndCloseModal( "PhotoGallery" ),
|
||||
text: t( "Upload-photos-from-your-photo-library" ),
|
||||
icon: "photo-library",
|
||||
onPress: ( ) => navAndCloseModal( "PhotoLibrary" ),
|
||||
testID: "import-media-button",
|
||||
className: classnames( GREEN_CIRCLE_CLASS, MARGINS.photoLibrary ),
|
||||
accessibilityLabel: t( "Photo-importer" ),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import CameraFlip from "components/Camera/Buttons/CameraFlip.tsx";
|
||||
import Close from "components/Camera/Buttons/Close.tsx";
|
||||
import Flash from "components/Camera/Buttons/Flash.tsx";
|
||||
import Gallery from "components/Camera/Buttons/Gallery.tsx";
|
||||
import PhotoLibraryIcon from "components/Camera/Buttons/PhotoLibraryIcon.tsx";
|
||||
import TakePhoto from "components/Camera/Buttons/TakePhoto.tsx";
|
||||
import Zoom from "components/Camera/Buttons/Zoom.tsx";
|
||||
import TabletButtons from "components/Camera/TabletButtons.tsx";
|
||||
@@ -70,7 +70,7 @@ const AICameraButtons = ( {
|
||||
disabled={!modelLoaded || takingPhoto}
|
||||
flipCamera={flipCamera}
|
||||
hasFlash={hasFlash}
|
||||
hasGalleryButton
|
||||
hasPhotoLibraryButton
|
||||
rotatableAnimatedStyle={rotatableAnimatedStyle}
|
||||
showPrediction={showPrediction}
|
||||
showZoomButton={showZoomButton}
|
||||
@@ -128,7 +128,7 @@ const AICameraButtons = ( {
|
||||
</View>
|
||||
<View><CameraFlip flipCamera={flipCamera} /></View>
|
||||
<View>
|
||||
<Gallery rotatableAnimatedStyle={rotatableAnimatedStyle} />
|
||||
<PhotoLibraryIcon rotatableAnimatedStyle={rotatableAnimatedStyle} />
|
||||
</View>
|
||||
</View>
|
||||
<View className="flex-row justify-center items-center w-full" pointerEvents="box-none">
|
||||
|
||||
@@ -14,7 +14,7 @@ interface Props {
|
||||
|
||||
const isTablet = DeviceInfo.isTablet();
|
||||
|
||||
const Gallery = ( { rotatableAnimatedStyle }: Props ) => {
|
||||
const PhotoLibraryIcon = ( { rotatableAnimatedStyle }: Props ) => {
|
||||
const { t } = useTranslation( );
|
||||
const navigation = useNavigation( );
|
||||
|
||||
@@ -32,13 +32,13 @@ const Gallery = ( { rotatableAnimatedStyle }: Props ) => {
|
||||
"border-2",
|
||||
"rounded"
|
||||
)}
|
||||
onPress={( ) => navigation.push( "PhotoGallery", {
|
||||
onPress={( ) => navigation.push( "PhotoLibrary", {
|
||||
cmonBack: true,
|
||||
lastScreen: "Camera"
|
||||
} )}
|
||||
accessibilityLabel={t( "Photo-importer" )}
|
||||
accessibilityHint={t( "Navigates-to-photo-importer" )}
|
||||
icon="gallery"
|
||||
icon="photo-library"
|
||||
color={( colors?.white as string ) || "white"}
|
||||
size={26}
|
||||
width={62}
|
||||
@@ -48,4 +48,4 @@ const Gallery = ( { rotatableAnimatedStyle }: Props ) => {
|
||||
);
|
||||
};
|
||||
|
||||
export default Gallery;
|
||||
export default PhotoLibraryIcon;
|
||||
@@ -21,11 +21,11 @@ const SavePhotoPermissionGate = ( {
|
||||
return (
|
||||
<PermissionGateContainer
|
||||
permissions={WRITE_MEDIA_PERMISSIONS}
|
||||
title={t( "Save-photos-to-your-gallery" )}
|
||||
titleDenied={t( "Save-photos-to-your-gallery" )}
|
||||
body={t( "iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery" )}
|
||||
title={t( "Save-photos-to-your-photo-library" )}
|
||||
titleDenied={t( "Save-photos-to-your-photo-library" )}
|
||||
body={t( "iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-photo-library" )}
|
||||
buttonText={t( "SAVE-PHOTOS" )}
|
||||
icon="gallery"
|
||||
icon="photo-library"
|
||||
image={require( "images/background/birger-strahl-ksiGE4hMiso-unsplash.jpg" )}
|
||||
onModalHide={onModalHide}
|
||||
onPermissionGranted={onPhotoPermissionGranted}
|
||||
|
||||
@@ -97,12 +97,12 @@ const StandardCamera = ( {
|
||||
|
||||
const cameraUris = useStore( state => state.cameraUris );
|
||||
const prepareCamera = useStore( state => state.prepareCamera );
|
||||
const galleryUris = useStore( state => state.galleryUris );
|
||||
const photoLibraryUris = useStore( state => state.photoLibraryUris );
|
||||
const deletePhotoFromObservation = useStore( state => state.deletePhotoFromObservation );
|
||||
|
||||
const totalObsPhotoUris = useMemo(
|
||||
( ) => [...cameraUris, ...galleryUris].length,
|
||||
[cameraUris, galleryUris]
|
||||
( ) => [...cameraUris, ...photoLibraryUris].length,
|
||||
[cameraUris, photoLibraryUris]
|
||||
);
|
||||
|
||||
const disallowAddingPhotos = totalObsPhotoUris >= MAX_PHOTOS_ALLOWED;
|
||||
@@ -113,7 +113,7 @@ const StandardCamera = ( {
|
||||
|
||||
// newPhotoUris tracks photos taken in *this* instance of the camera. The
|
||||
// camera might be instantiated with several cameraUris or
|
||||
// galleryUris already in state, but we only want to show the CTA button or discard modal
|
||||
// photoLibraryUris already in state, but we only want to show the CTA button or discard modal
|
||||
// when the user has taken a photo with *this* instance of the camera
|
||||
const photosTaken = newPhotoUris.length > 0 && totalObsPhotoUris > 0;
|
||||
const {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import classnames from "classnames";
|
||||
import Gallery from "components/Camera/Buttons/Gallery.tsx";
|
||||
import PhotoLibraryIcon from "components/Camera/Buttons/PhotoLibraryIcon.tsx";
|
||||
import { CloseButton } from "components/SharedComponents";
|
||||
import { View } from "components/styledComponents";
|
||||
import React from "react";
|
||||
@@ -43,7 +43,7 @@ interface Props {
|
||||
handleCheckmarkPress?: ( _event: GestureResponderEvent ) => void;
|
||||
handleClose?: ( _event: GestureResponderEvent ) => void;
|
||||
hasFlash?: boolean;
|
||||
hasGalleryButton?: boolean;
|
||||
hasPhotoLibraryButton?: boolean;
|
||||
photosTaken?: boolean;
|
||||
rotatableAnimatedStyle: ViewStyle;
|
||||
showPrediction?: boolean;
|
||||
@@ -76,7 +76,7 @@ const TabletButtons = ( {
|
||||
handleCheckmarkPress,
|
||||
handleClose,
|
||||
hasFlash,
|
||||
hasGalleryButton,
|
||||
hasPhotoLibraryButton,
|
||||
photosTaken,
|
||||
rotatableAnimatedStyle,
|
||||
showPrediction,
|
||||
@@ -147,9 +147,9 @@ const TabletButtons = ( {
|
||||
</View>
|
||||
{ hasFlash && <CameraButtonPlaceholder extraClassName="mt-[25px]" /> }
|
||||
{ showZoomButton && <CameraButtonPlaceholder extraClassName="mt-[25px]" /> }
|
||||
{ hasGalleryButton && (
|
||||
{ hasPhotoLibraryButton && (
|
||||
<View className="absolute bottom-6">
|
||||
<Gallery rotatableAnimatedStyle={rotatableAnimatedStyle} />
|
||||
<PhotoLibraryIcon rotatableAnimatedStyle={rotatableAnimatedStyle} />
|
||||
</View>
|
||||
) }
|
||||
</View>
|
||||
|
||||
@@ -12,9 +12,9 @@ import { log } from "sharedHelpers/logger";
|
||||
|
||||
import { displayName as appName } from "../../../../app.json";
|
||||
|
||||
const logger = log.extend( "savePhotosToCameraGallery" );
|
||||
const logger = log.extend( "savePhotosToPhotoLibrary" );
|
||||
|
||||
// Save URIs to camera gallery (if a photo was taken using the app,
|
||||
// Save URIs to camera photo library (if a photo was taken using the app,
|
||||
// we want it accessible in the camera's folder, as if the user has taken those photos
|
||||
// via their own camera app).
|
||||
// One could argue this is a private method and shouldn't be exported and
|
||||
@@ -22,7 +22,7 @@ const logger = log.extend( "savePhotosToCameraGallery" );
|
||||
// be too complicated, so this at least makes it easy to test this one part
|
||||
// ~~~kueda20240614
|
||||
// $FlowIgnore
|
||||
export async function savePhotosToCameraGallery(
|
||||
export async function savePhotosToPhotoLibrary(
|
||||
uris: [string],
|
||||
location: Object
|
||||
) {
|
||||
@@ -55,7 +55,7 @@ export async function savePhotosToCameraGallery(
|
||||
return savedUris;
|
||||
} catch ( cameraRollSaveError ) {
|
||||
// should never get here since in usePrepareStoreAndNavigate we check for device full
|
||||
// and skip saving to gallery
|
||||
// and skip saving to photo library
|
||||
if (
|
||||
cameraRollSaveError.message.match( /No space left on device/ )
|
||||
|| cameraRollSaveError.message.match( /PHPhotosErrorDomain error 3305/ )
|
||||
@@ -88,4 +88,4 @@ export async function savePhotosToCameraGallery(
|
||||
return savedPhotoUris;
|
||||
}
|
||||
|
||||
export default savePhotosToCameraGallery;
|
||||
export default savePhotosToPhotoLibrary;
|
||||
@@ -8,7 +8,7 @@ import ObservationPhoto from "realmModels/ObservationPhoto";
|
||||
import fetchPlaceName from "sharedHelpers/fetchPlaceName";
|
||||
import useStore from "stores/useStore";
|
||||
|
||||
import savePhotosToCameraGallery from "../helpers/savePhotosToCameraGallery";
|
||||
import savePhotosToPhotoLibrary from "../helpers/savePhotosToPhotoLibrary";
|
||||
|
||||
const usePrepareStoreAndNavigate = ( ): Function => {
|
||||
const navigation = useNavigation( );
|
||||
@@ -47,7 +47,7 @@ const usePrepareStoreAndNavigate = ( ): Function => {
|
||||
return Promise.resolve( );
|
||||
}
|
||||
setSavingPhoto( true );
|
||||
const savedPhotoUris = await savePhotosToCameraGallery( uris, userLocation );
|
||||
const savedPhotoUris = await savePhotosToPhotoLibrary( uris, userLocation );
|
||||
await logStageIfAICamera( "save_photos_to_photo_library_complete" );
|
||||
if ( savedPhotoUris.length > 0 ) {
|
||||
// Save these camera roll URIs, so later on observation editor can update
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import {
|
||||
computerVisionPath,
|
||||
galleryPhotosPath,
|
||||
photoLibraryPhotosPath,
|
||||
photoUploadPath,
|
||||
rotatedOriginalPhotosPath,
|
||||
soundUploadPath
|
||||
@@ -46,8 +46,8 @@ const sharedDirectories = [
|
||||
directoryName: "ComputerVisionSuggestions"
|
||||
},
|
||||
{
|
||||
path: galleryPhotosPath,
|
||||
directoryName: "GalleryPhotos"
|
||||
path: photoLibraryPhotosPath,
|
||||
directoryName: "PhotoLibraryPhotos"
|
||||
},
|
||||
{
|
||||
path: photoUploadPath,
|
||||
|
||||
@@ -5,7 +5,7 @@ import { fetchUserMe } from "api/users";
|
||||
import { ApiResponse, ApisauceInstance, create } from "apisauce";
|
||||
import {
|
||||
computerVisionPath,
|
||||
galleryPhotosPath,
|
||||
photoLibraryPhotosPath,
|
||||
photoUploadPath,
|
||||
rotatedOriginalPhotosPath,
|
||||
soundUploadPath
|
||||
@@ -180,7 +180,7 @@ const signOut = async (
|
||||
await unlink( logFilePath );
|
||||
// clear all directories containing user generated data within Documents Directory
|
||||
await removeAllFilesFromDirectory( computerVisionPath );
|
||||
await removeAllFilesFromDirectory( galleryPhotosPath );
|
||||
await removeAllFilesFromDirectory( photoLibraryPhotosPath );
|
||||
await removeAllFilesFromDirectory( photoUploadPath );
|
||||
await removeAllFilesFromDirectory( rotatedOriginalPhotosPath );
|
||||
await removeAllFilesFromDirectory( soundUploadPath );
|
||||
|
||||
@@ -54,11 +54,11 @@ const AddEvidenceSheet = ( {
|
||||
accessibilityHint={t( "Navigates-to-camera" )}
|
||||
/>
|
||||
<EvidenceButton
|
||||
icon="gallery"
|
||||
icon="photo-library"
|
||||
handlePress={( ) => {
|
||||
// Show photo gallery, but skip group photos phase
|
||||
// Show photo library, but skip group photos phase
|
||||
navigation.navigate( "NoBottomTabStackNavigator", {
|
||||
screen: "PhotoGallery",
|
||||
screen: "PhotoLibrary",
|
||||
params: { skipGroupPhotos: true }
|
||||
} );
|
||||
}}
|
||||
|
||||
@@ -73,7 +73,7 @@ const GroupPhotos = ( {
|
||||
|
||||
const addPhotos = useCallback( () => {
|
||||
navigation.navigate( "NoBottomTabStackNavigator", {
|
||||
screen: "PhotoGallery",
|
||||
screen: "PhotoLibrary",
|
||||
params: { fromGroupPhotos: true }
|
||||
} );
|
||||
}, [navigation] );
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useFocusEffect, useNavigation, useRoute } from "@react-navigation/native";
|
||||
import {
|
||||
galleryPhotosPath
|
||||
photoLibraryPhotosPath
|
||||
} from "appConstants/paths.ts";
|
||||
import navigateToObsDetails from "components/ObsDetails/helpers/navigateToObsDetails";
|
||||
import { ActivityAnimation, ViewWrapper } from "components/SharedComponents";
|
||||
@@ -29,17 +29,17 @@ import useStore from "stores/useStore";
|
||||
const MAX_PHOTOS_ALLOWED = 20;
|
||||
const DEFAULT_MODE_MAX_PHOTOS_ALLOWED = 1;
|
||||
|
||||
const PhotoGallery = ( ): Node => {
|
||||
const PhotoLibrary = ( ): Node => {
|
||||
const {
|
||||
isDefaultMode
|
||||
} = useLayoutPrefs( );
|
||||
const navigation = useNavigation( );
|
||||
const [photoGalleryShown, setPhotoGalleryShown] = useState( false );
|
||||
const [photoLibraryShown, setPhotoLibraryShown] = useState( false );
|
||||
const setPhotoImporterState = useStore( state => state.setPhotoImporterState );
|
||||
const setGroupedPhotos = useStore( state => state.setGroupedPhotos );
|
||||
const groupedPhotos = useStore( state => state.groupedPhotos );
|
||||
const updateObservations = useStore( state => state.updateObservations );
|
||||
const galleryUris = useStore( state => state.galleryUris );
|
||||
const photoLibraryUris = useStore( state => state.photoLibraryUris );
|
||||
const evidenceToAdd = useStore( state => state.evidenceToAdd );
|
||||
const currentObservation = useStore( state => state.currentObservation );
|
||||
const currentObservationIndex = useStore( state => state.currentObservationIndex );
|
||||
@@ -57,7 +57,7 @@ const PhotoGallery = ( ): Node => {
|
||||
const lastScreen = params?.lastScreen;
|
||||
|
||||
const navToObsEdit = useCallback( ( ) => navigation.navigate( "ObsEdit", {
|
||||
lastScreen: "PhotoGallery"
|
||||
lastScreen: "PhotoLibrary"
|
||||
} ), [navigation] );
|
||||
|
||||
const advanceToMatchScreen = lastScreen === "Camera"
|
||||
@@ -67,16 +67,16 @@ const PhotoGallery = ( ): Node => {
|
||||
const navToMatchOrSuggestions = useCallback( async ( ) => {
|
||||
if ( advanceToMatchScreen ) {
|
||||
return navigation.navigate( "Match", {
|
||||
lastScreen: "PhotoGallery"
|
||||
lastScreen: "PhotoLibrary"
|
||||
} );
|
||||
}
|
||||
return navigation.navigate( "Suggestions", {
|
||||
lastScreen: "PhotoGallery"
|
||||
lastScreen: "PhotoLibrary"
|
||||
} );
|
||||
}, [navigation, advanceToMatchScreen] );
|
||||
|
||||
const moveImagesToDocumentsDirectory = async selectedImages => {
|
||||
const path = galleryPhotosPath;
|
||||
const path = photoLibraryPhotosPath;
|
||||
await RNFS.mkdir( path );
|
||||
|
||||
const movedImages = await Promise.all( selectedImages.map( async ( { image } ) => {
|
||||
@@ -96,12 +96,12 @@ const PhotoGallery = ( ): Node => {
|
||||
return movedImages;
|
||||
};
|
||||
|
||||
const showPhotoGallery = React.useCallback( async () => {
|
||||
if ( photoGalleryShown ) {
|
||||
const showPhotoLibrary = React.useCallback( async () => {
|
||||
if ( photoLibraryShown ) {
|
||||
return;
|
||||
}
|
||||
|
||||
setPhotoGalleryShown( true );
|
||||
setPhotoLibraryShown( true );
|
||||
|
||||
if ( Platform.OS === "ios" ) {
|
||||
// iOS has annoying transition of the screen - that if we don't wait enough time,
|
||||
@@ -141,7 +141,7 @@ const PhotoGallery = ( ): Node => {
|
||||
} else {
|
||||
exitObservationsFlow();
|
||||
}
|
||||
setPhotoGalleryShown( false );
|
||||
setPhotoLibraryShown( false );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ const PhotoGallery = ( ): Node => {
|
||||
} ) )] );
|
||||
navigation.setParams( { fromGroupPhotos: false } );
|
||||
navigation.navigate( "NoBottomTabStackNavigator", { screen: "GroupPhotos" } );
|
||||
setPhotoGalleryShown( false );
|
||||
setPhotoLibraryShown( false );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ const PhotoGallery = ( ): Node => {
|
||||
if ( skipGroupPhotos ) {
|
||||
// add evidence to existing observation
|
||||
setPhotoImporterState( {
|
||||
galleryUris: [...galleryUris, ...importedPhotoUris],
|
||||
photoLibraryUris: [...photoLibraryUris, ...importedPhotoUris],
|
||||
evidenceToAdd: [...evidenceToAdd, ...importedPhotoUris]
|
||||
} );
|
||||
const obsPhotos = await ObservationPhoto
|
||||
@@ -183,7 +183,7 @@ const PhotoGallery = ( ): Node => {
|
||||
observations[currentObservationIndex] = updatedCurrentObservation;
|
||||
updateObservations( observations );
|
||||
navToObsEdit();
|
||||
setPhotoGalleryShown( false );
|
||||
setPhotoLibraryShown( false );
|
||||
} else if ( selectedImages.length === 1 ) {
|
||||
// create a new observation and skip group photos screen
|
||||
const newObservation = await Observation.createObservationWithPhotos( [selectedImages[0]] );
|
||||
@@ -199,18 +199,18 @@ const PhotoGallery = ( ): Node => {
|
||||
observations: [newObservation]
|
||||
} );
|
||||
navToMatchOrSuggestions( );
|
||||
setPhotoGalleryShown( false );
|
||||
setPhotoLibraryShown( false );
|
||||
} else {
|
||||
// navigate to group photos
|
||||
setPhotoImporterState( {
|
||||
galleryUris: [...galleryUris, ...importedPhotoUris],
|
||||
photoLibraryUris: [...photoLibraryUris, ...importedPhotoUris],
|
||||
groupedPhotos: selectedImages.map( photo => ( {
|
||||
photos: [photo]
|
||||
} ) )
|
||||
} );
|
||||
navigation.setParams( { fromGroupPhotos: false } );
|
||||
navigation.navigate( "NoBottomTabStackNavigator", { screen: "GroupPhotos" } );
|
||||
setPhotoGalleryShown( false );
|
||||
setPhotoLibraryShown( false );
|
||||
}
|
||||
}, [
|
||||
advanceToMatchScreen,
|
||||
@@ -219,7 +219,7 @@ const PhotoGallery = ( ): Node => {
|
||||
evidenceToAdd,
|
||||
exitObservationsFlow,
|
||||
fromGroupPhotos,
|
||||
galleryUris,
|
||||
photoLibraryUris,
|
||||
groupedPhotos,
|
||||
navigation,
|
||||
navToObsEdit,
|
||||
@@ -227,7 +227,7 @@ const PhotoGallery = ( ): Node => {
|
||||
numOfObsPhotos,
|
||||
observations,
|
||||
params,
|
||||
photoGalleryShown,
|
||||
photoLibraryShown,
|
||||
setGroupedPhotos,
|
||||
setPhotoImporterState,
|
||||
skipGroupPhotos,
|
||||
@@ -241,8 +241,8 @@ const PhotoGallery = ( ): Node => {
|
||||
|
||||
// Wait for screen to finish transition
|
||||
interactionHandle = InteractionManager.runAfterInteractions( () => {
|
||||
if ( !photoGalleryShown ) {
|
||||
showPhotoGallery();
|
||||
if ( !photoLibraryShown ) {
|
||||
showPhotoLibrary();
|
||||
}
|
||||
} );
|
||||
|
||||
@@ -252,11 +252,11 @@ const PhotoGallery = ( ): Node => {
|
||||
interactionHandle.cancel();
|
||||
}
|
||||
};
|
||||
}, [photoGalleryShown, showPhotoGallery] )
|
||||
}, [photoLibraryShown, showPhotoLibrary] )
|
||||
);
|
||||
|
||||
return (
|
||||
<ViewWrapper testID="PhotoGallery">
|
||||
<ViewWrapper testID="PhotoLibrary">
|
||||
<View className="flex-1 w-full h-full justify-center items-center">
|
||||
<ActivityAnimation />
|
||||
</View>
|
||||
@@ -264,4 +264,4 @@ const PhotoGallery = ( ): Node => {
|
||||
);
|
||||
};
|
||||
|
||||
export default PhotoGallery;
|
||||
export default PhotoLibrary;
|
||||
@@ -74,7 +74,7 @@ const PhotoSharing = ( ): Node => {
|
||||
// Go to GroupPhotos screen
|
||||
const firstObservationDefaults = { description: sharedText };
|
||||
setPhotoImporterState( {
|
||||
galleryUris: photoUris.map( x => x.image.uri ),
|
||||
photoLibraryUris: photoUris.map( x => x.image.uri ),
|
||||
groupedPhotos: photoUris.map( photo => ( {
|
||||
photos: [photo]
|
||||
} ) ),
|
||||
|
||||
@@ -289,11 +289,11 @@ const Settings = ( ) => {
|
||||
</View>
|
||||
<View className="mt-4 pr-5">
|
||||
<RadioButtonRow
|
||||
testID="all-observation-option"
|
||||
testID="all-observation-options"
|
||||
smallLabel
|
||||
checked={isAllAddObsOptionsMode}
|
||||
onPress={() => setIsAllAddObsOptionsMode( true )}
|
||||
label={t( "All-observation-option" )}
|
||||
label={t( "All-observation-options" )}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
@@ -22,58 +22,58 @@
|
||||
"play-circle": 61717,
|
||||
"photos": 61718,
|
||||
"photos-outline": 61719,
|
||||
"person": 61720,
|
||||
"pencil": 61721,
|
||||
"pencil-outline": 61722,
|
||||
"pause": 61723,
|
||||
"pause-circle": 61724,
|
||||
"offline": 61725,
|
||||
"observers": 61726,
|
||||
"obscured": 61727,
|
||||
"notifications-bell": 61728,
|
||||
"noevidence": 61729,
|
||||
"microphone": 61730,
|
||||
"microphone-circle": 61731,
|
||||
"map": 61732,
|
||||
"map-marker-outline": 61733,
|
||||
"map-layers": 61734,
|
||||
"magnifying-glass": 61735,
|
||||
"location-crosshairs": 61736,
|
||||
"list-square": 61737,
|
||||
"leaf": 61738,
|
||||
"layers": 61739,
|
||||
"laptop": 61740,
|
||||
"label": 61741,
|
||||
"label-outline": 61742,
|
||||
"kebab-menu": 61743,
|
||||
"info-circle-outline": 61744,
|
||||
"inaturalist": 61745,
|
||||
"identifiers": 61746,
|
||||
"id-agree": 61747,
|
||||
"iconic-unknown": 61748,
|
||||
"iconic-reptilia": 61749,
|
||||
"iconic-protozoa": 61750,
|
||||
"iconic-plantae": 61751,
|
||||
"iconic-mollusca": 61752,
|
||||
"iconic-mammalia": 61753,
|
||||
"iconic-insecta": 61754,
|
||||
"iconic-fungi": 61755,
|
||||
"iconic-chromista": 61756,
|
||||
"iconic-aves": 61757,
|
||||
"iconic-arachnida": 61758,
|
||||
"iconic-animalia": 61759,
|
||||
"iconic-amphibia": 61760,
|
||||
"iconic-actinopterygii": 61761,
|
||||
"help": 61762,
|
||||
"help-circle": 61763,
|
||||
"help-circle-outline": 61764,
|
||||
"heart": 61765,
|
||||
"hamburger-menu": 61766,
|
||||
"grid": 61767,
|
||||
"grid-square": 61768,
|
||||
"globe-outline": 61769,
|
||||
"gear": 61770,
|
||||
"gallery": 61771,
|
||||
"photo-library": 61720,
|
||||
"person": 61721,
|
||||
"pencil": 61722,
|
||||
"pencil-outline": 61723,
|
||||
"pause": 61724,
|
||||
"pause-circle": 61725,
|
||||
"offline": 61726,
|
||||
"observers": 61727,
|
||||
"obscured": 61728,
|
||||
"notifications-bell": 61729,
|
||||
"noevidence": 61730,
|
||||
"microphone": 61731,
|
||||
"microphone-circle": 61732,
|
||||
"map": 61733,
|
||||
"map-marker-outline": 61734,
|
||||
"map-layers": 61735,
|
||||
"magnifying-glass": 61736,
|
||||
"location-crosshairs": 61737,
|
||||
"list-square": 61738,
|
||||
"leaf": 61739,
|
||||
"layers": 61740,
|
||||
"laptop": 61741,
|
||||
"label": 61742,
|
||||
"label-outline": 61743,
|
||||
"kebab-menu": 61744,
|
||||
"info-circle-outline": 61745,
|
||||
"inaturalist": 61746,
|
||||
"identifiers": 61747,
|
||||
"id-agree": 61748,
|
||||
"iconic-unknown": 61749,
|
||||
"iconic-reptilia": 61750,
|
||||
"iconic-protozoa": 61751,
|
||||
"iconic-plantae": 61752,
|
||||
"iconic-mollusca": 61753,
|
||||
"iconic-mammalia": 61754,
|
||||
"iconic-insecta": 61755,
|
||||
"iconic-fungi": 61756,
|
||||
"iconic-chromista": 61757,
|
||||
"iconic-aves": 61758,
|
||||
"iconic-arachnida": 61759,
|
||||
"iconic-animalia": 61760,
|
||||
"iconic-amphibia": 61761,
|
||||
"iconic-actinopterygii": 61762,
|
||||
"help": 61763,
|
||||
"help-circle": 61764,
|
||||
"help-circle-outline": 61765,
|
||||
"heart": 61766,
|
||||
"hamburger-menu": 61767,
|
||||
"grid": 61768,
|
||||
"grid-square": 61769,
|
||||
"globe-outline": 61770,
|
||||
"gear": 61771,
|
||||
"flip": 61772,
|
||||
"flash-on": 61773,
|
||||
"flash-off": 61774,
|
||||
|
||||
@@ -51,7 +51,7 @@ Add-Date-Time = Add Date/Time
|
||||
Add-disagreement = Add disagreement
|
||||
ADD-EVIDENCE = ADD EVIDENCE
|
||||
# Label for a button that shows options for adding evidence, e.g. camera,
|
||||
# gallery, sound, etc
|
||||
# photo library, sound, etc
|
||||
Add-evidence = Add evidence
|
||||
Add-favorite = Add favorite
|
||||
Add-Location = Add Location
|
||||
@@ -81,7 +81,7 @@ Agree-with-ID-description = Would you like to agree with the ID and suggest the
|
||||
AI-Camera = AI Camera
|
||||
ALL = ALL
|
||||
All = All
|
||||
All-observation-option = All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Gallery, and Sound Recorder)
|
||||
All-observation-options = All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Photo Library, and Sound Recorder)
|
||||
All-observations = All observations
|
||||
All-organisms = All organisms
|
||||
# As in intellectual property rights over a photo or other creative work
|
||||
@@ -198,8 +198,6 @@ Change-zoom = Change zoom
|
||||
CHECK-YOUR-EMAIL = CHECK YOUR EMAIL!
|
||||
# Label for a text input field during sign up to choose a username
|
||||
CHOOSE-A-USERNAME = CHOOSE A USERNAME
|
||||
# Text for a button prompting the user to grant access to the gallery
|
||||
CHOOSE-PHOTOS = CHOOSE PHOTOS
|
||||
# Label for button that chooses a taxon
|
||||
Choose-taxon = Choose taxon
|
||||
# Label for button that chooses the best suggestion among a list of suggested
|
||||
@@ -592,7 +590,7 @@ improving--identification = Improving
|
||||
iNat-is-global-community = iNaturalist is a global community of naturalists creating open data for science by collectively observing & identifying organisms
|
||||
INATURALIST-ACCOUNT-SETTINGS = INATURALIST ACCOUNT SETTINGS
|
||||
iNaturalist-AI-Camera = iNaturalist AI Camera
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery = iNaturalist can save photos you take in the app to your device’s gallery.
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-photo-library = iNaturalist can save photos you take in the app to your device’s photo library.
|
||||
INATURALIST-COMMUNITY = INATURALIST COMMUNITY
|
||||
iNaturalist-couldnt-identify-this-organism = iNaturalist couldn’t identify this organism.
|
||||
INATURALIST-FORUM = INATURALIST FORUM
|
||||
@@ -850,8 +848,6 @@ OBSERVATIONS-WITHOUT-NUMBER =
|
||||
Observations-you-upload-to-iNaturalist = Observations you upload to iNaturalist can be used by scientists and researchers worldwide.
|
||||
# Button that starts a new observation
|
||||
Observe = Observe
|
||||
# Title of screen asking for permission to access the gallery
|
||||
Observe-and-identify-organisms-from-your-gallery = Observe and identify organisms from your gallery
|
||||
# Title of screen asking for permission to access the camera
|
||||
Observe-and-identify-organisms-in-real-time-with-your-camera = Observe and identify organisms in real time with your camera
|
||||
# Text for a button prompting the user to grant access to the camera
|
||||
@@ -905,8 +901,6 @@ Photos = Photos
|
||||
Photos-you-take-will-appear-here = Photos you take will appear here
|
||||
# Title of screen asking for permission to access the camera when access was denied
|
||||
Please-allow-Camera-Access = Please allow Camera Access
|
||||
# Title of screen asking for permission to access the gallery when access was denied
|
||||
Please-Allow-Gallery-Access = Please Allow Gallery Access
|
||||
# Title of screen asking for permission to access location when access was denied
|
||||
Please-allow-Location-Access = Please allow Location Access
|
||||
# Title of screen asking for permission to access the microphone when access was denied
|
||||
@@ -1090,7 +1084,7 @@ SAVE-CHANGES = SAVE CHANGES
|
||||
SAVE-FOR-LATER = SAVE FOR LATER
|
||||
SAVE-LOCATION = SAVE LOCATION
|
||||
SAVE-PHOTOS = SAVE PHOTOS
|
||||
Save-photos-to-your-gallery = Save photos to your gallery
|
||||
Save-photos-to-your-photo-library = Save photos to your photo library
|
||||
Saved-Observation = Saved observation, in queue to upload
|
||||
Scan-the-area-around-you-for-organisms = Scan the area around you for organisms.
|
||||
Scientific-Name = Scientific Name
|
||||
@@ -1269,8 +1263,7 @@ Unreviewed-observations-only = Unreviewed observations only
|
||||
Upload-Complete = Upload Complete
|
||||
Upload-in-progress = Upload in progress
|
||||
UPLOAD-NOW = UPLOAD NOW
|
||||
Upload-photos-from-your-gallery = Upload multiple photos from your gallery
|
||||
Upload-photos-from-your-gallery-and-create-observations = Upload photos from your gallery and create observations and get identifications of organisms you’ve already observed!
|
||||
Upload-photos-from-your-photo-library = Upload multiple photos from your photo library
|
||||
Upload-Progress = Upload { $uploadProgress } percent complete
|
||||
UPLOAD-TO-INATURALIST = UPLOAD TO INATURALIST
|
||||
# Shows the number of observations a user can upload to iNat from my observations page
|
||||
@@ -1530,7 +1523,6 @@ Youre-always-in-control-of-the-location-privacy = You’re always in control of
|
||||
# permission has been denied
|
||||
Youve-denied-permission-prompt = You’ve denied permission. Please grant permission in the settings app.
|
||||
Youve-previously-denied-camera-permissions = You've previously denied camera permissions, so please enable them in settings.
|
||||
Youve-previously-denied-gallery-permissions = You’ve previously denied gallery permissions, so please enable them in settings.
|
||||
Youve-previously-denied-location-permissions = You’ve previously denied location permissions, so please enable them in settings.
|
||||
Youve-previously-denied-microphone-permissions = You’ve previously denied microphone permissions, so please enable them in settings.
|
||||
Zoom-in-as-much-as-possible-to-improve = Zoom in as much as possible to improve location accuracy and get better identifications.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"AI-Camera": "AI Camera",
|
||||
"ALL": "ALL",
|
||||
"All": "All",
|
||||
"All-observation-option": "All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Gallery, and Sound Recorder)",
|
||||
"All-observation-options": "All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Photo Library, and Sound Recorder)",
|
||||
"All-observations": "All observations",
|
||||
"All-organisms": "All organisms",
|
||||
"all-rights-reserved": "all rights reserved",
|
||||
@@ -104,7 +104,6 @@
|
||||
"Change-zoom": "Change zoom",
|
||||
"CHECK-YOUR-EMAIL": "CHECK YOUR EMAIL!",
|
||||
"CHOOSE-A-USERNAME": "CHOOSE A USERNAME",
|
||||
"CHOOSE-PHOTOS": "CHOOSE PHOTOS",
|
||||
"Choose-taxon": "Choose taxon",
|
||||
"Choose-top-taxon": "Choose top taxon",
|
||||
"Clear": "Clear",
|
||||
@@ -333,7 +332,7 @@
|
||||
"iNat-is-global-community": "iNaturalist is a global community of naturalists creating open data for science by collectively observing & identifying organisms",
|
||||
"INATURALIST-ACCOUNT-SETTINGS": "INATURALIST ACCOUNT SETTINGS",
|
||||
"iNaturalist-AI-Camera": "iNaturalist AI Camera",
|
||||
"iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery": "iNaturalist can save photos you take in the app to your device’s gallery.",
|
||||
"iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-photo-library": "iNaturalist can save photos you take in the app to your device’s photo library.",
|
||||
"INATURALIST-COMMUNITY": "INATURALIST COMMUNITY",
|
||||
"iNaturalist-couldnt-identify-this-organism": "iNaturalist couldn’t identify this organism.",
|
||||
"INATURALIST-FORUM": "INATURALIST FORUM",
|
||||
@@ -501,7 +500,6 @@
|
||||
"OBSERVATIONS-WITHOUT-NUMBER": "{ $count ->\n [one] OBSERVATION\n *[other] OBSERVATIONS\n}",
|
||||
"Observations-you-upload-to-iNaturalist": "Observations you upload to iNaturalist can be used by scientists and researchers worldwide.",
|
||||
"Observe": "Observe",
|
||||
"Observe-and-identify-organisms-from-your-gallery": "Observe and identify organisms from your gallery",
|
||||
"Observe-and-identify-organisms-in-real-time-with-your-camera": "Observe and identify organisms in real time with your camera",
|
||||
"OBSERVE-ORGANISMS": "OBSERVE ORGANISMS",
|
||||
"OBSERVED-IN--label": "OBSERVED IN",
|
||||
@@ -537,7 +535,6 @@
|
||||
"Photos": "Photos",
|
||||
"Photos-you-take-will-appear-here": "Photos you take will appear here",
|
||||
"Please-allow-Camera-Access": "Please allow Camera Access",
|
||||
"Please-Allow-Gallery-Access": "Please Allow Gallery Access",
|
||||
"Please-allow-Location-Access": "Please allow Location Access",
|
||||
"Please-allow-Microphone-Access": "Please allow Microphone Access",
|
||||
"Please-choose-a-different-password": "Please choose a different password.",
|
||||
@@ -682,7 +679,7 @@
|
||||
"SAVE-FOR-LATER": "SAVE FOR LATER",
|
||||
"SAVE-LOCATION": "SAVE LOCATION",
|
||||
"SAVE-PHOTOS": "SAVE PHOTOS",
|
||||
"Save-photos-to-your-gallery": "Save photos to your gallery",
|
||||
"Save-photos-to-your-photo-library": "Save photos to your photo library",
|
||||
"Saved-Observation": "Saved observation, in queue to upload",
|
||||
"Scan-the-area-around-you-for-organisms": "Scan the area around you for organisms.",
|
||||
"Scientific-Name": "Scientific Name",
|
||||
@@ -817,8 +814,7 @@
|
||||
"Upload-Complete": "Upload Complete",
|
||||
"Upload-in-progress": "Upload in progress",
|
||||
"UPLOAD-NOW": "UPLOAD NOW",
|
||||
"Upload-photos-from-your-gallery": "Upload multiple photos from your gallery",
|
||||
"Upload-photos-from-your-gallery-and-create-observations": "Upload photos from your gallery and create observations and get identifications of organisms you’ve already observed!",
|
||||
"Upload-photos-from-your-photo-library": "Upload multiple photos from your photo library",
|
||||
"Upload-Progress": "Upload { $uploadProgress } percent complete",
|
||||
"UPLOAD-TO-INATURALIST": "UPLOAD TO INATURALIST",
|
||||
"Upload-x-observations": "Upload { $count ->\n [one] 1 observation\n *[other] { $count } observations\n}",
|
||||
@@ -927,7 +923,6 @@
|
||||
"Youre-always-in-control-of-the-location-privacy": "You’re always in control of the location privacy of every observation you create.",
|
||||
"Youve-denied-permission-prompt": "You’ve denied permission. Please grant permission in the settings app.",
|
||||
"Youve-previously-denied-camera-permissions": "You've previously denied camera permissions, so please enable them in settings.",
|
||||
"Youve-previously-denied-gallery-permissions": "You’ve previously denied gallery permissions, so please enable them in settings.",
|
||||
"Youve-previously-denied-location-permissions": "You’ve previously denied location permissions, so please enable them in settings.",
|
||||
"Youve-previously-denied-microphone-permissions": "You’ve previously denied microphone permissions, so please enable them in settings.",
|
||||
"Zoom-in-as-much-as-possible-to-improve": "Zoom in as much as possible to improve location accuracy and get better identifications.",
|
||||
|
||||
@@ -51,7 +51,7 @@ Add-Date-Time = Add Date/Time
|
||||
Add-disagreement = Add disagreement
|
||||
ADD-EVIDENCE = ADD EVIDENCE
|
||||
# Label for a button that shows options for adding evidence, e.g. camera,
|
||||
# gallery, sound, etc
|
||||
# photo library, sound, etc
|
||||
Add-evidence = Add evidence
|
||||
Add-favorite = Add favorite
|
||||
Add-Location = Add Location
|
||||
@@ -81,7 +81,7 @@ Agree-with-ID-description = Would you like to agree with the ID and suggest the
|
||||
AI-Camera = AI Camera
|
||||
ALL = ALL
|
||||
All = All
|
||||
All-observation-option = All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Gallery, and Sound Recorder)
|
||||
All-observation-options = All observation options (including iNaturalist AI Camera, Standard Camera, Uploading from Photo Library, and Sound Recorder)
|
||||
All-observations = All observations
|
||||
All-organisms = All organisms
|
||||
# As in intellectual property rights over a photo or other creative work
|
||||
@@ -198,8 +198,6 @@ Change-zoom = Change zoom
|
||||
CHECK-YOUR-EMAIL = CHECK YOUR EMAIL!
|
||||
# Label for a text input field during sign up to choose a username
|
||||
CHOOSE-A-USERNAME = CHOOSE A USERNAME
|
||||
# Text for a button prompting the user to grant access to the gallery
|
||||
CHOOSE-PHOTOS = CHOOSE PHOTOS
|
||||
# Label for button that chooses a taxon
|
||||
Choose-taxon = Choose taxon
|
||||
# Label for button that chooses the best suggestion among a list of suggested
|
||||
@@ -592,7 +590,7 @@ improving--identification = Improving
|
||||
iNat-is-global-community = iNaturalist is a global community of naturalists creating open data for science by collectively observing & identifying organisms
|
||||
INATURALIST-ACCOUNT-SETTINGS = INATURALIST ACCOUNT SETTINGS
|
||||
iNaturalist-AI-Camera = iNaturalist AI Camera
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery = iNaturalist can save photos you take in the app to your device’s gallery.
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-photo-library = iNaturalist can save photos you take in the app to your device’s photo library.
|
||||
INATURALIST-COMMUNITY = INATURALIST COMMUNITY
|
||||
iNaturalist-couldnt-identify-this-organism = iNaturalist couldn’t identify this organism.
|
||||
INATURALIST-FORUM = INATURALIST FORUM
|
||||
@@ -850,8 +848,6 @@ OBSERVATIONS-WITHOUT-NUMBER =
|
||||
Observations-you-upload-to-iNaturalist = Observations you upload to iNaturalist can be used by scientists and researchers worldwide.
|
||||
# Button that starts a new observation
|
||||
Observe = Observe
|
||||
# Title of screen asking for permission to access the gallery
|
||||
Observe-and-identify-organisms-from-your-gallery = Observe and identify organisms from your gallery
|
||||
# Title of screen asking for permission to access the camera
|
||||
Observe-and-identify-organisms-in-real-time-with-your-camera = Observe and identify organisms in real time with your camera
|
||||
# Text for a button prompting the user to grant access to the camera
|
||||
@@ -905,8 +901,6 @@ Photos = Photos
|
||||
Photos-you-take-will-appear-here = Photos you take will appear here
|
||||
# Title of screen asking for permission to access the camera when access was denied
|
||||
Please-allow-Camera-Access = Please allow Camera Access
|
||||
# Title of screen asking for permission to access the gallery when access was denied
|
||||
Please-Allow-Gallery-Access = Please Allow Gallery Access
|
||||
# Title of screen asking for permission to access location when access was denied
|
||||
Please-allow-Location-Access = Please allow Location Access
|
||||
# Title of screen asking for permission to access the microphone when access was denied
|
||||
@@ -1090,7 +1084,7 @@ SAVE-CHANGES = SAVE CHANGES
|
||||
SAVE-FOR-LATER = SAVE FOR LATER
|
||||
SAVE-LOCATION = SAVE LOCATION
|
||||
SAVE-PHOTOS = SAVE PHOTOS
|
||||
Save-photos-to-your-gallery = Save photos to your gallery
|
||||
Save-photos-to-your-photo-library = Save photos to your photo library
|
||||
Saved-Observation = Saved observation, in queue to upload
|
||||
Scan-the-area-around-you-for-organisms = Scan the area around you for organisms.
|
||||
Scientific-Name = Scientific Name
|
||||
@@ -1269,8 +1263,7 @@ Unreviewed-observations-only = Unreviewed observations only
|
||||
Upload-Complete = Upload Complete
|
||||
Upload-in-progress = Upload in progress
|
||||
UPLOAD-NOW = UPLOAD NOW
|
||||
Upload-photos-from-your-gallery = Upload multiple photos from your gallery
|
||||
Upload-photos-from-your-gallery-and-create-observations = Upload photos from your gallery and create observations and get identifications of organisms you’ve already observed!
|
||||
Upload-photos-from-your-photo-library = Upload multiple photos from your photo library
|
||||
Upload-Progress = Upload { $uploadProgress } percent complete
|
||||
UPLOAD-TO-INATURALIST = UPLOAD TO INATURALIST
|
||||
# Shows the number of observations a user can upload to iNat from my observations page
|
||||
@@ -1530,7 +1523,6 @@ Youre-always-in-control-of-the-location-privacy = You’re always in control of
|
||||
# permission has been denied
|
||||
Youve-denied-permission-prompt = You’ve denied permission. Please grant permission in the settings app.
|
||||
Youve-previously-denied-camera-permissions = You've previously denied camera permissions, so please enable them in settings.
|
||||
Youve-previously-denied-gallery-permissions = You’ve previously denied gallery permissions, so please enable them in settings.
|
||||
Youve-previously-denied-location-permissions = You’ve previously denied location permissions, so please enable them in settings.
|
||||
Youve-previously-denied-microphone-permissions = You’ve previously denied microphone permissions, so please enable them in settings.
|
||||
Zoom-in-as-much-as-possible-to-improve = Zoom in as much as possible to improve location accuracy and get better identifications.
|
||||
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
@@ -7,7 +7,7 @@ import { createNativeStackNavigator } from "@react-navigation/native-stack";
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import CameraContainer from "components/Camera/CameraContainer";
|
||||
import GroupPhotosContainer from "components/PhotoImporter/GroupPhotosContainer";
|
||||
import PhotoGallery from "components/PhotoImporter/PhotoGallery";
|
||||
import PhotoLibrary from "components/PhotoImporter/PhotoLibrary";
|
||||
import { Heading4 } from "components/SharedComponents";
|
||||
import Mortal from "components/SharedComponents/Mortal";
|
||||
import PermissionGateContainer, {
|
||||
@@ -72,21 +72,6 @@ const CameraContainerWithPermission = ( ) => fadeInComponent(
|
||||
</Mortal>
|
||||
);
|
||||
|
||||
// const GalleryContainerWithPermission = ( ) => (
|
||||
// <PermissionGateContainer
|
||||
// permissions={READ_WRITE_MEDIA_PERMISSIONS}
|
||||
// title={t( "Observe-and-identify-organisms-from-your-gallery" )}
|
||||
// titleDenied={t( "Please-Allow-Gallery-Access" )}
|
||||
// body={t( "Upload-photos-from-your-gallery-and-create-observations" )}
|
||||
// blockedPrompt={t( "Youve-previously-denied-gallery-permissions" )}
|
||||
// buttonText={t( "CHOOSE-PHOTOS" )}
|
||||
// icon="gallery"
|
||||
// image={require( "images/background/viviana-rishe-j2330n6bg3I-unsplash.jpg" )}
|
||||
// >
|
||||
// <PhotoGallery />
|
||||
// </PermissionGateContainer>
|
||||
// );
|
||||
|
||||
// On iOS we don't actually need PHOTO LIBRARY permission to import photos,
|
||||
// and in fact, if we ask for it and the user denies it after already
|
||||
// granting add-only permission, the user can never grant it again until they
|
||||
@@ -94,8 +79,8 @@ const CameraContainerWithPermission = ( ) => fadeInComponent(
|
||||
// albums, but for now this works. ~~~~kueda20240829
|
||||
|
||||
// TODO verify this is true for Android
|
||||
const GalleryContainerWithPermission = ( ) => (
|
||||
<PhotoGallery />
|
||||
const PhotoLibraryContainerWithPermission = ( ) => (
|
||||
<PhotoLibrary />
|
||||
);
|
||||
|
||||
const SoundRecorderWithPermission = ( ) => fadeInComponent(
|
||||
@@ -132,8 +117,8 @@ const NoBottomTabStackNavigator = ( ): Node => (
|
||||
options={CAMERA_SCREEN_OPTIONS}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="PhotoGallery"
|
||||
component={GalleryContainerWithPermission}
|
||||
name="PhotoLibrary"
|
||||
component={PhotoLibraryContainerWithPermission}
|
||||
options={hideHeader}
|
||||
/>
|
||||
<Stack.Screen
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import {
|
||||
galleryPhotosPath, photoUploadPath, rotatedOriginalPhotosPath, soundUploadPath
|
||||
photoLibraryPhotosPath, photoUploadPath, rotatedOriginalPhotosPath, soundUploadPath
|
||||
} from "appConstants/paths.ts";
|
||||
import { log } from "sharedHelpers/logger";
|
||||
import removeAllFilesFromDirectory from "sharedHelpers/removeAllFilesFromDirectory.ts";
|
||||
@@ -26,7 +26,7 @@ const clearRotatedOriginalPhotosDirectory = async ( ) => {
|
||||
};
|
||||
|
||||
const clearGalleryPhotos = async ( ) => {
|
||||
await removeAllFilesFromDirectory( galleryPhotosPath );
|
||||
await removeAllFilesFromDirectory( photoLibraryPhotosPath );
|
||||
};
|
||||
|
||||
// this hook checks to see which localFilePaths are still needed in photoUploads/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { galleryPhotosPath, rotatedOriginalPhotosPath } from "appConstants/paths.ts";
|
||||
import { photoLibraryPhotosPath, rotatedOriginalPhotosPath } from "appConstants/paths.ts";
|
||||
import { DocumentDirectoryPath } from "react-native-fs";
|
||||
import type { RealmObservation } from "realmModels/types.d.ts";
|
||||
import {
|
||||
@@ -22,7 +22,7 @@ export function isNew( observation: RealmObservation ) {
|
||||
}
|
||||
|
||||
export function isFromGallery( observation: RealmObservation ) {
|
||||
return originalPhotoUri( observation ).includes( galleryPhotosPath );
|
||||
return originalPhotoUri( observation ).includes( photoLibraryPhotosPath );
|
||||
}
|
||||
|
||||
export function isFromSharing( observation: RealmObservation ) {
|
||||
|
||||
@@ -25,7 +25,7 @@ const useShare = ( ): void => {
|
||||
return;
|
||||
}
|
||||
|
||||
// show user a loading animation screen (like PhotoGallery)
|
||||
// show user a loading animation screen (like PhotoLibrary)
|
||||
// while observations are created
|
||||
navigation.navigate( "PhotoSharing", { item } );
|
||||
}, [navigation] );
|
||||
|
||||
@@ -10,7 +10,7 @@ const DEFAULT_STATE = {
|
||||
currentObservation: null,
|
||||
currentObservationIndex: 0,
|
||||
evidenceToAdd: [],
|
||||
galleryUris: [],
|
||||
photoLibraryUris: [],
|
||||
groupedPhotos: [],
|
||||
observations: [],
|
||||
// Track when any obs was last marked as viewed so we know when to update
|
||||
@@ -140,7 +140,7 @@ const createObservationFlowSlice = ( set, get ) => ( {
|
||||
currentObservation: observationToJSON( updatedObservations[state.currentObservationIndex] )
|
||||
} ) ),
|
||||
setPhotoImporterState: options => set( state => ( {
|
||||
galleryUris: options?.galleryUris || state.galleryUris,
|
||||
photoLibraryUris: options?.photoLibraryUris || state.photoLibraryUris,
|
||||
savingPhoto: options?.savingPhoto || state.savingPhoto,
|
||||
evidenceToAdd: options?.evidenceToAdd || state.evidenceToAdd,
|
||||
groupedPhotos: options?.groupedPhotos || state.groupedPhotos,
|
||||
|
||||
@@ -69,7 +69,7 @@ const navigateToPhotoImporter = async ( ) => {
|
||||
await actor.press( photoImporter );
|
||||
};
|
||||
|
||||
describe( "PhotoGallery navigation", ( ) => {
|
||||
describe( "PhotoLibrary navigation", ( ) => {
|
||||
global.withAnimatedTimeTravelEnabled( );
|
||||
beforeEach( ( ) => {
|
||||
useStore.setState( { isAdvancedUser: true } );
|
||||
|
||||
@@ -163,7 +163,7 @@ exports[`CustomTabBar with advanced user layout should render correctly 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
@@ -624,7 +624,7 @@ exports[`CustomTabBar with advanced user layout should render correctly 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
@@ -768,7 +768,7 @@ exports[`CustomTabBar with advanced user layout should render correctly 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { CameraRoll } from "@react-native-camera-roll/camera-roll";
|
||||
import { savePhotosToCameraGallery } from "components/Camera/helpers/savePhotosToCameraGallery.ts";
|
||||
import { savePhotosToPhotoLibrary } from "components/Camera/helpers/savePhotosToPhotoLibrary.ts";
|
||||
import faker from "tests/helpers/faker";
|
||||
|
||||
describe( "userPrepareStoreAndNavigate", ( ) => {
|
||||
describe( "savePhotosToCameraGallery", ( ) => {
|
||||
describe( "savePhotosToPhotoLibrary", ( ) => {
|
||||
it( "should call CameraRoll.save three times when given three uris", async ( ) => {
|
||||
const uris = [
|
||||
faker.system.filePath( ),
|
||||
@@ -11,7 +11,7 @@ describe( "userPrepareStoreAndNavigate", ( ) => {
|
||||
faker.system.filePath( )
|
||||
];
|
||||
const mockOnEachSuccess = jest.fn( );
|
||||
await savePhotosToCameraGallery( uris, mockOnEachSuccess );
|
||||
await savePhotosToPhotoLibrary( uris, mockOnEachSuccess );
|
||||
// This should test that CameraRoll.save was called once for each of the
|
||||
// uris AND that it was called in the order of the uris array
|
||||
// https://jestjs.io/docs/mock-functions#custom-matchers
|
||||
|
||||
@@ -36,7 +36,7 @@ exports[`IdentificationsCount renders default reliably 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
<Text
|
||||
maxFontSizeMultiplier={2}
|
||||
@@ -111,7 +111,7 @@ exports[`IdentificationsCount renders filled reliably 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
<Text
|
||||
maxFontSizeMultiplier={2}
|
||||
@@ -186,7 +186,7 @@ exports[`IdentificationsCount renders white reliably 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
<Text
|
||||
maxFontSizeMultiplier={2}
|
||||
|
||||
@@ -194,7 +194,7 @@ exports[`InlineUser when offline renders reliably 1`] = `
|
||||
}
|
||||
testID="InlineUser.FallbackPicture"
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
<Text
|
||||
@@ -322,7 +322,7 @@ exports[`InlineUser when user has no icon set renders reliably 1`] = `
|
||||
}
|
||||
testID="InlineUser.FallbackPicture"
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
<Text
|
||||
|
||||
@@ -117,7 +117,7 @@ exports[`ObsGridItem for an observation with a photo should render 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
@@ -359,7 +359,7 @@ exports[`ObsGridItem for an observation without a photo should render 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
@@ -255,7 +255,7 @@ exports[`TaxonResult should render correctly 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
@@ -511,7 +511,7 @@ exports[`TaxonResult should render correctly 1`] = `
|
||||
]
|
||||
}
|
||||
>
|
||||
|
||||
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
Reference in New Issue
Block a user