Browse Source

init project

ALI 1 year ago
commit
e640b2fa1f
100 changed files with 2725 additions and 0 deletions
  1. 6 0
      .buckconfig
  2. 3 0
      .editorconfig
  3. 4 0
      .eslintrc.js
  4. 66 0
      .flowconfig
  5. 3 0
      .gitattributes
  6. 59 0
      .gitignore
  7. 7 0
      .prettierrc.js
  8. 0 0
      .watchman-cookie-ALIs-MacBook-Pro.local-616-664
  9. 1 0
      .watchmanconfig
  10. 244 0
      App copy.js
  11. 84 0
      App.js
  12. 174 0
      AppStart.js
  13. 55 0
      android/app/_BUCK
  14. 237 0
      android/app/build.gradle
  15. 19 0
      android/app/build_defs.bzl
  16. BIN
      android/app/debug.keystore
  17. 39 0
      android/app/google-services.json
  18. 10 0
      android/app/proguard-rules.pro
  19. 13 0
      android/app/src/debug/AndroidManifest.xml
  20. 72 0
      android/app/src/debug/java/com/umora/ReactNativeFlipper.java
  21. 67 0
      android/app/src/main/AndroidManifest.xml
  22. 1072 0
      android/app/src/main/assets/index.android.bundle
  23. 15 0
      android/app/src/main/java/com/umora/MainActivity.java
  24. 94 0
      android/app/src/main/java/com/umora/MainApplication.java
  25. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  26. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_telegram.png
  27. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_wp.png
  28. BIN
      android/app/src/main/res/mipmap-hdpi/ic_simple_message.png
  29. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  30. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_telegram.png
  31. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_wp.png
  32. BIN
      android/app/src/main/res/mipmap-mdpi/ic_simple_message.png
  33. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  34. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_telegram.png
  35. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_wp.png
  36. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_simple_message.png
  37. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  38. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_telegram.png
  39. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_wp.png
  40. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_simple_message.png
  41. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  42. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_telegram.png
  43. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_wp.png
  44. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_simple_message.png
  45. 3 0
      android/app/src/main/res/values/colors.xml
  46. 3 0
      android/app/src/main/res/values/strings.xml
  47. 9 0
      android/app/src/main/res/values/styles.xml
  48. 39 0
      android/build.gradle
  49. 33 0
      android/gradle.properties
  50. BIN
      android/gradle/wrapper/gradle-wrapper.jar
  51. 5 0
      android/gradle/wrapper/gradle-wrapper.properties
  52. 185 0
      android/gradlew
  53. 89 0
      android/gradlew.bat
  54. 11 0
      android/settings.gradle
  55. 4 0
      app.json
  56. BIN
      assets/icons/bottomTab/tab_1_icon.png
  57. BIN
      assets/icons/bottomTab/[email protected]
  58. BIN
      assets/icons/bottomTab/[email protected]
  59. BIN
      assets/icons/bottomTab/tab_2_icon.png
  60. BIN
      assets/icons/bottomTab/[email protected]
  61. BIN
      assets/icons/bottomTab/[email protected]
  62. BIN
      assets/icons/bottomTab/tab_3_icon.png
  63. BIN
      assets/icons/bottomTab/[email protected]
  64. BIN
      assets/icons/bottomTab/[email protected]
  65. BIN
      assets/icons/bottomTab/tab_4_icon.png
  66. BIN
      assets/icons/bottomTab/[email protected]
  67. BIN
      assets/icons/bottomTab/[email protected]
  68. BIN
      assets/icons/common/back_arrow_icon.png
  69. BIN
      assets/icons/common/[email protected]
  70. BIN
      assets/icons/common/[email protected]
  71. BIN
      assets/icons/common/camera_pause_icon.png
  72. BIN
      assets/icons/common/[email protected]
  73. BIN
      assets/icons/common/[email protected]
  74. BIN
      assets/icons/common/change_camera_icon.png
  75. BIN
      assets/icons/common/[email protected]
  76. BIN
      assets/icons/common/[email protected]
  77. BIN
      assets/icons/common/clock_icon.png
  78. BIN
      assets/icons/common/[email protected]
  79. BIN
      assets/icons/common/[email protected]
  80. BIN
      assets/icons/common/dollar_icon.png
  81. BIN
      assets/icons/common/[email protected]
  82. BIN
      assets/icons/common/[email protected]
  83. BIN
      assets/icons/common/download_icon.png
  84. BIN
      assets/icons/common/[email protected]
  85. BIN
      assets/icons/common/[email protected]
  86. BIN
      assets/icons/common/flash_icon.png
  87. BIN
      assets/icons/common/left_arrow_icon.png
  88. BIN
      assets/icons/common/[email protected]
  89. BIN
      assets/icons/common/[email protected]
  90. BIN
      assets/icons/common/pause_btn_icon.png
  91. BIN
      assets/icons/common/[email protected]
  92. BIN
      assets/icons/common/[email protected]
  93. BIN
      assets/icons/common/person_32x32_icon.png
  94. BIN
      assets/icons/common/[email protected]
  95. BIN
      assets/icons/common/[email protected]
  96. BIN
      assets/icons/common/play_btn_icon.png
  97. BIN
      assets/icons/common/[email protected]
  98. BIN
      assets/icons/common/[email protected]
  99. BIN
      assets/icons/common/plus_icon.png
  100. 0 0
      assets/icons/common/[email protected]

+ 6 - 0
.buckconfig

@@ -0,0 +1,6 @@
1
+
2
+[android]
3
+  target = Google Inc.:Google APIs:23
4
+
5
+[maven_repositories]
6
+  central = https://repo1.maven.org/maven2

+ 3 - 0
.editorconfig

@@ -0,0 +1,3 @@
1
+# Windows files
2
+[*.bat]
3
+end_of_line = crlf

+ 4 - 0
.eslintrc.js

@@ -0,0 +1,4 @@
1
+module.exports = {
2
+  root: true,
3
+  extends: '@react-native-community',
4
+};

+ 66 - 0
.flowconfig

@@ -0,0 +1,66 @@
1
+[ignore]
2
+; We fork some components by platform
3
+.*/*[.]android.js
4
+
5
+; Ignore "BUCK" generated dirs
6
+<PROJECT_ROOT>/\.buckd/
7
+
8
+; Ignore polyfills
9
+node_modules/react-native/Libraries/polyfills/.*
10
+
11
+; Flow doesn't support platforms
12
+.*/Libraries/Utilities/LoadingView.js
13
+
14
+[untyped]
15
+.*/node_modules/@react-native-community/cli/.*/.*
16
+
17
+[include]
18
+
19
+[libs]
20
+node_modules/react-native/interface.js
21
+node_modules/react-native/flow/
22
+
23
+[options]
24
+emoji=true
25
+
26
+esproposal.optional_chaining=enable
27
+esproposal.nullish_coalescing=enable
28
+
29
+exact_by_default=true
30
+
31
+module.file_ext=.js
32
+module.file_ext=.json
33
+module.file_ext=.ios.js
34
+
35
+munge_underscores=true
36
+
37
+module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
38
+module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
39
+
40
+suppress_type=$FlowIssue
41
+suppress_type=$FlowFixMe
42
+suppress_type=$FlowFixMeProps
43
+suppress_type=$FlowFixMeState
44
+
45
+[lints]
46
+sketchy-null-number=warn
47
+sketchy-null-mixed=warn
48
+sketchy-number=warn
49
+untyped-type-import=warn
50
+nonstrict-import=warn
51
+deprecated-type=warn
52
+unsafe-getters-setters=warn
53
+unnecessary-invariant=warn
54
+signature-verification-failure=warn
55
+
56
+[strict]
57
+deprecated-type
58
+nonstrict-import
59
+sketchy-null
60
+unclear-type
61
+unsafe-getters-setters
62
+untyped-import
63
+untyped-type-import
64
+
65
+[version]
66
+^0.137.0

