Compare commits

..

5 Commits

Author SHA1 Message Date
bl00dymarie ff52bbc13d Release: iOS-1.2401.17 2024-01-29 17:08:17 +01:00
bl00dymarie d395ba9be4 Address xcode error messages 2024-01-29 17:08:17 +01:00
bl00dymarie 91c05e79c0 Update project changes according to xCode suggestion 2024-01-29 17:08:17 +01:00
Liv 1e56f4e3f4 Reorder import buttons depending on OS 2024-01-29 17:08:17 +01:00
bl00dymarie 5e55a2e2ef Partial update RN to 0.68.3 for android build 2024-01-29 17:07:42 +01:00
26 changed files with 270 additions and 333 deletions
-1
View File
@@ -9,7 +9,6 @@ cache:
test_async: test_async:
script: script:
- npm install npm@7.0.1 -g - npm install npm@7.0.1 -g
- npm install
- npm test - npm test
variables: variables:
+13 -16
View File
@@ -1,29 +1,26 @@
## 🐛 Oh no, a bug 🐛 ## oh no a bug 🐛
### What happened? ### Description what has happened
Short overview of how the bug manifests. Short overview how the bug manifests.
### What is the expected behaviour? ### which OS + version is your device
_It's supposed to show ... and not ..._
### Which OS + version is your device?
- [ ] Android _number_ - [ ] Android _number_
- [ ] iOS _number_ - [ ] iOS _number_
- [ ] Simulator _number_
### Which drip version number are you using? ### which drip version number are you using
_On your phone, go to ➞ menu on the top right ➞ about, scroll to the very bottom, and find the version number_ _On your phone go to ➞ menu on the top right ➞ about, scroll to the very bottom and find the version number_
### How did it happen? ### how did it happen
_What triggered the bug/behavior, always/sometimes, is it reproducible(how)?_ _what triggered the bug/behavior, always/sometimes, is it reproducible(how)?_
### Describe how it looks or add a screenshot ### describe how it looks or add screenshot
Feel free to attach a file 📎 feel free to attach a file 📎
### Any ideas on how to solve it? 💡 ### any idea to solve it
💡
+7 -8
View File
@@ -1,23 +1,22 @@
## 🪠 This has to be done 🪠 ## This has to be done 🪠
### What has to be done? ### Description what has to be done
Short overview Short overview
### Is it urgent? ⏳ ### is it urgent? ⏳
- [ ] Yes - [ ] Yes
- [ ] No - [ ] No
- [ ] Something in between - [ ] something in between
_Explain the urgency if possible, e.g. is it a security vulnerability for potentially everyone?_ _Explain the urgency if possible, e.g. is it a security vulnerability for potentially everyone?_
If it is a security vulnerability for potentially everyone, please reach out ASAP to drip@mailbox.org.
### Which OS? ### which OS
- [ ] Android - [ ] Android
- [ ] iOS - [ ] iOS
### What should the ideal outcome be? 🎆 ### what shall be the ideal outcome 🎆
_You can, e.g., specify the version number for a library update_ _You can e.g. specify here the version number for a library update_
+9 -16
View File
@@ -1,26 +1,19 @@
## 🧩 Yeah, a feature idea! 🧩 ## Yeah a feature idea 🧩
### This feature is a ... ### what should this feature do or solve? 🪄
- [ ] period tracking feature (add more data points etc.)
- [ ] technological feature (password, design, settings, etc.)
### What should this feature do or solve? 🪄
Please give a short overview so as many people as possible would be able to understand. Please give a short overview so as many people as possible would be able to understand.
### Who is this feature for? ### what is particularly important to the people who would use this feature?
### What is particularly important to the people who would use this feature? Do you have certain user groups in mind?
### Where in the app should the feature be added? ### Any idea where it shall be placed in the app?
### Is it connected with or dependent on some other feature? ### is it connected with or dependent on some other feature?
### How should the feature look (sketch or mock-up)? ### any idea how it shall look (sketch?)
Feel free to attach a file 📎 feel free to attach a file 📎
### What could be difficulties (esp. integrating with other components)? 🪆 ### what could be difficulties (with other components) 🪆
### Do you want to work on this yourself?
+2 -2
View File
@@ -134,8 +134,8 @@ android {
applicationId "com.drip" applicationId "com.drip"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 27 versionCode 25
versionName "1.2402.15" versionName "1.2311.14"
ndk { ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
} }
+1 -2
View File
@@ -1,6 +1,5 @@
#Wed Oct 11 14:45:21 CEST 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
+168 -120
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/bin/sh
# #
# Copyright 2015 the original author or authors. # Copyright © 2015-2021 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -17,70 +17,103 @@
# #
############################################################################## ##############################################################################
## #
## Gradle start up script for UN*X # Gradle start up script for POSIX generated by Gradle.
## #
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
############################################################################## ##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD=maximum
warn ( ) { warn () {
echo "$*" echo "$*"
} } >&2
die ( ) { die () {
echo echo
echo "$*" echo "$*"
echo echo
exit 1 exit 1
} } >&2
# OS specific support (must be 'true' or 'false'). # OS specific support (must be 'true' or 'false').
cygwin=false cygwin=false
msys=false msys=false
darwin=false darwin=false
case "`uname`" in nonstop=false
CYGWIN* ) case "$( uname )" in #(
cygwin=true CYGWIN* ) cygwin=true ;; #(
;; Darwin* ) darwin=true ;; #(
Darwin* ) MSYS* | MINGW* ) msys=true ;; #(
darwin=true NONSTOP* ) nonstop=true ;;
;;
MINGW* )
msys=true
;;
esac esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -88,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables # IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java" JAVACMD=$JAVA_HOME/jre/sh/java
else else
JAVACMD="$JAVA_HOME/bin/java" JAVACMD=$JAVA_HOME/bin/java
fi fi
if [ ! -x "$JAVACMD" ] ; then if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -99,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
else else
JAVACMD="java" JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
@@ -107,80 +140,95 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
MAX_FD_LIMIT=`ulimit -H -n` case $MAX_FD in #(
if [ $? -eq 0 ] ; then max*)
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD=$( ulimit -H -n ) ||
MAX_FD="$MAX_FD_LIMIT" warn "Could not query maximum file descriptor limit"
fi esac
ulimit -n $MAX_FD case $MAX_FD in #(
if [ $? -ne 0 ] ; then '' | soft) :;; #(
warn "Could not set maximum file descriptor limit: $MAX_FD" *)
fi ulimit -n "$MAX_FD" ||
else warn "Could not set maximum file descriptor limit to $MAX_FD"
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
# Escape application args # Collect all arguments for the java command, stacking in reverse order:
save () { # * args from the command line
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done # * the main class name
echo " " # * -classpath
} # * -D...appname settings
APP_ARGS=`save "$@"` # * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules # For Cygwin or MSYS, switch paths to Windows format before running java
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@" exec "$JAVACMD" "$@"
+7
View File
@@ -3,3 +3,10 @@ rootProject.name = 'drip'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app' include ':app'
includeBuild('../node_modules/react-native-gradle-plugin')
if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
include(":ReactAndroid")
project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
}
+2 -7
View File
@@ -21,7 +21,6 @@ import {
noteTrackingCategoryObservable, noteTrackingCategoryObservable,
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable,
} from '../../local-storage' } from '../../local-storage'
import { makeColumnInfo } from '../helpers/chart' import { makeColumnInfo } from '../helpers/chart'
@@ -85,11 +84,7 @@ const CycleChart = ({ navigate, setDate }) => {
} }
}) })
const isTemperatureEnabled = temperatureTrackingCategoryObservable.value const shouldShowTemperatureColumn = chartSymptoms.indexOf('temperature') > -1
const shouldShowTemperatureColumn =
isTemperatureEnabled && chartSymptoms.indexOf('temperature') > -1
const shouldShowNoDataWarning =
isTemperatureEnabled && chartSymptoms.indexOf('temperature') <= -1
const { width, height } = Dimensions.get('window') const { width, height } = Dimensions.get('window')
const numberOfColumnsToRender = Math.round(width / CHART_COLUMN_WIDTH) const numberOfColumnsToRender = Math.round(width / CHART_COLUMN_WIDTH)
@@ -140,7 +135,7 @@ const CycleChart = ({ navigate, setDate }) => {
> >
<View style={styles.chartContainer}> <View style={styles.chartContainer}>
{shouldShowHint && <Tutorial onClose={hideHint} />} {shouldShowHint && <Tutorial onClose={hideHint} />}
{shouldShowNoDataWarning && <NoTemperature />} {!shouldShowTemperatureColumn && <NoTemperature />}
<View style={styles.chartArea}> <View style={styles.chartArea}>
<YAxis <YAxis
height={columnHeight} height={columnHeight}
+6 -14
View File
@@ -1,7 +1,6 @@
import React from 'react' import React from 'react'
import { import {
Dimensions, Dimensions,
KeyboardAvoidingView,
Modal, Modal,
StyleSheet, StyleSheet,
TouchableOpacity, TouchableOpacity,
@@ -20,15 +19,13 @@ const AppModal = ({ children, onClose }) => (
transparent={true} transparent={true}
visible={true} visible={true}
> >
<KeyboardAvoidingView behavior={'padding'} style={styles.safeAreaView}> <TouchableOpacity onPress={onClose} style={styles.blackBackground} />
<TouchableOpacity onPress={onClose} style={styles.blackBackground} /> <View style={styles.modalWindow}>
<View style={styles.modalWindow}> <View style={styles.headerContainer}>
<View style={styles.headerContainer}> <CloseIcon onClose={onClose} />
<CloseIcon onClose={onClose} />
</View>
{children}
</View> </View>
</KeyboardAvoidingView> {children}
</View>
</Modal> </Modal>
) )
@@ -65,11 +62,6 @@ const styles = StyleSheet.create({
elevation: 2, // works on android elevation: 2, // works on android
minWidth: '80%', minWidth: '80%',
}, },
safeAreaView: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
}) })
export default AppModal export default AppModal
+1 -4
View File
@@ -15,7 +15,6 @@ import {
noteTrackingCategoryObservable, noteTrackingCategoryObservable,
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable,
} from '../../local-storage' } from '../../local-storage'
import { Spacing } from '../../styles' import { Spacing } from '../../styles'
import { SYMPTOMS } from '../../config' import { SYMPTOMS } from '../../config'
@@ -36,9 +35,7 @@ const CycleDayOverView = ({ date, setDate, isTemperatureEditView }) => {
} }
const allEnabledSymptoms = SYMPTOMS.map((symptom) => { const allEnabledSymptoms = SYMPTOMS.map((symptom) => {
if (symptom === 'temperature') { if (symptom === 'sex') {
return temperatureTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'sex') {
return sexTrackingCategoryObservable.value ? symptom : null return sexTrackingCategoryObservable.value ? symptom : null
} else if (symptom === 'desire') { } else if (symptom === 'desire') {
return desireTrackingCategoryObservable.value ? symptom : null return desireTrackingCategoryObservable.value ? symptom : null
+2 -4
View File
@@ -110,7 +110,7 @@ const SymptomEditView = ({ date, onClose, symptom, symptomData }) => {
const inputProps = { const inputProps = {
multiline: true, multiline: true,
numberOfLines: 3, numberOfLines: 3,
scrollEnabled: true, scrollEnabled: false,
style: styles.input, style: styles.input,
textAlignVertical: 'top', textAlignVertical: 'top',
} }
@@ -176,13 +176,11 @@ const SymptomEditView = ({ date, onClose, symptom, symptomData }) => {
/> />
</Segment> </Segment>
)} )}
{/* this code below applies to the note field in temperature and the note tracking category */}
{shouldShow(symptomConfig.note) && ( {shouldShow(symptomConfig.note) && (
<Segment style={styles.segmentBorder}> <Segment style={styles.segmentBorder}>
<AppText>{symtomPage[symptom].note}</AppText> <AppText>{symtomPage[symptom].note}</AppText>
<AppTextInput <AppTextInput
{...(symptom === 'temperature' ? { inputProps } : {})} {...inputProps}
multiline={true}
onChangeText={onEditNote} onChangeText={onEditNote}
placeholder={sharedLabels.enter} placeholder={sharedLabels.enter}
testID="noteInput" testID="noteInput"
+17 -56
View File
@@ -1,5 +1,4 @@
import React, { useState } from 'react' import React, { useState } from 'react'
import { Alert, Pressable } from 'react-native'
import AppPage from '../../common/app-page' import AppPage from '../../common/app-page'
import AppSwitch from '../../common/app-switch' import AppSwitch from '../../common/app-switch'
@@ -13,21 +12,18 @@ import {
noteTrackingCategoryObservable, noteTrackingCategoryObservable,
painTrackingCategoryObservable, painTrackingCategoryObservable,
sexTrackingCategoryObservable, sexTrackingCategoryObservable,
temperatureTrackingCategoryObservable,
saveDesireTrackingCategory, saveDesireTrackingCategory,
saveMoodTrackingCategory, saveMoodTrackingCategory,
saveNoteTrackingCategory, saveNoteTrackingCategory,
savePainTrackingCategory, savePainTrackingCategory,
savePeriodPrediction, savePeriodPrediction,
saveSexTrackingCategory, saveSexTrackingCategory,
saveTemperatureTrackingCategory,
saveUseCervix, saveUseCervix,
periodPredictionObservable, periodPredictionObservable,
useCervixObservable, useCervixObservable,
} from '../../../local-storage' } from '../../../local-storage'
import { Colors } from '../../../styles' import { Colors } from '../../../styles'
import labels from '../../../i18n/en/settings' import labels from '../../../i18n/en/settings'
import { SYMPTOMS } from '../../../config'
const Settings = () => { const Settings = () => {
const [shouldUseCervix, setShouldUseCervix] = useState( const [shouldUseCervix, setShouldUseCervix] = useState(
@@ -38,9 +34,6 @@ const Settings = () => {
periodPredictionObservable.value periodPredictionObservable.value
) )
const [isTemperatureTrackingCategoryEnabled, setTemperatureTrackingCategory] =
useState(temperatureTrackingCategoryObservable.value)
const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState( const [isSexTrackingCategoryEnabled, setSexTrackingCategory] = useState(
sexTrackingCategoryObservable.value sexTrackingCategoryObservable.value
) )
@@ -64,11 +57,6 @@ const Settings = () => {
const [isEnabled, setIsEnabled] = useState(false) const [isEnabled, setIsEnabled] = useState(false)
const toggleSwitch = () => setIsEnabled((previousState) => !previousState) const toggleSwitch = () => setIsEnabled((previousState) => !previousState)
const temperatureTrackingCategoryToggle = (value) => {
setTemperatureTrackingCategory(value)
saveTemperatureTrackingCategory(value)
}
const sexTrackingCategoryToggle = (value) => { const sexTrackingCategoryToggle = (value) => {
setSexTrackingCategory(value) setSexTrackingCategory(value)
saveSexTrackingCategory(value) saveSexTrackingCategory(value)
@@ -109,47 +97,36 @@ const Settings = () => {
? labels.useCervix.cervixModeOn ? labels.useCervix.cervixModeOn
: labels.useCervix.cervixModeOff : labels.useCervix.cervixModeOff
const sliderDisabledPrompt = () => {
if (!isTemperatureTrackingCategoryEnabled) {
Alert.alert(labels.disabled.title, labels.disabled.message)
}
}
return ( return (
<AppPage title={'Customization'}> <AppPage title={'Customization'}>
<Segment title={'Tracking categories'}> <Segment title={'Tracking categories'}>
<AppSwitch
onToggle={temperatureTrackingCategoryToggle}
text={SYMPTOMS[1]}
value={isTemperatureTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }}
/>
<AppSwitch <AppSwitch
onToggle={sexTrackingCategoryToggle} onToggle={sexTrackingCategoryToggle}
text={SYMPTOMS[4]} text={"sex: when turned off it won't show"}
value={isSexTrackingCategoryEnabled} value={isSexTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
<AppSwitch <AppSwitch
onToggle={desireTrackingCategoryToggle} onToggle={desireTrackingCategoryToggle}
text={SYMPTOMS[5]} text={"desire: when turned off it won't show"}
value={isDesireTrackingCategoryEnabled} value={isDesireTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
<AppSwitch <AppSwitch
onToggle={painTrackingCategoryToggle} onToggle={painTrackingCategoryToggle}
text={SYMPTOMS[6]} text={"pain: when turned off it won't show"}
value={isPainTrackingCategoryEnabled} value={isPainTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
<AppSwitch <AppSwitch
onToggle={moodTrackingCategoryToggle} onToggle={moodTrackingCategoryToggle}
text={SYMPTOMS[7]} text={"mood: when turned off it won't show"}
value={isMoodTrackingCategoryEnabled} value={isMoodTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
<AppSwitch <AppSwitch
onToggle={noteTrackingCategoryToggle} onToggle={noteTrackingCategoryToggle}
text={SYMPTOMS[8]} text={"note: when turned off it won't show"}
value={isNoteTrackingCategoryEnabled} value={isNoteTrackingCategoryEnabled}
trackColor={{ true: Colors.turquoiseDark }} trackColor={{ true: Colors.turquoiseDark }}
/> />
@@ -164,35 +141,19 @@ const Settings = () => {
/> />
</Segment> </Segment>
<Pressable onPress={sliderDisabledPrompt}> <Segment title={labels.tempScale.segmentTitle}>
<Segment title={labels.tempScale.segmentTitle}> <AppText>{labels.tempScale.segmentExplainer}</AppText>
{isTemperatureTrackingCategoryEnabled && ( <TemperatureSlider />
<> </Segment>
<AppText>{labels.tempScale.segmentExplainer}</AppText>
<TemperatureSlider />
</>
)}
{!isTemperatureTrackingCategoryEnabled && (
<AppText>{labels.disabled.message}</AppText>
)}
</Segment>
</Pressable>
<Pressable onPress={sliderDisabledPrompt}> <Segment title={labels.useCervix.title}>
<Segment title={labels.useCervix.title}> <AppSwitch
{isTemperatureTrackingCategoryEnabled && ( onToggle={onCervixToggle}
<AppSwitch text={cervixText}
onToggle={onCervixToggle} value={shouldUseCervix}
text={cervixText} trackColor={{ true: Colors.turquoiseDark }}
value={shouldUseCervix} />
trackColor={{ true: Colors.turquoiseDark }} </Segment>
/>
)}
{!isTemperatureTrackingCategoryEnabled && (
<AppText>{labels.disabled.message}</AppText>
)}
</Segment>
</Pressable>
<Segment title={labels.periodPrediction.title} last> <Segment title={labels.periodPrediction.title} last>
<AppSwitch <AppSwitch
+2 -13
View File
@@ -20,15 +20,11 @@ const MenuItem = ({ item, last, navigate }) => {
key={item.label} key={item.label}
onPress={() => navigate(item.componentName)} onPress={() => navigate(item.componentName)}
> >
<View style={styles.textContainer}> <View>
<AppText style={styles.title}>{t(`${item.label}.name`)}</AppText> <AppText style={styles.title}>{t(`${item.label}.name`)}</AppText>
{!!item.label && <AppText>{t(`${item.label}.text`)}</AppText>} {!!item.label && <AppText>{t(`${item.label}.text`)}</AppText>}
</View> </View>
<AppIcon <AppIcon name="chevron-right" color={Colors.orange} />
style={styles.chevronContainer}
name="chevron-right"
color={Colors.orange}
/>
</TouchableOpacity> </TouchableOpacity>
</Segment> </Segment>
) )
@@ -48,13 +44,6 @@ const styles = StyleSheet.create({
color: Colors.purple, color: Colors.purple,
fontSize: Sizes.subtitle, fontSize: Sizes.subtitle,
}, },
textContainer: {
flex: 5,
},
chevronContainer: {
textAlign: 'right',
flex: 1,
},
}) })
export default MenuItem export default MenuItem
+3 -14
View File
@@ -9,7 +9,6 @@ import {
periodReminderObservable, periodReminderObservable,
savePeriodReminder, savePeriodReminder,
periodPredictionObservable, periodPredictionObservable,
temperatureTrackingCategoryObservable,
} from '../../../local-storage' } from '../../../local-storage'
import labels from '../../../i18n/en/settings' import labels from '../../../i18n/en/settings'
@@ -35,14 +34,6 @@ const Reminders = () => {
} }
} }
const tempReminderDisabledPrompt = () => {
if (!temperatureTrackingCategoryObservable.value) {
Alert.alert(
labels.tempReminder.alertNoTempReminder.title,
labels.tempReminder.alertNoTempReminder.message
)
}
}
return ( return (
<AppPage> <AppPage>
<Pressable onPress={reminderDisabledPrompt}> <Pressable onPress={reminderDisabledPrompt}>
@@ -55,11 +46,9 @@ const Reminders = () => {
/> />
</Segment> </Segment>
</Pressable> </Pressable>
<Pressable onPress={tempReminderDisabledPrompt}> <Segment title={labels.tempReminder.title} last>
<Segment title={labels.tempReminder.title} last> <TemperatureReminder />
<TemperatureReminder /> </Segment>
</Segment>
</Pressable>
</AppPage> </AppPage>
) )
} }
@@ -7,7 +7,6 @@ import AppSwitch from '../../common/app-switch'
import { import {
saveTempReminder, saveTempReminder,
tempReminderObservable, tempReminderObservable,
temperatureTrackingCategoryObservable,
} from '../../../local-storage' } from '../../../local-storage'
import padWithZeros from '../../helpers/pad-time-with-zeros' import padWithZeros from '../../helpers/pad-time-with-zeros'
@@ -52,7 +51,6 @@ const TemperatureReminder = () => {
onToggle={temperatureReminderToggle} onToggle={temperatureReminderToggle}
text={tempReminderText} text={tempReminderText}
value={isEnabled} value={isEnabled}
disabled={!temperatureTrackingCategoryObservable.value}
/> />
<DateTimePicker <DateTimePicker
isVisible={isTimePickerVisible} isVisible={isTimePickerVisible}
+2 -2
View File
@@ -51,7 +51,7 @@
}, },
"philosophy": { "philosophy": {
"title": "Remember to think for yourself", "title": "Remember to think for yourself",
"text": "drip. makes period predictions for you and helps you apply the sympto-thermal method for fertility awareness. But please remember that this app is made by humans, and humans make mistakes. Always think for yourself: \"Does this make sense?\" Remember, you don't need an app to understand your cycle! However, drip. wants to support you and make period tracking easier, more transparent and secure." "text": "drip. makes period predictions for you and helps you apply NFP fertility awareness rules. But please remember that this app is made by humans, and humans make mistakes. Always think for yourself: \"Does this make sense?\" Remember, you don't need an app to understand your cycle! However, drip. wants to support you and make period tracking easier, more transparent and secure."
}, },
"title": "About", "title": "About",
"version": { "version": {
@@ -122,7 +122,7 @@
}, },
"password": { "password": {
"name": "Password", "name": "Password",
"text": "set or edit your password" "text": ""
}, },
"reminders": { "reminders": {
"name": "Reminders", "name": "Reminders",
+3 -3
View File
@@ -70,14 +70,14 @@ export const fertilityStatus = {
unknown: unknown:
'We cannot show any cycle information because no period data has been added.', 'We cannot show any cycle information because no period data has been added.',
preOvuText: preOvuText:
"According to the sympto-thermal method, you may assume 5 days of infertility at the beginning of your cycle, provided you don't observe any fertile cervical mucus or cervix values.", "With NFP rules, you may assume 5 days of infertility at the beginning of your cycle, provided you don't observe any fertile cervical mucus or cervix values.",
periOvuText: periOvuText:
'We were not able to detect both a temperature shift and cervical mucus or cervix shift.', 'We were not able to detect both a temperature shift and cervical mucus or cervix shift.',
periOvuUntilEveningText: (tempRule) => { periOvuUntilEveningText: (tempRule) => {
return ( return (
'We detected a temperature shift (' + 'We detected a temperature shift (' +
['regular', '1st exception', '2nd exception'][tempRule] + ['regular', '1st exception', '2nd exception'][tempRule] +
' temperature rule), as well as a cervical mucus/cervix shift according to the sympto-thermal method. In the evening today you may assume infertility, but ' + ' temperature rule), as well as a cervical mucus/cervix shift according to NFP rules. In the evening today you may assume infertility, but ' +
'always remember to double-check for yourself. Make sure the data makes sense to you.' 'always remember to double-check for yourself. Make sure the data makes sense to you.'
) )
}, },
@@ -85,7 +85,7 @@ export const fertilityStatus = {
return ( return (
'We detected a temperature shift (' + 'We detected a temperature shift (' +
['regular', '1st exception', '2nd exception'][tempRule] + ['regular', '1st exception', '2nd exception'][tempRule] +
' temperature rule), as well as a cervical mucus/cervix shift according to the sympto-thermal method. You may assume infertility, but always remember to ' + ' temperature rule), as well as a cervical mucus/cervix shift according to NFP rules. You may assume infertility, but always remember to ' +
'double-check for yourself. Make sure the data makes sense to you.' 'double-check for yourself. Make sure the data makes sense to you.'
) )
}, },
+1 -11
View File
@@ -38,21 +38,11 @@ export default {
loadError: 'Could not load saved temperature scale settings', loadError: 'Could not load saved temperature scale settings',
saveError: 'Could not save temperature scale settings', saveError: 'Could not save temperature scale settings',
}, },
disabled: {
title: 'This feature is turned off',
message:
'Please first enable the temperature tracking category in the customization settings.',
},
tempReminder: { tempReminder: {
title: 'Temperature reminder', title: 'Temperature reminder',
noTimeSet: 'Set a time for a daily reminder to take your temperature', noTimeSet: 'Set a time for a daily reminder to take your temperature',
timeSet: (time) => `Daily reminder set for ${time}`, timeSet: (time) => `Daily reminder set for ${time}`,
notification: 'Record your morning temperature', notification: 'Record your morning temperature',
alertNoTempReminder: {
title: 'Temperature turned off',
message:
'To use the temperature reminder please first enable the temperature tracking category in the customization settings.',
},
}, },
periodReminder: { periodReminder: {
title: 'Next period reminder', title: 'Next period reminder',
@@ -119,6 +109,6 @@ Making any changes to your password setting will keep your data as it was before
}, },
preOvu: { preOvu: {
title: 'Infertile days at cycle start', title: 'Infertile days at cycle start',
note: `drip. applies the sympto-thermal method for calculating infertile days at the start of the cycle (see ${links.wiki.url} for more info). However, drip. does not currently apply the so called 20-day-rule, which determines infertile days at the cycle start from past cycle lengths in case no past symptothermal info is available.`, note: `drip. applies NFP's rules for calculating infertile days at the start of the cycle (see ${links.wiki.url} for more info). However, drip. does not currently apply the so called 20-day-rule, which determines infertile days at the cycle start from past cycle lengths in case no past symptothermal info is available.`,
}, },
} }
+6 -6
View File
@@ -11,7 +11,7 @@ export const generalInfo = {
3. and menstrual bleeding 3. and menstrual bleeding
the app helps you identify in which phase of the menstrual cycle you are. the app helps you identify in which phase of the menstrual cycle you are.
drip. makes period predictions for you and helps you apply the sympto-thermal method for fertility awareness. But please remember that this app is made by humans, and humans make mistakes. Always think for yourself: "Does this make sense?" Remember, you don't need an app to understand your cycle! However, drip. wants to support you and make period tracking easier, more transparent and secure. drip. makes period predictions for you and helps you apply NFP fertility awareness rules. But please remember that this app is made by humans, and humans make mistakes. Always think for yourself: "Does this make sense?" Remember, you don't need an app to understand your cycle! However, drip. wants to support you and make period tracking easier, more transparent and secure.
Please find more info on the sympto-thermal method in ${links.wiki.url}.`, Please find more info on the sympto-thermal method in ${links.wiki.url}.`,
noNfpSymptom: `The app allows you to track this symptom for your information, it is not taken into account for any calculation. On the chart you can check how often you track this symptom.`, noNfpSymptom: `The app allows you to track this symptom for your information, it is not taken into account for any calculation. On the chart you can check how often you track this symptom.`,
@@ -39,7 +39,7 @@ ${generalInfo.nfpTfyReminder}`,
Tracking how open or closed and how firm or soft the cervix feels can help determine in which phase of the menstrual cycle you are. Tracking how open or closed and how firm or soft the cervix feels can help determine in which phase of the menstrual cycle you are.
By default, the secondary symptom the app uses for the sympto-thermal method is cervical mucus, but you can change it to cervix in "Settings" -> "Customization". By default, the secondary symptom the app uses for NFP evaluation is cervical mucus, but you can change it to cervix in "Settings" -> "NFP Settings".
· How to identify a fertile cervix? · How to identify a fertile cervix?
A fertile cervix is open and feels soft like your earlobes. In contrast, an infertile cervix feels closed and hard, like the tip of your nose. If the cervix feels anything other than closed and hard, drip. takes it as a sign of fertility. On the chart, a fertile cervix is colored in dark yellow, and infertile cervix is colored in light yellow. A fertile cervix is open and feels soft like your earlobes. In contrast, an infertile cervix feels closed and hard, like the tip of your nose. If the cervix feels anything other than closed and hard, drip. takes it as a sign of fertility. On the chart, a fertile cervix is colored in dark yellow, and infertile cervix is colored in light yellow.
@@ -74,10 +74,10 @@ ${generalInfo.curiousNfp}`,
title: 'Tracking cervical mucus', title: 'Tracking cervical mucus',
text: `Cervical mucus can help determine in which phase of the menstrual cycle you are. text: `Cervical mucus can help determine in which phase of the menstrual cycle you are.
By default the secondary symptom the app uses for the sympto-thermal method is cervical mucus. By default the secondary symptom the app uses for NFP evaluation is cervical mucus.
· How to identify fertile cervical mucus? · How to identify fertile cervical mucus?
Tracking the feeling and the texture of your cervical mucus on a daily basis helps you identify changes of the quality of the cervical mucus. The values you enter for both feeling and texture of your cervical mucus are combined by drip. into one of five values following the sympto-thermal method. Tracking the feeling and the texture of your cervical mucus on a daily basis helps you identify changes of the quality of the cervical mucus. The values you enter for both feeling and texture of your cervical mucus are combined by drip. into one of five NFP-conforming values.
From lowest to best quality: From lowest to best quality:
· t = (dry feeling + no texture), · t = (dry feeling + no texture),
· ∅ = (no feeling + no texture), · ∅ = (no feeling + no texture),
@@ -87,7 +87,7 @@ From lowest to best quality:
On the chart, cervical mucus is colored in blue: the darker the shade of blue the better the quality of your cervical mucus. On the chart, cervical mucus is colored in blue: the darker the shade of blue the better the quality of your cervical mucus.
Please note that drip. does not yet support "parenthesis values": According to the sympto-thermal method, you can qualify a cervical mucus value by putting parentheses around it, to indicate that it doesn't fully meet the descriptors of one of the five categories, and instead is in between. This functionality will be supported in the future. Please note that drip. does not yet support "parenthesis values": According to NFP rules, you can qualify a cervical mucus value by putting parentheses around it, to indicate that it doesn't fully meet the descriptors of one of the five categories, and instead is in between. This functionality will be supported in the future.
${generalInfo.chartNfp} ${generalInfo.chartNfp}
@@ -125,7 +125,7 @@ ${generalInfo.curiousNfp}`,
title: 'Tracking body basal temperature', title: 'Tracking body basal temperature',
text: `One of the body signs you need to track for knowing your fertility status is your body basal temperature. The body temperature changes over the course of a menstrual cycle, it rises after ovulation. text: `One of the body signs you need to track for knowing your fertility status is your body basal temperature. The body temperature changes over the course of a menstrual cycle, it rises after ovulation.
By default the secondary symptom is cervical mucus, but you can change it to cervix in "Settings" -> "Customization". By default the secondary symptom is cervical mucus, but you can change it to cervix in "Settings" -> "NFP Settings".
· What is body basal temperature? · What is body basal temperature?
It's your temperature after lying still for at least 6 hours. For many, this is when they are waking up in the morning after sleeping at least 6 hours and before getting up. It's your temperature after lying still for at least 6 hours. For many, this is when they are waking up in the morning after sleeping at least 6 hours and before getting up.
+2 -1
View File
@@ -32,5 +32,6 @@ target 'drip' do
post_install do |installer| post_install do |installer|
react_native_post_install(installer) react_native_post_install(installer)
end __apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end end
+2 -2
View File
@@ -35,7 +35,7 @@
54DFE73B25D94D6E0025C3FC /* swipe.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73925D94D6E0025C3FC /* swipe.png */; }; 54DFE73B25D94D6E0025C3FC /* swipe.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73925D94D6E0025C3FC /* swipe.png */; };
54DFE73D25D94DED0025C3FC /* cycle-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73C25D94DED0025C3FC /* cycle-icon.png */; }; 54DFE73D25D94DED0025C3FC /* cycle-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73C25D94DED0025C3FC /* cycle-icon.png */; };
54DFE73E25D94DED0025C3FC /* cycle-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73C25D94DED0025C3FC /* cycle-icon.png */; }; 54DFE73E25D94DED0025C3FC /* cycle-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 54DFE73C25D94DED0025C3FC /* cycle-icon.png */; };
54E1D49923E7588F003FA37B /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; 54E1D49923E7588F003FA37B /* (null) in Frameworks */ = {isa = PBXBuildFile; };
62F2A4645AC84CDC9506FF27 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AEBF0735214455AAEDF56D5 /* libc++.tbd */; }; 62F2A4645AC84CDC9506FF27 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AEBF0735214455AAEDF56D5 /* libc++.tbd */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
BD7041F2826E4A2CBE6CB87D /* RealmJSTests.xctest in Frameworks */ = {isa = PBXBuildFile; fileRef = F79F72C5390646E0A06AAE68 /* RealmJSTests.xctest */; }; BD7041F2826E4A2CBE6CB87D /* RealmJSTests.xctest in Frameworks */ = {isa = PBXBuildFile; fileRef = F79F72C5390646E0A06AAE68 /* RealmJSTests.xctest */; };
@@ -118,7 +118,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
54E1D49923E7588F003FA37B /* BuildFile in Frameworks */, 54E1D49923E7588F003FA37B /* (null) in Frameworks */,
62F2A4645AC84CDC9506FF27 /* libc++.tbd in Frameworks */, 62F2A4645AC84CDC9506FF27 /* libc++.tbd in Frameworks */,
D91133DCE120440893E2FD2E /* libz.tbd in Frameworks */, D91133DCE120440893E2FD2E /* libz.tbd in Frameworks */,
BD7041F2826E4A2CBE6CB87D /* RealmJSTests.xctest in Frameworks */, BD7041F2826E4A2CBE6CB87D /* RealmJSTests.xctest in Frameworks */,
+1 -1
View File
@@ -19,7 +19,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.2402.15</string> <string>1.2401.17</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
-15
View File
@@ -92,21 +92,6 @@ export async function setChartFlag() {
await AsyncStorage.setItem('isFirstChartView', JSON.stringify(false)) await AsyncStorage.setItem('isFirstChartView', JSON.stringify(false))
} }
export const temperatureTrackingCategoryObservable = Observable()
setObvWithInitValue('temperature', temperatureTrackingCategoryObservable, true)
export async function saveTemperatureTrackingCategory(bool) {
await AsyncStorage.setItem('temperature', JSON.stringify(bool))
temperatureTrackingCategoryObservable.set(bool)
if (!temperatureTrackingCategoryObservable.value) {
const result = await AsyncStorage.getItem('tempReminder')
if (JSON.parse(result).enabled) {
tempReminderObservable.set(false)
}
}
}
export const sexTrackingCategoryObservable = Observable() export const sexTrackingCategoryObservable = Observable()
setObvWithInitValue('sex', sexTrackingCategoryObservable, true) setObvWithInitValue('sex', sexTrackingCategoryObservable, true)
+5 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "drip.", "name": "drip.",
"version": "1.2402.15", "version": "1.2401.17",
"contributors": [ "contributors": [
"Julia Friesel <julia.friesel@gmail.com>", "Julia Friesel <julia.friesel@gmail.com>",
"Marie Kochsiek", "Marie Kochsiek",
@@ -12,8 +12,8 @@
"scripts": { "scripts": {
"start": "react-native start", "start": "react-native start",
"android": "react-native run-android", "android": "react-native run-android",
"ios": "react-native run-ios --simulator=\"iPhone 15\"", "ios": "react-native run-ios --simulator=\"iPhone 8 Plus\"",
"iosSE": "react-native run-ios --simulator=\"iPhone SE (2nd generation)\"", "ios14": "react-native run-ios --simulator=\"iPhone 14 Plus\"",
"log": "react-native log-android", "log": "react-native log-android",
"test": "jest test && yarn lint", "test": "jest test && yarn lint",
"test-watch": "jest --watch test", "test-watch": "jest --watch test",
@@ -34,9 +34,9 @@
"dependencies": { "dependencies": {
"@js-joda/core": "^5.3.0", "@js-joda/core": "^5.3.0",
"@ptomasroos/react-native-multi-slider": "^2.2.0", "@ptomasroos/react-native-multi-slider": "^2.2.0",
"@react-native-async-storage/async-storage": "^1.18.2", "@react-native-async-storage/async-storage": "^1.17.9",
"@react-native-community/art": "^1.2.0", "@react-native-community/art": "^1.2.0",
"@react-native-community/datetimepicker": "^7.2.0", "@react-native-community/datetimepicker": "^6.3.1",
"@react-native-community/push-notification-ios": "^1.11.0", "@react-native-community/push-notification-ios": "^1.11.0",
"csvtojson": "^2.0.8", "csvtojson": "^2.0.8",
"i18next": "^22.0.2", "i18next": "^22.0.2",
+8 -8
View File
@@ -1320,10 +1320,10 @@
resolved "https://registry.yarnpkg.com/@ptomasroos/react-native-multi-slider/-/react-native-multi-slider-2.2.2.tgz#35a97fb8c355627c6a2ded010b360ac5728b44ad" resolved "https://registry.yarnpkg.com/@ptomasroos/react-native-multi-slider/-/react-native-multi-slider-2.2.2.tgz#35a97fb8c355627c6a2ded010b360ac5728b44ad"
integrity sha512-HWyCnRD3Z3SbHK2FLWYmBBqd1B4iXipeKv1+AK0FoY/CElEDTEixHE8hN60TsqxalPrznn798LE2Q4tHuCiyaA== integrity sha512-HWyCnRD3Z3SbHK2FLWYmBBqd1B4iXipeKv1+AK0FoY/CElEDTEixHE8hN60TsqxalPrznn798LE2Q4tHuCiyaA==
"@react-native-async-storage/async-storage@^1.18.2": "@react-native-async-storage/async-storage@^1.17.9":
version "1.18.2" version "1.19.3"
resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.18.2.tgz#ec8fd487a0b6c9500b43ece4b8779d1561f12e91" resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.19.3.tgz#ad5fe3ed0a82d4624aa4500321c1e09c02daeb46"
integrity sha512-dM8AfdoeIxlh+zqgr0o5+vCTPQ0Ru1mrPzONZMsr7ufp5h+6WgNxQNza7t0r5qQ6b04AJqTlBNixTWZxqP649Q== integrity sha512-CwGfoHCWdPOTPS+2fW6YRE1fFBpT9++ahLEroX5hkgwyoQ+TkmjOaUxixdEIoVua9Pz5EF2pGOIJzqOTMWfBlA==
dependencies: dependencies:
merge-options "^3.0.4" merge-options "^3.0.4"
@@ -1505,10 +1505,10 @@
sudo-prompt "^9.0.0" sudo-prompt "^9.0.0"
wcwidth "^1.0.1" wcwidth "^1.0.1"
"@react-native-community/datetimepicker@^7.2.0": "@react-native-community/datetimepicker@^6.3.1":
version "7.2.0" version "6.7.5"
resolved "https://registry.yarnpkg.com/@react-native-community/datetimepicker/-/datetimepicker-7.2.0.tgz#db8c03dbf49bf3c24b06b617a8467d8b05511f62" resolved "https://registry.yarnpkg.com/@react-native-community/datetimepicker/-/datetimepicker-6.7.5.tgz#214796f2d131b6af9cb9d4dea69d4a1981fa2236"
integrity sha512-dO1sQy83M/EvnHE2egto05iwXZX7EYn5f/VDMp6afZFRFXRiRo7CzB3VFg4B55gJRJMNBv06NYMLPM3SlpnEGQ== integrity sha512-E2Zh6mwvZ6CFEMKP++rdxxjJiB45fYPpdZhJwdZ2vUVwqovqu1cQRDLZmz4XrcHSyuacgR4WUnkYFf0F2nnNIg==
dependencies: dependencies:
invariant "^2.2.4" invariant "^2.2.4"