diff --git a/mobile/src/Home/Home.js b/mobile/src/Home/Home.js index 6e53813..e906bd6 100644 --- a/mobile/src/Home/Home.js +++ b/mobile/src/Home/Home.js @@ -1,10 +1,7 @@ import React from "react" import { - StyleSheet, Text, - TextInput, SectionList, - Image, View, TouchableOpacity, TouchableHighlight, @@ -31,12 +28,8 @@ import KeyboardSpacer from "react-native-keyboard-spacer" import hardhatPinImage from "./images/hardhat-pin.png" import clipboardPinImage from "./images/clipboard-pin.png" import questionPinImage from "./images/question-pin.png" -import locationImage from "./images/location.png" import moment from "moment" -const neverAskForLocationPermissionKeyName = "NeverAskForLocationPermission" -const neverAskForCameraKeyName = "NeverAskForCameraPermission" - export class Home extends React.Component { constructor(props) { super(props) @@ -48,8 +41,8 @@ export class Home extends React.Component { showWorkItems: true, haveCameraPermission: false, haveLocationPermission: false, - currentPosition: null, } + this.currentPosition = null this.isMapReady = false this.goToRegionWhenReady = false this.region = null @@ -97,6 +90,7 @@ export class Home extends React.Component { } ) } else { + navigator.geolocation.requestAuthorization() this.state.haveLocationPermission = true this.state.haveCameraPermission = true } @@ -176,8 +170,8 @@ export class Home extends React.Component { } handleWorkItemsListPress() { - if (this.state.currentPosition) { - const { coords } = this.state.currentPosition + if (this.currentPosition) { + const { coords } = this.currentPosition this.props.history.push( `/workItemList?latLng=${coords.latitude},${coords.longitude}` @@ -210,13 +204,13 @@ export class Home extends React.Component { } handleGlassesPress() { - const { sections: workItems, currentPosition } = this.state + const { sections: workItems } = this.state - if (currentPosition) { + if (this.currentPosition) { const { latitude: latitude1, longitude: longitude1, - } = currentPosition.coords + } = this.currentPosition.coords let closestWorkItem = config.alwaysShowWorkItemInAR ? workItems[0] : null let shortestDistance = config.minDistanceToItem @@ -248,10 +242,8 @@ export class Home extends React.Component { } handleMyLocationPress() { - const { currentPosition } = this.state - - if (currentPosition && this.isMapReady) { - const { coords } = currentPosition + if (this.currentPosition && this.isMapReady) { + const { coords } = this.currentPosition this.mapView.animateToCoordinate({ latitude: coords.latitude, @@ -281,14 +273,12 @@ export class Home extends React.Component { } handlePositionUpdate(position) { - this.setState({ currentPosition: position }) + this.currentPosition = position } getCoordinateDistance(coordinate) { - const { currentPosition } = this.state - - if (currentPosition) { - const { coords } = currentPosition + if (this.currentPosition) { + const { coords } = this.currentPosition const { latitude, longitude } = coordinate return ( @@ -313,7 +303,6 @@ export class Home extends React.Component { waitModal, haveCameraPermission, haveLocationPermission, - currentPosition, } = this.state return ( @@ -340,7 +329,7 @@ export class Home extends React.Component { showWorkItems && { height: "40%" }, !showWorkItems && { flexGrow: 1 }, ]} - showsUserLocation={false} + showsUserLocation showsBuildings={false} showsTraffic={false} showsIndoors={false} @@ -376,14 +365,6 @@ export class Home extends React.Component { ))} - {currentPosition && ( - - )} { this.props.onUpdate(position) + + if (this.props.watch) { + ;(this.watchId = navigator.geolocation.watchPosition((position) => + this.props.onUpdate(position) + )), + null, + { distanceFilter: 5, maximumAge: 0, enableHighAccuracy: true } + } }, null, { distanceFilter: 5, maximumAge: 0, enableHighAccuracy: true } ) } + componentWillUnmount() { + if (this.watchId !== -1) { + navigator.geolocation.clearWatch(this.watchId) + navigator.geolocation.stopObserving() + this.watchId = -1 + } + } + render() { return null }