+ 3 - 0
.gitattributes

@@ -0,0 +1,3 @@
1
+# Windows files should use crlf line endings
2
+# https://help.github.com/articles/dealing-with-line-endings/
3
+*.bat text eol=crlf

+ 59 - 0
.gitignore

@@ -0,0 +1,59 @@
1
+# OSX
2
+#
3
+.DS_Store
4
+
5
+# Xcode
6
+#
7
+build/
8
+*.pbxuser
9
+!default.pbxuser
10
+*.mode1v3
11
+!default.mode1v3
12
+*.mode2v3
13
+!default.mode2v3
14
+*.perspectivev3
15
+!default.perspectivev3
16
+xcuserdata
17
+*.xccheckout
18
+*.moved-aside
19
+DerivedData
20
+*.hmap
21
+*.ipa
22
+*.xcuserstate
23
+
24
+# Android/IntelliJ
25
+#
26
+build/
27
+.idea
28
+.gradle
29
+local.properties
30
+*.iml
31
+
32
+# node.js
33
+#
34
+node_modules/
35
+npm-debug.log
36
+yarn-error.log
37
+
38
+# BUCK
39
+buck-out/
40
+\.buckd/
41
+*.keystore
42
+!debug.keystore
43
+
44
+# fastlane
45
+#
46
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47
+# screenshots whenever they are needed.
48
+# For more information about the recommended setup visit:
49
+# https://docs.fastlane.tools/best-practices/source-control/
50
+
51
+*/fastlane/report.xml
52
+*/fastlane/Preview.html
53
+*/fastlane/screenshots
54
+
55
+# Bundle artifact
56
+*.jsbundle
57
+
58
+# CocoaPods
59
+/ios/Pods/

+ 7 - 0
.prettierrc.js

@@ -0,0 +1,7 @@
1
+module.exports = {
2
+  bracketSpacing: false,
3
+  jsxBracketSameLine: true,
4
+  singleQuote: true,
5
+  trailingComma: 'all',
6
+  arrowParens: 'avoid',
7
+};

+ 0 - 0
.watchman-cookie-ALIs-MacBook-Pro.local-616-664


+ 1 - 0
.watchmanconfig

@@ -0,0 +1 @@
1
+{}

+ 244 - 0
App copy.js

@@ -0,0 +1,244 @@
1
+import React from 'react'
2
+import type {Node} from 'react'
3
+import {
4
+  SafeAreaView,
5
+
6
+  StatusBar,
7
+  StyleSheet,
8
+  Text,
9
+  useColorScheme,
10
+  View,
11
+  TouchableOpacity,
12
+
13
+  Alert,
14
+} from 'react-native'
15
+
16
+import RecordScreen from 'react-native-record-screen'
17
+import FileViewer from 'react-native-file-viewer'
18
+import { RNCamera } from 'react-native-camera'
19
+import PushNotification from 'react-native-push-notification'
20
+
21
+
22
+let lastScreeRecordPath: String = ''
23
+let lastCameraPath: String = ''
24
+
25
+let cameraController: RNCamera = null
26
+
27
+let isRecorded = false
28
+
29
+
30
+const App: () => Node = () =>
31
+{
32
+  return (
33
+    <SafeAreaView style={ styles.safeAreaView }>
34
+      <StatusBar barStyle={'light-content'}/>
35
+      
36
+      <View style={ styles.container }>
37
+
38
+        <Button
39
+            text = 'Start record'
40
+            onPress = { startScreeRecord }
41
+        />
42
+
43
+        <Button
44
+            text = 'Stop record'
45
+            onPress = { stopScreeRecord }
46
+        />
47
+
48
+        <Button
49
+            text = 'Open screen record'
50
+            onPress = { openLastScreeRecord }
51
+        />
52
+
53
+        <Button
54
+            text = 'Open camera record'
55
+            onPress = { openLastCameraRecord }
56
+        />
57
+
58
+        <Button
59
+            text = 'Send a notification'
60
+            onPress = { sendANotification }
61
+        />
62
+
63
+      </View>
64
+
65
+      <RNCamera
66
+        style = { styles.cameraView }
67
+        ref = { ref => cameraController = ref }
68
+        type = { RNCamera.Constants.Type.front }
69
+        // flashMode={RNCamera.Constants.FlashMode.on}
70
+        androidCameraPermissionOptions = {{
71
+            title: 'Permission to use camera',
72
+            message: 'We need your permission to use your camera',
73
+            buttonPositive: 'Ok',
74
+            buttonNegative: 'Cancel',
75
+        }}
76
+        androidRecordAudioPermissionOptions = {{
77
+            title: 'Permission to use audio recording',
78
+            message: 'We need your permission to use your audio',
79
+            buttonPositive: 'Ok',
80
+            buttonNegative: 'Cancel',
81
+        }}
82
+        onRecordingStart = { (e) =>
83
+        {
84
+            console.log('--------- recording bashaldi')
85
+            console.log('start res', e?.nativeEvent?.uri)
86
+            lastCameraPath = e?.nativeEvent?.uri
87
+        } }
88
+      />
89
+      
90
+    </SafeAreaView>
91
+  )
92
+}
93
+
94
+const sendANotification = async () => {
95
+    PushNotification.localNotification({
96
+        id: 5,
97
+        title: "Alisa",
98
+        message: "Can you return my ***",
99
+        playSound: true,
100
+        channelId: "testChanne4",
101
+    })
102
+}
103
+
104
+const startScreeRecord = async () =>
105
+{
106
+    PushNotification.localNotificationSchedule({
107
+        id: 6,
108
+        title: "Alisa",
109
+        message: "Can you return my ***",
110
+        playSound: true,
111
+        channelId: "testChanne4",
112
+
113
+        date: new Date(Date.now() + 6 * 1000),
114
+        allowWhileIdle: false,
115
+    })
116
+
117
+    let result = await RecordScreen.startRecording({ mic: false })
118
+    .catch((error) => Alert.alert('Error when startScreeRecord', JSON.stringify(error)))
119
+
120
+    console.log('------ bura geldi', result)
121
+    if(result)
122
+    {
123
+        cameraController.recordAsync().catch(error => console.log('Error when startCameraRecord', JSON.stringify(error)))
124
+        isRecorded = true
125
+    }
126
+}
127
+
128
+const stopScreeRecord = async () =>
129
+{
130
+    if(!isRecorded)
131
+        return
132
+
133
+    isRecorded = false
134
+
135
+    let res = null
136
+    try
137
+    {
138
+        let res = await RecordScreen.stopRecording()
139
+        .catch((error) =>
140
+            Alert.alert('Error when stopScreeRecord', JSON.stringify(error))
141
+        )
142
+
143
+        if(res)
144
+        {
145
+            const url = res?.result?.outputURL
146
+            console.log('url: ', url)
147
+            lastScreeRecordPath = url
148
+        }
149
+    }
150
+    catch(error)
151
+    {
152
+        Alert.alert('Error when RecordScreen.stopRecording()', JSON.stringify(error))
153
+    }
154
+
155
+
156
+    try
157
+    {
158
+        cameraController.stopRecording()
159
+    }
160
+    catch(error)
161
+    {
162
+        Alert.alert('Error when stopCameraRecord', JSON.stringify(error))
163
+    }
164
+
165
+    Alert.alert('Success', 'All videos saved')
166
+}
167
+
168
+const openLastScreeRecord = async () =>
169
+{
170
+    if(lastScreeRecordPath?.length > 0)
171
+        FileViewer.open(lastScreeRecordPath)
172
+        .then(() => {
173
+            console.log('----- success opened')
174
+        })
175
+        .catch(error => {
176
+            Alert.alert('Error when openLastScreeRecord', JSON.stringify(error))
177
+            console.log('----- error', error)
178
+        })
179
+}
180
+
181
+const openLastCameraRecord = async () =>
182
+{
183
+    console.log('------- lastCameraPath', lastCameraPath)
184
+    if(lastCameraPath?.length > 0)
185
+        FileViewer.open(lastCameraPath)
186
+        .then(() => {
187
+            console.log('----- success opened')
188
+        })
189
+        .catch(error => {
190
+            Alert.alert('Error when openLastCameraRecord', JSON.stringify(error))
191
+            console.log('----- error', error)
192
+        })
193
+}
194
+
195
+
196
+
197
+const styles = StyleSheet.create({
198
+    safeAreaView: {
199
+        flex: 1,
200
+    },
201
+    container: {
202
+        flex: 1,
203
+        alignItems: 'center',
204
+        justifyContent: 'center',
205
+    },
206
+    btn: {
207
+        height: 50,
208
+        width: '60%',
209
+        marginTop: 20,
210
+        alignItems: 'center',
211
+        justifyContent: 'center',
212
+        backgroundColor: '#3d88f5',
213
+    },
214
+    btnText: {
215
+        fontSize: 18,
216
+        color: 'white',
217
+    },
218
+    cameraView: {
219
+        height: 1,
220
+        opacity: 0,
221
+    },
222
+})
223
+
224
+export default App
225
+
226
+
227
+
228
+
229
+type BtnProps = {
230
+    text: String,
231
+    onPress: () => void,
232
+}
233
+
234
+const Button = (props: BtnProps) => {
235
+    return (
236
+        <TouchableOpacity
237
+            style = { styles.btn }
238
+            onPress = { props.onPress }
239
+        >
240
+            <Text style={ styles.btnText }>{ props.text }</Text>
241
+        </TouchableOpacity>
242
+    )
243
+}
244
+

