Skip to content

Commit dae27d7

Browse files
committed
Initial commit adding Privacy Policy Screen
1 parent cab52d1 commit dae27d7

3 files changed

Lines changed: 193 additions & 1 deletion

File tree

guard_app/src/navigation/AppNavigator.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import EditProfileScreen from '../screen/EditProfileScreen';
77
import LoginScreen from '../screen/loginscreen';
88
import MessagesScreen from '../screen/MessagesScreen';
99
import NotificationsScreen from '../screen/notifications';
10+
import PrivacyPolicyScreen from '../screen/PrivacyPolicyScreen';
1011
import SettingsScreen from '../screen/SettingsScreen';
1112
import ShiftDetailsScreen from '../screen/ShiftDetailsScreen';
1213
import SignupScreen from '../screen/signupscreen';
@@ -20,6 +21,7 @@ export type RootStackParamList = {
2021
Signup: undefined;
2122
Documents: undefined;
2223
Settings: undefined;
24+
PrivacyPolicy: undefined;
2325
EditProfile: undefined;
2426
Messages:
2527
| {
@@ -62,6 +64,11 @@ export default function AppNavigator() {
6264
component={SettingsScreen}
6365
options={{ headerShown: true, title: 'Settings' }}
6466
/>
67+
<Stack.Screen
68+
name="PrivacyPolicy"
69+
component={PrivacyPolicyScreen}
70+
options={{ headerShown: true, title: 'Privacy Policy' }}
71+
/>
6572
<Stack.Screen
6673
name="Messages"
6774
component={MessagesScreen}
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
import { Alert, Linking, SafeAreaView, ScrollView, StyleSheet, Text, View } from 'react-native';
2+
3+
import { useAppTheme } from '../theme';
4+
import { AppColors } from '../theme/colors';
5+
6+
const CANVAS_PADDING = 20;
7+
8+
export default function PrivacyPolicyScreen() {
9+
const { colors } = useAppTheme();
10+
const styles = getStyles(colors);
11+
12+
const openMail = () =>
13+
Linking.openURL('mailto:support@secureshift.app?subject=SecureShift%20Guard%20Support').catch(
14+
() => Alert.alert('Unable to open mail app'),
15+
);
16+
17+
const callSupport = () =>
18+
Linking.openURL('tel:+61123456789').catch(() => Alert.alert('Unable to start call'));
19+
20+
const openWebsite = () =>
21+
Linking.openURL('https://example.gopherindustries.com/secure-shift').catch(() =>
22+
Alert.alert('Unable to open website'),
23+
);
24+
25+
return (
26+
<SafeAreaView style={styles.safe}>
27+
<ScrollView style={styles.scroll}>
28+
<View style={styles.view}>
29+
<Text style={styles.policyTitle}>Secure Shift Privacy Policy</Text>
30+
<Text style={styles.policyHead}>
31+
This Privacy Policy is a placeholder for the development version of Secure Shift Guard
32+
App.
33+
</Text>
34+
<Text style={styles.policyText}>
35+
Gopher Industries are committed to providing quality services to you and this policy
36+
outlines our ongoing obligations to you in respect of how we manage your Personal
37+
Information.
38+
{'\n'}We have adopted the Australian Privacy Principles (APPs) contained in the Privacy
39+
Act 1988 (Cth) (the Privacy Act). The NPPs govern the way in which we collect, use,
40+
disclose, store, secure and dispose of your Personal Information.
41+
{'\n'}A copy of the Australian Privacy Principles may be obtained from the website of
42+
The Office of the Australian Information Commissioner at{' '}
43+
<Text
44+
style={styles.policyLink}
45+
onPress={() => Linking.openURL('https://www.oaic.gov.au/')}
46+
>
47+
https://www.oaic.gov.au/
48+
</Text>
49+
.
50+
</Text>
51+
<Text style={styles.policyHead}>
52+
What is Personal Information and why do we collect it?
53+
</Text>
54+
<Text style={styles.policyText}>
55+
Personal Information is information or an opinion that identifies an individual.
56+
Examples of Personal Information we collect includes names, addresses, email addresses,
57+
phone and facsimile numbers.
58+
{'\n'}This Personal Information is obtained in many ways including correspondence, by
59+
telephone and facsimile, by email, via our website{' '}
60+
<Text style={styles.policyLink} onPress={openWebsite}>
61+
https://example.gopherindustries.com/secure-shift
62+
</Text>
63+
, from our app Secure Shift Guard App and cookies. We don&apos;t guarantee website links
64+
or policy of authorised third parties.
65+
{'\n'}We collect your Personal Information for the primary purpose of providing our
66+
services to you, providing information to our clients and marketing. We may also use
67+
your Personal Information for secondary purposes closely related to the primary purpose,
68+
in circumstances where you would reasonably expect such use or disclosure. You may
69+
unsubscribe from our mailing/marketing lists at any time by contacting us in writing.
70+
{'\n'}When we collect Personal Information we will, where appropriate and where
71+
possible, explain to you why we are collecting the information and how we plan to use
72+
it.
73+
</Text>
74+
<Text style={styles.policyHead}>Sensitive Information</Text>
75+
<Text style={styles.policyText}>
76+
Sensitive information is defined in the Privacy Act to include information or opinion
77+
about such things as an individual&apos;s racial or ethnic origin, political opinions,
78+
membership of a political association, religious or philosophical beliefs, membership of
79+
a trade union or other professional body, criminal record or health information.
80+
{'\n'}Sensitive information will be used by us only:
81+
{'\n'}• For the primary purpose for which it was obtained
82+
{'\n'}• For a secondary purpose that is directly related to the primary purpose
83+
{'\n'}• With your consent; or where required or authorised by law.
84+
</Text>
85+
<Text style={styles.policyHead}>Third Parties</Text>
86+
<Text style={styles.policyText}>
87+
Where reasonable and practicable to do so, we will collect your Personal Information
88+
only from you. However, in some circumstances we may be provided with information by
89+
third parties. In such a case we will take reasonable steps to ensure that you are made
90+
aware of the information provided to us by the third party.
91+
</Text>
92+
<Text style={styles.policyHead}>Disclosure of Personal Information</Text>
93+
<Text style={styles.policyText}>
94+
Your Personal Information may be disclosed in a number of circumstances including the
95+
following:
96+
{'\n'}• Third parties where you consent to the use or disclosure; and
97+
{'\n'}• Where required or authorised by law.
98+
</Text>
99+
<Text style={styles.policyHead}>Security of Personal Information</Text>
100+
<Text style={styles.policyText}>
101+
Your Personal Information is stored in a manner that reasonably protects it from misuse
102+
and loss and from unauthorized access, modification or disclosure.
103+
{'\n'}When your Personal Information is no longer needed for the purpose for which it
104+
was obtained, we will take reasonable steps to destroy or permanently de-identify your
105+
Personal Information. However, most of the Personal Information is or will be stored in
106+
client files which will be kept by us for a minimum of 7 years.
107+
</Text>
108+
<Text style={styles.policyHead}>Access to your Personal Information</Text>
109+
<Text style={styles.policyText}>
110+
You may access the Personal Information we hold about you and to update and/or correct
111+
it, subject to certain exceptions. If you wish to access your Personal Information,
112+
please contact us in writing.
113+
{'\n'}Gopher Industries will not charge any fee for your access request, but may charge
114+
an administrative fee for providing a copy of your Personal Information.
115+
{'\n'}In order to protect your Personal Information we may require identification from
116+
you before releasing the requested information.
117+
</Text>
118+
<Text style={styles.policyHead}>
119+
Maintaining the Quality of your Personal Information
120+
</Text>
121+
<Text style={styles.policyText}>
122+
It is an important to us that your Personal Information is up to date. We will take
123+
reasonable steps to make sure that your Personal Information is accurate, complete and
124+
up-to-date. If you find that the information we have is not up to date or is inaccurate,
125+
please advise us as soon as practicable so we can update our records and ensure we can
126+
continue to provide quality services to you.
127+
</Text>
128+
<Text style={styles.policyHead}>Policy Updates</Text>
129+
<Text style={styles.policyText}>
130+
This Policy may change from time to time and is available on our website or app. This
131+
Policy is a placeholder for the development of Secure Shift Guard App.
132+
</Text>
133+
<Text style={styles.policyHead}>Privacy Policy Complaints and Enquiries</Text>
134+
<Text style={styles.policyText}>
135+
If you have any queries or complaints about our Privacy Polcy please contact us at:
136+
{'\n'}Email:{' '}
137+
<Text style={styles.policyLink} onPress={openMail}>
138+
support@secureshift.app
139+
</Text>
140+
{'\n'}Phone:{' '}
141+
<Text style={styles.policyLink} onPress={callSupport}>
142+
+61123456789
143+
</Text>
144+
</Text>
145+
</View>
146+
</ScrollView>
147+
</SafeAreaView>
148+
);
149+
}
150+
151+
const getStyles = (colors: AppColors) =>
152+
StyleSheet.create({
153+
policyTitle: {
154+
color: colors.text,
155+
fontSize: 20,
156+
fontWeight: '800',
157+
},
158+
policyHead: {
159+
color: colors.text,
160+
fontSize: 16,
161+
fontWeight: '800',
162+
marginTop: 10,
163+
marginBottom: 6,
164+
},
165+
policyText: {
166+
color: colors.text,
167+
fontSize: 14,
168+
fontWeight: '600',
169+
lineHeight: 20,
170+
},
171+
policyLink: {
172+
color: colors.link,
173+
fontSize: 14,
174+
fontWeight: '600',
175+
lineHeight: 20,
176+
},
177+
safe: { backgroundColor: colors.bg, flex: 1 },
178+
scroll: { padding: CANVAS_PADDING },
179+
view: { marginBottom: CANVAS_PADDING + 50 },
180+
});

guard_app/src/screen/SettingsScreen.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { Ionicons, Feather } from '@expo/vector-icons';
44
import AsyncStorage from '@react-native-async-storage/async-storage';
55
import { useNavigation } from '@react-navigation/native';
6+
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
67
import ExpoConstants from 'expo-constants';
78
import React, { useState } from 'react';
89
import {
@@ -19,9 +20,12 @@ import {
1920
} from 'react-native';
2021

2122
import { LocalStorage } from '../lib/localStorage';
23+
import { RootStackParamList } from '../navigation/AppNavigator';
2224
import { useAppTheme } from '../theme';
2325
import { AppColors } from '../theme/colors';
2426

27+
type Nav = NativeStackNavigationProp<RootStackParamList>;
28+
2529
// Keep this in sync with your ProfileScreen storage key
2630
const PROFILE_STORAGE_KEY = '@guard_profile_v1';
2731
const CANVAS_PADDING = 20;
@@ -81,6 +85,7 @@ function Row({
8185

8286
export default function SettingsScreen() {
8387
const navigation = useNavigation();
88+
const navigation2 = useNavigation<Nav>();
8489
const { colors, themeMode, setThemeMode } = useAppTheme();
8590
const styles = getStyles(colors);
8691

@@ -232,7 +237,7 @@ export default function SettingsScreen() {
232237
<Row
233238
icon={<Ionicons name="document-text-outline" size={18} color={colors.primary} />}
234239
label="Privacy Policy"
235-
onPress={() => Alert.alert('Privacy Policy', 'Coming soon')}
240+
onPress={() => navigation2.navigate('PrivacyPolicy')}
236241
colors={colors}
237242
/>
238243
<Row

0 commit comments

Comments
 (0)