diff --git a/components/app-wrapper.js b/components/app-wrapper.js
index 6810d24..616ad0a 100644
--- a/components/app-wrapper.js
+++ b/components/app-wrapper.js
@@ -12,7 +12,7 @@ import AppStatusBar from './common/app-status-bar'
import License from './License'
import PasswordPrompt from './password-prompt'
-import store from "../store"
+import store from '../store'
export default class AppWrapper extends Component {
constructor() {
@@ -51,7 +51,7 @@ export default class AppWrapper extends Component {
enableShowLicenseAgreement = () => {
this.setState({
shouldShowLicenseAgreement: true,
- isCheckingLicenseAgreement: false
+ isCheckingLicenseAgreement: false,
})
}
@@ -62,7 +62,7 @@ export default class AppWrapper extends Component {
enableShowApp = () => {
this.setState({
shouldShowApp: true,
- shouldShowPasswordPrompt: false
+ shouldShowPasswordPrompt: false,
})
}
@@ -79,11 +79,11 @@ export default class AppWrapper extends Component {
if (isCheckingLicenseAgreement) {
initialView =
} else if (shouldShowLicenseAgreement) {
- initialView =
+ initialView =
} else if (shouldShowPasswordPrompt) {
initialView =
} else if (shouldShowApp) {
- initialView =
+ initialView = this.checkDbPasswordSet()} />
}
return (
@@ -100,5 +100,5 @@ export default class AppWrapper extends Component {
const styles = StyleSheet.create({
container: {
flex: 1,
- }
+ },
})
diff --git a/components/app.js b/components/app.js
index f8a0350..83afdf9 100644
--- a/components/app.js
+++ b/components/app.js
@@ -17,12 +17,12 @@ import setupNotifications from '../lib/notifications'
import { getCycleDay, closeDb } from '../db'
class App extends Component {
-
static propTypes = {
date: PropTypes.string,
navigation: PropTypes.object.isRequired,
navigate: PropTypes.func,
goBack: PropTypes.func,
+ restartApp: PropTypes.func,
}
constructor(props) {
@@ -54,7 +54,7 @@ class App extends Component {
}
render() {
- const { date, navigation, goBack } = this.props
+ const { date, navigation, goBack, restartApp } = this.props
const { currentPage } = navigation
if (!currentPage) {
@@ -80,8 +80,8 @@ class App extends Component {
return (
-
-
+
+
)
@@ -90,25 +90,22 @@ class App extends Component {
const styles = StyleSheet.create({
container: {
- flex: 1
- }
+ flex: 1,
+ },
})
const mapStateToProps = (state) => {
- return({
+ return {
date: getDate(state),
- navigation: getNavigation(state)
- })
+ navigation: getNavigation(state),
+ }
}
const mapDispatchToProps = (dispatch) => {
- return({
+ return {
navigate: (page) => dispatch(navigate(page)),
goBack: () => dispatch(goBack()),
- })
+ }
}
-export default connect(
- mapStateToProps,
- mapDispatchToProps
-)(App)
+export default connect(mapStateToProps, mapDispatchToProps)(App)
diff --git a/components/settings/password/create.js b/components/settings/password/create.js
index 8838b30..f024c3f 100644
--- a/components/settings/password/create.js
+++ b/components/settings/password/create.js
@@ -1,4 +1,5 @@
import React, { Component } from 'react'
+import PropTypes from 'prop-types'
import Button from '../../common/button'
@@ -8,6 +9,10 @@ import showBackUpReminder from './show-backup-reminder'
import settings from '../../../i18n/en/settings'
export default class CreatePassword extends Component {
+ static propTypes = {
+ changeEncryptionAndRestart: PropTypes.func,
+ }
+
constructor() {
super()
@@ -23,7 +28,7 @@ export default class CreatePassword extends Component {
showBackUpReminder(this.toggleSettingPassword, () => {})
}
- render () {
+ render() {
const { isSettingPassword } = this.state
const labels = settings.passwordSettings
@@ -34,8 +39,11 @@ export default class CreatePassword extends Component {
)
} else {
- return
+ return (
+
+ )
}
-
}
-}
\ No newline at end of file
+}
diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js
index 8f078d7..d195c99 100644
--- a/components/settings/password/delete.js
+++ b/components/settings/password/delete.js
@@ -4,13 +4,13 @@ import PropTypes from 'prop-types'
import Button from '../../common/button'
import ConfirmWithPassword from '../common/confirm-with-password'
-import { changeEncryptionAndRestartApp } from '../../../db'
import labels from '../../../i18n/en/settings'
export default class DeletePassword extends Component {
static propTypes = {
onStartDelete: PropTypes.func,
- onCancelDelete: PropTypes.func
+ onCancelDelete: PropTypes.func,
+ changeEncryptionAndRestart: PropTypes.func,
}
constructor() {
@@ -24,10 +24,6 @@ export default class DeletePassword extends Component {
this.props.onStartDelete()
}
- startDeletePassword = async () => {
- await changeEncryptionAndRestartApp()
- }
-
cancelConfirmationWithPassword = () => {
this.setState({ enteringCurrentPassword: false })
this.props.onCancelDelete()
@@ -39,7 +35,7 @@ export default class DeletePassword extends Component {
if (enteringCurrentPassword) {
return (
)
@@ -51,4 +47,4 @@ export default class DeletePassword extends Component {
)
}
-}
\ No newline at end of file
+}
diff --git a/components/settings/password/enter-new-password.js b/components/settings/password/enter-new-password.js
index 33c4c28..a593e13 100644
--- a/components/settings/password/enter-new-password.js
+++ b/components/settings/password/enter-new-password.js
@@ -1,19 +1,23 @@
import React, { Component } from 'react'
import { StyleSheet } from 'react-native'
import nodejs from 'nodejs-mobile-react-native'
+import PropTypes from 'prop-types'
import AppText from '../../common/app-text'
import AppTextInput from '../../common/app-text-input'
import Button from '../../common/button'
-import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
+import { requestHash } from '../../../db'
import { Colors, Spacing } from '../../../styles'
import settings from '../../../i18n/en/settings'
const LISTENER_TYPE = 'create-or-change-pw'
export default class EnterNewPassword extends Component {
- constructor() {
+ static propTypes = {
+ changeEncryptionAndRestart: PropTypes.func,
+ }
+ constructor(props) {
super()
this.state = {
password: '',
@@ -22,13 +26,16 @@ export default class EnterNewPassword extends Component {
}
nodejs.channel.addListener(
LISTENER_TYPE,
- changeEncryptionAndRestartApp,
+ props.changeEncryptionAndRestart,
this
)
}
componentWillUnmount() {
- nodejs.channel.removeListener(LISTENER_TYPE, changeEncryptionAndRestartApp)
+ nodejs.channel.removeListener(
+ LISTENER_TYPE,
+ this.props.changeEncryptionAndRestart
+ )
}
savePassword = () => {
diff --git a/components/settings/password/index.js b/components/settings/password/index.js
index 5e67e5d..90a081c 100644
--- a/components/settings/password/index.js
+++ b/components/settings/password/index.js
@@ -1,4 +1,10 @@
import React, { Component } from 'react'
+import { connect } from 'react-redux'
+import PropTypes from 'prop-types'
+
+import { navigate } from '../../../slices/navigation'
+
+import { changeDbEncryption } from '../../../db'
import AppPage from '../../common/app-page'
import AppText from '../../common/app-text'
@@ -11,14 +17,18 @@ import DeletePassword from './delete'
import { hasEncryptionObservable } from '../../../local-storage'
import labels from '../../../i18n/en/settings'
-export default class PasswordSetting extends Component {
+class PasswordSetting extends Component {
+ static propTypes = {
+ navigate: PropTypes.func,
+ restartApp: PropTypes.func,
+ }
constructor(props) {
super(props)
this.state = {
isPasswordSet: hasEncryptionObservable.value,
isChangingPassword: false,
- isDeletingPassword: false
+ isDeletingPassword: false,
}
}
@@ -38,19 +48,17 @@ export default class PasswordSetting extends Component {
this.setState({ isDeletingPassword: false })
}
+ changeEncryptionAndRestart = async (hash) => {
+ await changeDbEncryption(hash)
+ await this.props.restartApp()
+ this.props.navigate('Home')
+ }
+
render() {
+ const { isPasswordSet, isChangingPassword, isDeletingPassword } = this.state
- const {
- isPasswordSet,
- isChangingPassword,
- isDeletingPassword,
- } = this.state
-
- const {
- title,
- explainerEnabled,
- explainerDisabled
- } = labels.passwordSettings
+ const { title, explainerEnabled, explainerDisabled } =
+ labels.passwordSettings
return (
@@ -59,19 +67,25 @@ export default class PasswordSetting extends Component {
{isPasswordSet ? explainerEnabled : explainerDisabled}
- {!isPasswordSet && }
-
- {(isPasswordSet && !isDeletingPassword) && (
-
)}
- {(isPasswordSet && !isChangingPassword) && (
+ {isPasswordSet && !isDeletingPassword && (
+
+ )}
+
+ {isPasswordSet && !isChangingPassword && (
)}
@@ -79,3 +93,11 @@ export default class PasswordSetting extends Component {
)
}
}
+
+const mapDispatchToProps = (dispatch) => {
+ return {
+ navigate: (page) => dispatch(navigate(page)),
+ }
+}
+
+export default connect(null, mapDispatchToProps)(PasswordSetting)
diff --git a/components/settings/password/update.js b/components/settings/password/update.js
index a711262..a83d701 100644
--- a/components/settings/password/update.js
+++ b/components/settings/password/update.js
@@ -12,7 +12,8 @@ import settings from '../../../i18n/en/settings'
export default class ChangePassword extends Component {
static propTypes = {
onStartChange: PropTypes.func,
- onCancelChange: PropTypes.func
+ onCancelChange: PropTypes.func,
+ changeEncryptionAndRestart: PropTypes.func,
}
constructor() {
@@ -21,7 +22,7 @@ export default class ChangePassword extends Component {
this.state = {
currentPassword: null,
enteringCurrentPassword: false,
- enteringNewPassword: false
+ enteringNewPassword: false,
}
}
@@ -41,7 +42,7 @@ export default class ChangePassword extends Component {
this.setState({
currentPassword: null,
enteringNewPassword: true,
- enteringCurrentPassword: false
+ enteringCurrentPassword: false,
})
}
@@ -49,17 +50,14 @@ export default class ChangePassword extends Component {
this.setState({
currentPassword: null,
enteringNewPassword: false,
- enteringCurrentPassword: false
+ enteringCurrentPassword: false,
})
this.props.onCancelChange()
}
render() {
- const {
- enteringCurrentPassword,
- enteringNewPassword,
- currentPassword
- } = this.state
+ const { enteringCurrentPassword, enteringNewPassword, currentPassword } =
+ this.state
const labels = settings.passwordSettings
const isPasswordSet = currentPassword !== null
@@ -73,7 +71,11 @@ export default class ChangePassword extends Component {
}
if (enteringNewPassword) {
- return
+ return (
+
+ )
}
return (
@@ -86,4 +88,4 @@ export default class ChangePassword extends Component {
)
}
-}
\ No newline at end of file
+}
diff --git a/db/index.js b/db/index.js
index 44533f5..3017fcc 100644
--- a/db/index.js
+++ b/db/index.js
@@ -2,7 +2,6 @@ import Realm from 'realm'
import { LocalDate, ChronoUnit } from 'js-joda'
import nodejs from 'nodejs-mobile-react-native'
import fs from 'react-native-fs'
-import { restartApp } from './restart-app'
import schemas from './schemas'
import cycleModule from '../lib/cycle'
@@ -195,7 +194,7 @@ export function requestHash(type, pw) {
)
}
-export async function changeEncryptionAndRestartApp(hash) {
+export async function changeDbEncryption(hash) {
let key
if (hash) key = hashToInt8Array(hash)
const defaultPath = db.path
@@ -209,7 +208,6 @@ export async function changeEncryptionAndRestartApp(hash) {
db.close()
await fs.unlink(defaultPath)
await fs.moveFile(copyPath, defaultPath)
- restartApp()
}
export function isDbEmpty() {
diff --git a/db/restart-app/index.android.js b/db/restart-app/index.android.js
deleted file mode 100644
index 3a84dc2..0000000
--- a/db/restart-app/index.android.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Current version of react-native-restart doesn't work with our ios setup
-// therefore we have a fork and use different libraries on the platforms
-import restart from 'react-native-restart'
-
-export const restartApp = restart.Restart
diff --git a/db/restart-app/index.ios.js b/db/restart-app/index.ios.js
deleted file mode 100644
index 0f3db9b..0000000
--- a/db/restart-app/index.ios.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Current version of react-native-restart doesn't work with our ios setup
-// therefore we have a fork and use different libraries on the platforms
-import RNExitApp from 'react-native-exit-app-v2'
-import { Alert } from 'react-native'
-
-export const restartApp = () => {
- Alert.alert('Closing app', 'App is shutting down. Please restart.')
- setTimeout(() => {
- RNExitApp.exitApp()
- }, 3000)
-}
diff --git a/ios/drip.xcodeproj/project.pbxproj b/ios/drip.xcodeproj/project.pbxproj
index d4d8c34..d36e50d 100644
--- a/ios/drip.xcodeproj/project.pbxproj
+++ b/ios/drip.xcodeproj/project.pbxproj
@@ -57,19 +57,6 @@
};
/* End PBXContainerItemProxy section */
-/* Begin PBXCopyFilesBuildPhase section */
- 2B572382D4504B8FB4B9D251 /* Embed Frameworks */ = {
- isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
- files = (
- );
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXCopyFilesBuildPhase section */
-
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
00E356EE1AD99517003FC87E /* dripTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = dripTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -525,7 +512,6 @@
"${BUILT_PRODUCTS_DIR}/RCTTypeSafety/RCTTypeSafety.framework",
"${BUILT_PRODUCTS_DIR}/RNCPushNotificationIOS/RNCPushNotificationIOS.framework",
"${BUILT_PRODUCTS_DIR}/RNDateTimePicker/RNDateTimePicker.framework",
- "${BUILT_PRODUCTS_DIR}/RNExitApp/RNExitApp.framework",
"${BUILT_PRODUCTS_DIR}/RNFS/RNFS.framework",
"${BUILT_PRODUCTS_DIR}/RNShare/RNShare.framework",
"${BUILT_PRODUCTS_DIR}/RNVectorIcons/RNVectorIcons.framework",
@@ -552,7 +538,6 @@
"${BUILT_PRODUCTS_DIR}/glog/glog.framework",
"${PODS_ROOT}/../../node_modules/nodejs-mobile-react-native/ios/NodeMobile.framework",
"${BUILT_PRODUCTS_DIR}/react-native-document-picker/react_native_document_picker.framework",
- "${BUILT_PRODUCTS_DIR}/react-native-restart/react_native_restart.framework",
"${BUILT_PRODUCTS_DIR}/react-native-simple-toast/react_native_simple_toast.framework",
);
name = "[CP] Embed Pods Frameworks";
@@ -564,7 +549,6 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RCTTypeSafety.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNCPushNotificationIOS.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNDateTimePicker.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNExitApp.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNFS.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNShare.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RNVectorIcons.framework",
@@ -591,7 +575,6 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NodeMobile.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/react_native_document_picker.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/react_native_restart.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/react_native_simple_toast.framework",
);
runOnlyForDeploymentPostprocessing = 0;
diff --git a/package-lock.json b/package-lock.json
index 8fdacfc..c99282e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2485,9 +2485,9 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"caniuse-lite": {
- "version": "1.0.30001258",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz",
- "integrity": "sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA=="
+ "version": "1.0.30001375",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz",
+ "integrity": "sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw=="
},
"capture-exit": {
"version": "2.0.0",
@@ -8561,11 +8561,6 @@
"resolved": "https://registry.npmjs.org/react-native-document-picker/-/react-native-document-picker-4.3.0.tgz",
"integrity": "sha512-ygcY0ijlVuhxzdWnhqd917yMUFT9FF0b4CM81LWoY4/bpQYz5PGUdRAdh25kS0VA+cEUYNL2iI7OpHXq00epPA=="
},
- "react-native-exit-app-v2": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/react-native-exit-app-v2/-/react-native-exit-app-v2-1.2.2.tgz",
- "integrity": "sha512-RWCfmus7h99M1aONqBnWG3g3TFRzKsmok6cLAuqN5NVQAxpcgzbJZgAryA/ADpmBrBP5EIJnCBFo64ApQGOZPw=="
- },
"react-native-fs": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.19.0.tgz",
@@ -8600,11 +8595,6 @@
"@react-native-community/push-notification-ios": "^1.0.1"
}
},
- "react-native-restart": {
- "version": "0.0.18",
- "resolved": "https://registry.npmjs.org/react-native-restart/-/react-native-restart-0.0.18.tgz",
- "integrity": "sha512-AoEINeKuvj0yJY9I4GEbY27ifiVTo/2KhW2MnGeFgtjInfAvA9hgbGXjQO8xT2wQA9ZIzTgUQyyWC6yFiQeREA=="
- },
"react-native-share": {
"version": "3.8.5",
"resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-3.8.5.tgz",
diff --git a/package.json b/package.json
index de4d2d1..6a11f31 100644
--- a/package.json
+++ b/package.json
@@ -47,12 +47,10 @@
"react-native": "0.61.0",
"react-native-calendars": "^1.19.3",
"react-native-document-picker": "^4.2.0",
- "react-native-exit-app-v2": "^1.2.2",
"react-native-fs": "^2.19.0",
"react-native-hyperlink": "0.0.19",
"react-native-modal-datetime-picker": "8.0.0",
"react-native-push-notification": "3.2.1",
- "react-native-restart": "0.0.18",
"react-native-share": "^3.0.0",
"react-native-simple-toast": "^1.1.3",
"react-native-size-matters": "^0.4.0",