+ 84 - 0
App.js

@@ -0,0 +1,84 @@
1
+import React, { PureComponent } from 'react'
2
+import { View, StatusBar, StyleSheet } from 'react-native'
3
+import { StorageService, } from './src/others'
4
+import { store, } from './src/redux/store'
5
+import { AppGlobalAC, } from './src/redux/actionCreators'
6
+import Colors from './src/constants/Colors'
7
+
8
+
9
+
10
+export default class App extends PureComponent
11
+{
12
+    constructor(props)
13
+    {
14
+        super(props)
15
+        this.initialMethodsForStartApp = this.initialMethodsForStartApp.bind(this)
16
+
17
+        this.state = {
18
+            MainComponent : null,
19
+            isAppReady : false
20
+        }
21
+    }
22
+
23
+
24
+    componentDidMount()
25
+    {
26
+        this.initialMethodsForStartApp()
27
+    }
28
+
29
+
30
+    async initialMethodsForStartApp()
31
+    {
32
+        try {
33
+            await this.fillGlobalStates()
34
+
35
+            this.setState({
36
+                MainComponent : (await import('./AppStart.js')).default,
37
+                isAppReady: true,
38
+            })
39
+        }
40
+        catch(err)
41
+        {
42
+            this.setState({
43
+                isAppReady: false,
44
+            })
45
+        }
46
+    }
47
+
48
+    async fillGlobalStates()
49
+    {
50
+        let voicePrankCategory = await StorageService.getVoicePrankCategory()
51
+        store.dispatch(AppGlobalAC.changeVoicePrankCategory(voicePrankCategory))
52
+    }
53
+
54
+
55
+    render()
56
+    {
57
+        if(!this.state.isAppReady)
58
+            return null // <LaunchPage/>
59
+
60
+        return (
61
+            <>
62
+                <StatusBar
63
+                    barStyle = 'dark-content'
64
+                    backgroundColor = { Colors.d_Header }
65
+                />
66
+
67
+                <View style={ styles.appView }>
68
+
69
+                    <this.state.MainComponent/>
70
+
71
+                </View>
72
+            </>
73
+        )
74
+    }
75
+
76
+}
77
+
78
+
79
+
80
+const styles = StyleSheet.create({
81
+    appView: {
82
+        flex: 1,
83
+    },
84
+})

+ 174 - 0
AppStart.js

@@ -0,0 +1,174 @@
1
+import React, { PureComponent, } from 'react'
2
+import { NavigationContainer } from '@react-navigation/native'
3
+import * as RootNavigation from './src/navigations/RootNavigation'
4
+import { navigationRef } from './src/navigations/RootNavigation'
5
+import analytics from '@react-native-firebase/analytics'
6
+import { checkMultiple, requestMultiple, requestNotifications, PERMISSIONS } from 'react-native-permissions'
7
+import { ModalPortal } from 'react-native-modals'
8
+import { Provider } from 'react-redux'
9
+import { store } from './src/redux/store'
10
+import GlobalModals from './src/components/globalModals/GlobalModals'
11
+import t, { languageConfig, } from './src/translator/translator'
12
+
13
+export let appStartInstance: AppStart = null
14
+
15
+export default class AppStart extends PureComponent
16
+{
17
+    navigationContainer: NavigationContainer = {  }
18
+
19
+    routeName: String = ''
20
+    defaultCoreUri = null
21
+
22
+    constructor(props)
23
+    {
24
+        super(props)
25
+        this.initialMethodsForMainView = this.initialMethodsForMainView.bind(this)
26
+
27
+        this.state = {
28
+            content: null,
29
+        }
30
+
31
+        appStartInstance = this
32
+    }
33
+
34
+
35
+    async componentDidMount()
36
+    {
37
+        await this.initialMethodsForMainView()
38
+    }
39
+
40
+    async initialMethodsForMainView()
41
+    {
42
+        await languageConfig.init()
43
+
44
+        await this.askAllPermissions()
45
+
46
+        // if(__DEV__)
47
+        // {
48
+            // globalData.setCoreIdentityApiUri('https://identity-test.novbem.az')
49
+            // globalData.setCoreApiUri('https://business-api-test.novbem.az')
50
+        // }
51
+        // else
52
+        // {
53
+            // globalData.setCoreIdentityApiUri('https://identity.novbem.az')
54
+            // globalData.setCoreApiUri('https://business-api.novbem.az/v2.2.0')
55
+        // }    
56
+
57
+        // let isAuthorized = await storageService.getIsAuthorized()
58
+
59
+        // if(isAuthorized)
60
+            this.mainNavInit()
61
+        // else
62
+        //     this.loginNavInit()
63
+    }
64
+
65
+    async askAllPermissions()
66
+    {
67
+        requestMultiple([
68
+            PERMISSIONS.ANDROID.CAMERA,
69
+            PERMISSIONS.ANDROID.RECORD_AUDIO,
70
+            PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE,
71
+            PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE,
72
+
73
+            PERMISSIONS.IOS.CAMERA,
74
+            PERMISSIONS.IOS.MICROPHONE,
75
+        ])
76
+        // .then(statuses => console.log('--- request statutes', statuses))
77
+
78
+        requestNotifications([
79
+            'alert',
80
+            'badge',
81
+            'carPlay',
82
+            'criticalAlert',
83
+            'provisional',
84
+            'sound',
85
+        ]).then(obj => console.log('--- obj', obj))
86
+    }
87
+
88
+    async loginNavInit()
89
+    {
90
+        this.setState({
91
+            content: (await import('./src/navigations/LoginNavigation')).default,
92
+        })
93
+    }
94
+
95
+    async mainNavInit()
96
+    {
97
+        // let currAuth = await storageService.getCurrentAuth()
98
+        // globalData.setCurrentAuth(currAuth)
99
+        // console.log('---- current auth', currAuth)
100
+
101
+        // let currUser = await storageService.getCurrentUser()
102
+        // globalData.setCurrentUser(currUser)
103
+
104
+
105
+        this.setState({
106
+            content: (await import('./src/navigations/MainNavigation')).default,
107
+            // content: (await im/port('./src/navigations/LoginNavigation')).default,
108
+        })
109
+    }
110
+
111
+    updateAllComponent()
112
+    {
113
+        this.forceUpdate()
114
+        navigationRef?.current?.setParams()
115
+    }
116
+
117
+
118
+
119
+    render()
120
+    {
121
+        if(!this.state.content)
122
+            return null
123
+
124
+        return (
125
+            <Provider store={ store }>
126
+
127
+                <NavigationContainer
128
+                    ref = { ref => { navigationRef; this.navigationContainer = ref } }
129
+                    onReady = { () => {
130
+                        if(this.navigationContainer)
131
+                        this.routeName = this.navigationContainer.getCurrentRoute().name;
132
+                    }}
133
+                    onStateChange = { async () => {
134
+                        const previousRouteName = this.routeName;
135
+                        const currentRouteName = this.navigationContainer.getCurrentRoute().name;
136
+                
137
+                        if (previousRouteName !== currentRouteName)
138
+                            await analytics().logScreenView({
139
+                                screen_name: currentRouteName,
140
+                                screen_class: currentRouteName,
141
+                            })
142
+                
143
+                        this.routeName = currentRouteName;
144
+                    }}
145
+                >
146
+
147
+                    <this.state.content/>
148
+                </NavigationContainer>
149
+
150
+                <ModalPortal/>
151
+                <GlobalModals/>
152
+            </Provider>
153
+        )
154
+    }
155
+
156
+
157
+    async onLogined()
158
+    {
159
+        this.setState({
160
+            content: (await import('./src/navigations/MainNavigation')).default,
161
+        })
162
+        this.notificationConfig()
163
+        // this.initialMethodsForMainView()
164
+    }
165
+
166
+    async onLogOut()
167
+    {
168
+        // this.initialMethodsForMainView()
169
+        // this.setState({
170
+        //     content: (await import('./src/navigations/LoginNavigation')).default,
171
+        // })
172
+    }
173
+
174
+}

