diff --git a/MobileApp/App.js b/MobileApp/App.js
deleted file mode 100755
index 8b5c614e..00000000
--- a/MobileApp/App.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * Sample React Native App
- * https://github.com/facebook/react-native
- *
- * @format
- * @flow
- */
-import React from 'react';
-import {View} from 'react-native';
-import {createAppContainer, createSwitchNavigator} from 'react-navigation';
-import {createStackNavigator} from 'react-navigation-stack';
-import {createMaterialBottomTabNavigator} from 'react-navigation-material-bottom-tabs';
-// import { createBottomTabNavigator } from "react-navigation-tabs";
-// import { createDrawerNavigator } from "react-navigation-drawer";
-
-//Screens
-import LoginScreen from './src/screens/LoginScreen/LoginScreen';
-import CameraViewScreen from './src/screens/CameraViewScreen/CameraViewScreen';
-import LandingScreen from './src/screens/LandingScreen/LandingScreen';
-import FormScreen from './src/screens/FormScreen/FormScreen';
-import FeedScreen from './src/screens/FeedScreen/FeedScreen';
-import ProfileScreen from './src/screens/ProfileScreen/ProfileScreen';
-import SearchScreen from './src/screens/SearchScreen/SearchScreen';
-import DiscoverScreen from './src/screens/DiscoverScreen/DiscoverScreen';
-import ShowPhotoScreen from './src/screens/ShowPhotoScreen/ShowPhotoScreen';
-import ShowDetailedPhotoScreen from './src/screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen';
-import showLocationScreen from './src/screens/ShowLocationScreen/ShowLocationScreen';
-import AboutScreen from './src/screens/AboutScreen/AboutScreen';
-import EmailAuthSignInScreen from './src/screens/EmailAuthScreen/EmailAuthSignInScreen';
-import EmailAuthSignUpScreen from './src/screens/EmailAuthScreen/EmailAuthSignUpScreen';
-
-import {Avatar} from 'react-native-paper';
-
-//SignIn stack
-const AuthStack = createStackNavigator(
- {
- SignIn: LoginScreen,
- Email: EmailAuthSignInScreen,
- EmailSignUp: EmailAuthSignUpScreen,
- },
- {
- mode: 'modal',
- headerMode: 'none',
- },
-);
-
-//Home stack
-const FeedStack = createStackNavigator({
- FeedScreen: FeedScreen,
- showDetailedPhoto: ShowDetailedPhotoScreen,
- showLocationScreen: showLocationScreen,
-});
-
-const CameraStack = createStackNavigator({
- CameraViewScreen: CameraViewScreen,
- FormScreenStack: FormScreen,
- showPhoto: ShowPhotoScreen,
-});
-
-const DiscoverStack = createStackNavigator({
- Discover: DiscoverScreen,
- showDetailedPhoto: ShowDetailedPhotoScreen,
- showLocationScreen: showLocationScreen,
-});
-
-const SearchStack = createStackNavigator({
- Search: SearchScreen,
- showDetailedPhoto: ShowDetailedPhotoScreen,
- showLocationScreen: showLocationScreen,
-});
-
-const ProfileStack = createStackNavigator({
- ProfileScreen: ProfileScreen,
- showDetailedPhoto: ShowDetailedPhotoScreen,
- showLocationScreen: showLocationScreen,
- AboutScreen: AboutScreen,
-});
-
-//Bottom navigator
-const MainTabs = createMaterialBottomTabNavigator({
- FeedStack: {
- screen: FeedStack,
- navigationOptions: {
- tabBarLabel: [],
- tabBarIcon: ({tintColor}) => (
-
-
-
- ),
- },
- },
- SearchStack: {
- screen: SearchStack,
- navigationOptions: {
- tabBarLabel: [],
- tabBarIcon: ({tintColor}) => (
-
-
-
- ),
- },
- },
- PhotoLandingScreen: {
- screen: CameraStack,
- navigationOptions: {
- tabBarLabel: [],
- tabBarIcon: ({tintColor}) => (
-
-
-
- ),
- },
- },
- Discover: {
- screen: DiscoverStack,
- navigationOptions: {
- tabBarLabel: [],
- tabBarIcon: ({tintColor}) => (
-
-
-
- ),
- },
- },
- Profile: {
- screen: ProfileStack,
- navigationOptions: {
- tabBarLabel: [],
- tabBarIcon: ({tintColor}) => (
-
-
-
- ),
- },
- },
-});
-
-const AppModalStack = createStackNavigator(
- {
- App: MainTabs,
- },
- {
- mode: 'modal',
- headerMode: 'none',
- },
-);
-
-const App = createSwitchNavigator({
- Loading: {
- screen: LandingScreen,
- },
- Auth: {
- screen: AuthStack,
- },
- App: {
- screen: AppModalStack,
- },
-});
-
-export default createAppContainer(App);
diff --git a/MobileApp/Gemfile b/MobileApp/Gemfile
new file mode 100644
index 00000000..5efda89f
--- /dev/null
+++ b/MobileApp/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
+ruby '2.7.5'
+
+gem 'cocoapods', '~> 1.11', '>= 1.11.2'
diff --git a/MobileApp/LICENSE b/MobileApp/LICENSE
deleted file mode 100644
index a45bbc59..00000000
--- a/MobileApp/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2019 SCoRe Lab
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/MobileApp/README.md b/MobileApp/README.md
deleted file mode 100644
index 1fdaf369..00000000
--- a/MobileApp/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# elly
-Elly app
diff --git a/MobileApp/__tests__/App-test.js b/MobileApp/__tests__/App-test.js
old mode 100755
new mode 100644
diff --git a/MobileApp/android/app/BUCK b/MobileApp/android/app/_BUCK
old mode 100755
new mode 100644
similarity index 100%
rename from MobileApp/android/app/BUCK
rename to MobileApp/android/app/_BUCK
diff --git a/MobileApp/android/app/build.gradle b/MobileApp/android/app/build.gradle
old mode 100755
new mode 100644
index 73c99b60..e95f83a1
--- a/MobileApp/android/app/build.gradle
+++ b/MobileApp/android/app/build.gradle
@@ -1,6 +1,7 @@
apply plugin: "com.android.application"
-apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
+
import com.android.build.OutputFile
+import org.apache.tools.ant.taskdefs.condition.Os
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
@@ -15,10 +16,12 @@ import com.android.build.OutputFile
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
- * // the entry file for bundle generation
+ * // the entry file for bundle generation. If none specified and
+ * // "index.android.js" exists, it will be used. Otherwise "index.js" is
+ * // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
- * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
+ * // https://reactnative.dev/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
@@ -76,8 +79,7 @@ import com.android.build.OutputFile
*/
project.ext.react = [
- entryFile: "index.js",
- enableHermes: false, // clean and rebuild if changing
+ enableHermes: true, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
@@ -113,38 +115,102 @@ def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
- * This should be set on project.ext.react and mirrored here. If it is not set
+ * This should be set on project.ext.react and that value will be read here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
+/**
+ * Architectures to build native code for.
+ */
+def reactNativeArchitectures() {
+ def value = project.getProperties().get("reactNativeArchitectures")
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
+}
+
android {
- compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
+ ndkVersion rootProject.ext.ndkVersion
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
+ compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "com.elly"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 6
- multiDexEnabled true
- versionName "1.0"
- missingDimensionStrategy 'react-native-camera', 'general'
+ versionCode 8
+ versionName "1.0.1"
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
+ missingDimensionStrategy 'react-native-camera', 'general' // <--- insert this line
manifestPlaceholders = [GoogleMapAPIKey:"AIzaSyAzZ0St9RVLUhRW9m6I9A-ULfWmjbycX5g" ]
resConfigs "en"
+
+ if (isNewArchitectureEnabled()) {
+ // We configure the CMake build only if you decide to opt-in for the New Architecture.
+ externalNativeBuild {
+ cmake {
+ arguments "-DPROJECT_BUILD_DIR=$buildDir",
+ "-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
+ "-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
+ "-DNODE_MODULES_DIR=$rootDir/../node_modules",
+ "-DANDROID_STL=c++_shared"
+ }
+ }
+ if (!enableSeparateBuildPerCPUArchitecture) {
+ ndk {
+ abiFilters (*reactNativeArchitectures())
+ }
+ }
+ }
+ }
+
+ if (isNewArchitectureEnabled()) {
+ // We configure the NDK build only if you decide to opt-in for the New Architecture.
+ externalNativeBuild {
+ cmake {
+ path "$projectDir/src/main/jni/CMakeLists.txt"
+ }
+ }
+ def reactAndroidProjectDir = project(':ReactAndroid').projectDir
+ def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
+ dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
+ from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
+ into("$buildDir/react-ndk/exported")
+ }
+ def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
+ dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
+ from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
+ into("$buildDir/react-ndk/exported")
+ }
+ afterEvaluate {
+ // If you wish to add a custom TurboModule or component locally,
+ // you should uncomment this line.
+ // preBuild.dependsOn("generateCodegenArtifactsFromSchema")
+ preDebugBuild.dependsOn(packageReactNdkDebugLibs)
+ preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
+
+ // Due to a bug inside AGP, we have to explicitly set a dependency
+ // between configureCMakeDebug* tasks and the preBuild tasks.
+ // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
+ configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
+ configureCMakeDebug.dependsOn(preDebugBuild)
+ reactNativeArchitectures().each { architecture ->
+ tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
+ dependsOn("preDebugBuild")
+ }
+ tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
+ dependsOn("preReleaseBuild")
+ }
+ }
+ }
}
+
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
- include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
+ include (*reactNativeArchitectures())
}
}
signingConfigs {
@@ -169,24 +235,26 @@ android {
}
release {
// Caution! In production, you need to generate your own keystore file.
- // see https://facebook.github.io/react-native/docs/signed-apk-android.
- // signingConfig signingConfigs.debug
+ // see https://reactnative.dev/docs/signed-apk-android.
multiDexKeepFile file('multidex-config.txt')
signingConfig signingConfigs.release
+ // signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
+
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
+ // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
- versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
+ defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}
@@ -194,49 +262,70 @@ android {
}
dependencies {
- implementation project(':react-native-image-resizer')
- implementation project(':react-native-fbsdk')
- implementation project(':react-native-maps')
- implementation project(':@react-native-firebase_storage')
- implementation project(':@react-native-firebase_database')
- implementation fileTree(dir: "libs", include: ["*.jar"])
- implementation "com.android.support:appcompat-v7:23.0.1"
- implementation project(':@react-native-community_google-signin')
- implementation project(':@react-native-firebase_app')
- implementation project(':@react-native-firebase_auth')
- implementation project(':@react-native-community_cameraroll')
- implementation project(':react-native-camera')
- implementation project(':react-native-screens')
- implementation project(':react-native-reanimated')
- implementation project(':react-native-gesture-handler')
- implementation project(':react-native-vector-icons')
implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation 'com.facebook.android:facebook-android-sdk:latest.release'
+ implementation project(':react-native-splash-screen')
+
+ //noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
- implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
- implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
-
- // Firebase dependencies
- implementation "com.google.android.gms:play-services-base:16.1.0"
- implementation "com.google.firebase:firebase-core:16.0.9"
- implementation 'com.facebook.android:facebook-core:5.11.2'
- implementation 'com.android.support:multidex:1.0.3'
+ implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
+
+ debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.fbjni'
+ }
+
+ debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.flipper'
+ exclude group:'com.squareup.okhttp3', module:'okhttp'
+ }
+
+ debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.facebook.flipper'
+ }
if (enableHermes) {
- def hermesPath = "../../node_modules/hermes-engine/android/";
- debugImplementation files(hermesPath + "hermes-debug.aar")
- releaseImplementation files(hermesPath + "hermes-release.aar")
+ //noinspection GradleDynamicVersion
+ implementation("com.facebook.react:hermes-engine:+") { // From node_modules
+ exclude group:'com.facebook.fbjni'
+ }
} else {
implementation jscFlavor
}
}
+if (isNewArchitectureEnabled()) {
+ // If new architecture is enabled, we let you build RN from source
+ // Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
+ // This will be applied to all the imported transtitive dependency.
+ configurations.all {
+ resolutionStrategy.dependencySubstitution {
+ substitute(module("com.facebook.react:react-native"))
+ .using(project(":ReactAndroid"))
+ .because("On New Architecture we're building React Native from source")
+ substitute(module("com.facebook.react:hermes-engine"))
+ .using(project(":ReactAndroid:hermes-engine"))
+ .because("On New Architecture we're building Hermes from source")
+ }
+ }
+}
+
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
- from configurations.compile
+ from configurations.implementation
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
-apply plugin: 'com.google.gms.google-services' // <--- this should be the last line
\ No newline at end of file
+
+def isNewArchitectureEnabled() {
+ // To opt-in for the New Architecture, you can either:
+ // - Set `newArchEnabled` to true inside the `gradle.properties` file
+ // - Invoke gradle with `-newArchEnabled=true`
+ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
+ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
+}
+
+apply plugin: 'com.google.gms.google-services'
+apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
\ No newline at end of file
diff --git a/MobileApp/android/app/build_defs.bzl b/MobileApp/android/app/build_defs.bzl
old mode 100755
new mode 100644
diff --git a/MobileApp/android/app/gradle.properties b/MobileApp/android/app/gradle.properties
deleted file mode 100644
index 6ed8e363..00000000
--- a/MobileApp/android/app/gradle.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-android.useAndroidX=true
-android.enableJetifier=true
-facebookSdkVersion=5.11.0
-
-MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
-MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
-MYAPP_UPLOAD_STORE_PASSWORD=1995_Asitha
-MYAPP_UPLOAD_KEY_PASSWORD=1995_Asitha
\ No newline at end of file
diff --git a/MobileApp/android/app/multidex-config.txt b/MobileApp/android/app/multidex-config.txt
old mode 100644
new mode 100755
diff --git a/MobileApp/android/app/proguard-rules.pro b/MobileApp/android/app/proguard-rules.pro
old mode 100755
new mode 100644
diff --git a/MobileApp/android/app/samplegradle.properties b/MobileApp/android/app/samplegradle.properties
deleted file mode 100644
index 8abd206d..00000000
--- a/MobileApp/android/app/samplegradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-android.useAndroidX=true
-android.enableJetifier=true
-facebookSdkVersion=5.11.0
\ No newline at end of file
diff --git a/MobileApp/android/app/src/debug/AndroidManifest.xml b/MobileApp/android/app/src/debug/AndroidManifest.xml
old mode 100755
new mode 100644
index fa26aa56..4b185bc1
--- a/MobileApp/android/app/src/debug/AndroidManifest.xml
+++ b/MobileApp/android/app/src/debug/AndroidManifest.xml
@@ -4,5 +4,10 @@
-
+
+
+
diff --git a/MobileApp/android/app/src/debug/java/com/elewatch/ReactNativeFlipper.java b/MobileApp/android/app/src/debug/java/com/elewatch/ReactNativeFlipper.java
new file mode 100644
index 00000000..ba77045b
--- /dev/null
+++ b/MobileApp/android/app/src/debug/java/com/elewatch/ReactNativeFlipper.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ *
This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.elly;
+
+import android.content.Context;
+import com.facebook.flipper.android.AndroidFlipperClient;
+import com.facebook.flipper.android.utils.FlipperUtils;
+import com.facebook.flipper.core.FlipperClient;
+import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
+import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
+import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
+import com.facebook.flipper.plugins.inspector.DescriptorMapping;
+import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
+import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
+import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
+import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
+import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceEventListener;
+import com.facebook.react.ReactInstanceManager;
+import com.facebook.react.bridge.ReactContext;
+import com.facebook.react.modules.network.NetworkingModule;
+import okhttp3.OkHttpClient;
+
+public class ReactNativeFlipper {
+ public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+ if (FlipperUtils.shouldEnableFlipper(context)) {
+ final FlipperClient client = AndroidFlipperClient.getInstance(context);
+
+ client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
+ client.addPlugin(new ReactFlipperPlugin());
+ client.addPlugin(new DatabasesFlipperPlugin(context));
+ client.addPlugin(new SharedPreferencesFlipperPlugin(context));
+ client.addPlugin(CrashReporterPlugin.getInstance());
+
+ NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
+ NetworkingModule.setCustomClientBuilder(
+ new NetworkingModule.CustomClientBuilder() {
+ @Override
+ public void apply(OkHttpClient.Builder builder) {
+ builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
+ }
+ });
+ client.addPlugin(networkFlipperPlugin);
+ client.start();
+
+ // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
+ // Hence we run if after all native modules have been initialized
+ ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
+ if (reactContext == null) {
+ reactInstanceManager.addReactInstanceEventListener(
+ new ReactInstanceEventListener() {
+ @Override
+ public void onReactContextInitialized(ReactContext reactContext) {
+ reactInstanceManager.removeReactInstanceEventListener(this);
+ reactContext.runOnNativeModulesQueueThread(
+ new Runnable() {
+ @Override
+ public void run() {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ });
+ }
+ });
+ } else {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ }
+ }
+}
diff --git a/MobileApp/android/app/src/main/AndroidManifest.xml b/MobileApp/android/app/src/main/AndroidManifest.xml
old mode 100755
new mode 100644
index d4997621..163492db
--- a/MobileApp/android/app/src/main/AndroidManifest.xml
+++ b/MobileApp/android/app/src/main/AndroidManifest.xml
@@ -1,38 +1,40 @@
-
+
+
+
+
+
-
+
+
+
+
+
+ android:exported="true">
-
-
diff --git a/MobileApp/android/app/src/main/assets/fonts/AntDesign.ttf b/MobileApp/android/app/src/main/assets/fonts/AntDesign.ttf
deleted file mode 100644
index 2abf0354..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/AntDesign.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Entypo.ttf b/MobileApp/android/app/src/main/assets/fonts/Entypo.ttf
deleted file mode 100644
index 1c8f5e91..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Entypo.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/EvilIcons.ttf b/MobileApp/android/app/src/main/assets/fonts/EvilIcons.ttf
deleted file mode 100644
index 6868f7bb..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/EvilIcons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Feather.ttf b/MobileApp/android/app/src/main/assets/fonts/Feather.ttf
deleted file mode 100644
index 852c7135..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Feather.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/FontAwesome.ttf b/MobileApp/android/app/src/main/assets/fonts/FontAwesome.ttf
deleted file mode 100644
index 35acda2f..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/FontAwesome.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf b/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
deleted file mode 100644
index 5f72e912..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf b/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
deleted file mode 100644
index a309313d..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf b/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
deleted file mode 100644
index 7ece3282..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Fontisto.ttf b/MobileApp/android/app/src/main/assets/fonts/Fontisto.ttf
deleted file mode 100755
index 96e2e81a..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Fontisto.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Foundation.ttf b/MobileApp/android/app/src/main/assets/fonts/Foundation.ttf
deleted file mode 100644
index 6cce217d..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Foundation.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Ionicons.ttf b/MobileApp/android/app/src/main/assets/fonts/Ionicons.ttf
deleted file mode 100644
index 67bd8420..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Ionicons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf b/MobileApp/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
deleted file mode 100644
index 9cc8db16..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/MaterialIcons.ttf b/MobileApp/android/app/src/main/assets/fonts/MaterialIcons.ttf
deleted file mode 100644
index 7015564a..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/MaterialIcons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Octicons.ttf b/MobileApp/android/app/src/main/assets/fonts/Octicons.ttf
deleted file mode 100644
index ceac75d7..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Octicons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Bold.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Bold.otf
deleted file mode 100644
index 445ea06f..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Bold.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Light.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Light.otf
deleted file mode 100644
index 82fa9ff4..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Light.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Thin.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Thin.otf
deleted file mode 100644
index d0aac914..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Alt Thin.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Black.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Black.otf
deleted file mode 100644
index 2dca4941..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Black.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Bold.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Bold.otf
deleted file mode 100644
index 1ea77534..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Bold.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Extrabold.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Extrabold.otf
deleted file mode 100644
index 9f6755f4..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Extrabold.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Thin.otf b/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Thin.otf
deleted file mode 100644
index 87218e51..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Proxima Nova Thin.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/ProximaNova-Regular.otf b/MobileApp/android/app/src/main/assets/fonts/ProximaNova-Regular.otf
deleted file mode 100644
index 018b6f83..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/ProximaNova-Regular.otf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/SimpleLineIcons.ttf b/MobileApp/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
deleted file mode 100644
index 6ecb6868..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/SimpleLineIcons.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/assets/fonts/Zocial.ttf b/MobileApp/android/app/src/main/assets/fonts/Zocial.ttf
deleted file mode 100644
index e4ae46c6..00000000
Binary files a/MobileApp/android/app/src/main/assets/fonts/Zocial.ttf and /dev/null differ
diff --git a/MobileApp/android/app/src/main/java/com/elewatch/MainActivity.java b/MobileApp/android/app/src/main/java/com/elewatch/MainActivity.java
new file mode 100644
index 00000000..5d0161e0
--- /dev/null
+++ b/MobileApp/android/app/src/main/java/com/elewatch/MainActivity.java
@@ -0,0 +1,56 @@
+package com.elly;
+
+import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.ReactRootView;
+
+import android.os.Bundle; // here
+import org.devio.rn.splashscreen.SplashScreen; // here
+
+public class MainActivity extends ReactActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ SplashScreen.show(this); // here
+ super.onCreate(savedInstanceState);
+ }
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "elly";
+ }
+
+ /**
+ * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and
+ * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer
+ * (Paper).
+ */
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new MainActivityDelegate(this, getMainComponentName());
+ }
+
+ public static class MainActivityDelegate extends ReactActivityDelegate {
+ public MainActivityDelegate(ReactActivity activity, String mainComponentName) {
+ super(activity, mainComponentName);
+ }
+
+ @Override
+ protected ReactRootView createRootView() {
+ ReactRootView reactRootView = new ReactRootView(getContext());
+ // If you opted-in for the New Architecture, we enable the Fabric Renderer.
+ reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED);
+ return reactRootView;
+ }
+
+ @Override
+ protected boolean isConcurrentRootEnabled() {
+ // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18).
+ // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html
+ return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
+ }
+
+ }
+}
diff --git a/MobileApp/android/app/src/main/java/com/elly/MainApplication.java b/MobileApp/android/app/src/main/java/com/elewatch/MainApplication.java
old mode 100755
new mode 100644
similarity index 52%
rename from MobileApp/android/app/src/main/java/com/elly/MainApplication.java
rename to MobileApp/android/app/src/main/java/com/elewatch/MainApplication.java
index 0c4b0c68..dbe9a4a5
--- a/MobileApp/android/app/src/main/java/com/elly/MainApplication.java
+++ b/MobileApp/android/app/src/main/java/com/elewatch/MainApplication.java
@@ -4,26 +4,18 @@
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
-import fr.bamlab.rnimageresizer.ImageResizerPackage;
-import com.facebook.reactnative.androidsdk.FBSDKPackage;
-import com.airbnb.android.react.maps.MapsPackage;
-import io.invertase.firebase.storage.ReactNativeFirebaseStoragePackage;
-import io.invertase.firebase.database.ReactNativeFirebaseDatabasePackage;
-import co.apptailor.googlesignin.RNGoogleSigninPackage;
-import io.invertase.firebase.app.ReactNativeFirebaseAppPackage;
-import io.invertase.firebase.auth.ReactNativeFirebaseAuthPackage;
-import com.reactnativecommunity.cameraroll.CameraRollPackage;
-import org.reactnative.camera.RNCameraPackage;
-import com.swmansion.rnscreens.RNScreensPackage;
-import com.swmansion.reanimated.ReanimatedPackage;
-import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
-import com.oblador.vectoricons.VectorIconsPackage;
+import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
+import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
+import com.elly.newarchitecture.MainApplicationReactNativeHost;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
+// react-native-splash-screen >= 0.3.1
+import org.devio.rn.splashscreen.SplashScreenReactPackage;
+
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
@@ -37,19 +29,8 @@ public boolean getUseDeveloperSupport() {
protected List getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List packages = new PackageList(this).getPackages();
-
// Packages that cannot be autolinked yet can be added manually here, for example:
- //packages.add(new MainReactPackage(),
- // new ImageResizerPackage(),
- // new FBSDKPackage(),
- // new FBSDKPackage(),
- // new MapsPackage(),
- // new RNFetchBlobPackage(),
- // new RNFetchBlobPackage(),
- // new ReactNativeFirebaseStoragePackage(),
- // new RNFSPackage(),
- //new ReactNativeFirebaseDatabasePackage(), new RNGoogleSigninPackage());
-
+ // packages.add(new MyReactNativePackage());
return packages;
}
@@ -59,32 +40,46 @@ protected String getJSMainModuleName() {
}
};
+ private final ReactNativeHost mNewArchitectureNativeHost =
+ new MainApplicationReactNativeHost(this);
+
@Override
public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+ return mNewArchitectureNativeHost;
+ } else {
+ return mReactNativeHost;
+ }
}
@Override
public void onCreate() {
super.onCreate();
+ // If you opted-in for the New Architecture, we enable the TurboModule system
+ ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
SoLoader.init(this, /* native exopackage */ false);
- initializeFlipper(this); // Remove this line if you don't want Flipper enabled
+ initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
/**
- * Loads Flipper in React Native templates.
+ * Loads Flipper in React Native templates. Call this in the onCreate method with something like
+ * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
+ * @param reactInstanceManager
*/
- private static void initializeFlipper(Context context) {
+ private static void initializeFlipper(
+ Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
- Class> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
- aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
+ Class> aClass = Class.forName("com.elly.ReactNativeFlipper");
+ aClass
+ .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
+ .invoke(null, context, reactInstanceManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
diff --git a/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/MainApplicationReactNativeHost.java b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/MainApplicationReactNativeHost.java
new file mode 100644
index 00000000..f1946dd9
--- /dev/null
+++ b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/MainApplicationReactNativeHost.java
@@ -0,0 +1,116 @@
+package com.elly.newarchitecture;
+
+import android.app.Application;
+import androidx.annotation.NonNull;
+import com.facebook.react.PackageList;
+import com.facebook.react.ReactInstanceManager;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
+import com.facebook.react.bridge.JSIModulePackage;
+import com.facebook.react.bridge.JSIModuleProvider;
+import com.facebook.react.bridge.JSIModuleSpec;
+import com.facebook.react.bridge.JSIModuleType;
+import com.facebook.react.bridge.JavaScriptContextHolder;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.UIManager;
+import com.facebook.react.fabric.ComponentFactory;
+import com.facebook.react.fabric.CoreComponentsRegistry;
+import com.facebook.react.fabric.FabricJSIModuleProvider;
+import com.facebook.react.fabric.ReactNativeConfig;
+import com.facebook.react.uimanager.ViewManagerRegistry;
+import com.elly.BuildConfig;
+import com.elly.newarchitecture.components.MainComponentsRegistry;
+import com.elly.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both
+ * TurboModule delegates and the Fabric Renderer.
+ *
+ * Please note that this class is used ONLY if you opt-in for the New Architecture (see the
+ * `newArchEnabled` property). Is ignored otherwise.
+ */
+public class MainApplicationReactNativeHost extends ReactNativeHost {
+ public MainApplicationReactNativeHost(Application application) {
+ super(application);
+ }
+
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List getPackages() {
+ List packages = new PackageList(this).getPackages();
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // packages.add(new MyReactNativePackage());
+ // TurboModules must also be loaded here providing a valid TurboReactPackage implementation:
+ // packages.add(new TurboReactPackage() { ... });
+ // If you have custom Fabric Components, their ViewManagers should also be loaded here
+ // inside a ReactPackage.
+ return packages;
+ }
+
+ @Override
+ protected String getJSMainModuleName() {
+ return "index";
+ }
+
+ @NonNull
+ @Override
+ protected ReactPackageTurboModuleManagerDelegate.Builder
+ getReactPackageTurboModuleManagerDelegateBuilder() {
+ // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary
+ // for the new architecture and to use TurboModules correctly.
+ return new MainApplicationTurboModuleManagerDelegate.Builder();
+ }
+
+ @Override
+ protected JSIModulePackage getJSIModulePackage() {
+ return new JSIModulePackage() {
+ @Override
+ public List getJSIModules(
+ final ReactApplicationContext reactApplicationContext,
+ final JavaScriptContextHolder jsContext) {
+ final List specs = new ArrayList<>();
+
+ // Here we provide a new JSIModuleSpec that will be responsible of providing the
+ // custom Fabric Components.
+ specs.add(
+ new JSIModuleSpec() {
+ @Override
+ public JSIModuleType getJSIModuleType() {
+ return JSIModuleType.UIManager;
+ }
+
+ @Override
+ public JSIModuleProvider getJSIModuleProvider() {
+ final ComponentFactory componentFactory = new ComponentFactory();
+ CoreComponentsRegistry.register(componentFactory);
+
+ // Here we register a Components Registry.
+ // The one that is generated with the template contains no components
+ // and just provides you the one from React Native core.
+ MainComponentsRegistry.register(componentFactory);
+
+ final ReactInstanceManager reactInstanceManager = getReactInstanceManager();
+
+ ViewManagerRegistry viewManagerRegistry =
+ new ViewManagerRegistry(
+ reactInstanceManager.getOrCreateViewManagers(reactApplicationContext));
+
+ return new FabricJSIModuleProvider(
+ reactApplicationContext,
+ componentFactory,
+ ReactNativeConfig.DEFAULT_CONFIG,
+ viewManagerRegistry);
+ }
+ });
+ return specs;
+ }
+ };
+ }
+}
diff --git a/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/components/MainComponentsRegistry.java b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/components/MainComponentsRegistry.java
new file mode 100644
index 00000000..501294ff
--- /dev/null
+++ b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/components/MainComponentsRegistry.java
@@ -0,0 +1,36 @@
+package com.elly.newarchitecture.components;
+
+import com.facebook.jni.HybridData;
+import com.facebook.proguard.annotations.DoNotStrip;
+import com.facebook.react.fabric.ComponentFactory;
+import com.facebook.soloader.SoLoader;
+
+/**
+ * Class responsible to load the custom Fabric Components. This class has native methods and needs a
+ * corresponding C++ implementation/header file to work correctly (already placed inside the jni/
+ * folder for you).
+ *
+ * Please note that this class is used ONLY if you opt-in for the New Architecture (see the
+ * `newArchEnabled` property). Is ignored otherwise.
+ */
+@DoNotStrip
+public class MainComponentsRegistry {
+ static {
+ SoLoader.loadLibrary("fabricjni");
+ }
+
+ @DoNotStrip private final HybridData mHybridData;
+
+ @DoNotStrip
+ private native HybridData initHybrid(ComponentFactory componentFactory);
+
+ @DoNotStrip
+ private MainComponentsRegistry(ComponentFactory componentFactory) {
+ mHybridData = initHybrid(componentFactory);
+ }
+
+ @DoNotStrip
+ public static MainComponentsRegistry register(ComponentFactory componentFactory) {
+ return new MainComponentsRegistry(componentFactory);
+ }
+}
diff --git a/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
new file mode 100644
index 00000000..5572596e
--- /dev/null
+++ b/MobileApp/android/app/src/main/java/com/elewatch/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java
@@ -0,0 +1,48 @@
+package com.elly.newarchitecture.modules;
+
+import com.facebook.jni.HybridData;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.ReactPackageTurboModuleManagerDelegate;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.soloader.SoLoader;
+import java.util.List;
+
+/**
+ * Class responsible to load the TurboModules. This class has native methods and needs a
+ * corresponding C++ implementation/header file to work correctly (already placed inside the jni/
+ * folder for you).
+ *
+ *
Please note that this class is used ONLY if you opt-in for the New Architecture (see the
+ * `newArchEnabled` property). Is ignored otherwise.
+ */
+public class MainApplicationTurboModuleManagerDelegate
+ extends ReactPackageTurboModuleManagerDelegate {
+
+ private static volatile boolean sIsSoLibraryLoaded;
+
+ protected MainApplicationTurboModuleManagerDelegate(
+ ReactApplicationContext reactApplicationContext, List packages) {
+ super(reactApplicationContext, packages);
+ }
+
+ protected native HybridData initHybrid();
+
+ native boolean canCreateTurboModule(String moduleName);
+
+ public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder {
+ protected MainApplicationTurboModuleManagerDelegate build(
+ ReactApplicationContext context, List packages) {
+ return new MainApplicationTurboModuleManagerDelegate(context, packages);
+ }
+ }
+
+ @Override
+ protected synchronized void maybeLoadOtherSoLibraries() {
+ if (!sIsSoLibraryLoaded) {
+ // If you change the name of your application .so file in the Android.mk file,
+ // make sure you update the name here as well.
+ SoLoader.loadLibrary("elly_appmodules");
+ sIsSoLibraryLoaded = true;
+ }
+ }
+}
diff --git a/MobileApp/android/app/src/main/java/com/elly/MainActivity.java b/MobileApp/android/app/src/main/java/com/elly/MainActivity.java
deleted file mode 100755
index 2d464c91..00000000
--- a/MobileApp/android/app/src/main/java/com/elly/MainActivity.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.elly;
-
-import com.facebook.react.ReactActivity;
-import com.facebook.react.ReactActivityDelegate;
-import com.facebook.react.ReactRootView;
-import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
-
-public class MainActivity extends ReactActivity {
-
- /**
- * Returns the name of the main component registered from JavaScript. This is used to schedule
- * rendering of the component.
- */
- @Override
- protected String getMainComponentName() {
- return "Elly";
- }
-
- @Override
- protected ReactActivityDelegate createReactActivityDelegate() {
- return new ReactActivityDelegate(this, getMainComponentName()) {
- @Override
- protected ReactRootView createRootView() {
- return new RNGestureHandlerEnabledRootView(MainActivity.this);
- }
- };
- }
-}
diff --git a/MobileApp/android/app/src/main/jni/CMakeLists.txt b/MobileApp/android/app/src/main/jni/CMakeLists.txt
new file mode 100644
index 00000000..7cc9e7e5
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required(VERSION 3.13)
+
+# Define the library name here.
+project(elly_appmodules)
+
+# This file includes all the necessary to let you build your application with the New Architecture.
+include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake)
diff --git a/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.cpp
new file mode 100644
index 00000000..26162dd8
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.cpp
@@ -0,0 +1,32 @@
+#include "MainApplicationModuleProvider.h"
+
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string &moduleName,
+ const JavaTurboModule::InitParams ¶ms) {
+ // Here you can provide your own module provider for TurboModules coming from
+ // either your application or from external libraries. The approach to follow
+ // is similar to the following (for a library called `samplelibrary`:
+ //
+ // auto module = samplelibrary_ModuleProvider(moduleName, params);
+ // if (module != nullptr) {
+ // return module;
+ // }
+ // return rncore_ModuleProvider(moduleName, params);
+
+ // Module providers autolinked by RN CLI
+ auto rncli_module = rncli_ModuleProvider(moduleName, params);
+ if (rncli_module != nullptr) {
+ return rncli_module;
+ }
+
+ return rncore_ModuleProvider(moduleName, params);
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.h b/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.h
new file mode 100644
index 00000000..b38ccf53
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainApplicationModuleProvider.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include
+#include
+
+#include
+
+namespace facebook {
+namespace react {
+
+std::shared_ptr MainApplicationModuleProvider(
+ const std::string &moduleName,
+ const JavaTurboModule::InitParams ¶ms);
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
new file mode 100644
index 00000000..5fd688c5
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp
@@ -0,0 +1,45 @@
+#include "MainApplicationTurboModuleManagerDelegate.h"
+#include "MainApplicationModuleProvider.h"
+
+namespace facebook {
+namespace react {
+
+jni::local_ref
+MainApplicationTurboModuleManagerDelegate::initHybrid(
+ jni::alias_ref) {
+ return makeCxxInstance();
+}
+
+void MainApplicationTurboModuleManagerDelegate::registerNatives() {
+ registerHybrid({
+ makeNativeMethod(
+ "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
+ makeNativeMethod(
+ "canCreateTurboModule",
+ MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
+ });
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string &name,
+ const std::shared_ptr &jsInvoker) {
+ // Not implemented yet: provide pure-C++ NativeModules here.
+ return nullptr;
+}
+
+std::shared_ptr
+MainApplicationTurboModuleManagerDelegate::getTurboModule(
+ const std::string &name,
+ const JavaTurboModule::InitParams ¶ms) {
+ return MainApplicationModuleProvider(name, params);
+}
+
+bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
+ const std::string &name) {
+ return getTurboModule(name, nullptr) != nullptr ||
+ getTurboModule(name, {.moduleName = name}) != nullptr;
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
new file mode 100644
index 00000000..ccbeb455
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h
@@ -0,0 +1,38 @@
+#include
+#include
+
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+class MainApplicationTurboModuleManagerDelegate
+ : public jni::HybridClass<
+ MainApplicationTurboModuleManagerDelegate,
+ TurboModuleManagerDelegate> {
+ public:
+ // Adapt it to the package you used for your Java class.
+ static constexpr auto kJavaDescriptor =
+ "Lcom/elly/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
+
+ static jni::local_ref initHybrid(jni::alias_ref);
+
+ static void registerNatives();
+
+ std::shared_ptr getTurboModule(
+ const std::string &name,
+ const std::shared_ptr &jsInvoker) override;
+ std::shared_ptr getTurboModule(
+ const std::string &name,
+ const JavaTurboModule::InitParams ¶ms) override;
+
+ /**
+ * Test-only method. Allows user to verify whether a TurboModule can be
+ * created by instances of this class.
+ */
+ bool canCreateTurboModule(const std::string &name);
+};
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/MainComponentsRegistry.cpp b/MobileApp/android/app/src/main/jni/MainComponentsRegistry.cpp
new file mode 100644
index 00000000..54f598a4
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainComponentsRegistry.cpp
@@ -0,0 +1,65 @@
+#include "MainComponentsRegistry.h"
+
+#include
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
+
+std::shared_ptr
+MainComponentsRegistry::sharedProviderRegistry() {
+ auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
+
+ // Autolinked providers registered by RN CLI
+ rncli_registerProviders(providerRegistry);
+
+ // Custom Fabric Components go here. You can register custom
+ // components coming from your App or from 3rd party libraries here.
+ //
+ // providerRegistry->add(concreteComponentDescriptorProvider<
+ // AocViewerComponentDescriptor>());
+ return providerRegistry;
+}
+
+jni::local_ref
+MainComponentsRegistry::initHybrid(
+ jni::alias_ref,
+ ComponentFactory *delegate) {
+ auto instance = makeCxxInstance(delegate);
+
+ auto buildRegistryFunction =
+ [](EventDispatcher::Weak const &eventDispatcher,
+ ContextContainer::Shared const &contextContainer)
+ -> ComponentDescriptorRegistry::Shared {
+ auto registry = MainComponentsRegistry::sharedProviderRegistry()
+ ->createComponentDescriptorRegistry(
+ {eventDispatcher, contextContainer});
+
+ auto mutableRegistry =
+ std::const_pointer_cast(registry);
+
+ mutableRegistry->setFallbackComponentDescriptor(
+ std::make_shared(
+ ComponentDescriptorParameters{
+ eventDispatcher, contextContainer, nullptr}));
+
+ return registry;
+ };
+
+ delegate->buildRegistryFunction = buildRegistryFunction;
+ return instance;
+}
+
+void MainComponentsRegistry::registerNatives() {
+ registerHybrid({
+ makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
+ });
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/MainComponentsRegistry.h b/MobileApp/android/app/src/main/jni/MainComponentsRegistry.h
new file mode 100644
index 00000000..d0c2e178
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/MainComponentsRegistry.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+class MainComponentsRegistry
+ : public facebook::jni::HybridClass {
+ public:
+ // Adapt it to the package you used for your Java class.
+ constexpr static auto kJavaDescriptor =
+ "Lcom/elly/newarchitecture/components/MainComponentsRegistry;";
+
+ static void registerNatives();
+
+ MainComponentsRegistry(ComponentFactory *delegate);
+
+ private:
+ static std::shared_ptr
+ sharedProviderRegistry();
+
+ static jni::local_ref initHybrid(
+ jni::alias_ref,
+ ComponentFactory *delegate);
+};
+
+} // namespace react
+} // namespace facebook
diff --git a/MobileApp/android/app/src/main/jni/OnLoad.cpp b/MobileApp/android/app/src/main/jni/OnLoad.cpp
new file mode 100644
index 00000000..c569b6e8
--- /dev/null
+++ b/MobileApp/android/app/src/main/jni/OnLoad.cpp
@@ -0,0 +1,11 @@
+#include
+#include "MainApplicationTurboModuleManagerDelegate.h"
+#include "MainComponentsRegistry.h"
+
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
+ return facebook::jni::initialize(vm, [] {
+ facebook::react::MainApplicationTurboModuleManagerDelegate::
+ registerNatives();
+ facebook::react::MainComponentsRegistry::registerNatives();
+ });
+}
diff --git a/MobileApp/android/app/src/main/res/drawable/launch_screen.png b/MobileApp/android/app/src/main/res/drawable/launch_screen.png
new file mode 100644
index 00000000..22a37009
Binary files /dev/null and b/MobileApp/android/app/src/main/res/drawable/launch_screen.png differ
diff --git a/MobileApp/android/app/src/main/res/drawable/rn_edit_text_material.xml b/MobileApp/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 00000000..f35d9962
--- /dev/null
+++ b/MobileApp/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MobileApp/android/app/src/main/res/layout/launch_screen.xml b/MobileApp/android/app/src/main/res/layout/launch_screen.xml
new file mode 100644
index 00000000..7ec70ce1
--- /dev/null
+++ b/MobileApp/android/app/src/main/res/layout/launch_screen.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/MobileApp/android/app/src/main/res/values/colors.xml b/MobileApp/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..613805e9
--- /dev/null
+++ b/MobileApp/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #000000
+
\ No newline at end of file
diff --git a/MobileApp/android/app/src/main/res/values/strings.xml b/MobileApp/android/app/src/main/res/values/strings.xml
old mode 100755
new mode 100644
index 0fd5fe98..0e8d66bc
--- a/MobileApp/android/app/src/main/res/values/strings.xml
+++ b/MobileApp/android/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- Ele-Watch
+ Elewatch
515087955882398
- fb515087955882398
+ 56789
diff --git a/MobileApp/android/app/src/main/res/values/styles.xml b/MobileApp/android/app/src/main/res/values/styles.xml
old mode 100755
new mode 100644
index 62fe59fa..7ba83a2a
--- a/MobileApp/android/app/src/main/res/values/styles.xml
+++ b/MobileApp/android/app/src/main/res/values/styles.xml
@@ -1,9 +1,9 @@
-
diff --git a/MobileApp/android/build.gradle b/MobileApp/android/build.gradle
old mode 100755
new mode 100644
index 76e43f17..0ba12d35
--- a/MobileApp/android/build.gradle
+++ b/MobileApp/android/build.gradle
@@ -2,21 +2,29 @@
buildscript {
ext {
- buildToolsVersion = "28.0.3"
+ buildToolsVersion = "31.0.0"
minSdkVersion = 21
- compileSdkVersion = 28
- targetSdkVersion = 28
- supportLibVersion = "27.1.1"
- googlePlayServicesAuthVersion = "16.0.1"
+ compileSdkVersion = 31
+ targetSdkVersion = 31
+
+ if (System.properties['os.arch'] == "aarch64") {
+ // For M1 Users we need to use the NDK 24 which added support for aarch64
+ ndkVersion = "24.0.8215888"
+ } else {
+ // Otherwise we default to the side-by-side NDK version from AGP.
+ ndkVersion = "21.4.7075529"
+ }
}
repositories {
google()
- jcenter()
mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:3.4.2")
- classpath 'com.google.gms:google-services:4.2.0'
+ classpath("com.android.tools.build:gradle:7.2.1")
+ classpath("com.facebook.react:react-native-gradle-plugin")
+ classpath("de.undercouch:gradle-download-task:5.0.1")
+ classpath 'com.google.gms:google-services:4.3.14'
+
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
@@ -24,7 +32,6 @@ buildscript {
allprojects {
repositories {
- mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
@@ -33,9 +40,14 @@ allprojects {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
-
+ mavenCentral {
+ // We don't want to fetch react-native from Maven Central as there are
+ // older versions over there.
+ content {
+ excludeGroup "com.facebook.react"
+ }
+ }
google()
- jcenter()
- maven { url 'https://jitpack.io' }
+ maven { url 'https://www.jitpack.io' }
}
}
diff --git a/MobileApp/android/gradle/wrapper/gradle-wrapper.jar b/MobileApp/android/gradle/wrapper/gradle-wrapper.jar
old mode 100755
new mode 100644
index 5c2d1cf0..41d9927a
Binary files a/MobileApp/android/gradle/wrapper/gradle-wrapper.jar and b/MobileApp/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/MobileApp/android/gradle/wrapper/gradle-wrapper.properties b/MobileApp/android/gradle/wrapper/gradle-wrapper.properties
old mode 100755
new mode 100644
index e0c4de36..8fad3f5a
--- a/MobileApp/android/gradle/wrapper/gradle-wrapper.properties
+++ b/MobileApp/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/MobileApp/android/gradlew b/MobileApp/android/gradlew
index b0d6d0ab..1b6c7873 100755
--- a/MobileApp/android/gradlew
+++ b/MobileApp/android/gradlew
@@ -1,13 +1,13 @@
-#!/usr/bin/env sh
+#!/bin/sh
#
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,78 +17,113 @@
#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
# Attempt to set APP_HOME
+
# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
warn () {
echo "$*"
-}
+} >&2
die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
+ JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@@ -105,84 +140,95 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
fi
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
fi
- i=$((i+1))
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=$(save "$@")
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
exec "$JAVACMD" "$@"
diff --git a/MobileApp/android/gradlew.bat b/MobileApp/android/gradlew.bat
old mode 100755
new mode 100644
index 15e1ee37..ac1b06f9
--- a/MobileApp/android/gradlew.bat
+++ b/MobileApp/android/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/MobileApp/android/settings.gradle b/MobileApp/android/settings.gradle
old mode 100755
new mode 100644
index 88c1c77c..c8914c37
--- a/MobileApp/android/settings.gradle
+++ b/MobileApp/android/settings.gradle
@@ -1,33 +1,14 @@
-rootProject.name = 'Elly'
-include ':react-native-image-resizer'
-project(':react-native-image-resizer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-resizer/android')
-include ':react-native-fbsdk'
-project(':react-native-fbsdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fbsdk/android')
-include ':react-native-fbsdk'
-project(':react-native-fbsdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fbsdk/android')
-include ':react-native-maps'
-project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
-include ':@react-native-firebase_storage'
-project(':@react-native-firebase_storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/storage/android')
-include ':@react-native-firebase_database'
-project(':@react-native-firebase_database').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/database/android')
-include ':@react-native-community_google-signin'
-project(':@react-native-community_google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/google-signin/android')
-include ':@react-native-firebase_app'
-project(':@react-native-firebase_app').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/app/android')
-include ':@react-native-firebase_auth'
-project(':@react-native-firebase_auth').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/auth/android')
-include ':@react-native-community_cameraroll'
-project(':@react-native-community_cameraroll').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/cameraroll/android')
-include ':react-native-camera'
-project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
-include ':react-native-screens'
-project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screens/android')
-include ':react-native-reanimated'
-project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android')
-include ':react-native-gesture-handler'
-project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
-include ':react-native-vector-icons'
-project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
+rootProject.name = 'elly'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
+includeBuild('../node_modules/react-native-gradle-plugin')
+
+if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
+ include(":ReactAndroid")
+ project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
+ include(":ReactAndroid:hermes-engine")
+ project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine')
+}
+
+include ':react-native-splash-screen'
+project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/android')
\ No newline at end of file
diff --git a/MobileApp/app.json b/MobileApp/app.json
old mode 100755
new mode 100644
index cc97636a..d34bf0ec
--- a/MobileApp/app.json
+++ b/MobileApp/app.json
@@ -1,4 +1,4 @@
{
- "name": "Elly",
- "displayName": "Elly"
-}
\ No newline at end of file
+ "name": "elly",
+ "displayName": "elly"
+}
diff --git a/MobileApp/babel.config.js b/MobileApp/babel.config.js
old mode 100755
new mode 100644
diff --git a/MobileApp/fonts/Proxima Nova Alt Bold.otf b/MobileApp/fonts/Proxima Nova Alt Bold.otf
deleted file mode 100644
index 445ea06f..00000000
Binary files a/MobileApp/fonts/Proxima Nova Alt Bold.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Alt Light.otf b/MobileApp/fonts/Proxima Nova Alt Light.otf
deleted file mode 100644
index 82fa9ff4..00000000
Binary files a/MobileApp/fonts/Proxima Nova Alt Light.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Alt Thin.otf b/MobileApp/fonts/Proxima Nova Alt Thin.otf
deleted file mode 100644
index d0aac914..00000000
Binary files a/MobileApp/fonts/Proxima Nova Alt Thin.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Black.otf b/MobileApp/fonts/Proxima Nova Black.otf
deleted file mode 100644
index 2dca4941..00000000
Binary files a/MobileApp/fonts/Proxima Nova Black.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Bold.otf b/MobileApp/fonts/Proxima Nova Bold.otf
deleted file mode 100644
index 1ea77534..00000000
Binary files a/MobileApp/fonts/Proxima Nova Bold.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Extrabold.otf b/MobileApp/fonts/Proxima Nova Extrabold.otf
deleted file mode 100644
index 9f6755f4..00000000
Binary files a/MobileApp/fonts/Proxima Nova Extrabold.otf and /dev/null differ
diff --git a/MobileApp/fonts/Proxima Nova Thin.otf b/MobileApp/fonts/Proxima Nova Thin.otf
deleted file mode 100644
index 87218e51..00000000
Binary files a/MobileApp/fonts/Proxima Nova Thin.otf and /dev/null differ
diff --git a/MobileApp/fonts/ProximaNova-Regular.otf b/MobileApp/fonts/ProximaNova-Regular.otf
deleted file mode 100644
index 018b6f83..00000000
Binary files a/MobileApp/fonts/ProximaNova-Regular.otf and /dev/null differ
diff --git a/MobileApp/index.js b/MobileApp/index.js
old mode 100755
new mode 100644
index 2f86d061..80e77583
--- a/MobileApp/index.js
+++ b/MobileApp/index.js
@@ -3,7 +3,7 @@
*/
import * as React from 'react';
import {AppRegistry, StatusBar} from 'react-native';
-import App from './App';
+import App from './src/navigators/index';
import {
configureFonts,
DefaultTheme,
@@ -34,21 +34,21 @@ const fontConfig = {
const theme = {
...DefaultTheme,
- roundness: 15,
+ roundness: 0,
colors: {
...DefaultTheme.colors,
- primary: 'white',
- accent: 'black',
+ primary: '#EEF5DB',
+ accent: '#FE5F55',
},
- fonts: configureFonts(fontConfig),
+ // fonts: configureFonts(fontConfig),
};
export default function Main() {
return (
-
diff --git a/MobileApp/ios/.xcode.env b/MobileApp/ios/.xcode.env
new file mode 100644
index 00000000..3d5782c7
--- /dev/null
+++ b/MobileApp/ios/.xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/MobileApp/ios/Elly-tvOSTests/Info.plist b/MobileApp/ios/Elly-tvOSTests/Info.plist
deleted file mode 100755
index 886825cc..00000000
--- a/MobileApp/ios/Elly-tvOSTests/Info.plist
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
-
-
diff --git a/MobileApp/ios/Elly.xcodeproj/project.pbxproj b/MobileApp/ios/Elly.xcodeproj/project.pbxproj
deleted file mode 100755
index f9f27b52..00000000
--- a/MobileApp/ios/Elly.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,886 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-/* Begin PBXBuildFile section */
- 00E356F31AD99517003FC87E /* EllyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* EllyTests.m */; };
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
- 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
- 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
- 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 2DCD954D1E0B4F2C00145EB5 /* EllyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* EllyTests.m */; };
- AFEEF52E3EB547EE8A38A46E /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 82CE3032F0894F3CB666AA76 /* AntDesign.ttf */; };
- 4CC1E8DDC8A94B158A84CBEA /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DF192CF8E81F4816AC42527F /* Entypo.ttf */; };
- 5F1CD02B0AF9469A9EC6806D /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AA84F6FCA2204970A1C8A179 /* EvilIcons.ttf */; };
- 59D927EE0CDE47B1B1781D75 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8CD5BC86A7B44498B61FFE2F /* Feather.ttf */; };
- A607743F943B4BF3AA21485F /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F787BE2F7620416A8F48CD03 /* FontAwesome.ttf */; };
- 0D1588B58A1F41A199C790CD /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9B490F6A396E490280F76937 /* FontAwesome5_Brands.ttf */; };
- EE2F2325ECA14FF1883F7CA6 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8DB36D092DF247F98D3A7F86 /* FontAwesome5_Regular.ttf */; };
- D9A3C1F24CD442F4AC328CC8 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 32C8F6DC63B742CB8C967E1E /* FontAwesome5_Solid.ttf */; };
- 5190897B98FF4E8D9C86A48F /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FB0E957919E74CF383AE4A77 /* Fontisto.ttf */; };
- 3033280B3D344115A0D769B4 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CF2C7B1A906B4C799A5FFB47 /* Foundation.ttf */; };
- AF2953D0DF4F4685BAAAF4BF /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E3B730E8EA8D4F4BB35831FD /* Ionicons.ttf */; };
- AA572B6E352646609C1F3FF1 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 613DB790041C411191EB11EC /* MaterialCommunityIcons.ttf */; };
- A07A8B17AF8047F483E864F2 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 84949AC3B1C94B319CEA8F38 /* MaterialIcons.ttf */; };
- FEABD265581D4DBC9427A184 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 027C66AA086845FEA6732FED /* Octicons.ttf */; };
- 85E1779EA2124A90BAD579C2 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BB732FF411FA4938810529F8 /* SimpleLineIcons.ttf */; };
- 7CFC73DB6C83490CA9F755F9 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E93188E90E1C4CE4815DFFFD /* Zocial.ttf */; };
- 3ABAE749BABB4724BABC576D /* Proxima Nova Alt Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = BEF52C49C21F4060BB1B5B0B /* Proxima Nova Alt Bold.otf */; };
- 75064260DB0C41C19813B6E3 /* Proxima Nova Alt Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 24401164BCF24E7984782AAC /* Proxima Nova Alt Light.otf */; };
- 6AF4532366CC4B628C307ACC /* Proxima Nova Alt Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = 24ABD35AE3F14AC89FBC6A11 /* Proxima Nova Alt Thin.otf */; };
- ED7670FF6D8C4B95B4905490 /* Proxima Nova Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = F262F54E9EC34FF3BE691509 /* Proxima Nova Black.otf */; };
- 298270619F4E4FBCB9E59327 /* Proxima Nova Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3915BA32812449D2A639D16A /* Proxima Nova Bold.otf */; };
- 1172256003224B85A5112CBE /* Proxima Nova Extrabold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 4C9702876BD949DCA3F63F98 /* Proxima Nova Extrabold.otf */; };
- 43E5F39CAC214736B773A457 /* Proxima Nova Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = C1C08E887D1A48FEA9F8C449 /* Proxima Nova Thin.otf */; };
- F0D49D00B18A410FBB33E5B7 /* ProximaNova-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = CF4DAB341E4E44B08ECB33DB /* ProximaNova-Regular.otf */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
- remoteInfo = Elly;
- };
- 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
- remoteInfo = "Elly-tvOS";
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
- 00E356EE1AD99517003FC87E /* EllyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EllyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 00E356F21AD99517003FC87E /* EllyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EllyTests.m; sourceTree = ""; };
- 13B07F961A680F5B00A75B9A /* Elly.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Elly.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Elly/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Elly/AppDelegate.m; sourceTree = ""; };
- 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
- 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Elly/Images.xcassets; sourceTree = ""; };
- 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Elly/Info.plist; sourceTree = ""; };
- 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Elly/main.m; sourceTree = ""; };
- 2D02E47B1E0B4A5D006451C7 /* Elly-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Elly-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
- 2D02E4901E0B4A5D006451C7 /* Elly-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Elly-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
- ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
- 82CE3032F0894F3CB666AA76 /* AntDesign.ttf */ = {isa = PBXFileReference; name = "AntDesign.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- DF192CF8E81F4816AC42527F /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- AA84F6FCA2204970A1C8A179 /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 8CD5BC86A7B44498B61FFE2F /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- F787BE2F7620416A8F48CD03 /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 9B490F6A396E490280F76937 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Brands.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 8DB36D092DF247F98D3A7F86 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Regular.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 32C8F6DC63B742CB8C967E1E /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Solid.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- FB0E957919E74CF383AE4A77 /* Fontisto.ttf */ = {isa = PBXFileReference; name = "Fontisto.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- CF2C7B1A906B4C799A5FFB47 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- E3B730E8EA8D4F4BB35831FD /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 613DB790041C411191EB11EC /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; name = "MaterialCommunityIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 84949AC3B1C94B319CEA8F38 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 027C66AA086845FEA6732FED /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- BB732FF411FA4938810529F8 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; name = "SimpleLineIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- E93188E90E1C4CE4815DFFFD /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- BEF52C49C21F4060BB1B5B0B /* Proxima Nova Alt Bold.otf */ = {isa = PBXFileReference; name = "Proxima Nova Alt Bold.otf"; path = "../fonts/Proxima Nova Alt Bold.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 24401164BCF24E7984782AAC /* Proxima Nova Alt Light.otf */ = {isa = PBXFileReference; name = "Proxima Nova Alt Light.otf"; path = "../fonts/Proxima Nova Alt Light.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 24ABD35AE3F14AC89FBC6A11 /* Proxima Nova Alt Thin.otf */ = {isa = PBXFileReference; name = "Proxima Nova Alt Thin.otf"; path = "../fonts/Proxima Nova Alt Thin.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- F262F54E9EC34FF3BE691509 /* Proxima Nova Black.otf */ = {isa = PBXFileReference; name = "Proxima Nova Black.otf"; path = "../fonts/Proxima Nova Black.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 3915BA32812449D2A639D16A /* Proxima Nova Bold.otf */ = {isa = PBXFileReference; name = "Proxima Nova Bold.otf"; path = "../fonts/Proxima Nova Bold.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- 4C9702876BD949DCA3F63F98 /* Proxima Nova Extrabold.otf */ = {isa = PBXFileReference; name = "Proxima Nova Extrabold.otf"; path = "../fonts/Proxima Nova Extrabold.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- C1C08E887D1A48FEA9F8C449 /* Proxima Nova Thin.otf */ = {isa = PBXFileReference; name = "Proxima Nova Thin.otf"; path = "../fonts/Proxima Nova Thin.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
- CF4DAB341E4E44B08ECB33DB /* ProximaNova-Regular.otf */ = {isa = PBXFileReference; name = "ProximaNova-Regular.otf"; path = "../fonts/ProximaNova-Regular.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 00E356EB1AD99517003FC87E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 00E356EF1AD99517003FC87E /* EllyTests */ = {
- isa = PBXGroup;
- children = (
- 00E356F21AD99517003FC87E /* EllyTests.m */,
- 00E356F01AD99517003FC87E /* Supporting Files */,
- );
- path = EllyTests;
- sourceTree = "";
- };
- 00E356F01AD99517003FC87E /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- 00E356F11AD99517003FC87E /* Info.plist */,
- );
- name = "Supporting Files";
- sourceTree = "";
- };
- 13B07FAE1A68108700A75B9A /* Elly */ = {
- isa = PBXGroup;
- children = (
- 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.m */,
- 13B07FB51A68108700A75B9A /* Images.xcassets */,
- 13B07FB61A68108700A75B9A /* Info.plist */,
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
- 13B07FB71A68108700A75B9A /* main.m */,
- );
- name = Elly;
- sourceTree = "";
- };
- 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
- isa = PBXGroup;
- children = (
- );
- name = Libraries;
- sourceTree = "";
- };
- 83CBB9F61A601CBA00E9B192 = {
- isa = PBXGroup;
- children = (
- 13B07FAE1A68108700A75B9A /* Elly */,
- 832341AE1AAA6A7D00B99B32 /* Libraries */,
- 00E356EF1AD99517003FC87E /* EllyTests */,
- 83CBBA001A601CBA00E9B192 /* Products */,
- 2D16E6871FA4F8E400B85C8A /* Frameworks */,
- 0F52843D21FC4C7CAF7DA374 /* Resources */,
- );
- indentWidth = 2;
- sourceTree = "";
- tabWidth = 2;
- usesTabs = 0;
- };
- 83CBBA001A601CBA00E9B192 /* Products */ = {
- isa = PBXGroup;
- children = (
- 13B07F961A680F5B00A75B9A /* Elly.app */,
- 00E356EE1AD99517003FC87E /* EllyTests.xctest */,
- 2D02E47B1E0B4A5D006451C7 /* Elly-tvOS.app */,
- 2D02E4901E0B4A5D006451C7 /* Elly-tvOSTests.xctest */,
- );
- name = Products;
- sourceTree = "";
- };
- 0F52843D21FC4C7CAF7DA374 /* Resources */ = {
- isa = "PBXGroup";
- children = (
- 82CE3032F0894F3CB666AA76 /* AntDesign.ttf */,
- DF192CF8E81F4816AC42527F /* Entypo.ttf */,
- AA84F6FCA2204970A1C8A179 /* EvilIcons.ttf */,
- 8CD5BC86A7B44498B61FFE2F /* Feather.ttf */,
- F787BE2F7620416A8F48CD03 /* FontAwesome.ttf */,
- 9B490F6A396E490280F76937 /* FontAwesome5_Brands.ttf */,
- 8DB36D092DF247F98D3A7F86 /* FontAwesome5_Regular.ttf */,
- 32C8F6DC63B742CB8C967E1E /* FontAwesome5_Solid.ttf */,
- FB0E957919E74CF383AE4A77 /* Fontisto.ttf */,
- CF2C7B1A906B4C799A5FFB47 /* Foundation.ttf */,
- E3B730E8EA8D4F4BB35831FD /* Ionicons.ttf */,
- 613DB790041C411191EB11EC /* MaterialCommunityIcons.ttf */,
- 84949AC3B1C94B319CEA8F38 /* MaterialIcons.ttf */,
- 027C66AA086845FEA6732FED /* Octicons.ttf */,
- BB732FF411FA4938810529F8 /* SimpleLineIcons.ttf */,
- E93188E90E1C4CE4815DFFFD /* Zocial.ttf */,
- BEF52C49C21F4060BB1B5B0B /* Proxima Nova Alt Bold.otf */,
- 24401164BCF24E7984782AAC /* Proxima Nova Alt Light.otf */,
- 24ABD35AE3F14AC89FBC6A11 /* Proxima Nova Alt Thin.otf */,
- F262F54E9EC34FF3BE691509 /* Proxima Nova Black.otf */,
- 3915BA32812449D2A639D16A /* Proxima Nova Bold.otf */,
- 4C9702876BD949DCA3F63F98 /* Proxima Nova Extrabold.otf */,
- C1C08E887D1A48FEA9F8C449 /* Proxima Nova Thin.otf */,
- CF4DAB341E4E44B08ECB33DB /* ProximaNova-Regular.otf */,
- );
- name = Resources;
- sourceTree = "";
- path = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 00E356ED1AD99517003FC87E /* EllyTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "EllyTests" */;
- buildPhases = (
- 00E356EA1AD99517003FC87E /* Sources */,
- 00E356EB1AD99517003FC87E /* Frameworks */,
- 00E356EC1AD99517003FC87E /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 00E356F51AD99517003FC87E /* PBXTargetDependency */,
- );
- name = EllyTests;
- productName = EllyTests;
- productReference = 00E356EE1AD99517003FC87E /* EllyTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
- 13B07F861A680F5B00A75B9A /* Elly */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Elly" */;
- buildPhases = (
- FD10A7F022414F080027D42C /* Start Packager */,
- 13B07F871A680F5B00A75B9A /* Sources */,
- 13B07F8C1A680F5B00A75B9A /* Frameworks */,
- 13B07F8E1A680F5B00A75B9A /* Resources */,
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Elly;
- productName = "Elly";
- productReference = 13B07F961A680F5B00A75B9A /* Elly.app */;
- productType = "com.apple.product-type.application";
- };
- 2D02E47A1E0B4A5D006451C7 /* Elly-tvOS */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Elly-tvOS" */;
- buildPhases = (
- FD10A7F122414F3F0027D42C /* Start Packager */,
- 2D02E4771E0B4A5D006451C7 /* Sources */,
- 2D02E4781E0B4A5D006451C7 /* Frameworks */,
- 2D02E4791E0B4A5D006451C7 /* Resources */,
- 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "Elly-tvOS";
- productName = "Elly-tvOS";
- productReference = 2D02E47B1E0B4A5D006451C7 /* Elly-tvOS.app */;
- productType = "com.apple.product-type.application";
- };
- 2D02E48F1E0B4A5D006451C7 /* Elly-tvOSTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Elly-tvOSTests" */;
- buildPhases = (
- 2D02E48C1E0B4A5D006451C7 /* Sources */,
- 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
- 2D02E48E1E0B4A5D006451C7 /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
- );
- name = "Elly-tvOSTests";
- productName = "Elly-tvOSTests";
- productReference = 2D02E4901E0B4A5D006451C7 /* Elly-tvOSTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 83CBB9F71A601CBA00E9B192 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 940;
- ORGANIZATIONNAME = Facebook;
- TargetAttributes = {
- 00E356ED1AD99517003FC87E = {
- CreatedOnToolsVersion = 6.2;
- TestTargetID = 13B07F861A680F5B00A75B9A;
- };
- 2D02E47A1E0B4A5D006451C7 = {
- CreatedOnToolsVersion = 8.2.1;
- ProvisioningStyle = Automatic;
- };
- 2D02E48F1E0B4A5D006451C7 = {
- CreatedOnToolsVersion = 8.2.1;
- ProvisioningStyle = Automatic;
- TestTargetID = 2D02E47A1E0B4A5D006451C7;
- };
- };
- };
- buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Elly" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 83CBB9F61A601CBA00E9B192;
- productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 13B07F861A680F5B00A75B9A /* Elly */,
- 00E356ED1AD99517003FC87E /* EllyTests */,
- 2D02E47A1E0B4A5D006451C7 /* Elly-tvOS */,
- 2D02E48F1E0B4A5D006451C7 /* Elly-tvOSTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 00E356EC1AD99517003FC87E /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F8E1A680F5B00A75B9A /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
- AFEEF52E3EB547EE8A38A46E /* AntDesign.ttf in Resources */,
- 4CC1E8DDC8A94B158A84CBEA /* Entypo.ttf in Resources */,
- 5F1CD02B0AF9469A9EC6806D /* EvilIcons.ttf in Resources */,
- 59D927EE0CDE47B1B1781D75 /* Feather.ttf in Resources */,
- A607743F943B4BF3AA21485F /* FontAwesome.ttf in Resources */,
- 0D1588B58A1F41A199C790CD /* FontAwesome5_Brands.ttf in Resources */,
- EE2F2325ECA14FF1883F7CA6 /* FontAwesome5_Regular.ttf in Resources */,
- D9A3C1F24CD442F4AC328CC8 /* FontAwesome5_Solid.ttf in Resources */,
- 5190897B98FF4E8D9C86A48F /* Fontisto.ttf in Resources */,
- 3033280B3D344115A0D769B4 /* Foundation.ttf in Resources */,
- AF2953D0DF4F4685BAAAF4BF /* Ionicons.ttf in Resources */,
- AA572B6E352646609C1F3FF1 /* MaterialCommunityIcons.ttf in Resources */,
- A07A8B17AF8047F483E864F2 /* MaterialIcons.ttf in Resources */,
- FEABD265581D4DBC9427A184 /* Octicons.ttf in Resources */,
- 85E1779EA2124A90BAD579C2 /* SimpleLineIcons.ttf in Resources */,
- 7CFC73DB6C83490CA9F755F9 /* Zocial.ttf in Resources */,
- 3ABAE749BABB4724BABC576D /* Proxima Nova Alt Bold.otf in Resources */,
- 75064260DB0C41C19813B6E3 /* Proxima Nova Alt Light.otf in Resources */,
- 6AF4532366CC4B628C307ACC /* Proxima Nova Alt Thin.otf in Resources */,
- ED7670FF6D8C4B95B4905490 /* Proxima Nova Black.otf in Resources */,
- 298270619F4E4FBCB9E59327 /* Proxima Nova Bold.otf in Resources */,
- 1172256003224B85A5112CBE /* Proxima Nova Extrabold.otf in Resources */,
- 43E5F39CAC214736B773A457 /* Proxima Nova Thin.otf in Resources */,
- F0D49D00B18A410FBB33E5B7 /* ProximaNova-Regular.otf in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E4791E0B4A5D006451C7 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Bundle React Native code and images";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
- };
- 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Bundle React Native Code And Images";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
- };
- FD10A7F022414F080027D42C /* Start Packager */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "Start Packager";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
- showEnvVarsInLog = 0;
- };
- FD10A7F122414F3F0027D42C /* Start Packager */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "Start Packager";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 00E356EA1AD99517003FC87E /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 00E356F31AD99517003FC87E /* EllyTests.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 13B07F871A680F5B00A75B9A /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
- 13B07FC11A68108700A75B9A /* main.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E4771E0B4A5D006451C7 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
- 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 2DCD954D1E0B4F2C00145EB5 /* EllyTests.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 13B07F861A680F5B00A75B9A /* Elly */;
- targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
- };
- 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 2D02E47A1E0B4A5D006451C7 /* Elly-tvOS */;
- targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
- isa = PBXVariantGroup;
- children = (
- 13B07FB21A68108700A75B9A /* Base */,
- );
- name = LaunchScreen.xib;
- path = Elly;
- sourceTree = "";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- 00E356F61AD99517003FC87E /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- INFOPLIST_FILE = EllyTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- OTHER_LDFLAGS = (
- "-ObjC",
- "-lc++",
- "$(inherited)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Elly.app/Elly";
- };
- name = Debug;
- };
- 00E356F71AD99517003FC87E /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- COPY_PHASE_STRIP = NO;
- INFOPLIST_FILE = EllyTests/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- OTHER_LDFLAGS = (
- "-ObjC",
- "-lc++",
- "$(inherited)",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Elly.app/Elly";
- };
- name = Release;
- };
- 13B07F941A680F5B00A75B9A /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CURRENT_PROJECT_VERSION = 1;
- DEAD_CODE_STRIPPING = NO;
- INFOPLIST_FILE = Elly/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = Elly;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- 13B07F951A680F5B00A75B9A /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = Elly/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
- PRODUCT_NAME = Elly;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
- 2D02E4971E0B4A5E006451C7 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_TESTABILITY = YES;
- GCC_NO_COMMON_BLOCKS = YES;
- INFOPLIST_FILE = "Elly-tvOS/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Elly-tvOS";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = appletvos;
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.2;
- };
- name = Debug;
- };
- 2D02E4981E0B4A5E006451C7 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_NO_COMMON_BLOCKS = YES;
- INFOPLIST_FILE = "Elly-tvOS/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Elly-tvOS";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = appletvos;
- TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 9.2;
- };
- name = Release;
- };
- 2D02E4991E0B4A5E006451C7 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_TESTABILITY = YES;
- GCC_NO_COMMON_BLOCKS = YES;
- INFOPLIST_FILE = "Elly-tvOSTests/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Elly-tvOSTests";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = appletvos;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Elly-tvOS.app/Elly-tvOS";
- TVOS_DEPLOYMENT_TARGET = 10.1;
- };
- name = Debug;
- };
- 2D02E49A1E0B4A5E006451C7 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- BUNDLE_LOADER = "$(TEST_HOST)";
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_NO_COMMON_BLOCKS = YES;
- INFOPLIST_FILE = "Elly-tvOSTests/Info.plist";
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.Elly-tvOSTests";
- PRODUCT_NAME = "$(TARGET_NAME)";
- SDKROOT = appletvos;
- TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Elly-tvOS.app/Elly-tvOS";
- TVOS_DEPLOYMENT_TARGET = 10.1;
- };
- name = Release;
- };
- 83CBBA201A601CBA00E9B192 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- };
- name = Debug;
- };
- 83CBBA211A601CBA00E9B192 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "EllyTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 00E356F61AD99517003FC87E /* Debug */,
- 00E356F71AD99517003FC87E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Elly" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 13B07F941A680F5B00A75B9A /* Debug */,
- 13B07F951A680F5B00A75B9A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Elly-tvOS" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 2D02E4971E0B4A5E006451C7 /* Debug */,
- 2D02E4981E0B4A5E006451C7 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Elly-tvOSTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 2D02E4991E0B4A5E006451C7 /* Debug */,
- 2D02E49A1E0B4A5E006451C7 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Elly" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 83CBBA201A601CBA00E9B192 /* Debug */,
- 83CBBA211A601CBA00E9B192 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
-}
diff --git a/MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly-tvOS.xcscheme b/MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly-tvOS.xcscheme
deleted file mode 100755
index 524228fb..00000000
--- a/MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly-tvOS.xcscheme
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MobileApp/ios/Elly/AppDelegate.m b/MobileApp/ios/Elly/AppDelegate.m
deleted file mode 100755
index 5214e789..00000000
--- a/MobileApp/ios/Elly/AppDelegate.m
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-#import "AppDelegate.h"
-
-#import
-#import
-#import
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
- RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
- RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
- moduleName:@"Elly"
- initialProperties:nil];
-
- rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
-
- self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- UIViewController *rootViewController = [UIViewController new];
- rootViewController.view = rootView;
- self.window.rootViewController = rootViewController;
- [self.window makeKeyAndVisible];
- return YES;
-}
-
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
-{
-#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
-#else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#endif
-}
-
-@end
diff --git a/MobileApp/ios/Elly/Base.lproj/LaunchScreen.xib b/MobileApp/ios/Elly/Base.lproj/LaunchScreen.xib
deleted file mode 100755
index 6ff3dab2..00000000
--- a/MobileApp/ios/Elly/Base.lproj/LaunchScreen.xib
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/MobileApp/ios/Elly/Images.xcassets/AppIcon.appiconset/Contents.json b/MobileApp/ios/Elly/Images.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100755
index 118c98f7..00000000
--- a/MobileApp/ios/Elly/Images.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "29x29",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "40x40",
- "scale" : "3x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "2x"
- },
- {
- "idiom" : "iphone",
- "size" : "60x60",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
\ No newline at end of file
diff --git a/MobileApp/ios/Elly/Info.plist b/MobileApp/ios/Elly/Info.plist
deleted file mode 100755
index 2c768a24..00000000
--- a/MobileApp/ios/Elly/Info.plist
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- en
- CFBundleDisplayName
- Elly
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0
- CFBundleSignature
- ????
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
-
- NSLocationWhenInUseUsageDescription
-
- UILaunchStoryboardName
- LaunchScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIViewControllerBasedStatusBarAppearance
-
- UIAppFonts
-
- AntDesign.ttf
- Entypo.ttf
- EvilIcons.ttf
- Feather.ttf
- FontAwesome.ttf
- FontAwesome5_Brands.ttf
- FontAwesome5_Regular.ttf
- FontAwesome5_Solid.ttf
- Fontisto.ttf
- Foundation.ttf
- Ionicons.ttf
- MaterialCommunityIcons.ttf
- MaterialIcons.ttf
- Octicons.ttf
- SimpleLineIcons.ttf
- Zocial.ttf
- Proxima Nova Alt Bold.otf
- Proxima Nova Alt Light.otf
- Proxima Nova Alt Thin.otf
- Proxima Nova Black.otf
- Proxima Nova Bold.otf
- Proxima Nova Extrabold.otf
- Proxima Nova Thin.otf
- ProximaNova-Regular.otf
-
- NSCameraUsageDescription
- Take photos with your camera
-
-
diff --git a/MobileApp/ios/Elly/main.m b/MobileApp/ios/Elly/main.m
deleted file mode 100755
index c316cf81..00000000
--- a/MobileApp/ios/Elly/main.m
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-#import
-
-#import "AppDelegate.h"
-
-int main(int argc, char * argv[]) {
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
diff --git a/MobileApp/ios/Podfile b/MobileApp/ios/Podfile
old mode 100755
new mode 100644
index b1827be7..bf808e84
--- a/MobileApp/ios/Podfile
+++ b/MobileApp/ios/Podfile
@@ -1,91 +1,43 @@
-platform :ios, '9.0'
+require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
-target 'Elly' do
- # Pods for Elly
- pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
- pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
- pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
- pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
- pod 'React', :path => '../node_modules/react-native/'
- pod 'React-Core', :path => '../node_modules/react-native/'
- pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
- pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
- pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
- pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
- pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
- pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
- pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
- pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
- pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
- pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
- pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
- pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
-
- pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
- pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
- pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
- pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
- pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
- pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
- pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
-
- pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
- pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
- pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
-
- pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'
-
- pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
-
- pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'
-
- pod 'RNScreens', :path => '../node_modules/react-native-screens'
-
- pod 'react-native-camera', :path => '../node_modules/react-native-camera'
-
-
- pod 'react-native-cameraroll', :path => '../node_modules/@react-native-community/cameraroll'
-
-
- pod 'RNFBAuth', :path => '../node_modules/@react-native-firebase/auth'
-
- pod 'RNFBApp', :path => '../node_modules/@react-native-firebase/app'
-
-
- pod 'RNGoogleSignin', :path => '../node_modules/@react-native-community/google-signin'
-
- pod 'RNFBDatabase', :path => '../node_modules/@react-native-firebase/database'
-
-
- pod 'RNFBStorage', :path => '../node_modules/@react-native-firebase/storage'
-
-
-
-
-
- pod 'react-native-maps', :path => '../node_modules/react-native-maps'
-
-
-
- pod 'react-native-fbsdk', :path => '../node_modules/react-native-fbsdk'
-
- pod 'react-native-image-resizer', :path => '../node_modules/react-native-image-resizer'
-
- target 'EllyTests' do
- inherit! :search_paths
+platform :ios, '12.4'
+install! 'cocoapods', :deterministic_uuids => false
+
+target 'elly' do
+ config = use_native_modules!
+
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
+ use_react_native!(
+ :path => config[:reactNativePath],
+ # Hermes is now enabled by default. Disable by setting this flag to false.
+ # Upcoming versions of React Native may rely on get_default_flags(), but
+ # we make it explicit here to aid in the React Native upgrade process.
+ :hermes_enabled => true,
+ :fabric_enabled => flags[:fabric_enabled],
+ # Enables Flipper.
+ #
+ # Note that if you have use_frameworks! enabled, Flipper will not work and
+ # you should disable the next line.
+ :flipper_configuration => FlipperConfiguration.enabled,
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
+ )
+
+ target 'ellyTests' do
+ inherit! :complete
# Pods for testing
end
- use_native_modules!
-end
-
-target 'Elly-tvOS' do
- # Pods for Elly-tvOS
-
- target 'Elly-tvOSTests' do
- inherit! :search_paths
- # Pods for testing
+ post_install do |installer|
+ react_native_post_install(
+ installer,
+ # Set `mac_catalyst_enabled` to `true` in order to apply patches
+ # necessary for Mac Catalyst builds
+ :mac_catalyst_enabled => false
+ )
+ __apply_Xcode_12_5_M1_post_install_workaround(installer)
end
-
end
diff --git a/MobileApp/ios/elewatch.xcodeproj/project.pbxproj b/MobileApp/ios/elewatch.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..3494593d
--- /dev/null
+++ b/MobileApp/ios/elewatch.xcodeproj/project.pbxproj
@@ -0,0 +1,700 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00E356F31AD99517003FC87E /* ellyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ellyTests.m */; };
+ 0C80B921A6F3F58F76C31292 /* libPods-elly.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-elly.a */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 7699B88040F8A987B510C191 /* libPods-elly-ellyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-elly-ellyTests.a */; };
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = elly;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 00E356EE1AD99517003FC87E /* ellyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ellyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 00E356F21AD99517003FC87E /* ellyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ellyTests.m; sourceTree = ""; };
+ 13B07F961A680F5B00A75B9A /* elly.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = elly.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = elly/AppDelegate.h; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = elly/AppDelegate.mm; sourceTree = ""; };
+ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = elly/Images.xcassets; sourceTree = ""; };
+ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = elly/Info.plist; sourceTree = ""; };
+ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = elly/main.m; sourceTree = ""; };
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-elly-ellyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-elly-ellyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B4392A12AC88292D35C810B /* Pods-elly.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-elly.debug.xcconfig"; path = "Target Support Files/Pods-elly/Pods-elly.debug.xcconfig"; sourceTree = ""; };
+ 5709B34CF0A7D63546082F79 /* Pods-elly.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-elly.release.xcconfig"; path = "Target Support Files/Pods-elly/Pods-elly.release.xcconfig"; sourceTree = ""; };
+ 5B7EB9410499542E8C5724F5 /* Pods-elly-ellyTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-elly-ellyTests.debug.xcconfig"; path = "Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests.debug.xcconfig"; sourceTree = ""; };
+ 5DCACB8F33CDC322A6C60F78 /* libPods-elly.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-elly.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = elly/LaunchScreen.storyboard; sourceTree = ""; };
+ 89C6BE57DB24E9ADA2F236DE /* Pods-elly-ellyTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-elly-ellyTests.release.xcconfig"; path = "Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests.release.xcconfig"; sourceTree = ""; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7699B88040F8A987B510C191 /* libPods-elly-ellyTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0C80B921A6F3F58F76C31292 /* libPods-elly.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00E356EF1AD99517003FC87E /* ellyTests */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F21AD99517003FC87E /* ellyTests.m */,
+ 00E356F01AD99517003FC87E /* Supporting Files */,
+ );
+ path = ellyTests;
+ sourceTree = "";
+ };
+ 00E356F01AD99517003FC87E /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F11AD99517003FC87E /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ 13B07FAE1A68108700A75B9A /* elly */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
+ 13B07FB51A68108700A75B9A /* Images.xcassets */,
+ 13B07FB61A68108700A75B9A /* Info.plist */,
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
+ 13B07FB71A68108700A75B9A /* main.m */,
+ );
+ name = elly;
+ sourceTree = "";
+ };
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
+ 5DCACB8F33CDC322A6C60F78 /* libPods-elly.a */,
+ 19F6CBCC0A4E27FBF8BF4A61 /* libPods-elly-ellyTests.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Libraries;
+ sourceTree = "";
+ };
+ 83CBB9F61A601CBA00E9B192 = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAE1A68108700A75B9A /* elly */,
+ 832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 00E356EF1AD99517003FC87E /* ellyTests */,
+ 83CBBA001A601CBA00E9B192 /* Products */,
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */,
+ BBD78D7AC51CEA395F1C20DB /* Pods */,
+ );
+ indentWidth = 2;
+ sourceTree = "";
+ tabWidth = 2;
+ usesTabs = 0;
+ };
+ 83CBBA001A601CBA00E9B192 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07F961A680F5B00A75B9A /* elly.app */,
+ 00E356EE1AD99517003FC87E /* ellyTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ BBD78D7AC51CEA395F1C20DB /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 3B4392A12AC88292D35C810B /* Pods-elly.debug.xcconfig */,
+ 5709B34CF0A7D63546082F79 /* Pods-elly.release.xcconfig */,
+ 5B7EB9410499542E8C5724F5 /* Pods-elly-ellyTests.debug.xcconfig */,
+ 89C6BE57DB24E9ADA2F236DE /* Pods-elly-ellyTests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* ellyTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ellyTests" */;
+ buildPhases = (
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */,
+ );
+ name = ellyTests;
+ productName = ellyTests;
+ productReference = 00E356EE1AD99517003FC87E /* ellyTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 13B07F861A680F5B00A75B9A /* elly */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "elly" */;
+ buildPhases = (
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
+ FD10A7F022414F080027D42C /* Start Packager */,
+ 13B07F871A680F5B00A75B9A /* Sources */,
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */,
+ 13B07F8E1A680F5B00A75B9A /* Resources */,
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = elly;
+ productName = elly;
+ productReference = 13B07F961A680F5B00A75B9A /* elly.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83CBB9F71A601CBA00E9B192 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1210;
+ TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
+ 13B07F861A680F5B00A75B9A = {
+ LastSwiftMigration = 1120;
+ };
+ };
+ };
+ buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "elly" */;
+ compatibilityVersion = "Xcode 12.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 83CBB9F61A601CBA00E9B192;
+ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 13B07F861A680F5B00A75B9A /* elly */,
+ 00E356ED1AD99517003FC87E /* ellyTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 00E356EC1AD99517003FC87E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8E1A680F5B00A75B9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/.xcode.env.local",
+ "$(SRCROOT)/.xcode.env",
+ );
+ name = "Bundle React Native code and images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
+ };
+ 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-elly-ellyTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-elly-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-elly/Pods-elly-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-elly-ellyTests/Pods-elly-ellyTests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F022414F080027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 00E356EA1AD99517003FC87E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00E356F31AD99517003FC87E /* ellyTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F871A680F5B00A75B9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
+ 13B07FC11A68108700A75B9A /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* elly */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-elly-ellyTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = ellyTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/elly.app/elly";
+ };
+ name = Debug;
+ };
+ 00E356F71AD99517003FC87E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-elly-ellyTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COPY_PHASE_STRIP = NO;
+ INFOPLIST_FILE = ellyTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/elly.app/elly";
+ };
+ name = Release;
+ };
+ 13B07F941A680F5B00A75B9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-elly.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = elly/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = elly;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 13B07F951A680F5B00A75B9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-elly.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ INFOPLIST_FILE = elly/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = elly;
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 83CBBA201A601CBA00E9B192 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ /usr/lib/swift,
+ "$(inherited)",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(SDKROOT)/usr/lib/swift\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 83CBBA211A601CBA00E9B192 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = (
+ /usr/lib/swift,
+ "$(inherited)",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "\"$(SDKROOT)/usr/lib/swift\"",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_CPLUSPLUSFLAGS = (
+ "$(OTHER_CFLAGS)",
+ "-DFOLLY_NO_CONFIG",
+ "-DFOLLY_MOBILE=1",
+ "-DFOLLY_USE_LIBCPP=1",
+ );
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ellyTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 00E356F61AD99517003FC87E /* Debug */,
+ 00E356F71AD99517003FC87E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "elly" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B07F941A680F5B00A75B9A /* Debug */,
+ 13B07F951A680F5B00A75B9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "elly" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
+}
diff --git a/MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly.xcscheme b/MobileApp/ios/elewatch.xcodeproj/xcshareddata/xcschemes/elewatch.xcscheme
old mode 100755
new mode 100644
similarity index 53%
rename from MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly.xcscheme
rename to MobileApp/ios/elewatch.xcodeproj/xcshareddata/xcschemes/elewatch.xcscheme
index db1d203d..8d93f552
--- a/MobileApp/ios/Elly.xcodeproj/xcshareddata/xcschemes/Elly.xcscheme
+++ b/MobileApp/ios/elewatch.xcodeproj/xcshareddata/xcschemes/elewatch.xcscheme
@@ -1,25 +1,11 @@
-
-
-
-
-
-
-
-
+ BuildableName = "elly.app"
+ BlueprintName = "elly"
+ ReferencedContainer = "container:elly.xcodeproj">
@@ -61,23 +33,12 @@
+ BuildableName = "ellyTests.xctest"
+ BlueprintName = "ellyTests"
+ ReferencedContainer = "container:elly.xcodeproj">
-
-
-
-
-
-
+ BuildableName = "elly.app"
+ BlueprintName = "elly"
+ ReferencedContainer = "container:elly.xcodeproj">
-
-
+ BuildableName = "elly.app"
+ BlueprintName = "elly"
+ ReferencedContainer = "container:elly.xcodeproj">
diff --git a/MobileApp/ios/Elly/AppDelegate.h b/MobileApp/ios/elewatch/AppDelegate.h
old mode 100755
new mode 100644
similarity index 50%
rename from MobileApp/ios/Elly/AppDelegate.h
rename to MobileApp/ios/elewatch/AppDelegate.h
index 2726d5e1..ef1de86a
--- a/MobileApp/ios/Elly/AppDelegate.h
+++ b/MobileApp/ios/elewatch/AppDelegate.h
@@ -1,10 +1,3 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
#import
#import
diff --git a/MobileApp/ios/elewatch/AppDelegate.mm b/MobileApp/ios/elewatch/AppDelegate.mm
new file mode 100644
index 00000000..23eede2d
--- /dev/null
+++ b/MobileApp/ios/elewatch/AppDelegate.mm
@@ -0,0 +1,133 @@
+#import "AppDelegate.h"
+
+#import
+#import
+#import
+
+#import
+
+#if RCT_NEW_ARCH_ENABLED
+#import
+#import
+#import
+#import
+#import
+#import
+
+#import
+
+static NSString *const kRNConcurrentRoot = @"concurrentRoot";
+
+@interface AppDelegate () {
+ RCTTurboModuleManager *_turboModuleManager;
+ RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
+ std::shared_ptr _reactNativeConfig;
+ facebook::react::ContextContainer::Shared _contextContainer;
+}
+@end
+#endif
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ RCTAppSetupPrepareApp(application);
+
+ RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+
+#if RCT_NEW_ARCH_ENABLED
+ _contextContainer = std::make_shared();
+ _reactNativeConfig = std::make_shared();
+ _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
+ _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
+ bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
+#endif
+
+ NSDictionary *initProps = [self prepareInitialProps];
+ UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"elly", initProps);
+
+ if (@available(iOS 13.0, *)) {
+ rootView.backgroundColor = [UIColor systemBackgroundColor];
+ } else {
+ rootView.backgroundColor = [UIColor whiteColor];
+ }
+
+ self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ UIViewController *rootViewController = [UIViewController new];
+ rootViewController.view = rootView;
+ self.window.rootViewController = rootViewController;
+ [self.window makeKeyAndVisible];
+ return YES;
+}
+
+/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
+///
+/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
+/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
+/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.
+- (BOOL)concurrentRootEnabled
+{
+ // Switch this bool to turn on and off the concurrent root
+ return true;
+}
+
+- (NSDictionary *)prepareInitialProps
+{
+ NSMutableDictionary *initProps = [NSMutableDictionary new];
+
+#ifdef RCT_NEW_ARCH_ENABLED
+ initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);
+#endif
+
+ return initProps;
+}
+
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+#if RCT_NEW_ARCH_ENABLED
+
+#pragma mark - RCTCxxBridgeDelegate
+
+- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge
+{
+ _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
+ delegate:self
+ jsInvoker:bridge.jsCallInvoker];
+ return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);
+}
+
+#pragma mark RCTTurboModuleManagerDelegate
+
+- (Class)getModuleClassFromName:(const char *)name
+{
+ return RCTCoreModulesClassProvider(name);
+}
+
+- (std::shared_ptr)getTurboModule:(const std::string &)name
+ jsInvoker:(std::shared_ptr)jsInvoker
+{
+ return nullptr;
+}
+
+- (std::shared_ptr)getTurboModule:(const std::string &)name
+ initParams:
+ (const facebook::react::ObjCTurboModule::InitParams &)params
+{
+ return nullptr;
+}
+
+- (id)getModuleInstanceFromClass:(Class)moduleClass
+{
+ return RCTAppSetupDefaultModuleFromClass(moduleClass);
+}
+
+#endif
+
+@end
diff --git a/MobileApp/ios/elewatch/Images.xcassets/AppIcon.appiconset/Contents.json b/MobileApp/ios/elewatch/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..81213230
--- /dev/null
+++ b/MobileApp/ios/elewatch/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,53 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/MobileApp/ios/Elly/Images.xcassets/Contents.json b/MobileApp/ios/elewatch/Images.xcassets/Contents.json
old mode 100755
new mode 100644
similarity index 100%
rename from MobileApp/ios/Elly/Images.xcassets/Contents.json
rename to MobileApp/ios/elewatch/Images.xcassets/Contents.json
diff --git a/MobileApp/ios/Elly-tvOS/Info.plist b/MobileApp/ios/elewatch/Info.plist
old mode 100755
new mode 100644
similarity index 96%
rename from MobileApp/ios/Elly-tvOS/Info.plist
rename to MobileApp/ios/elewatch/Info.plist
index ecbd496b..2431f716
--- a/MobileApp/ios/Elly-tvOS/Info.plist
+++ b/MobileApp/ios/elewatch/Info.plist
@@ -4,6 +4,8 @@
CFBundleDevelopmentRegion
en
+ CFBundleDisplayName
+ elly
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
diff --git a/MobileApp/ios/elewatch/LaunchScreen.storyboard b/MobileApp/ios/elewatch/LaunchScreen.storyboard
new file mode 100644
index 00000000..2527ad86
--- /dev/null
+++ b/MobileApp/ios/elewatch/LaunchScreen.storyboard
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MobileApp/ios/elewatch/main.m b/MobileApp/ios/elewatch/main.m
new file mode 100644
index 00000000..d645c724
--- /dev/null
+++ b/MobileApp/ios/elewatch/main.m
@@ -0,0 +1,10 @@
+#import
+
+#import "AppDelegate.h"
+
+int main(int argc, char *argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/MobileApp/ios/EllyTests/Info.plist b/MobileApp/ios/elewatchTests/Info.plist
old mode 100755
new mode 100644
similarity index 100%
rename from MobileApp/ios/EllyTests/Info.plist
rename to MobileApp/ios/elewatchTests/Info.plist
diff --git a/MobileApp/ios/EllyTests/EllyTests.m b/MobileApp/ios/elewatchTests/elewatchTests.m
old mode 100755
new mode 100644
similarity index 61%
rename from MobileApp/ios/EllyTests/EllyTests.m
rename to MobileApp/ios/elewatchTests/elewatchTests.m
index 3e97af00..b56bc41b
--- a/MobileApp/ios/EllyTests/EllyTests.m
+++ b/MobileApp/ios/elewatchTests/elewatchTests.m
@@ -1,10 +1,3 @@
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
#import
#import
@@ -14,13 +7,13 @@
#define TIMEOUT_SECONDS 600
#define TEXT_TO_LOOK_FOR @"Welcome to React"
-@interface EllyTests : XCTestCase
+@interface ellyTests : XCTestCase
@end
-@implementation EllyTests
+@implementation ellyTests
-- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
{
if (test(view)) {
return YES;
@@ -41,25 +34,27 @@ - (void)testRendersWelcomeScreen
__block NSString *redboxError = nil;
#ifdef DEBUG
- RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
- if (level >= RCTLogLevelError) {
- redboxError = message;
- }
- });
+ RCTSetLogFunction(
+ ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
#endif
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
- foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
- if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
- return YES;
- }
- return NO;
- }];
+ foundElement = [self findSubviewInView:vc.view
+ matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
}
-
+
#ifdef DEBUG
RCTSetLogFunction(RCTDefaultLogFunction);
#endif
@@ -68,5 +63,4 @@ - (void)testRendersWelcomeScreen
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}
-
@end
diff --git a/MobileApp/metro.config.js b/MobileApp/metro.config.js
old mode 100755
new mode 100644
index 13a96421..e91aba93
--- a/MobileApp/metro.config.js
+++ b/MobileApp/metro.config.js
@@ -10,7 +10,7 @@ module.exports = {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
- inlineRequires: false,
+ inlineRequires: true,
},
}),
},
diff --git a/MobileApp/package.json b/MobileApp/package.json
old mode 100755
new mode 100644
index 9ecc79fa..13cdbdb2
--- a/MobileApp/package.json
+++ b/MobileApp/package.json
@@ -1,5 +1,5 @@
{
- "name": "Elly",
+ "name": "elly",
"version": "0.0.1",
"private": true,
"scripts": {
@@ -10,46 +10,45 @@
"lint": "eslint ."
},
"dependencies": {
- "@react-native-community/cameraroll": "1.3.0",
- "@react-native-community/geolocation": "^2.0.2",
- "@react-native-community/google-signin": "3.0.3",
- "@react-native-firebase/app": "6.0.3",
- "@react-native-firebase/auth": "6.0.3",
- "@react-native-firebase/database": "6.0.3",
- "@react-native-firebase/storage": "6.0.3",
- "react": "16.9.0",
- "react-native": "0.61.2",
- "react-native-camera": "3.8.0",
- "react-native-fbsdk": "1.1.1",
- "react-native-gesture-handler": "1.5.0",
- "react-native-image-resizer": "1.2.0",
- "react-native-maps": "0.26.1",
- "react-native-paper": "3.0.0",
- "react-native-reanimated": "1.3.2",
- "react-native-screens": "1.0.0-alpha.23",
- "react-native-vector-icons": "6.6.0",
- "react-navigation": "4.0.10",
- "react-navigation-drawer": "2.3.3",
- "react-navigation-material-bottom-tabs": "2.1.5",
- "react-navigation-stack": "1.10.3",
- "react-navigation-tabs": "2.5.6"
+ "@bam.tech/react-native-image-resizer": "^3.0.3",
+ "@react-native-camera-roll/camera-roll": "^5.0.4",
+ "@react-native-community/geolocation": "^3.0.2",
+ "@react-native-firebase/app": "^16.1.1",
+ "@react-native-firebase/auth": "^16.1.1",
+ "@react-native-firebase/database": "^16.1.1",
+ "@react-native-firebase/storage": "^16.1.1",
+ "@react-native-google-signin/google-signin": "^8.0.1",
+ "@react-native-masked-view/masked-view": "^0.2.8",
+ "@react-navigation/bottom-tabs": "^6.4.0",
+ "@react-navigation/material-bottom-tabs": "^6.2.4",
+ "@react-navigation/native": "^6.0.13",
+ "@react-navigation/stack": "^6.3.2",
+ "deprecated-react-native-prop-types": "^2.2.0",
+ "react": "18.1.0",
+ "react-native": "0.70.3",
+ "react-native-camera": "^4.2.1",
+ "react-native-fbsdk": "^3.0.0",
+ "react-native-gesture-handler": "^2.8.0",
+ "react-native-maps": "^1.3.2",
+ "react-native-paper": "^4.12.5",
+ "react-native-reanimated": "^2.11.0",
+ "react-native-safe-area-context": "^4.4.1",
+ "react-native-screens": "^3.18.2",
+ "react-native-splash-screen": "^3.3.0",
+ "react-native-vector-icons": "^9.2.0",
+ "react-navigation": "^4.4.4"
},
"devDependencies": {
- "@babel/core": "7.6.4",
- "@babel/runtime": "7.6.3",
- "@react-native-community/eslint-config": "0.0.3",
- "babel-jest": "24.9.0",
- "eslint": "6.6.0",
- "jest": "24.9.0",
- "metro-react-native-babel-preset": "0.51.1",
- "react-test-renderer": "16.9.0"
+ "@babel/core": "^7.12.9",
+ "@babel/runtime": "^7.12.5",
+ "@react-native-community/eslint-config": "^2.0.0",
+ "babel-jest": "^26.6.3",
+ "eslint": "^7.32.0",
+ "jest": "^26.6.3",
+ "metro-react-native-babel-preset": "0.72.3",
+ "react-test-renderer": "18.1.0"
},
"jest": {
"preset": "react-native"
- },
- "rnpm": {
- "assets": [
- "fonts"
- ]
}
}
diff --git a/MobileApp/src/Utils/ImageManipulator.js b/MobileApp/src/Utils/ImageManipulator.js
new file mode 100644
index 00000000..6c771d31
--- /dev/null
+++ b/MobileApp/src/Utils/ImageManipulator.js
@@ -0,0 +1,13 @@
+import ImageResizer from '@bam.tech/react-native-image-resizer';
+
+export const resize = async (ouri, w, h) => {
+ try {
+ console.log(ouri);
+ let resized = await ImageResizer.createResizedImage(ouri, w, h, 'JPEG', 80);
+ console.log(resized);
+ return resized;
+ } catch (e) {
+ console.log(e);
+ return null;
+ }
+};
diff --git a/MobileApp/src/Utils/StringUtils.js b/MobileApp/src/Utils/StringUtils.js
new file mode 100644
index 00000000..05e9eba1
--- /dev/null
+++ b/MobileApp/src/Utils/StringUtils.js
@@ -0,0 +1,5 @@
+export const toTitleCase = str => {
+ return str.replace(/\w\S*/g, function (txt) {
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
+ });
+};
diff --git a/MobileApp/src/components/Camera/Camera.js b/MobileApp/src/components/Camera/Camera.js
index 04d28bb4..3fd1ad9f 100644
--- a/MobileApp/src/components/Camera/Camera.js
+++ b/MobileApp/src/components/Camera/Camera.js
@@ -8,10 +8,10 @@ import {
PermissionsAndroid,
} from 'react-native';
import {IconButton, Colors, Avatar} from 'react-native-paper';
-import CameraRoll from '@react-native-community/cameraroll';
+import {CameraRoll} from '@react-native-camera-roll/camera-roll';
import {RNCamera} from 'react-native-camera';
-import {withNavigationFocus} from 'react-navigation';
-import {resize} from '../../components/ImageManipulator/ImageManipulator';
+import {resize} from '../../Utils/ImageManipulator';
+
class Camera extends PureComponent {
constructor(props) {
super(props);
@@ -21,7 +21,9 @@ class Camera extends PureComponent {
};
}
- componentDidMount() {}
+ componentDidMount() {
+ this.checkPermission();
+ }
sendData = () => {
this.props.parentCallback([
@@ -31,13 +33,30 @@ class Camera extends PureComponent {
]);
};
+ checkPermission = async () => {
+ try {
+ const granted = await PermissionsAndroid.request(
+ PermissionsAndroid.PERMISSIONS.CAMERA,
+ );
+ if (granted === PermissionsAndroid.RESULTS.GRANTED) {
+ console.log('CAMERA');
+ this.setState({
+ cameraPermission: true,
+ });
+ } else {
+ console.log('no permission');
+ this.setState({
+ cameraPermission: false,
+ });
+ }
+ } catch (err) {
+ console.log(err.message);
+ }
+ };
+
render() {
const {isFocused} = this.props;
- const {hasCameraPermission} = this.state;
- console.log(hasCameraPermission);
- if (hasCameraPermission === null) {
- return ;
- } else if (hasCameraPermission === false) {
+ if (this.state.cameraPermission === false) {
return No access to camera ;
} else if (isFocused) {
return (
@@ -71,7 +90,7 @@ class Camera extends PureComponent {
// console.log(text);
// }}
>
-
-
+ */}
(
)}
@@ -120,9 +121,15 @@ const styles = StyleSheet.create({
container: {
marginTop: 2,
width: Dimensions.get('window').width,
+ marginBottom: 1,
},
cover: {
- height: 300,
+ height: 200,
+ marginLeft: 73,
+ borderRadius: 10,
+ marginRight: 10,
+ marginBottom: 10,
+ // width: Dimensions.get('window').width - 30,
},
content: {
marginTop: 5,
diff --git a/MobileApp/src/components/FeedDetail/FeedDetails.js b/MobileApp/src/components/FeedDetail/FeedDetails.js
new file mode 100644
index 00000000..dc155c78
--- /dev/null
+++ b/MobileApp/src/components/FeedDetail/FeedDetails.js
@@ -0,0 +1,137 @@
+import * as React from 'react';
+import {
+ View,
+ StyleSheet,
+ Dimensions,
+ TouchableOpacity,
+ TextInput,
+} from 'react-native';
+import {Card, Text, Avatar} from 'react-native-paper';
+import MapView from 'react-native-maps';
+import {Marker} from 'react-native-maps';
+import {MAPMARKER} from '../../images/index';
+import {toTitleCase} from '../../Utils/StringUtils';
+
+var MapStyle = require('../../config/map.json');
+class FeedDetails extends React.Component {
+ constructor(props) {
+ super(props);
+ }
+
+ componentDidMount() {
+ this.props.content.reverse();
+ }
+
+ render() {
+ return (
+
+
+ (
+
+ )}
+ // right={() => (
+ //
+ // )}
+ />
+
+ {this.props.content.length > 0 && (
+
+ {this.props.content.map((val, i) => {
+ return (
+
+
+
+ {val[1]}
+
+
+ );
+ })}
+
+ )}
+
+ {this.props.content.length > 0 &&
+ this.props.content.map((val, i) => {
+ if (val[0] === 'map-marker') {
+ return (
+
+
+
+ this.props.showPhoto.navigate('showLocationScreen', {
+ location: val[1],
+ })
+ }
+ />
+
+
+ );
+ } else {
+ return null;
+ }
+ })}
+
+ {/* */}
+
+
+ );
+ }
+}
+
+const styles = StyleSheet.create({
+ container: {
+ marginTop: 2,
+ width: Dimensions.get('window').width,
+ marginBottom: 1,
+ },
+ cover: {
+ height: 200,
+ // marginLeft: 73,
+ // borderRadius: 10,
+ // marginRight: 10,
+ // marginBottom: 10,
+ // width: Dimensions.get('window').width - 30,
+ },
+ content: {
+ marginTop: 5,
+ flexDirection: 'row',
+ // flexWrap: 'wrap',
+ alignItems: 'center',
+ },
+ MainContainer: {
+ width: Dimensions.get('window').width,
+ height: 300,
+ },
+ mapStyle: {
+ width: Dimensions.get('window').width,
+ height: 300,
+ },
+});
+
+export {FeedDetails};
diff --git a/MobileApp/src/components/GoogleLogin/GoogleLogin.js b/MobileApp/src/components/GoogleLogin/GoogleLogin.js
index 3f969d39..49d69714 100644
--- a/MobileApp/src/components/GoogleLogin/GoogleLogin.js
+++ b/MobileApp/src/components/GoogleLogin/GoogleLogin.js
@@ -1,4 +1,4 @@
-import {GoogleSignin, statusCodes} from '@react-native-community/google-signin';
+import {GoogleSignin, statusCodes} from '@react-native-google-signin/google-signin';
import {firebase} from '@react-native-firebase/auth';
import {
webClientID,
diff --git a/MobileApp/src/components/ImageManipulator/ImageManipulator.js b/MobileApp/src/components/ImageManipulator/ImageManipulator.js
deleted file mode 100644
index aa1aac5d..00000000
--- a/MobileApp/src/components/ImageManipulator/ImageManipulator.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import ImageResizer from 'react-native-image-resizer';
-
-export async function resize(ouri, w, h) {
- let resized = await ImageResizer.createResizedImage(ouri, w, h, 'JPEG', 100);
- let newI = await resized.uri;
- return newI;
- // .then(({uri}) => {
- // console.log('resized:' + uri);
- // return uri;
- // })
- // .catch(err => {
- // console.log(err);
- // });
-}
diff --git a/MobileApp/src/images/index.js b/MobileApp/src/images/index.js
index e42dc877..49926ee6 100644
--- a/MobileApp/src/images/index.js
+++ b/MobileApp/src/images/index.js
@@ -1,4 +1,4 @@
-export const COVER = require('./updatedcover.png');
+export const COVER = require('./updatedcover3.png');
export const LOGO = require('./EleWatchLogo.png');
export const LOGOB = require('./EleWatchLogo.png');
export const SLOGO = require('./score.jpg');
diff --git a/MobileApp/src/images/updatedcover3.png b/MobileApp/src/images/updatedcover3.png
new file mode 100644
index 00000000..b6439bd1
Binary files /dev/null and b/MobileApp/src/images/updatedcover3.png differ
diff --git a/MobileApp/src/navigators/AuthStack.js b/MobileApp/src/navigators/AuthStack.js
new file mode 100644
index 00000000..38da904b
--- /dev/null
+++ b/MobileApp/src/navigators/AuthStack.js
@@ -0,0 +1,29 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import LandingScreen from '../screens/LandingScreen/LandingScreen';
+import LoginScreen from '../screens/LoginScreen/LoginScreen';
+import EmailAuthScreenSignIn from '../screens/EmailAuthScreen/EmailAuthSignInScreen';
+import EmailAuthScreenSignUp from '../screens/EmailAuthScreen/EmailAuthSignUpScreen';
+
+//Screens
+
+const Stack = createStackNavigator();
+
+const AuthStack = () => (
+
+
+
+
+
+
+);
+
+export default withTheme(AuthStack);
diff --git a/MobileApp/src/navigators/CameraStack.js b/MobileApp/src/navigators/CameraStack.js
new file mode 100644
index 00000000..45f9d988
--- /dev/null
+++ b/MobileApp/src/navigators/CameraStack.js
@@ -0,0 +1,25 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import CameraViewScreen from '../screens/CameraViewScreen/CameraViewScreen';
+import FormScreen from '../screens/FormScreen/FormScreen';
+import ShowPhotoScreen from '../screens/ShowPhotoScreen/ShowPhotoScreen';
+
+const Stack = createStackNavigator();
+
+const CameraStack = () => (
+
+
+
+
+
+);
+
+export default withTheme(CameraStack);
diff --git a/MobileApp/src/navigators/DiscoverStack.js b/MobileApp/src/navigators/DiscoverStack.js
new file mode 100644
index 00000000..ae35e7a0
--- /dev/null
+++ b/MobileApp/src/navigators/DiscoverStack.js
@@ -0,0 +1,28 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import DiscoverScreen from '../screens/DiscoverScreen/DiscoverScreen';
+import ShowDetailedPhotoScreen from '../screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen';
+import ShowLocationScreen from '../screens/ShowLocationScreen/ShowLocationScreen';
+
+const Stack = createStackNavigator();
+
+const DiscoverStack = () => (
+
+
+
+
+
+);
+
+export default withTheme(DiscoverStack);
diff --git a/MobileApp/src/navigators/FeedStack.js b/MobileApp/src/navigators/FeedStack.js
new file mode 100644
index 00000000..468cd9b0
--- /dev/null
+++ b/MobileApp/src/navigators/FeedStack.js
@@ -0,0 +1,30 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import FeedScreen from '../screens/FeedScreen/FeedScreen';
+import ShowDetailedPhotoScreen from '../screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen';
+import ShowLocationScreen from '../screens/ShowLocationScreen/ShowLocationScreen';
+import SearchStack from './SearchStack';
+
+const Stack = createStackNavigator();
+
+const FeedStack = () => (
+
+
+
+
+
+
+);
+
+export default withTheme(FeedStack);
diff --git a/MobileApp/src/navigators/MainTabs.js b/MobileApp/src/navigators/MainTabs.js
new file mode 100644
index 00000000..6de34255
--- /dev/null
+++ b/MobileApp/src/navigators/MainTabs.js
@@ -0,0 +1,73 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createMaterialBottomTabNavigator} from '@react-navigation/material-bottom-tabs';
+import {withTheme} from 'react-native-paper';
+
+import Icon from 'react-native-vector-icons/dist/MaterialCommunityIcons';
+
+import FeedStack from './FeedStack';
+import SearchStack from './SearchStack';
+import CameraStack from './CameraStack';
+import DiscoverStack from './DiscoverStack';
+// import ProfileStack from './ProfileStack';
+
+const Tab = createMaterialBottomTabNavigator();
+
+const MainTabs = ({theme}) => (
+
+ ,
+ }}
+ />
+ {/* ,
+ }}
+ /> */}
+ ,
+ }}
+ />
+ ,
+ }}
+ />
+ {/* ,
+ }}
+ /> */}
+
+);
+
+export default withTheme(MainTabs);
diff --git a/MobileApp/src/navigators/ProfileStack.js b/MobileApp/src/navigators/ProfileStack.js
new file mode 100644
index 00000000..2e8cce67
--- /dev/null
+++ b/MobileApp/src/navigators/ProfileStack.js
@@ -0,0 +1,30 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import ProfileScreen from '../screens/ProfileScreen/ProfileScreen';
+import ShowDetailedPhotoScreen from '../screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen';
+import ShowLocationScreen from '../screens/ShowLocationScreen/ShowLocationScreen';
+import AboutScreen from '../screens/AboutScreen/AboutScreen';
+
+const Stack = createStackNavigator();
+
+const ProfileStack = () => (
+
+
+
+
+
+
+);
+
+export default withTheme(ProfileStack);
diff --git a/MobileApp/src/navigators/SearchStack.js b/MobileApp/src/navigators/SearchStack.js
new file mode 100644
index 00000000..439de863
--- /dev/null
+++ b/MobileApp/src/navigators/SearchStack.js
@@ -0,0 +1,28 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+import SearchScreen from '../screens/SearchScreen/SearchScreen';
+import ShowDetailedPhotoScreen from '../screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen';
+import ShowLocationScreen from '../screens/ShowLocationScreen/ShowLocationScreen';
+
+const Stack = createStackNavigator();
+
+const SearchStack = () => (
+
+
+
+
+
+);
+
+export default withTheme(SearchStack);
diff --git a/MobileApp/src/navigators/index.js b/MobileApp/src/navigators/index.js
new file mode 100644
index 00000000..f583cd45
--- /dev/null
+++ b/MobileApp/src/navigators/index.js
@@ -0,0 +1,35 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React from 'react';
+import {NavigationContainer} from '@react-navigation/native';
+import {createStackNavigator} from '@react-navigation/stack';
+import {withTheme} from 'react-native-paper';
+
+import MainTabs from './MainTabs';
+import AuthStack from './AuthStack';
+import ProfileStack from './ProfileStack';
+
+const Stack = createStackNavigator();
+
+const AppStack = ({theme}) => (
+
+
+
+
+
+);
+
+function App({theme}) {
+ return (
+
+
+
+ );
+}
+
+export default withTheme(App);
diff --git a/MobileApp/src/screens/AboutScreen/AboutScreen.js b/MobileApp/src/screens/AboutScreen/AboutScreen.js
index 2462f652..ee175632 100644
--- a/MobileApp/src/screens/AboutScreen/AboutScreen.js
+++ b/MobileApp/src/screens/AboutScreen/AboutScreen.js
@@ -7,7 +7,7 @@ import {
ImageBackground,
Linking,
} from 'react-native';
-import {Divider, Text} from 'react-native-paper';
+import {Appbar, Divider, Text} from 'react-native-paper';
import {SLOGO, COVER, TLOGO, LOGOB} from '../../images/index';
class AboutScreen extends React.Component {
constructor(props) {
@@ -26,47 +26,53 @@ class AboutScreen extends React.Component {
render() {
return (
-
- {/* */}
-
- Developed By
-
-
- &
-
-
-
-
-
- This app is developed by ScoreLab origanization with the
- collaboration of Trunks & Leaves organization for elephant
- conservation purposes.{'\n'}
- {'\n'}
- For more information contact us:
- Linking.openURL('https://mail.google.com')}>
- {' '}
- elly@scorelab.org
-
- {'\n'}
- {'\n'}
- Linking.openURL('http://www.scorelab.org/')}>
- Visits http://www.scorelab.org/
+ <>
+
+ this.props.navigation.goBack()} />
+
+
+
+ {/* */}
+
+ Developed By
+
+
+ {/* & */}
+
+
+
+
+
+ This app is developed by ScoreLab origanization with the
+ collaboration of Trunks & Leaves organization for elephant
+ conservation purposes.{'\n'}
+ {'\n'}
+ For more information contact us:
+ Linking.openURL('https://mail.google.com')}>
+ {' '}
+ elly@scorelab.org
+
+ {'\n'}
+ {'\n'}
+ Linking.openURL('http://www.scorelab.org/')}>
+ Visits http://www.scorelab.org/
+
+ {'\n'}
+
+ Linking.openURL('http://www.trunksnleaves.org/index.html')
+ }>
+ Visits http://www.trunksnleaves.org
+
+ {'\n'}
+ {'\n'}
- {'\n'}
-
- Linking.openURL('http://www.trunksnleaves.org/index.html')
- }>
- Visits http://www.trunksnleaves.org
-
- {'\n'}
- {'\n'}
-
+
+ {/* */}
- {/* */}
-
+ >
);
}
}
@@ -83,19 +89,19 @@ const styles = StyleSheet.create({
logo: {
width: 80,
height: 80,
- margin: 10,
+ // margin: 10,
resizeMode: 'stretch',
},
bigText: {
textAlign: 'center',
- color: 'black',
- fontSize: 20,
+ // color: 'black',
+ // fontSize: 18,
},
companyLogos: {
- width: 100,
+ width: '40%',
height: 100,
resizeMode: 'stretch',
- borderRadius: 20,
+ // borderRadius: 20,
},
cmpLogoCntner: {
margin: 10,
@@ -108,10 +114,10 @@ const styles = StyleSheet.create({
},
paragraph: {
textAlign: 'justify',
- color: 'black',
- fontSize: 17,
+ // color: 'black',
+ // fontSize: 17,
margin: 5,
- fontWeight: '100',
+ // fontWeight: '100',
},
imgContainer: {
width: Dimensions.get('window').width,
diff --git a/MobileApp/src/screens/CameraViewScreen/CameraViewScreen.js b/MobileApp/src/screens/CameraViewScreen/CameraViewScreen.js
index 2bdb3f09..39de7e59 100644
--- a/MobileApp/src/screens/CameraViewScreen/CameraViewScreen.js
+++ b/MobileApp/src/screens/CameraViewScreen/CameraViewScreen.js
@@ -44,6 +44,7 @@ class CameraViewScreen extends React.Component {
diff --git a/MobileApp/src/screens/DiscoverScreen/DiscoverScreen.js b/MobileApp/src/screens/DiscoverScreen/DiscoverScreen.js
index d98d0c36..6c71cb43 100644
--- a/MobileApp/src/screens/DiscoverScreen/DiscoverScreen.js
+++ b/MobileApp/src/screens/DiscoverScreen/DiscoverScreen.js
@@ -1,5 +1,5 @@
import * as React from 'react';
-import {View, StyleSheet, PermissionsAndroid} from 'react-native';
+import {View, StyleSheet, PermissionsAndroid, Dimensions} from 'react-native';
import MapView from 'react-native-maps';
import {Marker} from 'react-native-maps';
import Geolocation from '@react-native-community/geolocation';
@@ -7,20 +7,11 @@ import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndica
import {NavigationEvents} from 'react-navigation';
import database from '@react-native-firebase/database';
import {generateResult} from '../../components/UserDataHandling/UserDataHandling';
+import {Appbar} from 'react-native-paper';
// import {MAPMARKER} from '../../images/index';
var MapStyle = require('../../config/map.json');
class DiscoverScreen extends React.Component {
- static navigationOptions = ({navigation}) => {
- return {
- headerTitle: 'Explore Near By',
- headerStyle: {
- backgroundColor: '#004c21',
- },
- headerTintColor: 'white',
- };
- };
-
constructor(props) {
super(props);
@@ -32,15 +23,18 @@ class DiscoverScreen extends React.Component {
}
componentDidMount() {
+ console.log('did mount');
this.findCoordinates();
this.getObservations();
}
- getObservations = async function() {
+ componentDidUpdate() {
+ console.log('did update');
+ }
+
+ getObservations = async function () {
// Fetch the data snapshot
- const data = await database()
- .ref(`/usersObservations/`)
- .once('value');
+ const data = await database().ref(`/usersObservations/`).once('value');
// console.log(data)
const val = data.val();
@@ -92,7 +86,7 @@ class DiscoverScreen extends React.Component {
findCoordinates = async () => {
try {
const granted = await PermissionsAndroid.request(
- PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
+ PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('Location');
@@ -101,16 +95,18 @@ class DiscoverScreen extends React.Component {
const initialPosition = position;
const lon = initialPosition['coords']['longitude'];
const lat = initialPosition['coords']['latitude'];
- await this.setState({
+ this.setState({
location: [lon, lat],
activityIndicator: false,
});
+ console.log('codes');
},
error => console.log('Error', JSON.stringify(error)),
{enableHighAccuracy: false},
);
} else {
- await this.setState({
+ console.log('no permission');
+ this.setState({
activityIndicator: false,
});
}
@@ -121,63 +117,63 @@ class DiscoverScreen extends React.Component {
render() {
return (
-
-
- {this.state.activityIndicator ? (
-
-
-
- ) : (
-
- {this.state.observations.map((val, i) => (
-
- this.props.navigation.navigate('showDetailedPhoto', {
- img: val[2],
- title: val[0],
- subtitle: val[5],
- user: val[1],
- content: val[6],
- showPhoto: this.props.navigation,
- })
- }
- image={'map'}
+ <>
+
+
+
+
+ {/* */}
+ {this.state.activityIndicator ? (
+
+
- ))}
-
- )}
-
+
+ ) : (
+
+ {this.state.observations.map((val, i) => (
+
+ this.props.navigation.navigate('showDetailedPhoto', {
+ img: val[2],
+ title: val[0],
+ subtitle: val[5],
+ user: val[1],
+ content: val[6],
+ showPhoto: this.props.navigation,
+ })
+ }
+ // image={'map'}
+ />
+ ))}
+
+ )}
+
+ >
);
}
}
const styles = StyleSheet.create({
MainContainer: {
- position: 'absolute',
- top: 0,
- left: 0,
- right: 0,
- bottom: 0,
- alignItems: 'center',
- justifyContent: 'flex-end',
+ width: Dimensions.get('window').width,
+ height: Dimensions.get('window').height,
},
mapStyle: {
position: 'absolute',
diff --git a/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignInScreen.js b/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignInScreen.js
index 882214c9..57dfe56b 100644
--- a/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignInScreen.js
+++ b/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignInScreen.js
@@ -6,14 +6,15 @@ import {
Image,
Dimensions,
ImageBackground,
+ TextInput,
} from 'react-native';
-import {TextInput, Snackbar, Button} from 'react-native-paper';
+import {Snackbar, Button} from 'react-native-paper';
import {COVER, LOGO} from '../../images/index';
import auth from '@react-native-firebase/auth';
import {ScrollView} from 'react-native-gesture-handler';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
-export default class EmailAuthScreen extends React.Component {
+export default class EmailAuthScreenSignIn extends React.Component {
static navigationOptions = ({navigation}) => {
return {
headerTitle: 'Sign In',
@@ -29,8 +30,10 @@ export default class EmailAuthScreen extends React.Component {
this.state = {
password: '',
email: '',
- emailPattern: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
- passwordPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@_#\$%\^&\*])(?=.{8,})/,
+ emailPattern:
+ /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ passwordPattern:
+ /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@_#\$%\^&\*])(?=.{8,})/,
activityIndicator: false,
passwordErrMessage: 'Password is invalid',
passwordErr: false,
@@ -100,27 +103,27 @@ export default class EmailAuthScreen extends React.Component {
showsVerticalScrollIndicator={false}>
-
-
+ */}
Sign In
-
- Email
-
+ Email
this.setState({email: text})}
placeholder={'Eg. abc@gmail.com'}
mode="outlined"
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
+ // dense={true}
+ autoFocus={true}
inlineImageLeft={'email'}
inlineImagePadding={20}
autoCompleteType={'email'}
@@ -148,11 +151,11 @@ export default class EmailAuthScreen extends React.Component {
value={this.state.password}
onChangeText={text => this.setState({password: text})}
placeholder={'Password'}
- mode="outlined"
+ mode="flat"
inlineImageLeft={'lock'}
secureTextEntry={true}
inlineImagePadding={20}
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
autoCompleteType={'password'}
/>
+
+
+ Still not registered!{' '}
+
+ this.props.navigation.navigate('EmailSignUp')
+ }>
+ Click here
+ {' '}
+ to register
+
+
+
-
+ {/*
this.props.navigation.navigate('EmailSignUp')}
- mode="outlined">
+ mode="contained">
Sign Up
-
+ */}
@@ -204,7 +218,7 @@ export default class EmailAuthScreen extends React.Component {
const styles = StyleSheet.create({
fieldText: {
fontFamily: 'ProximaNova-Regular',
- fontWeight: '600'
+ fontWeight: '600',
},
container: {
flex: 1,
@@ -214,14 +228,14 @@ const styles = StyleSheet.create({
width: Dimensions.get('window').width,
},
btnContainer: {
- borderRadius: 10,
+ // borderRadius: 10,
justifyContent: 'flex-start',
},
btn: {
- width: '100%',
- height: 60,
+ // width: '100%',
+ // height: 60,
justifyContent: 'center',
- borderRadius: 10,
+ // borderRadius: 10,
},
logoIconContainer: {
flexDirection: 'row',
@@ -237,14 +251,14 @@ const styles = StyleSheet.create({
color: 'black',
fontSize: 30,
fontWeight: 'bold',
- marginLeft: 10,
+ // marginLeft: 10,
fontFamily: 'ProximaNova-Regular',
},
imgConatiner: {
width: Dimensions.get('window').width,
justifyContent: 'center',
alignItems: 'center',
- height: Dimensions.get('window').height
+ height: Dimensions.get('window').height,
},
logoBtnCntner: {
flex: 1,
diff --git a/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignUpScreen.js b/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignUpScreen.js
index 94c04465..adbd09db 100644
--- a/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignUpScreen.js
+++ b/MobileApp/src/screens/EmailAuthScreen/EmailAuthSignUpScreen.js
@@ -7,15 +7,16 @@ import {
Dimensions,
ImageBackground,
Alert,
+ TextInput,
} from 'react-native';
-import {TextInput, Snackbar, Button} from 'react-native-paper';
+import {Snackbar, Button} from 'react-native-paper';
import {COVER, LOGO} from '../../images/index';
import auth from '@react-native-firebase/auth';
import {ScrollView} from 'react-native-gesture-handler';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
import database from '@react-native-firebase/database';
-export default class EmailAuthScreen extends React.Component {
+export default class EmailAuthScreenSignUp extends React.Component {
static navigationOptions = ({navigation}) => {
return {
headerTitle: 'Sign In',
@@ -34,8 +35,10 @@ export default class EmailAuthScreen extends React.Component {
confirmPassword: '',
usernamePattern: /^[a-zA-Z]+ [a-zA-Z]+$/,
username: '',
- emailPattern: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
- passwordPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@_#\$%\^&\*])(?=.{8,})/,
+ emailPattern:
+ /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
+ passwordPattern:
+ /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@_#\$%\^&\*])(?=.{8,})/,
activityIndicator: false,
usernameErrMessage: 'Username is invalid!',
usernameErr: false,
@@ -91,9 +94,7 @@ export default class EmailAuthScreen extends React.Component {
console.log(JSON.stringify(user.user.toJSON().uid));
const uid = user.user.toJSON().uid;
// alert('Successfully Registered!')
- const ref = database()
- .ref('/users/')
- .child(uid);
+ const ref = database().ref('/users/').child(uid);
ref.set({
name: this.state.username,
@@ -133,14 +134,14 @@ export default class EmailAuthScreen extends React.Component {
showsVerticalScrollIndicator={false}>
-
-
+ */}
Sign Up
@@ -153,7 +154,7 @@ export default class EmailAuthScreen extends React.Component {
onChangeText={text => this.setState({username: text})}
placeholder={'Eg. Nimal Perera'}
mode="outlined"
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
inlineImageLeft={'account'}
inlineImagePadding={20}
autoCompleteType={'username'}
@@ -174,15 +175,13 @@ export default class EmailAuthScreen extends React.Component {
-
- Email
-
+ Email
this.setState({email: text})}
placeholder={'Eg. abc@gmail.com'}
mode="outlined"
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
inlineImageLeft={'email'}
inlineImagePadding={20}
autoCompleteType={'email'}
@@ -214,7 +213,7 @@ export default class EmailAuthScreen extends React.Component {
inlineImageLeft={'lock'}
secureTextEntry={true}
inlineImagePadding={20}
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
autoCompleteType={'password'}
/>
this.setState({confirmPassword: text})}
placeholder={'Confirm Password'}
mode="outlined"
- style={{borderRadius: 0}}
+ style={{borderBottomWidth: 1, borderColor: 'gray'}}
inlineImageLeft={'lock'}
secureTextEntry={true}
inlineImagePadding={20}
@@ -262,10 +261,10 @@ export default class EmailAuthScreen extends React.Component {
this.signUpBtnHandler()}
- mode="contained">
- Sign Up
+ style={[styles.btn, {marginTop: 'auto'}]}
+ onPress={() => this.signUpBtnHandler()}
+ mode="contained">
+ Sign Up
@@ -278,7 +277,7 @@ export default class EmailAuthScreen extends React.Component {
const styles = StyleSheet.create({
fieldText: {
fontFamily: 'ProximaNova-Regular',
- fontWeight: '600'
+ fontWeight: '600',
},
container: {
flex: 1,
@@ -288,14 +287,14 @@ const styles = StyleSheet.create({
width: Dimensions.get('window').width,
},
btnContainer: {
- borderRadius: 10,
+ // borderRadius: 10,
justifyContent: 'space-around',
},
btn: {
- width: '100%',
- height: 60,
+ // width: '100%',
+ // height: 60,
justifyContent: 'center',
- borderRadius: 10,
+ // borderRadius: 10,
},
logoIconContainer: {
flexDirection: 'row',
@@ -311,14 +310,14 @@ const styles = StyleSheet.create({
color: 'black',
fontSize: 30,
fontWeight: 'bold',
- marginLeft: 10,
+ // marginLeft: 10,
fontFamily: 'ProximaNova-Regular',
},
imgConatiner: {
width: Dimensions.get('window').width,
justifyContent: 'center',
alignItems: 'center',
- height: Dimensions.get('window').height
+ height: Dimensions.get('window').height,
},
logoBtnCntner: {
flex: 1,
diff --git a/MobileApp/src/screens/FeedScreen/FeedScreen.js b/MobileApp/src/screens/FeedScreen/FeedScreen.js
index f86476e5..93c72412 100644
--- a/MobileApp/src/screens/FeedScreen/FeedScreen.js
+++ b/MobileApp/src/screens/FeedScreen/FeedScreen.js
@@ -7,44 +7,16 @@ import {
SafeAreaView,
TouchableOpacity,
} from 'react-native';
-import {Avatar} from 'react-native-paper';
+import {Appbar, Avatar} from 'react-native-paper';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
import {CardComponent} from '../../components/CardComponent/CardComponent';
import auth from '@react-native-firebase/auth';
import database from '@react-native-firebase/database';
import {generateResult} from '../../components/UserDataHandling/UserDataHandling';
import {NavigationEvents} from 'react-navigation';
+import {withTheme} from 'react-native-paper';
class FeedScreen extends React.Component {
- static navigationOptions = ({navigation}) => {
- const {params = []} = navigation.state;
- return {
- headerTitle: 'Home',
- headerStyle: {
- backgroundColor: '#004c21',
- },
- headerTintColor: '#fff',
-
- headerLeft: () => (
- navigation.navigate('Profile')}>
- {params.userPhoto !== '' ? (
-
- ) : (
-
- )}
-
- ),
- };
- };
-
constructor(props) {
super(props);
this.state = {
@@ -59,19 +31,18 @@ class FeedScreen extends React.Component {
this.getObservations();
}
- getUserData = async function() {
+ getUserData = async function () {
const user = auth().currentUser;
// console.log(user)
const uid = user.uid;
- const ref = await database()
- .ref('/users/')
- .child(uid)
- .once('value');
+ const ref = await database().ref('/users/').child(uid).once('value');
const data = ref.val();
+ console.log('set params 1');
await this.props.navigation.setParams({
userPhoto: data.photo,
userName: data.name,
});
+ console.log('set params 2');
};
getObservations = async () => {
@@ -190,7 +161,7 @@ class FeedScreen extends React.Component {
} else {
observations.pop();
}
- await this.setState({
+ this.setState({
observations: [...this.state.observations, ...observations],
activityIndicator: false,
lastVisible: lastVisible,
@@ -223,69 +194,83 @@ class FeedScreen extends React.Component {
};
render() {
+ console.log(this.props.route.params);
return (
-
-
- {this.state.activityIndicator ? (
-
-
-
- ) : (
-
+ <>
+
+ this.props.navigation.navigate('Profile')}
+ />
+
+ this.props.navigation.navigate('SearchStack')}
+ />
+
+
+ {/* */}
+ {this.state.activityIndicator ? (
+
+
+
+ ) : (
- {this.state.observations.length > 0 ? (
-
- (
-
- )}
- // Item Key
- keyExtractor={(item, index) => String(index)}
- // Header (Title)
- // On End Reached (Takes a function)
+
+ {this.state.observations.length > 0 ? (
+
+ (
+
+ )}
+ // Item Key
+ keyExtractor={(item, index) => String(index)}
+ // Header (Title)
+ // On End Reached (Takes a function)
- // ListHeaderComponent={this.renderHeader}
- // Footer (Activity Indicator)
- ListFooterComponent={() => (
-
- )}
- onEndReached={this.getMoreObservation}
- // How Close To The End Of List Until Next Data Request Is Made
- onEndReachedThreshold={0.1}
- // Refreshing (Set To True When End Reached)
- refreshing={this.state.activityIndicator}
- />
-
- ) : (
-
- )}
+ // ListHeaderComponent={this.renderHeader}
+ // Footer (Activity Indicator)
+ ListFooterComponent={() => (
+
+ )}
+ onEndReached={this.getMoreObservation}
+ // How Close To The End Of List Until Next Data Request Is Made
+ onEndReachedThreshold={0.1}
+ // Refreshing (Set To True When End Reached)
+ refreshing={this.state.activityIndicator}
+ />
+
+ ) : (
+
+ )}
+
-
- )}
-
+ )}
+
+ >
);
}
}
@@ -301,4 +286,4 @@ const styles = StyleSheet.create({
fontSize: 25,
},
});
-export default FeedScreen;
+export default withTheme(FeedScreen);
diff --git a/MobileApp/src/screens/FormScreen/FormScreen.js b/MobileApp/src/screens/FormScreen/FormScreen.js
index 12b83533..8495ea4f 100644
--- a/MobileApp/src/screens/FormScreen/FormScreen.js
+++ b/MobileApp/src/screens/FormScreen/FormScreen.js
@@ -17,31 +17,12 @@ import Geolocation from '@react-native-community/geolocation';
import auth from '@react-native-firebase/auth';
import database from '@react-native-firebase/database';
import storage from '@react-native-firebase/storage';
-import {Button} from 'react-native-paper';
+import {Appbar, Button} from 'react-native-paper';
import {generateUUID} from '../../components/UserDataHandling/UserDataHandling';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
import {googleMapAPIKey} from '../../config/config';
class FormScreen extends React.Component {
- static navigationOptions = ({navigation}) => {
- const {params = {}} = navigation.state;
- return {
- headerTitle: 'Observation',
- headerStyle: {
- backgroundColor: '#004c21',
- },
- headerTintColor: '#fff',
- headerRight: () => (
- params.handlePress()}>
- Share
-
- ),
- };
- };
-
constructor(props) {
super(props);
@@ -50,8 +31,8 @@ class FormScreen extends React.Component {
date = date.toString().split(' ');
date = date.splice(0, date.length - 2);
this.state = {
- photos: this.props.navigation.getParam('dataUri'),
- rphotos: this.props.navigation.getParam('ruri'),
+ photos: this.props.route.params.dataUri,
+ rphotos: this.props.route.params.ruri,
isAlive: 1,
isSingle: 0,
cause: 0,
@@ -78,21 +59,16 @@ class FormScreen extends React.Component {
componentDidMount() {
this.findCoordinates();
- this.props.navigation.setParams({
- handlePress: () => this.uploadData(),
- });
}
- uploadData = async function() {
+ uploadData = async function () {
// Get the users ID
console.log('Pressed');
this.setState({
activityIndicator: true,
});
const uid = await auth().currentUser.uid;
- const user = await database()
- .ref(`/users/${uid}`)
- .once('value');
+ const user = await database().ref(`/users/${uid}`).once('value');
const uname = user.val().name;
const uimg = user.val().photo;
@@ -149,7 +125,7 @@ class FormScreen extends React.Component {
this.props.navigation.navigate('CameraViewScreen');
};
- requestLocationPermission = async function() {
+ requestLocationPermission = async function () {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
@@ -220,228 +196,241 @@ class FormScreen extends React.Component {
render() {
const {navigate} = this.props.navigation;
return (
-
-
-
- navigate('showPhoto', {img: this.state.photos.toString()})
- }>
-
-
-
+ <>
+
+ this.props.navigation.goBack()} />
+
+ this.uploadData()}>
+ Share
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ navigate('showPhoto', {img: this.state.photos.toString()})
+ }>
+
+
+
- {this.state.isAlive === 1 ? (
-
+
- ) : (
-
- )}
+
- {this.state.isAlive === 0 && this.state.cause === 0 ? (
-
+
+
- ) : (
-
- )}
- {this.state.isAlive === 0 &&
- this.state.cause === 0 &&
- this.state.accidentKind === 4 ? (
- ) : (
-
- )}
- {this.state.isAlive === 0 && this.state.cause === 1 ? (
-
- ) : (
-
- )}
- {this.state.isAlive === 0 &&
- this.state.cause === 1 &&
- this.state.intentinalKind === 2 ? (
-
- ) : (
-
- )}
-
- {this.state.isAlive === 1 ? (
-
+ {this.state.isAlive === 1 ? (
-
- ) : (
-
-
+ )}
+
+ {this.state.isAlive === 0 && this.state.cause === 0 ? (
+ ) : (
+
+ )}
+
+ {this.state.isAlive === 0 &&
+ this.state.cause === 0 &&
+ this.state.accidentKind === 4 ? (
+ ) : (
+
+ )}
+
+ {this.state.isAlive === 0 && this.state.cause === 1 ? (
-
- )}
-
- {this.state.isAlive === 1 && this.state.isSingle === 0 ? (
-
- ) : (
-
- )}
+ ) : (
+
+ )}
- {this.state.isAlive === 1 && this.state.isSingle !== 0 ? (
-
-
+ ) : (
+
+ )}
+
+ {this.state.isAlive === 1 ? (
+
+
+
+ ) : (
+
+
+
+
+
+
+ )}
+
+ {this.state.isAlive === 1 && this.state.isSingle === 0 ? (
-
- ) : (
-
- )}
-
-
+ ) : (
+
+ )}
+
+ {this.state.isAlive === 1 && this.state.isSingle !== 0 ? (
+
+
+
+
+ ) : (
+
+ )}
+
+
+ >
);
}
}
diff --git a/MobileApp/src/screens/LandingScreen/LandingScreen.js b/MobileApp/src/screens/LandingScreen/LandingScreen.js
index ba4db501..20fb329d 100644
--- a/MobileApp/src/screens/LandingScreen/LandingScreen.js
+++ b/MobileApp/src/screens/LandingScreen/LandingScreen.js
@@ -1,7 +1,14 @@
import * as React from 'react';
-import {View, StyleSheet, Image, Dimensions} from 'react-native';
+import {
+ View,
+ StyleSheet,
+ Image,
+ Dimensions,
+ PermissionsAndroid,
+} from 'react-native';
import auth from '@react-native-firebase/auth';
import {LOGO} from '../../images/index';
+import SplashScreen from 'react-native-splash-screen';
class LandingScreen extends React.Component {
componentDidMount() {
@@ -12,8 +19,23 @@ class LandingScreen extends React.Component {
this.props.navigation.navigate('SignIn');
}
});
+ SplashScreen.hide();
+ this.checkPermission();
}
+ checkPermission = async () => {
+ try {
+ const granted = await PermissionsAndroid.request(
+ PermissionsAndroid.PERMISSIONS.CAMERA,
+ );
+ if (granted === PermissionsAndroid.RESULTS.GRANTED) {
+ console.log('CAMERA');
+ }
+ } catch (err) {
+ console.log(err.message);
+ }
+ };
+
render() {
return (
diff --git a/MobileApp/src/screens/LoginScreen/LoginScreen.js b/MobileApp/src/screens/LoginScreen/LoginScreen.js
index 4bf8a3b3..fc9b870f 100755
--- a/MobileApp/src/screens/LoginScreen/LoginScreen.js
+++ b/MobileApp/src/screens/LoginScreen/LoginScreen.js
@@ -50,9 +50,9 @@ class LoginScreen extends React.Component {
style={styles.scrollView}>
-
+ {/*
-
+ */}
Ele Watch
@@ -60,20 +60,20 @@ class LoginScreen extends React.Component {
Hello there! Please sign in.
- this.facebookLoginBtnHandler(navigate)}
loading={true}
size={30}>
Sign In with Facebook
-
+ */}
this.GoogleLoginBtnHandler(navigate)}
size={30}>
@@ -83,7 +83,7 @@ class LoginScreen extends React.Component {
this.emailLoginBtnHandler()}
size={30}>
@@ -136,7 +136,7 @@ const styles = StyleSheet.create({
fontSize: 40,
fontWeight: 'bold',
textAlign: 'left',
- marginLeft: 10,
+ // marginLeft: 10,
},
imgConatiner: {
width: Dimensions.get('window').width,
@@ -150,6 +150,7 @@ const styles = StyleSheet.create({
fontSize: 18,
fontWeight: '700',
textAlign: 'left',
+ marginBottom: 10,
},
logoBtnCntner: {
flex: 1,
diff --git a/MobileApp/src/screens/ProfileScreen/ProfileScreen.js b/MobileApp/src/screens/ProfileScreen/ProfileScreen.js
index afafe8d7..b4aecf60 100644
--- a/MobileApp/src/screens/ProfileScreen/ProfileScreen.js
+++ b/MobileApp/src/screens/ProfileScreen/ProfileScreen.js
@@ -8,7 +8,7 @@ import {
Image,
Dimensions,
} from 'react-native';
-import {Button, Menu, Avatar} from 'react-native-paper';
+import {Button, Menu, Avatar, Appbar} from 'react-native-paper';
import {TouchableOpacity} from 'react-native-gesture-handler';
import {generateResult} from '../../components/UserDataHandling/UserDataHandling';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
@@ -17,36 +17,6 @@ import database from '@react-native-firebase/database';
import Icon from 'react-native-vector-icons/dist/MaterialCommunityIcons';
class ProfileScreen extends React.Component {
- static navigationOptions = ({navigation}) => {
- const {params = []} = navigation.state;
- return {
- headerTitle: 'My Profile',
- headerStyle: {
- backgroundColor: '#004c21',
- },
- headerTintColor: '#fff',
- headerRight: () => (
- params.closeMenu()}
- anchor={
- params.openMenu()}>
-
-
- }>
- params.onPressMenuLogout()}
- title="LOGOUT"
- />
- params.onPressMenuAbout()}
- title="ABOUT ELLY"
- />
-
- ),
- };
- };
-
constructor(props) {
super(props);
this.state = {
@@ -62,18 +32,13 @@ class ProfileScreen extends React.Component {
};
}
+ aboutHandler = async () => {
+ this.props.navigation.navigate('AboutScreen');
+ this.closeMenu();
+ };
+
componentDidMount() {
this.getUserProfile();
- this.props.navigation.setParams({
- onPressMenuAbout: () => {
- this.props.navigation.navigate('AboutScreen');
- this.closeMenu();
- },
- onPressMenuLogout: () => this.logutHandler(),
- showMenu: false,
- openMenu: () => this.openMenu(),
- closeMenu: () => this.closeMenu(),
- });
database()
.ref('/usersObservations/')
.child(this.state.uid)
@@ -91,16 +56,12 @@ class ProfileScreen extends React.Component {
openMenu() {
console.log('opened');
- this.props.navigation.setParams({
- showMenu: true,
- });
+ this.setState({showMenu: true});
}
closeMenu() {
console.log('closed');
- this.props.navigation.setParams({
- showMenu: false,
- });
+ this.setState({showMenu: false});
}
_onRefresh() {
@@ -113,10 +74,7 @@ class ProfileScreen extends React.Component {
getUserProfile = async () => {
const user = auth().currentUser;
const uid = user.uid;
- const ref = await database()
- .ref('/users/')
- .child(uid)
- .once('value');
+ const ref = await database().ref('/users/').child(uid).once('value');
const data = ref.val();
console.log(data);
await this.setState({
@@ -262,127 +220,146 @@ class ProfileScreen extends React.Component {
render() {
return (
-
- {this.state.activityIndicator ? (
-
-
-
- ) : (
-
- {this.state.userPhoto !== '' ? (
-
- {/* {this.state.userNick} */}
+ <>
+
+ this.props.navigation.goBack()} />
+
+ this.closeMenu()}
+ anchor={
+ this.openMenu()}>
+
+
+ }>
+ this.logutHandler()} title="Logout" />
+ this.aboutHandler()} title="About" />
+
+
+
+ {this.state.activityIndicator ? (
+
+
+
+ ) : (
+
+ {this.state.userPhoto !== '' ? (
+
+ {/* {this.state.userNick} */}
-
-
- {this.state.userName.toUpperCase()}
-
-
- Observations
-
- {this.state.noObs}
-
- ) : (
-
- {this.state.userNick}
-
- {this.state.userName}
-
- Observations
-
- {this.state.noObs}
-
- )}
+
+
+ {this.state.userName.toUpperCase()}
+
+
+ Observations
+
+ {this.state.noObs}
+
+ ) : (
+
+ {/* {this.state.userNick} */}
+
+ {this.state.userName}
+
+ Observations
+
+ {this.state.noObs}
+
+ )}
- {this.state.userObservations.length > 0 ? (
- (
-
- this.props.navigation.navigate('showDetailedPhoto', {
- img: item[2],
- title: this.state.userName,
- subtitle: this.state.userNick,
- user: this.state.userPhoto,
- content: item[6],
- showPhoto: this.props.navigation,
- })
- }
- style={{justifyContent: 'center'}}>
-
-
-
- {item[8].toUpperCase()}
-
-
-
-
- )}
- // Item Key
- keyExtractor={(item, index) => String(index)}
- // Header (Title)
- // On End Reached (Takes a function)
+ {this.state.userObservations.length > 0 ? (
+ (
+
+ this.props.navigation.navigate('showDetailedPhoto', {
+ img: item[2],
+ title: this.state.userName,
+ subtitle: this.state.userNick,
+ user: this.state.userPhoto,
+ content: item[6],
+ showPhoto: this.props.navigation,
+ })
+ }
+ style={{justifyContent: 'center'}}>
+
+
+
+ {item[8].toUpperCase()}
+
+
+
+
+ )}
+ // Item Key
+ keyExtractor={(item, index) => String(index)}
+ // Header (Title)
+ // On End Reached (Takes a function)
- // ListHeaderComponent={Hello }
- // Footer (Activity Indicator)
- ListFooterComponent={() => (
-
- )}
- onEndReached={this.getMoreUserData}
- // How Close To The End Of List Until Next Data Request Is Made
- onEndReachedThreshold={0.1}
- // Refreshing (Set To True When End Reached)
- refreshing={this.state.activityIndicator}
- />
- ) : (
-
- this.props.navigation.navigate('PhotoLandingScreen')
- }>
- Add Observation
-
- )}
-
- )}
-
+ // ListHeaderComponent={Hello }
+ // Footer (Activity Indicator)
+ ListFooterComponent={() => (
+
+ )}
+ onEndReached={this.getMoreUserData}
+ // How Close To The End Of List Until Next Data Request Is Made
+ onEndReachedThreshold={0.1}
+ // Refreshing (Set To True When End Reached)
+ refreshing={this.state.activityIndicator}
+ />
+ ) : (
+
+ this.props.navigation.navigate('PhotoLandingScreen')
+ }>
+ Add Observation
+
+ )}
+
+ )}
+
+ >
);
}
}
@@ -400,7 +377,7 @@ const styles = StyleSheet.create({
justifyContent: 'center',
alignItems: 'center',
padding: 10,
- backgroundColor: 'green',
+ // backgroundColor: 'green',
},
observationConatiner: {
width: '100%',
@@ -409,16 +386,15 @@ const styles = StyleSheet.create({
color: 'white',
},
observationTxt: {
- color: 'white',
fontSize: 20,
},
userName: {
fontWeight: 'bold',
- color: 'white',
+ // color: 'white',
margin: 5,
},
obCount: {
- color: 'white',
+ // color: 'white',
fontSize: 35,
},
userPhoto: {
diff --git a/MobileApp/src/screens/SearchScreen/SearchScreen.js b/MobileApp/src/screens/SearchScreen/SearchScreen.js
index 23073ad0..22ff8439 100644
--- a/MobileApp/src/screens/SearchScreen/SearchScreen.js
+++ b/MobileApp/src/screens/SearchScreen/SearchScreen.js
@@ -7,7 +7,7 @@ import {
Image,
Dimensions,
} from 'react-native';
-import {Searchbar, Chip} from 'react-native-paper';
+import {Searchbar, Chip, Appbar} from 'react-native-paper';
import {generateResult} from '../../components/UserDataHandling/UserDataHandling';
import ActivityIndicator from '../../components/ActivityIndicator/ActivityIndicator';
import database from '@react-native-firebase/database';
@@ -22,40 +22,16 @@ class SearchScreen extends React.Component {
};
}
- static navigationOptions = ({navigation}) => {
- const {params = {}} = navigation.state;
- return {
- headerStyle: {
- backgroundColor: '#004c21',
- },
- headerTintColor: 'white',
- headerRight: () => (
- params.handleText(query)}
- value={params.query}
- />
- ),
- };
- };
-
componentDidMount() {
- this.props.navigation.setParams({
- handleText: text => this.onTextChangeHandler(text),
- query: this.state.firstQuery,
- });
this.getObservations(this.state.type);
}
onTextChangeHandler = text => {
this.setState({
firstQuery: text,
+ activityIndicator: true,
});
this.getObservations(text ? text.toLowerCase() : '');
- this.props.navigation.setParams({
- query: text,
- });
};
getObservations = async type => {
@@ -131,7 +107,7 @@ class SearchScreen extends React.Component {
userObservations.pop();
}
- await this.setState({
+ this.setState({
activityIndicator: false,
lastVisible: lastVisible,
noObs: userObservations.length,
@@ -224,17 +200,27 @@ class SearchScreen extends React.Component {
render() {
return (
-
- {this.state.activityIndicator ? (
-
-
-
- ) : (
-
- {/*
+ <>
+
+ this.props.navigation.goBack()} />
+ this.onTextChangeHandler(query)}
+ value={this.state.firstQuery}
+ />
+
+
+ {this.state.activityIndicator ? (
+
+
+
+ ) : (
+
+ {/*
*/}
- (
-
- this.props.navigation.navigate('showDetailedPhoto', {
- img: item[2],
- title: item[0],
- subtitle: item[5],
- user: item[1],
- content: item[6],
- showPhoto: this.props.navigation,
- })
- }
- style={{justifyContent: 'center'}}>
-
-
- )}
- // Item Key
- keyExtractor={(item, index) => String(index)}
- // Header (Title)
- // On End Reached (Takes a function)
+ (
+
+ this.props.navigation.navigate('showDetailedPhoto', {
+ img: item[2],
+ title: item[0],
+ subtitle: item[5],
+ user: item[1],
+ content: item[6],
+ showPhoto: this.props.navigation,
+ })
+ }
+ style={{justifyContent: 'center'}}>
+
+
+ )}
+ // Item Key
+ keyExtractor={(item, index) => String(index)}
+ // Header (Title)
+ // On End Reached (Takes a function)
- // ListHeaderComponent={Hello }
- // Footer (Activity Indicator)
- ListFooterComponent={() => (
-
- )}
- onEndReached={() => this.getMoreObservations('all')}
- // How Close To The End Of List Until Next Data Request Is Made
- onEndReachedThreshold={0.1}
- // Refreshing (Set To True When End Reached)
- refreshing={this.state.activityIndicator}
- />
-
- )}
-
+ // ListHeaderComponent={Hello }
+ // Footer (Activity Indicator)
+ ListFooterComponent={() => (
+
+ )}
+ onEndReached={() => this.getMoreObservations('all')}
+ // How Close To The End Of List Until Next Data Request Is Made
+ onEndReachedThreshold={0.1}
+ // Refreshing (Set To True When End Reached)
+ refreshing={this.state.activityIndicator}
+ />
+
+ )}
+
+ >
);
}
}
@@ -321,7 +308,7 @@ const styles = StyleSheet.create({
justifyContent: 'flex-start',
alignItems: 'center',
alignSelf: 'stretch',
- marginTop: 1,
+ marginTop: 5,
width: Dimensions.get('window').width,
},
chipContainer: {
diff --git a/MobileApp/src/screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen.js b/MobileApp/src/screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen.js
index 7f661a64..81d2cb78 100644
--- a/MobileApp/src/screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen.js
+++ b/MobileApp/src/screens/ShowDetailedPhotoScreen/ShowDetailedPhotoScreen.js
@@ -2,6 +2,8 @@ import * as React from 'react';
import {View, StyleSheet, Dimensions} from 'react-native';
import {CardComponent} from '../../components/CardComponent/CardComponent';
import {ScrollView} from 'react-native-gesture-handler';
+import {FeedDetails} from '../../components/FeedDetail/FeedDetails';
+import {Appbar} from 'react-native-paper';
class ShowDetailedPhotoScreen extends React.Component {
constructor(props) {
@@ -21,21 +23,27 @@ class ShowDetailedPhotoScreen extends React.Component {
};
render() {
- console.log(this.props.navigation.getParam('content'));
+ console.log(this.props.route.params);
return (
-
-
-
-
-
+ <>
+
+ this.props.navigation.goBack()} />
+
+
+
+
+
+
+
+ >
);
}
}