* Crosshairs, location accuracy warnings, text input for location picker
* Add LocationPicker tests
* UI improvements and code refactor into smaller components; get GMaps working
* Add shadows to icons/text boxes
* Use debouncing to avoid map jitter when typing in location
* Show place results & let user pick new location from web api
* Add tests for location picker with remote results
* Add gmaps api key to github actions
* Try adding manifest placeholders for env variable to work in github actions
* Add key to printf in github actions
* Try accessing GMAPS_API_KEY a different way
* Update android e2e env file step
This updates the "Create .env file" step to use printf to print the Google Maps key into a newly created .env file in the GitHub Action runner. Using the same key as in env.example.
* Fix newline
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* WIP: very rough start at pulling state up into a container for MyObservations
I made a parallel MyObservations component and container so ObservationViews
can still be used as a working reference, but the ultimate goal here is to
focus MyObservations on presentation, and pull state and other business logic
up into a container component. This should make MyObservations a bit more
testable and clean up a very large and confusing file.
I'm also trying to move away from a generalized representation of observations
on all screens, which is why I want to name it MyObservations and not
ObservationViews. MyObservations has a lot of unique functionality that we
won't need elsewhere, and we can modularize stuff when we need to use it in
multiple places.
* UI updates for header, toolbar, empty component
* Add pressable component and login sheet
* UI improvements; get infinite scroll working
* UI improvements & additions for empty screen & bottom sheet
* Show login sheet when a user presses sync but is not logged in
* Fix backdrop close for AddObsModal
* Move UI elements to MyObservations
* Fix unit tests for MyObservations
* Fix for login sheet
* Set header height to a different height on Android to account for safe area
* Fix failing tests & rerender of user icon in navbar
* Remove scientific name from DisplayTaxonName to match Figma UI
* Set height above toolbar dynamically for sticky toolbar
* Add prop to display or hide second name in DisplayTaxonName
* Use RN styling to style grid view for MyObs flatlist
* Fix failing project obs test
* Create separate ToolbarContainer to separate presentation from logic; fix upload count
* Merge main and show onboarding based on user's total obs count
* Fix display taxon name styling and remove header fade on iOS
* Add header text for 0 observations, logged out state
* Update infinite scroll to 50 obs at a time; make loading wheel show faster
* Add uploaded status to toolbar
* Apply bandaid fix to stop Android from crashing on start
* Start adding new icons to MyObs
* Add circular progress; show upload icons at correct times during upload
* Add disabled props for accessibility state
* Fix tests; update snapshots
* Code cleanup
* Code cleanup & add inaturalist icon
* Fix merge conflict and add icon
* Add inaturalist icon
* Fix navigation to obs list and toolbar status when upload completes
* Move showLoginSheet code to MyObsContainer
* Fix toolbar status text
* Sync toolbar with upload status progress
* Clear toolbar after nav
* Tests passing
* Update e2e test
* Target login button in e2e tests
* Fix failing e2e tests with new testID for login button
* Update button snapshot to include new testID
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
This uses an npm package to convert SVGs into an icon font, allowing us to
not step on each others' toes when adding new icons in branches and
simplifying the icon addition process. It also allows us to track changes to
the icons, and embed them directly as SVGs if we need to.
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
Somehow many of the icon names in Fontastic were changed. This changes them
back to match what we use on the web and what we use in the main branch of
this repo, with a few exceptions to attempt to make names more consistent.
Also updated the README in the hopes of avoiding situations like this in the
future.
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Add heading typography components
* Add typography components for body, list, and subheading
* Add font sizes/line heights to tailwind css
* Replace Text components in UI library with new typography; closes#383
* Update pixel size of fonts and use Heading2 throughout UI library
* Remove repeated logic from code
* Fix sizes for typography components
* Add custom iNat icon font to iOS and Android
* Add custom icon to iNat UI library
* Create custom iNat icons using IconButton for add obs modal & footer
* Add icon placeholders to observation edit screen
* Test fixes for accessibility
* Move paper provider into new component; fix names in UI library
* Update README with clarified directions about changing the name of the .ttf file
* Add different env files to gitignore; update react-native-config
* Set different staging and production .env files in Android
* Add different envfiles to podfile
* Use podfile to check for .env.production and .env.staging files
* Update README
* Update fastfile to automate distribution/rollout for iOS and Android
* v0.1.1+34
* Tweaks to try to get Android to use production API via Fastlane
* v0.1.1+35
* Point production to .env instead of .env.production
* v0.1.1+36
* Add different env files to gitignore; update react-native-config
* Set different staging and production .env files in Android
* Add different envfiles to podfile
* Use podfile to check for .env.production and .env.staging files
* Update README
* Point production to .env instead of .env.production
* #144 - when creating new observation, import first photo EXIF data for location + date
* #144 - usePhotoExif - read partial file data; added testing for usePhotoExif hook
* #144 - import photo exif - use our own react-native-exif-reader library + other fixes (not to automatically fetch location, save original uri)
* Do not save original photo URI in DB, only pass it along to obs edit screen for EXIF parsing
* Upgraded testing library version to support renderHook
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
This also upgrades us to React Native 0.70.4 and adds a number of files that get us ready for the New Architecture.
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* Add Whitney fonts to project
* Use styled components to pass whitney as default font for all app text
* Add header component using Papyrus as default font
* Update realm and add custom font examples for Android
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* add location permission access to android manifest
* request permission to access location for android
* removes location fetching from the observation model and adds it to ObsEdit
* do not fetch location if it is existing observation
Co-authored-by: Merhawit Gubsa <merhawitgubsa@Merhawits-MacBook-Pro.local>
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
Configures fastlane to automate our current release process of making a git tag, making a git release, building, and pushing to the Play Store internal track and Testflight. See README.md for details on setup and usage.
Co-authored-by: Amanda Bullington <albullington@gmail.com>
* Break uploader into helper function; add bottom model for uploading from obs list
* Create mapping function for uploading observations to iNat
* Mark observations as uploaded when id is returned from server
* Format dates on obs list
* Save all obs locally before trying to upload
* Resize grouped photo gallery photos for upload
* Resize photos btw group photos screen and obs edit
* Get sound, photo, obs uploads saving to realm and uploading later
* ObsEdit progresses to next or prev screen after one obs is saved locally
* Format date in camera; use time observed to show new local obs in ObsList
* Remove time zone attribute, since this is handled by server
* Submit sound and photo uuids as the file name for sound/photo uploads
* Make obsSounds an array in case there are multiple sounds for upload
* Removing time synced from Photo model bc not sure it's necessary
* Save _synced_at and _created_at time for all remote obs
* Fix back button, obs edit
* Don't show obs edit for unuploaded obs
* Get rid of ObservationProvider, move useObservations hook
* Fix place name; add date/time and location to no evidence uploads
* Add species_guess to observation when taxon_id changes
* Format date from picker; use string for sending to server
* Styling cleanup with react-native-paper; make ObsEdit into section components
* Add vector icons to ios (for searchbar)
* Add empty text to CV suggestions
* Cleanup code for marking records synced & uploading to server
* Use placeholder icons on bottom tab bar
* Add icons to ObsList; fix grid view when photo === null
* Fix jest tests
* Simplify setting an identification in ObsEdit
* Move inline styles to separate files
* Display all relevant saved obs data on ObsDetails; function to check for camel or snake case attributes
* Move logic for creating new sound observation to model, not sound recorder
* Add android vector icons
* Move create obs and create with no evidence into Observation model
* Add mock for react-native-fs
* Show option to edit user obs in ObsDetail; fix captive/geoprivacy/date fields for uploaded obs
* Move obsPhoto creation and obs with obsPhoto creation into models
* Create obs with sound from Obs model
* Create multiple obs from gallery photos; move logic into model
* Pass observation to ObsDetails via navigation to avoid opening and closing realm twice
* Lint error fixes
* Fix jest tests
* Use icons on normal camera
* Use timestamps from gallery and camera for new observations
* Keep simplifying code
* Update version/build number; add key to info.plist for faster ios build
* Remove TranslatedHeadline component
* Move saveLocalObservation logic to model
* Move all FIELDS for api calls into models (except messages, which doesn't have a model yet)
* Only show upload UI if user is logged in
* Fix obs edit link so it works for both logged in and logged out users
* Bug fixes: get fields from models; addListener function in test
* Model code cleanup
* More code cleanup
* Remove unused imports
* Add exception handler library; fix computer vision results
* Create loggedIn hook to check whether user is logged in before cv suggestions or upload
* Create user profile card on MyObs
* Update packages
* Add text for camera permissions denied
* Remove log
* Upgrade react native on iOS
* Add vendor file for ruby gems to gitignore
* Remove vendor file from github
* Update react native for android
* Add plural example to fluent; create TranslatedText component to render translations
* Add translations and update camera roll screens
* Small changes to uploader flow; add date/time picker
* Separate explore into landing screen and view screen
* Show total number of observations, explore
* Clean up styling and add details for grid view; banner for total observations in explore
* Add checkboxes for status, quality grade, media filters
* Add a lot of explore filters
* Show months in Explore filters
* Create About screen; sync package.json version using react native version
* Get explore filters in mostly working condition
* Observations download after login; clear login screen after nav; closes#62 and #60
* Allow separating photos if at least 1 combined photo obs is selected; closes#68
* Fix auth tests; add user id
* Pop text input above keyboard to address #66
* Lint cleanup
* Create bottom modal for user tapping back button on ObsEdit
* Check permissions on android only, camera
* Keep trying to get android camera working
* Change version number to 0.1.0
* Get camera and sound recording working in Android
* Use obs uuid for create observation
* Fix no evidence upload screen; create new obs to upload
* Fix tests and flow errors
* Get photo gallery working on android; fetch more photos on user scroll
* Add alert for upload in progress
* Update build number
* Set up upload key for release build
* Make test todo