+ 55 - 0
android/app/_BUCK

@@ -0,0 +1,55 @@
1
+# To learn about Buck see [Docs](https://buckbuild.com/).
2
+# To run your application with Buck:
3
+# - install Buck
4
+# - `npm start` - to start the packager
5
+# - `cd android`
6
+# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7
+# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8
+# - `buck install -r android/app` - compile, install and run application
9
+#
10
+
11
+load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
12
+
13
+lib_deps = []
14
+
15
+create_aar_targets(glob(["libs/*.aar"]))
16
+
17
+create_jar_targets(glob(["libs/*.jar"]))
18
+
19
+android_library(
20
+    name = "all-libs",
21
+    exported_deps = lib_deps,
22
+)
23
+
24
+android_library(
25
+    name = "app-code",
26
+    srcs = glob([
27
+        "src/main/java/**/*.java",
28
+    ]),
29
+    deps = [
30
+        ":all-libs",
31
+        ":build_config",
32
+        ":res",
33
+    ],
34
+)
35
+
36
+android_build_config(
37
+    name = "build_config",
38
+    package = "com.umora",
39
+)
40
+
41
+android_resource(
42
+    name = "res",
43
+    package = "com.umora",
44
+    res = "src/main/res",
45
+)
46
+
47
+android_binary(
48
+    name = "app",
49
+    keystore = "//android/keystores:debug",
50
+    manifest = "src/main/AndroidManifest.xml",
51
+    package_type = "debug",
52
+    deps = [
53
+        ":app-code",
54
+    ],
55
+)

+ 237 - 0
android/app/build.gradle

@@ -0,0 +1,237 @@
1
+apply plugin: "com.android.application"
2
+apply plugin: 'com.google.gms.google-services'
3
+
4
+import com.android.build.OutputFile
5
+
6
+/**
7
+ * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
8
+ * and bundleReleaseJsAndAssets).
9
+ * These basically call `react-native bundle` with the correct arguments during the Android build
10
+ * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
11
+ * bundle directly from the development server. Below you can see all the possible configurations
12
+ * and their defaults. If you decide to add a configuration block, make sure to add it before the
13
+ * `apply from: "../../node_modules/react-native/react.gradle"` line.
14
+ *
15
+ * project.ext.react = [
16
+ *   // the name of the generated asset file containing your JS bundle
17
+ *   bundleAssetName: "index.android.bundle",
18
+ *
19
+ *   // the entry file for bundle generation. If none specified and
20
+ *   // "index.android.js" exists, it will be used. Otherwise "index.js" is
21
+ *   // default. Can be overridden with ENTRY_FILE environment variable.
22
+ *   entryFile: "index.android.js",
23
+ *
24
+ *   // https://reactnative.dev/docs/performance#enable-the-ram-format
25
+ *   bundleCommand: "ram-bundle",
26
+ *
27
+ *   // whether to bundle JS and assets in debug mode
28
+ *   bundleInDebug: false,
29
+ *
30
+ *   // whether to bundle JS and assets in release mode
31
+ *   bundleInRelease: true,
32
+ *
33
+ *   // whether to bundle JS and assets in another build variant (if configured).
34
+ *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
35
+ *   // The configuration property can be in the following formats
36
+ *   //         'bundleIn${productFlavor}${buildType}'
37
+ *   //         'bundleIn${buildType}'
38
+ *   // bundleInFreeDebug: true,
39
+ *   // bundleInPaidRelease: true,
40
+ *   // bundleInBeta: true,
41
+ *
42
+ *   // whether to disable dev mode in custom build variants (by default only disabled in release)
43
+ *   // for example: to disable dev mode in the staging build type (if configured)
44
+ *   devDisabledInStaging: true,
45
+ *   // The configuration property can be in the following formats
46
+ *   //         'devDisabledIn${productFlavor}${buildType}'
47
+ *   //         'devDisabledIn${buildType}'
48
+ *
49
+ *   // the root of your project, i.e. where "package.json" lives
50
+ *   root: "../../",
51
+ *
52
+ *   // where to put the JS bundle asset in debug mode
53
+ *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
54
+ *
55
+ *   // where to put the JS bundle asset in release mode
56
+ *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
57
+ *
58
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
59
+ *   // require('./image.png')), in debug mode
60
+ *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
61
+ *
62
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
63
+ *   // require('./image.png')), in release mode
64
+ *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
65
+ *
66
+ *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
67
+ *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
68
+ *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
69
+ *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
70
+ *   // for example, you might want to remove it from here.
71
+ *   inputExcludes: ["android/**", "ios/**"],
72
+ *
73
+ *   // override which node gets called and with what additional arguments
74
+ *   nodeExecutableAndArgs: ["node"],
75
+ *
76
+ *   // supply additional arguments to the packager
77
+ *   extraPackagerArgs: []
78
+ * ]
79
+ */
80
+
81
+project.ext.react = [
82
+    enableHermes: false,  // clean and rebuild if changing
83
+]
84
+
85
+apply from: "../../node_modules/react-native/react.gradle"
86
+
87
+/**
88
+ * Set this to true to create two separate APKs instead of one:
89
+ *   - An APK that only works on ARM devices
90
+ *   - An APK that only works on x86 devices
91
+ * The advantage is the size of the APK is reduced by about 4MB.
92
+ * Upload all the APKs to the Play Store and people will download
93
+ * the correct one based on the CPU architecture of their device.
94
+ */
95
+def enableSeparateBuildPerCPUArchitecture = false
96
+
97
+/**
98
+ * Run Proguard to shrink the Java bytecode in release builds.
99
+ */
100
+def enableProguardInReleaseBuilds = false
101
+
102
+/**
103
+ * The preferred build flavor of JavaScriptCore.
104
+ *
105
+ * For example, to use the international variant, you can use:
106
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
107
+ *
108
+ * The international variant includes ICU i18n library and necessary data
109
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
110
+ * give correct results when using with locales other than en-US.  Note that
111
+ * this variant is about 6MiB larger per architecture than default.
112
+ */
113
+def jscFlavor = 'org.webkit:android-jsc:+'
114
+
115
+/**
116
+ * Whether to enable the Hermes VM.
117
+ *
118
+ * This should be set on project.ext.react and mirrored here.  If it is not set
119
+ * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
120
+ * and the benefits of using Hermes will therefore be sharply reduced.
121
+ */
122
+def enableHermes = project.ext.react.get("enableHermes", false);
123
+
124
+android {
125
+    ndkVersion rootProject.ext.ndkVersion
126
+
127
+    compileSdkVersion rootProject.ext.compileSdkVersion
128
+
129
+    compileOptions {
130
+        sourceCompatibility JavaVersion.VERSION_1_8
131
+        targetCompatibility JavaVersion.VERSION_1_8
132
+    }
133
+
134
+    defaultConfig {
135
+        applicationId "com.umora"
136
+        minSdkVersion rootProject.ext.minSdkVersion
137
+        targetSdkVersion rootProject.ext.targetSdkVersion
138
+        versionCode 1
139
+        versionName "1.0.0"
140
+
141
+        missingDimensionStrategy 'react-native-camera', 'general'
142
+    }
143
+    splits {
144
+        abi {
145
+            reset()
146
+            enable enableSeparateBuildPerCPUArchitecture
147
+            universalApk false  // If true, also generate a universal APK
148
+            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
149
+        }
150
+    }
151
+    signingConfigs {
152
+        release {
153
+            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
154
+                storeFile file(MYAPP_UPLOAD_STORE_FILE)
155
+                storePassword MYAPP_UPLOAD_STORE_PASSWORD
156
+                keyAlias MYAPP_UPLOAD_KEY_ALIAS
157
+                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
158
+            }
159
+        }
160
+        debug {
161
+            storeFile file('debug.keystore')
162
+            storePassword 'android'
163
+            keyAlias 'androiddebugkey'
164
+            keyPassword 'android'
165
+        }
166
+    }
167
+    buildTypes {
168
+        debug {
169
+            signingConfig signingConfigs.debug
170
+        }
171
+        release {
172
+            // Caution! In production, you need to generate your own keystore file.
173
+            // see https://reactnative.dev/docs/signed-apk-android.
174
+            signingConfig signingConfigs.debug
175
+            minifyEnabled enableProguardInReleaseBuilds
176
+            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
177
+            signingConfig signingConfigs.release
178
+        }
179
+    }
180
+
181
+    // applicationVariants are e.g. debug, release
182
+    applicationVariants.all { variant ->
183
+        variant.outputs.each { output ->
184
+            // For each separate APK per architecture, set a unique version code as described here:
185
+            // https://developer.android.com/studio/build/configure-apk-splits.html
186
+            // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
187
+            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
188
+            def abi = output.getFilter(OutputFile.ABI)
189
+            if (abi != null) {  // null for the universal-debug, universal-release variants
190
+                output.versionCodeOverride =
191
+                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)
192
+            }
193
+
194
+        }
195
+    }
196
+}
197
+
198
+dependencies {
199
+    implementation fileTree(dir: "libs", include: ["*.jar"])
200
+    //noinspection GradleDynamicVersion
201
+    implementation "com.facebook.react:react-native:+"  // From node_modules
202
+
203
+    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
204
+
205
+    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
206
+      exclude group:'com.facebook.fbjni'
207
+    }
208
+
209
+    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
210
+        exclude group:'com.facebook.flipper'
211
+        exclude group:'com.squareup.okhttp3', module:'okhttp'
212
+    }
213
+
214
+    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
215
+        exclude group:'com.facebook.flipper'
216
+    }
217
+
218
+    implementation platform('com.google.firebase:firebase-bom:28.4.0')
219
+    implementation 'com.google.firebase:firebase-analytics'
220
+
221
+    if (enableHermes) {
222
+        def hermesPath = "../../node_modules/hermes-engine/android/";
223
+        debugImplementation files(hermesPath + "hermes-debug.aar")
224
+        releaseImplementation files(hermesPath + "hermes-release.aar")
225
+    } else {
226
+        implementation jscFlavor
227
+    }
228
+}
229
+
230
+// Run this once to be able to run the application with BUCK
231
+// puts all compile dependencies into folder libs for BUCK to use
232
+task copyDownloadableDepsToLibs(type: Copy) {
233
+    from configurations.compile
234
+    into 'libs'
235
+}
236
+
237
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

+ 19 - 0
android/app/build_defs.bzl

@@ -0,0 +1,19 @@
1
+"""Helper definitions to glob .aar and .jar targets"""
2
+
3
+def create_aar_targets(aarfiles):
4
+    for aarfile in aarfiles:
5
+        name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6
+        lib_deps.append(":" + name)
7
+        android_prebuilt_aar(
8
+            name = name,
9
+            aar = aarfile,
10
+        )
11
+
12
+def create_jar_targets(jarfiles):
13
+    for jarfile in jarfiles:
14
+        name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15
+        lib_deps.append(":" + name)
16
+        prebuilt_jar(
17
+            name = name,
18
+            binary_jar = jarfile,
19
+        )

BIN
android/app/debug.keystore


+ 39 - 0
android/app/google-services.json

@@ -0,0 +1,39 @@
1
+{
2
+  "project_info": {
3
+    "project_number": "917406038247",
4
+    "project_id": "umora-68008",
5
+    "storage_bucket": "umora-68008.appspot.com"
6
+  },
7
+  "client": [
8
+    {
9
+      "client_info": {
10
+        "mobilesdk_app_id": "1:917406038247:android:f9eb6d6894f46fc41f0a42",
11
+        "android_client_info": {
12
+          "package_name": "com.umora"
13
+        }
14
+      },
15
+      "oauth_client": [
16
+        {
17
+          "client_id": "917406038247-g338f3slcp35eijpcv9ohqmhgmvmjvjg.apps.googleusercontent.com",
18
+          "client_type": 3
19
+        }
20
+      ],
21
+      "api_key": [
22
+        {
23
+          "current_key": "AIzaSyBJ0ttH6fKYHjeBT89rw_HhUOyBVZJg2rs"
24
+        }
25
+      ],
26
+      "services": {
27
+        "appinvite_service": {
28
+          "other_platform_oauth_client": [
29
+            {
30
+              "client_id": "917406038247-g338f3slcp35eijpcv9ohqmhgmvmjvjg.apps.googleusercontent.com",
31
+              "client_type": 3
32
+            }
33
+          ]
34
+        }
35
+      }
36
+    }
37
+  ],
38
+  "configuration_version": "1"
39
+}

+ 10 - 0
android/app/proguard-rules.pro

@@ -0,0 +1,10 @@
1
+# Add project specific ProGuard rules here.
2
+# By default, the flags in this file are appended to flags specified
3
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4
+# You can edit the include path and order by changing the proguardFiles
5
+# directive in build.gradle.
6
+#
7
+# For more details, see
8
+#   http://developer.android.com/guide/developing/tools/proguard.html
9
+
10
+# Add any project specific keep options here:

+ 13 - 0
android/app/src/debug/AndroidManifest.xml

@@ -0,0 +1,13 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+    xmlns:tools="http://schemas.android.com/tools">
4
+
5
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
6
+
7
+    <application
8
+        android:usesCleartextTraffic="true"
9
+        tools:targetApi="28"
10
+        tools:ignore="GoogleAppIndexingWarning">
11
+        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
12
+    </application>
13
+</manifest>

+ 72 - 0
android/app/src/debug/java/com/umora/ReactNativeFlipper.java

@@ -0,0 +1,72 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * <p>This source code is licensed under the MIT license found in the LICENSE file in the root
5
+ * directory of this source tree.
6
+ */
7
+package com.umora;
8
+
9
+import android.content.Context;
10
+import com.facebook.flipper.android.AndroidFlipperClient;
11
+import com.facebook.flipper.android.utils.FlipperUtils;
12
+import com.facebook.flipper.core.FlipperClient;
13
+import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
14
+import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
15
+import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
16
+import com.facebook.flipper.plugins.inspector.DescriptorMapping;
17
+import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
18
+import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
19
+import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
20
+import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
21
+import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
22
+import com.facebook.react.ReactInstanceManager;
23
+import com.facebook.react.bridge.ReactContext;
24
+import com.facebook.react.modules.network.NetworkingModule;
25
+import okhttp3.OkHttpClient;
26
+
27
+public class ReactNativeFlipper {
28
+  public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
29
+    if (FlipperUtils.shouldEnableFlipper(context)) {
30
+      final FlipperClient client = AndroidFlipperClient.getInstance(context);
31
+
32
+      client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
33
+      client.addPlugin(new ReactFlipperPlugin());
34
+      client.addPlugin(new DatabasesFlipperPlugin(context));
35
+      client.addPlugin(new SharedPreferencesFlipperPlugin(context));
36
+      client.addPlugin(CrashReporterPlugin.getInstance());
37
+
38
+      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39
+      NetworkingModule.setCustomClientBuilder(
40
+          new NetworkingModule.CustomClientBuilder() {
41
+            @Override
42
+            public void apply(OkHttpClient.Builder builder) {
43
+              builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44
+            }
45
+          });
46
+      client.addPlugin(networkFlipperPlugin);
47
+      client.start();
48
+
49
+      // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
50
+      // Hence we run if after all native modules have been initialized
51
+      ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
52
+      if (reactContext == null) {
53
+        reactInstanceManager.addReactInstanceEventListener(
54
+            new ReactInstanceManager.ReactInstanceEventListener() {
55
+              @Override
56
+              public void onReactContextInitialized(ReactContext reactContext) {
57
+                reactInstanceManager.removeReactInstanceEventListener(this);
58
+                reactContext.runOnNativeModulesQueueThread(
59
+                    new Runnable() {
60
+                      @Override
61
+                      public void run() {
62
+                        client.addPlugin(new FrescoFlipperPlugin());
63
+                      }
64
+                    });
65
+              }
66
+            });
67
+      } else {
68
+        client.addPlugin(new FrescoFlipperPlugin());
69
+      }
70
+    }
71
+  }
72
+}

+ 67 - 0
android/app/src/main/AndroidManifest.xml

@@ -0,0 +1,67 @@
1
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+  package="com.umora">
3
+
4
+    <uses-permission android:name="android.permission.INTERNET" />
5
+
6
+    <uses-permission android:name="android.permission.CAMERA" />
7
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
8
+    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
9
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
10
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
11
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
12
+
13
+    <uses-permission android:name="android.permission.VIBRATE" />
14
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
15
+
16
+
17
+    <application
18
+      android:name=".MainApplication"
19
+      android:label="@string/app_name"
20
+      android:icon="@mipmap/ic_launcher"
21
+      android:allowBackup="false"
22
+      android:theme="@style/AppTheme">
23
+
24
+
25
+        <!-- Change the value to true to enable pop-up for in foreground on receiving remote notifications (for prevent duplicating while showing local notifications set this to false) -->
26
+        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_foreground"
27
+                    android:value="true"/>
28
+        <!-- Change the resource name to your App's accent color - or any other color you want -->
29
+        <meta-data  android:name="com.dieam.reactnativepushnotification.notification_color"
30
+                    android:resource="@color/white"/> <!-- or @android:color/{name} to use a standard color -->
31
+
32
+        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions" />
33
+        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
34
+        <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
35
+            <intent-filter>
36
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
37
+                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
38
+                <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
39
+            </intent-filter>
40
+        </receiver>
41
+
42
+        <service
43
+            android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
44
+            android:exported="false" >
45
+            <intent-filter>
46
+                <action android:name="com.google.firebase.MESSAGING_EVENT" />
47
+            </intent-filter>
48
+        </service>
49
+
50
+
51
+
52
+
53
+
54
+
55
+      <activity
56
+        android:name=".MainActivity"
57
+        android:label="@string/app_name"
58
+        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
59
+        android:launchMode="singleTask"
60
+        android:windowSoftInputMode="adjustResize">
61
+        <intent-filter>
62
+            <action android:name="android.intent.action.MAIN" />
63
+            <category android:name="android.intent.category.LAUNCHER" />
64
+        </intent-filter>
65
+      </activity>
66
+    </application>
67
+</manifest>

File diff suppressed because it is too large
+ 1072 - 0
android/app/src/main/assets/index.android.bundle


+ 15 - 0
android/app/src/main/java/com/umora/MainActivity.java

@@ -0,0 +1,15 @@
1
+package com.umora;
2
+
3
+import com.facebook.react.ReactActivity;
4
+
5
+public class MainActivity extends ReactActivity {
6
+
7
+  /**
8
+   * Returns the name of the main component registered from JavaScript. This is used to schedule
9
+   * rendering of the component.
10
+   */
11
+  @Override
12
+  protected String getMainComponentName() {
13
+    return "Umora";
14
+  }
15
+}

+ 94 - 0
android/app/src/main/java/com/umora/MainApplication.java

@@ -0,0 +1,94 @@
1
+package com.umora;
2
+
3
+import android.app.Application;
4
+import android.content.Context;
5
+import com.facebook.react.PackageList;
6
+import com.facebook.react.ReactApplication;
7
+import com.reactlibrarynotificationsounds.NotificationSoundsPackage;
8
+import com.reactlibrarynotificationsounds.NotificationSoundsPackage;
9
+import com.ammarahmed.mmkv.RNMMKVPackage;
10
+import cl.json.RNSharePackage;
11
+import com.facebook.react.ReactInstanceManager;
12
+import com.facebook.react.ReactNativeHost;
13
+import com.facebook.react.ReactPackage;
14
+import com.facebook.soloader.SoLoader;
15
+import java.lang.reflect.InvocationTargetException;
16
+import java.util.List;
17
+
18
+import com.ammarahmed.mmkv.RNMMKVJSIModulePackage; // <- add here
19
+import com.facebook.react.bridge.JSIModulePackage; // <- add here
20
+
21
+public class MainApplication extends Application implements ReactApplication {
22
+
23
+  private final ReactNativeHost mReactNativeHost =
24
+      new ReactNativeHost(this) {
25
+        @Override
26
+        public boolean getUseDeveloperSupport() {
27
+          return BuildConfig.DEBUG;
28
+        }
29
+
30
+        @Override
31
+        protected List<ReactPackage> getPackages() {
32
+          @SuppressWarnings("UnnecessaryLocalVariable")
33
+          List<ReactPackage> packages = new PackageList(this).getPackages();
34
+          // Packages that cannot be autolinked yet can be added manually here, for example:
35
+          // packages.add(new MyReactNativePackage());
36
+          return packages;
37
+        }
38
+
39
+        @Override
40
+        protected String getJSMainModuleName() {
41
+          return "index";
42
+        }
43
+
44
+        // add this method to load our JSI Module.
45
+          @Override
46
+          protected JSIModulePackage getJSIModulePackage() {
47
+              return new RNMMKVJSIModulePackage();
48
+          }
49
+        //
50
+      };
51
+
52
+  @Override
53
+  public ReactNativeHost getReactNativeHost() {
54
+    return mReactNativeHost;
55
+  }
56
+
57
+  @Override
58
+  public void onCreate() {
59
+    super.onCreate();
60
+    SoLoader.init(this, /* native exopackage */ false);
61
+    initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
62
+  }
63
+
64
+  /**
65
+   * Loads Flipper in React Native templates. Call this in the onCreate method with something like
66
+   * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
67
+   *
68
+   * @param context
69
+   * @param reactInstanceManager
70
+   */
71
+  private static void initializeFlipper(
72
+      Context context, ReactInstanceManager reactInstanceManager) {
73
+    if (BuildConfig.DEBUG) {
74
+      try {
75
+        /*
76
+         We use reflection here to pick up the class that initializes Flipper,
77
+        since Flipper library is not available in release mode
78
+        */
79
+        Class<?> aClass = Class.forName("com.umora.ReactNativeFlipper");
80
+        aClass
81
+            .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
82
+            .invoke(null, context, reactInstanceManager);
83
+      } catch (ClassNotFoundException e) {
84
+        e.printStackTrace();
85
+      } catch (NoSuchMethodException e) {
86
+        e.printStackTrace();
87
+      } catch (IllegalAccessException e) {
88
+        e.printStackTrace();
89
+      } catch (InvocationTargetException e) {
90
+        e.printStackTrace();
91
+      }
92
+    }
93
+  }
94
+}

BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_telegram.png


BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_wp.png


BIN
android/app/src/main/res/mipmap-hdpi/ic_simple_message.png


BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_telegram.png


BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_wp.png


BIN
android/app/src/main/res/mipmap-mdpi/ic_simple_message.png


BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_telegram.png


BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_wp.png


BIN
android/app/src/main/res/mipmap-xhdpi/ic_simple_message.png


BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_telegram.png


BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_wp.png


BIN
android/app/src/main/res/mipmap-xxhdpi/ic_simple_message.png


BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_telegram.png


BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_wp.png


BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_simple_message.png


+ 3 - 0
android/app/src/main/res/values/colors.xml

@@ -0,0 +1,3 @@
1
+<resources>
2
+    <color name="white">#FFF</color>
3
+</resources>

+ 3 - 0
android/app/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
1
+<resources>
2
+    <string name="app_name">Umora</string>
3
+</resources>

+ 9 - 0
android/app/src/main/res/values/styles.xml

@@ -0,0 +1,9 @@
1
+<resources>
2
+
3
+    <!-- Base application theme. -->
4
+    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
5
+        <!-- Customize your theme here. -->
6
+        <item name="android:textColor">#000000</item>
7
+    </style>
8
+
9
+</resources>

+ 39 - 0
android/build.gradle

@@ -0,0 +1,39 @@
1
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
2
+
3
+buildscript {
4
+    ext {
5
+        buildToolsVersion = "29.0.3"
6
+        minSdkVersion = 26
7
+        compileSdkVersion = 29
8
+        targetSdkVersion = 29
9
+        ndkVersion = "20.1.5948944"
10
+    }
11
+    repositories {
12
+        google()
13
+        jcenter()
14
+    }
15
+    dependencies {
16
+        classpath("com.android.tools.build:gradle:4.1.0")
17
+        // NOTE: Do not place your application dependencies here; they belong
18
+        // in the individual module build.gradle files
19
+        classpath 'com.google.gms:google-services:4.3.10'
20
+    }
21
+}
22
+
23
+allprojects {
24
+    repositories {
25
+        mavenLocal()
26
+        maven {
27
+            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
28
+            url("$rootDir/../node_modules/react-native/android")
29
+        }
30
+        maven {
31
+            // Android JSC is installed from npm
32
+            url("$rootDir/../node_modules/jsc-android/dist")
33
+        }
34
+
35
+        google()
36
+        jcenter()
37
+        maven { url 'https://www.jitpack.io' }
38
+    }
39
+}

+ 33 - 0
android/gradle.properties

@@ -0,0 +1,33 @@
1
+# Project-wide Gradle settings.
2
+
3
+# IDE (e.g. Android Studio) users:
4
+# Gradle settings configured through the IDE *will override*
5
+# any settings specified in this file.
6
+
7
+# For more details on how to configure your build environment visit
8
+# http://www.gradle.org/docs/current/userguide/build_environment.html
9
+
10
+# Specifies the JVM arguments used for the daemon process.
11
+# The setting is particularly useful for tweaking memory settings.
12
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
13
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14
+
15
+# When configured, Gradle will run in incubating parallel mode.
16
+# This option should only be used with decoupled projects. More details, visit
17
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18
+# org.gradle.parallel=true
19
+
20
+# AndroidX package structure to make it clearer which packages are bundled with the
21
+# Android operating system, and which are packaged with your app's APK
22
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
23
+android.useAndroidX=true
24
+# Automatically convert third-party libraries to use AndroidX
25
+android.enableJetifier=true
26
+
27
+# Version of flipper SDK to use with React Native
28
+FLIPPER_VERSION=0.75.1
29
+
30
+MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
31
+MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
32
+MYAPP_UPLOAD_STORE_PASSWORD=123456
33
+MYAPP_UPLOAD_KEY_PASSWORD=123456

BIN
android/gradle/wrapper/gradle-wrapper.jar


+ 5 - 0
android/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,5 @@
1
+distributionBase=GRADLE_USER_HOME
2
+distributionPath=wrapper/dists
3
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
4
+zipStoreBase=GRADLE_USER_HOME
5
+zipStorePath=wrapper/dists

+ 185 - 0
android/gradlew

@@ -0,0 +1,185 @@
1
+#!/usr/bin/env sh
2
+
3
+#
4
+# Copyright 2015 the original author or authors.
5
+#
6
+# Licensed under the Apache License, Version 2.0 (the "License");
7
+# you may not use this file except in compliance with the License.
8
+# You may obtain a copy of the License at
9
+#
10
+#      https://www.apache.org/licenses/LICENSE-2.0
11
+#
12
+# Unless required by applicable law or agreed to in writing, software
13
+# distributed under the License is distributed on an "AS IS" BASIS,
14
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+# See the License for the specific language governing permissions and
16
+# limitations under the License.
17
+#
18
+
19
+##############################################################################
20
+##
21
+##  Gradle start up script for UN*X
22
+##
23
+##############################################################################
24
+
25
+# Attempt to set APP_HOME
26
+# Resolve links: $0 may be a link
27
+PRG="$0"
28
+# Need this for relative symlinks.
29
+while [ -h "$PRG" ] ; do
30
+    ls=`ls -ld "$PRG"`
31
+    link=`expr "$ls" : '.*-> \(.*\)$'`
32
+    if expr "$link" : '/.*' > /dev/null; then
33
+        PRG="$link"
34
+    else
35
+        PRG=`dirname "$PRG"`"/$link"
36
+    fi
37
+done
38
+SAVED="`pwd`"
39
+cd "`dirname \"$PRG\"`/" >/dev/null
40
+APP_HOME="`pwd -P`"
41
+cd "$SAVED" >/dev/null
42
+
43
+APP_NAME="Gradle"
44
+APP_BASE_NAME=`basename "$0"`
45
+
46
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48
+
49
+# Use the maximum available, or set MAX_FD != -1 to use that value.
50
+MAX_FD="maximum"
51
+
52
+warn () {
53
+    echo "$*"
54
+}
55
+
56
+die () {
57
+    echo
58
+    echo "$*"
59
+    echo
60
+    exit 1
61
+}
62
+
63
+# OS specific support (must be 'true' or 'false').
64
+cygwin=false
65
+msys=false
66
+darwin=false
67
+nonstop=false
68
+case "`uname`" in
69
+  CYGWIN* )
70
+    cygwin=true
71
+    ;;
72
+  Darwin* )
73
+    darwin=true
74
+    ;;
75
+  MINGW* )
76
+    msys=true
77
+    ;;
78
+  NONSTOP* )
79
+    nonstop=true
80
+    ;;
81
+esac
82
+
83
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84
+
85
+
86
+# Determine the Java command to use to start the JVM.
87
+if [ -n "$JAVA_HOME" ] ; then
88
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89
+        # IBM's JDK on AIX uses strange locations for the executables
90
+        JAVACMD="$JAVA_HOME/jre/sh/java"
91
+    else
92
+        JAVACMD="$JAVA_HOME/bin/java"
93
+    fi
94
+    if [ ! -x "$JAVACMD" ] ; then
95
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96
+
97
+Please set the JAVA_HOME variable in your environment to match the
98
+location of your Java installation."
99
+    fi
100
+else
101
+    JAVACMD="java"
102
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103
+
104
+Please set the JAVA_HOME variable in your environment to match the
105
+location of your Java installation."
106
+fi
107
+
108
+# Increase the maximum file descriptors if we can.
109
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110
+    MAX_FD_LIMIT=`ulimit -H -n`
111
+    if [ $? -eq 0 ] ; then
112
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113
+            MAX_FD="$MAX_FD_LIMIT"
114
+        fi
115
+        ulimit -n $MAX_FD
116
+        if [ $? -ne 0 ] ; then
117
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
118
+        fi
119
+    else
120
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121
+    fi
122
+fi
123
+
124
+# For Darwin, add options to specify how the application appears in the dock
125
+if $darwin; then
126
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127
+fi
128
+
129
+# For Cygwin or MSYS, switch paths to Windows format before running java
130
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133
+
134
+    JAVACMD=`cygpath --unix "$JAVACMD"`
135
+
136
+    # We build the pattern for arguments to be converted via cygpath
137
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138
+    SEP=""
139
+    for dir in $ROOTDIRSRAW ; do
140
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
141
+        SEP="|"
142
+    done
143
+    OURCYGPATTERN="(^($ROOTDIRS))"
144
+    # Add a user-defined pattern to the cygpath arguments
145
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147
+    fi
148
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
149
+    i=0
150
+    for arg in "$@" ; do
151
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
153
+
154
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
155
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156
+        else
157
+            eval `echo args$i`="\"$arg\""
158
+        fi
159
+        i=`expr $i + 1`
160
+    done
161
+    case $i in
162
+        0) set -- ;;
163
+        1) set -- "$args0" ;;
164
+        2) set -- "$args0" "$args1" ;;
165
+        3) set -- "$args0" "$args1" "$args2" ;;
166
+        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167
+        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168
+        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169
+        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170
+        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171
+        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172
+    esac
173
+fi
174
+
175
+# Escape application args
176
+save () {
177
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178
+    echo " "
179
+}
180
+APP_ARGS=`save "$@"`
181
+
182
+# Collect all arguments for the java command, following the shell quoting and substitution rules
183
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184
+
185
+exec "$JAVACMD" "$@"

+ 89 - 0
android/gradlew.bat

@@ -0,0 +1,89 @@
1
+@rem
2
+@rem Copyright 2015 the original author or authors.
3
+@rem
4
+@rem Licensed under the Apache License, Version 2.0 (the "License");
5
+@rem you may not use this file except in compliance with the License.
6
+@rem You may obtain a copy of the License at
7
+@rem
8
+@rem      https://www.apache.org/licenses/LICENSE-2.0
9
+@rem
10
+@rem Unless required by applicable law or agreed to in writing, software
11
+@rem distributed under the License is distributed on an "AS IS" BASIS,
12
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+@rem See the License for the specific language governing permissions and
14
+@rem limitations under the License.
15
+@rem
16
+
17
+@if "%DEBUG%" == "" @echo off
18
+@rem ##########################################################################
19
+@rem
20
+@rem  Gradle startup script for Windows
21
+@rem
22
+@rem ##########################################################################
23
+
24
+@rem Set local scope for the variables with windows NT shell
25
+if "%OS%"=="Windows_NT" setlocal
26
+
27
+set DIRNAME=%~dp0
28
+if "%DIRNAME%" == "" set DIRNAME=.
29
+set APP_BASE_NAME=%~n0
30
+set APP_HOME=%DIRNAME%
31
+
32
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
33
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34
+
35
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37
+
38
+@rem Find java.exe
39
+if defined JAVA_HOME goto findJavaFromJavaHome
40
+
41
+set JAVA_EXE=java.exe
42
+%JAVA_EXE% -version >NUL 2>&1
43
+if "%ERRORLEVEL%" == "0" goto execute
44
+
45
+echo.
46
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47
+echo.
48
+echo Please set the JAVA_HOME variable in your environment to match the
49
+echo location of your Java installation.
50
+
51
+goto fail
52
+
53
+:findJavaFromJavaHome
54
+set JAVA_HOME=%JAVA_HOME:"=%
55
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56
+
57
+if exist "%JAVA_EXE%" goto execute
58
+
59
+echo.
60
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61
+echo.
62
+echo Please set the JAVA_HOME variable in your environment to match the
63
+echo location of your Java installation.
64
+
65
+goto fail
66
+
67
+:execute
68
+@rem Setup the command line
69
+
70
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71
+
72
+
73
+@rem Execute Gradle
74
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
75
+
76
+:end
77
+@rem End local scope for the variables with windows NT shell
78
+if "%ERRORLEVEL%"=="0" goto mainEnd
79
+
80
+:fail
81
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
82
+rem the _cmd.exe /c_ return code!
83
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84
+exit /b 1
85
+
86
+:mainEnd
87
+if "%OS%"=="Windows_NT" endlocal
88
+
89
+:omega

+ 11 - 0
android/settings.gradle

@@ -0,0 +1,11 @@
1
+rootProject.name = 'Umora'
2
+include ':react-native-notification-sounds'
3
+project(':react-native-notification-sounds').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notification-sounds/android')
4
+include ':react-native-notification-sounds'
5
+project(':react-native-notification-sounds').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notification-sounds/android')
6
+include ':react-native-mmkv-storage'
7
+project(':react-native-mmkv-storage').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-mmkv-storage/android')
8
+include ':react-native-share'
9
+project(':react-native-share').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-share/android')
10
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
11
+include ':app'

+ 4 - 0
app.json

@@ -0,0 +1,4 @@
1
+{
2
+  "name": "Umora",
3
+  "displayName": "Umora"
4
+}

BIN
assets/icons/bottomTab/tab_1_icon.png


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/tab_2_icon.png


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/tab_3_icon.png


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/tab_4_icon.png


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/bottomTab/[email protected]


BIN
assets/icons/common/back_arrow_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/camera_pause_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/change_camera_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/clock_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/dollar_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/download_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/flash_icon.png


BIN
assets/icons/common/left_arrow_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/pause_btn_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/person_32x32_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/play_btn_icon.png


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/[email protected]


BIN
assets/icons/common/plus_icon.png


+ 0 - 0
assets/icons/common/[email protected]


Some files were not shown because too many files changed in this diff