Browse Source

Initial Commit

ftech 1 year ago
commit
1a6a9ed09a
100 changed files with 1715 additions and 0 deletions
  1. 2 0
      .bundle/config
  2. 4 0
      .eslintrc.js
  3. 63 0
      .gitignore
  4. 1 0
      .node-version
  5. 7 0
      .prettierrc.js
  6. 1 0
      .watchmanconfig
  7. 63 0
      App.js
  8. 6 0
      Gemfile
  9. 11 0
      POC_Documentation.md
  10. 14 0
      __tests__/App-test.tsx
  11. 172 0
      android/app/build.gradle
  12. BIN
      android/app/debug.keystore
  13. 10 0
      android/app/proguard-rules.pro
  14. 13 0
      android/app/src/debug/AndroidManifest.xml
  15. 75 0
      android/app/src/debug/java/com/navmelon/ReactNativeFlipper.java
  16. 25 0
      android/app/src/main/AndroidManifest.xml
  17. 93 0
      android/app/src/main/assets/custom/OFL.txt
  18. 6 0
      android/app/src/main/assets/custom/images.js
  19. BIN
      android/app/src/main/assets/fonts/Poppins-Black.ttf
  20. BIN
      android/app/src/main/assets/fonts/Poppins-BlackItalic.ttf
  21. BIN
      android/app/src/main/assets/fonts/Poppins-Bold.ttf
  22. BIN
      android/app/src/main/assets/fonts/Poppins-BoldItalic.ttf
  23. BIN
      android/app/src/main/assets/fonts/Poppins-ExtraBold.ttf
  24. BIN
      android/app/src/main/assets/fonts/Poppins-ExtraBoldItalic.ttf
  25. BIN
      android/app/src/main/assets/fonts/Poppins-ExtraLight.ttf
  26. BIN
      android/app/src/main/assets/fonts/Poppins-ExtraLightItalic.ttf
  27. BIN
      android/app/src/main/assets/fonts/Poppins-Italic.ttf
  28. BIN
      android/app/src/main/assets/fonts/Poppins-Light.ttf
  29. BIN
      android/app/src/main/assets/fonts/Poppins-LightItalic.ttf
  30. BIN
      android/app/src/main/assets/fonts/Poppins-Medium.ttf
  31. BIN
      android/app/src/main/assets/fonts/Poppins-MediumItalic.ttf
  32. BIN
      android/app/src/main/assets/fonts/Poppins-Regular.ttf
  33. BIN
      android/app/src/main/assets/fonts/Poppins-SemiBold.ttf
  34. BIN
      android/app/src/main/assets/fonts/Poppins-SemiBoldItalic.ttf
  35. BIN
      android/app/src/main/assets/fonts/Poppins-Thin.ttf
  36. BIN
      android/app/src/main/assets/fonts/Poppins-ThinItalic.ttf
  37. 35 0
      android/app/src/main/java/com/navmelon/MainActivity.java
  38. 62 0
      android/app/src/main/java/com/navmelon/MainApplication.java
  39. BIN
      android/app/src/main/res/drawable/newscout_logo_dark.png
  40. BIN
      android/app/src/main/res/drawable/newscout_logo_light.png
  41. 36 0
      android/app/src/main/res/drawable/rn_edit_text_material.xml
  42. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  43. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  44. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  45. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  46. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  47. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  48. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  49. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  50. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  51. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  52. 3 0
      android/app/src/main/res/values/strings.xml
  53. 9 0
      android/app/src/main/res/values/styles.xml
  54. 20 0
      android/app/src/release/java/com/navmelon/ReactNativeFlipper.java
  55. 21 0
      android/build.gradle
  56. 44 0
      android/gradle.properties
  57. BIN
      android/gradle/wrapper/gradle-wrapper.jar
  58. 5 0
      android/gradle/wrapper/gradle-wrapper.properties
  59. 234 0
      android/gradlew
  60. 89 0
      android/gradlew.bat
  61. 93 0
      android/link-assets-manifest.json
  62. 4 0
      android/settings.gradle
  63. 4 0
      app.json
  64. 93 0
      assets/fonts/OFL.txt
  65. BIN
      assets/fonts/Poppins-Black.ttf
  66. BIN
      assets/fonts/Poppins-BlackItalic.ttf
  67. BIN
      assets/fonts/Poppins-Bold.ttf
  68. BIN
      assets/fonts/Poppins-BoldItalic.ttf
  69. BIN
      assets/fonts/Poppins-ExtraBold.ttf
  70. BIN
      assets/fonts/Poppins-ExtraBoldItalic.ttf
  71. BIN
      assets/fonts/Poppins-ExtraLight.ttf
  72. BIN
      assets/fonts/Poppins-ExtraLightItalic.ttf
  73. BIN
      assets/fonts/Poppins-Italic.ttf
  74. BIN
      assets/fonts/Poppins-Light.ttf
  75. BIN
      assets/fonts/Poppins-LightItalic.ttf
  76. BIN
      assets/fonts/Poppins-Medium.ttf
  77. BIN
      assets/fonts/Poppins-MediumItalic.ttf
  78. BIN
      assets/fonts/Poppins-Regular.ttf
  79. BIN
      assets/fonts/Poppins-SemiBold.ttf
  80. BIN
      assets/fonts/Poppins-SemiBoldItalic.ttf
  81. BIN
      assets/fonts/Poppins-Thin.ttf
  82. BIN
      assets/fonts/Poppins-ThinItalic.ttf
  83. BIN
      assets/images/VertCard.png
  84. BIN
      assets/images/hp_newscard.png
  85. 9 0
      assets/images/images.js
  86. BIN
      assets/images/newscout_logo_dark.png
  87. BIN
      assets/images/newscout_logo_light.png
  88. BIN
      assets/images/pubg.png
  89. 3 0
      babel.config.js
  90. 25 0
      components/atoms/Button.js
  91. 24 0
      components/atoms/Card.js
  92. 25 0
      components/atoms/Header.js
  93. 20 0
      components/molecules/NewscoutLogo.js
  94. 14 0
      components/molecules/PrimaryButton.js
  95. 14 0
      components/molecules/SecondaryButton.js
  96. 20 0
      components/organisms/Buttons/BookmarkButton.js
  97. 20 0
      components/organisms/Buttons/ShareButton.js
  98. 96 0
      components/organisms/Cards/HorizontalNewsCard.js
  99. 59 0
      components/organisms/Cards/ImageBGCard.js
  100. 68 0
      components/organisms/Cards/VerticalNewsCard.js

+ 2 - 0
.bundle/config

@@ -0,0 +1,2 @@
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_FORCE_RUBY_PLATFORM: 1

+ 4 - 0
.eslintrc.js

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

+ 63 - 0
.gitignore

@@ -0,0 +1,63 @@
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+ios/.xcode.env.local
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+*.hprof
+.cxx/
+*.keystore
+!debug.keystore
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/
+
+**/fastlane/report.xml
+**/fastlane/Preview.html
+**/fastlane/screenshots
+**/fastlane/test_output
+
+# Bundle artifact
+*.jsbundle
+
+# Ruby / CocoaPods
+/ios/Pods/
+/vendor/bundle/
+
+# Temporary files created by Metro to check the health of the file watcher
+.metro-health-check*

+ 1 - 0
.node-version

@@ -0,0 +1 @@
+18

+ 7 - 0
.prettierrc.js

@@ -0,0 +1,7 @@
+module.exports = {
+  arrowParens: 'avoid',
+  bracketSameLine: true,
+  bracketSpacing: false,
+  singleQuote: true,
+  trailingComma: 'all',
+};

+ 1 - 0
.watchmanconfig

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

+ 63 - 0
App.js

@@ -0,0 +1,63 @@
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ */
+
+import { NavigationContainer } from '@react-navigation/native';
+import React from 'react';
+
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import {
+  SafeAreaView,
+  ScrollView,
+  StatusBar,
+  StyleSheet,
+  Text,
+  useColorScheme,
+  View,
+} from 'react-native';
+import LoginPage from './screens/LoginPage';
+import HomePageNavigator from './navigation/HomePageNavigator';
+
+const AppStack = createNativeStackNavigator();
+
+const App = () => {
+  return (
+    <NavigationContainer>
+      <AppStack.Navigator
+        iniialRouteName="Home"
+        headerShown={true}
+      >
+        <AppStack.Screen 
+          name='Login'
+          component={LoginPage}
+          options={{
+            headerShown:false
+          }}
+        />
+        <AppStack.Screen
+          name='Home'
+          component={HomePageNavigator}
+          options={{headerShown:false}}
+        />
+
+        
+      </AppStack.Navigator>
+      {/* <View style={styles.appContainer}>
+        <Text>App</Text>
+      </View> */}
+    </NavigationContainer>
+
+  )
+}
+
+const styles = StyleSheet.create({
+  appContainer: {
+    flex: 1,
+  },
+
+});
+
+export default App;

+ 6 - 0
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.6.10'
+
+gem 'cocoapods', '>= 1.11.3'

+ 11 - 0
POC_Documentation.md

@@ -0,0 +1,11 @@
+# POC Documentation
+
+1. Setup the folder structure
+    <a>https://medium.com/@techwithmuskan/best-folder-structure-for-react-native-project-c6d7dd6dd494</a>
+2. Setting up the theme constants folder
+3. Setting up the react-native-vector-icons
+    <a>https://github.com/oblador/react-native-vector-icons#installation</a>
+4. Setup the assets with fonts, svg and static images as per requirements
+    <a>https://blog.logrocket.com/adding-custom-fonts-react-native/</a>
+5. Setup React-native-linear-gradient
+<a>https://blog.logrocket.com/complex-gradients-react-native-linear-gradient/</a>

+ 14 - 0
__tests__/App-test.tsx

@@ -0,0 +1,14 @@
+/**
+ * @format
+ */
+
+import 'react-native';
+import React from 'react';
+import App from '../App';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+  renderer.create(<App />);
+});

+ 172 - 0
android/app/build.gradle

@@ -0,0 +1,172 @@
+apply plugin: "com.android.application"
+apply plugin: "com.facebook.react"
+
+import com.android.build.OutputFile
+
+/**
+ * This is the configuration block to customize your React Native Android app.
+ * By default you don't need to apply any configuration, just uncomment the lines you need.
+ */
+react {
+    /* Folders */
+    //   The root of your project, i.e. where "package.json" lives. Default is '..'
+    // root = file("../")
+    //   The folder where the react-native NPM package is. Default is ../node_modules/react-native
+    // reactNativeDir = file("../node_modules/react-native")
+    //   The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
+    // codegenDir = file("../node_modules/react-native-codegen")
+    //   The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
+    // cliFile = file("../node_modules/react-native/cli.js")
+
+    /* Variants */
+    //   The list of variants to that are debuggable. For those we're going to
+    //   skip the bundling of the JS bundle and the assets. By default is just 'debug'.
+    //   If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
+    // debuggableVariants = ["liteDebug", "prodDebug"]
+
+    /* Bundling */
+    //   A list containing the node command and its flags. Default is just 'node'.
+    // nodeExecutableAndArgs = ["node"]
+    //
+    //   The command to run when bundling. By default is 'bundle'
+    // bundleCommand = "ram-bundle"
+    //
+    //   The path to the CLI configuration file. Default is empty.
+    // bundleConfig = file(../rn-cli.config.js)
+    //
+    //   The name of the generated asset file containing your JS bundle
+    // bundleAssetName = "MyApplication.android.bundle"
+    //
+    //   The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
+    // entryFile = file("../js/MyApplication.android.js")
+    //
+    //   A list of extra flags to pass to the 'bundle' commands.
+    //   See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
+    // extraPackagerArgs = []
+
+    /* Hermes Commands */
+    //   The hermes compiler command to run. By default it is 'hermesc'
+    // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
+    //
+    //   The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
+    // hermesFlags = ["-O", "-output-source-map"]
+}
+
+/**
+ * Set this to true to create four separate APKs instead of one,
+ * one for each native architecture. This is useful if you don't
+ * use App Bundles (https://developer.android.com/guide/app-bundle/)
+ * and want to have separate APKs to upload to the Play Store.
+ */
+def enableSeparateBuildPerCPUArchitecture = false
+
+/**
+ * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
+ */
+def enableProguardInReleaseBuilds = false
+
+/**
+ * The preferred build flavor of JavaScriptCore (JSC)
+ *
+ * For example, to use the international variant, you can use:
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ *
+ * The international variant includes ICU i18n library and necessary data
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
+ * give correct results when using with locales other than en-US. Note that
+ * this variant is about 6MiB larger per architecture than default.
+ */
+def jscFlavor = 'org.webkit:android-jsc:+'
+
+/**
+ * Private function to get the list of Native Architectures you want to build.
+ * This reads the value from reactNativeArchitectures in your gradle.properties
+ * file and works together with the --active-arch-only flag of react-native run-android.
+ */
+def reactNativeArchitectures() {
+    def value = project.getProperties().get("reactNativeArchitectures")
+    return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
+}
+
+android {
+    ndkVersion rootProject.ext.ndkVersion
+
+    compileSdkVersion rootProject.ext.compileSdkVersion
+
+    namespace "com.navmelon"
+    defaultConfig {
+        applicationId "com.navmelon"
+        minSdkVersion rootProject.ext.minSdkVersion
+        targetSdkVersion rootProject.ext.targetSdkVersion
+        versionCode 1
+        versionName "1.0"
+    }
+
+    splits {
+        abi {
+            reset()
+            enable enableSeparateBuildPerCPUArchitecture
+            universalApk false  // If true, also generate a universal APK
+            include (*reactNativeArchitectures())
+        }
+    }
+    signingConfigs {
+        debug {
+            storeFile file('debug.keystore')
+            storePassword 'android'
+            keyAlias 'androiddebugkey'
+            keyPassword 'android'
+        }
+    }
+    buildTypes {
+        debug {
+            signingConfig signingConfigs.debug
+        }
+        release {
+            // Caution! In production, you need to generate your own keystore file.
+            // see https://reactnative.dev/docs/signed-apk-android.
+            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 =
+                        defaultConfig.versionCode * 1000 + versionCodes.get(abi)
+            }
+
+        }
+    }
+}
+
+dependencies {
+    // The version of react-native is set by the React Native Gradle Plugin
+    implementation("com.facebook.react:react-android")
+
+    implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
+
+    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
+    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
+        exclude group:'com.squareup.okhttp3', module:'okhttp'
+    }
+
+    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
+    if (hermesEnabled.toBoolean()) {
+        implementation("com.facebook.react:hermes-android")
+    } else {
+        implementation jscFlavor
+    }
+}
+
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); 
+apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")
+applyNativeModulesAppBuildGradle(project)

BIN
android/app/debug.keystore


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

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

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

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+
+    <application
+        android:usesCleartextTraffic="true"
+        tools:targetApi="28"
+        tools:ignore="GoogleAppIndexingWarning">
+        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
+    </application>
+</manifest>

+ 75 - 0
android/app/src/debug/java/com/navmelon/ReactNativeFlipper.java

@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * <p>This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.navmelon;
+
+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.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;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the debug
+ * flavor of it. Here you can add your own plugins and customize the Flipper setup.
+ */
+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 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());
+      }
+    }
+  }
+}

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

@@ -0,0 +1,25 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-permission android:name="android.permission.INTERNET" />
+
+    <application
+      android:name=".MainApplication"
+      android:label="@string/app_name"
+      android:icon="@mipmap/ic_launcher"
+      android:roundIcon="@mipmap/ic_launcher_round"
+      android:allowBackup="false"
+      android:theme="@style/AppTheme">
+      <activity
+        android:name=".MainActivity"
+        android:label="@string/app_name"
+        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
+        android:launchMode="singleTask"
+        android:windowSoftInputMode="adjustResize"
+        android:exported="true">
+        <intent-filter>
+            <action android:name="android.intent.action.MAIN" />
+            <category android:name="android.intent.category.LAUNCHER" />
+        </intent-filter>
+      </activity>
+    </application>
+</manifest>

+ 93 - 0
android/app/src/main/assets/custom/OFL.txt

@@ -0,0 +1,93 @@
+Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.

+ 6 - 0
android/app/src/main/assets/custom/images.js

@@ -0,0 +1,6 @@
+const images = {
+    newscout_dark: require("../images/newscout_logo_dark.png"),
+    newscout_light: require("./newscout_logo_light.png")
+}
+
+export default images;

BIN
android/app/src/main/assets/fonts/Poppins-Black.ttf


BIN
android/app/src/main/assets/fonts/Poppins-BlackItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Bold.ttf


BIN
android/app/src/main/assets/fonts/Poppins-BoldItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-ExtraBold.ttf


BIN
android/app/src/main/assets/fonts/Poppins-ExtraBoldItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-ExtraLight.ttf


BIN
android/app/src/main/assets/fonts/Poppins-ExtraLightItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Italic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Light.ttf


BIN
android/app/src/main/assets/fonts/Poppins-LightItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Medium.ttf


BIN
android/app/src/main/assets/fonts/Poppins-MediumItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Regular.ttf


BIN
android/app/src/main/assets/fonts/Poppins-SemiBold.ttf


BIN
android/app/src/main/assets/fonts/Poppins-SemiBoldItalic.ttf


BIN
android/app/src/main/assets/fonts/Poppins-Thin.ttf


BIN
android/app/src/main/assets/fonts/Poppins-ThinItalic.ttf


+ 35 - 0
android/app/src/main/java/com/navmelon/MainActivity.java

@@ -0,0 +1,35 @@
+package com.navmelon;
+
+import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactActivityDelegate;
+
+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 "NavMelon";
+  }
+
+  /**
+   * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
+   * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
+   * (aka React 18) with two boolean flags.
+   */
+  @Override
+  protected ReactActivityDelegate createReactActivityDelegate() {
+    return new DefaultReactActivityDelegate(
+        this,
+        getMainComponentName(),
+        // If you opted-in for the New Architecture, we enable the Fabric Renderer.
+        DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
+        // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
+        DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
+        );
+  }
+}

+ 62 - 0
android/app/src/main/java/com/navmelon/MainApplication.java

@@ -0,0 +1,62 @@
+package com.navmelon;
+
+import android.app.Application;
+import com.facebook.react.PackageList;
+import com.facebook.react.ReactApplication;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactNativeHost;
+import com.facebook.soloader.SoLoader;
+import java.util.List;
+
+public class MainApplication extends Application implements ReactApplication {
+
+  private final ReactNativeHost mReactNativeHost =
+      new DefaultReactNativeHost(this) {
+        @Override
+        public boolean getUseDeveloperSupport() {
+          return BuildConfig.DEBUG;
+        }
+
+        @Override
+        protected List<ReactPackage> getPackages() {
+          @SuppressWarnings("UnnecessaryLocalVariable")
+          List<ReactPackage> packages = new PackageList(this).getPackages();
+          // Packages that cannot be autolinked yet can be added manually here, for example:
+          // packages.add(new MyReactNativePackage());
+          return packages;
+        }
+
+        @Override
+        protected String getJSMainModuleName() {
+          return "index";
+        }
+
+        @Override
+        protected boolean isNewArchEnabled() {
+          return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
+        }
+
+        @Override
+        protected Boolean isHermesEnabled() {
+          return BuildConfig.IS_HERMES_ENABLED;
+        }
+      };
+
+  @Override
+  public ReactNativeHost getReactNativeHost() {
+    return mReactNativeHost;
+  }
+
+  @Override
+  public void onCreate() {
+    super.onCreate();
+    SoLoader.init(this, /* native exopackage */ false);
+    if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
+      // If you opted-in for the New Architecture, we load the native entry point for this app.
+      DefaultNewArchitectureEntryPoint.load();
+    }
+    ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
+  }
+}

BIN
android/app/src/main/res/drawable/newscout_logo_dark.png


BIN
android/app/src/main/res/drawable/newscout_logo_light.png


+ 36 - 0
android/app/src/main/res/drawable/rn_edit_text_material.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     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
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
+       android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
+       android:insetTop="@dimen/abc_edit_text_inset_top_material"
+       android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
+
+    <selector>
+        <!-- 
+          This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
+          The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
+          NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
+
+          <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
+
+          For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
+        -->
+        <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
+        <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
+    </selector>
+
+</inset>

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


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


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


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


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


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


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


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


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


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


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

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

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

@@ -0,0 +1,9 @@
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
+        <!-- Customize your theme here. -->
+        <item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
+    </style>
+
+</resources>

+ 20 - 0
android/app/src/release/java/com/navmelon/ReactNativeFlipper.java

@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * <p>This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.navmelon;
+
+import android.content.Context;
+import com.facebook.react.ReactInstanceManager;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the release
+ * flavor of it so it's empty as we don't want to load Flipper.
+ */
+public class ReactNativeFlipper {
+  public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+    // Do nothing as we don't want to initialize Flipper on Release.
+  }
+}

+ 21 - 0
android/build.gradle

@@ -0,0 +1,21 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    ext {
+        buildToolsVersion = "33.0.0"
+        minSdkVersion = 21
+        compileSdkVersion = 33
+        targetSdkVersion = 33
+
+        // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
+        ndkVersion = "23.1.7779620"
+    }
+    repositories {
+        google()
+        mavenCentral()
+    }
+    dependencies {
+        classpath("com.android.tools.build:gradle:7.3.1")
+        classpath("com.facebook.react:react-native-gradle-plugin")
+    }
+}

+ 44 - 0
android/gradle.properties

@@ -0,0 +1,44 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
+# Version of flipper SDK to use with React Native
+FLIPPER_VERSION=0.125.0
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew <task> -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
+
+# Use this property to enable or disable the Hermes JS engine.
+# If set to false, you will be using JSC instead.
+hermesEnabled=true

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


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

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

+ 234 - 0
android/gradlew

@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# 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
+#
+#      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,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+#   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
+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
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+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
+
+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  ;; #(
+  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
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    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
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+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
+
+# 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" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    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
+        # 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
+fi
+
+# 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.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# 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" "$@"

+ 89 - 0
android/gradlew.bat

@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@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      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,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+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"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+: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 %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 93 - 0
android/link-assets-manifest.json

@@ -0,0 +1,93 @@
+{
+  "migIndex": 1,
+  "data": [
+    {
+      "path": "assets/fonts/OFL.txt",
+      "sha1": "8d6c34b70e3d638c82d7b5aba3f847f7d6d2c831"
+    },
+    {
+      "path": "assets/fonts/Poppins-Black.ttf",
+      "sha1": "645e04c53c6b5b35bce654a811ebce16af8aa721"
+    },
+    {
+      "path": "assets/fonts/Poppins-BlackItalic.ttf",
+      "sha1": "be4ef2aac7775a4b0179c0ecfce6cea8f7783f63"
+    },
+    {
+      "path": "assets/fonts/Poppins-Bold.ttf",
+      "sha1": "875cf0cecd647bcf22e79d633d868c1b1ec98dfa"
+    },
+    {
+      "path": "assets/fonts/Poppins-BoldItalic.ttf",
+      "sha1": "6de8952ca08d27ee77f57347d2cef4b4e26aa78f"
+    },
+    {
+      "path": "assets/fonts/Poppins-ExtraBold.ttf",
+      "sha1": "4b5c0750f073abd576413a0898d3b95adaf199c8"
+    },
+    {
+      "path": "assets/fonts/Poppins-ExtraBoldItalic.ttf",
+      "sha1": "94d3ee3acdbd00e37a715a25f2b5237666b5b8a3"
+    },
+    {
+      "path": "assets/fonts/Poppins-ExtraLight.ttf",
+      "sha1": "85af6582a7e6155917c605f9d3fed68c02b23b06"
+    },
+    {
+      "path": "assets/fonts/Poppins-ExtraLightItalic.ttf",
+      "sha1": "6fa0418f91032680d2d8fe4843009f2c80faa61d"
+    },
+    {
+      "path": "assets/fonts/Poppins-Italic.ttf",
+      "sha1": "e2bfcd56016c3c915221ef1c5fc1a17b0776eb91"
+    },
+    {
+      "path": "assets/fonts/Poppins-Light.ttf",
+      "sha1": "e247a92158e112f8bf7b638c8d95381d66b00dbb"
+    },
+    {
+      "path": "assets/fonts/Poppins-LightItalic.ttf",
+      "sha1": "f76102b361e705751a83b7b22fe954daf1f27dd4"
+    },
+    {
+      "path": "assets/fonts/Poppins-Medium.ttf",
+      "sha1": "283f21b44efbdbf276ba802be2d949a36bbc4233"
+    },
+    {
+      "path": "assets/fonts/Poppins-MediumItalic.ttf",
+      "sha1": "b592c62fdf88c40cfd0f031bba6423b1d4430472"
+    },
+    {
+      "path": "assets/fonts/Poppins-Regular.ttf",
+      "sha1": "fdd3002e7d814ee47c1c1b8487c72c6bbb3a2d00"
+    },
+    {
+      "path": "assets/fonts/Poppins-SemiBold.ttf",
+      "sha1": "8a4ace9392d06bcb7f8ea2f5169b07e4c383a90d"
+    },
+    {
+      "path": "assets/fonts/Poppins-SemiBoldItalic.ttf",
+      "sha1": "0c8bed0a5942b2388d36b11c115685d9f01700b0"
+    },
+    {
+      "path": "assets/fonts/Poppins-Thin.ttf",
+      "sha1": "09ba4dcd5509c8085bf88c665dcc51cbdfced27b"
+    },
+    {
+      "path": "assets/fonts/Poppins-ThinItalic.ttf",
+      "sha1": "fb8fccca21550e71135f92bbaf8a2e8a12c90465"
+    },
+    {
+      "path": "assets/images/images.js",
+      "sha1": "c586c9d22dce19cd72919e5c2067be2551f4f6ee"
+    },
+    {
+      "path": "assets/images/newscout_logo_dark.png",
+      "sha1": "383c4b9aebb71db66648c8218414107c0a194769"
+    },
+    {
+      "path": "assets/images/newscout_logo_light.png",
+      "sha1": "5b9f7e4db683b5f3479027b41d1ff13e004cabfd"
+    }
+  ]
+}

+ 4 - 0
android/settings.gradle

@@ -0,0 +1,4 @@
+rootProject.name = 'NavMelon'
+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')

+ 4 - 0
app.json

@@ -0,0 +1,4 @@
+{
+  "name": "NavMelon",
+  "displayName": "NavMelon"
+}

+ 93 - 0
assets/fonts/OFL.txt

@@ -0,0 +1,93 @@
+Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.

BIN
assets/fonts/Poppins-Black.ttf


BIN
assets/fonts/Poppins-BlackItalic.ttf


BIN
assets/fonts/Poppins-Bold.ttf


BIN
assets/fonts/Poppins-BoldItalic.ttf


BIN
assets/fonts/Poppins-ExtraBold.ttf


BIN
assets/fonts/Poppins-ExtraBoldItalic.ttf


BIN
assets/fonts/Poppins-ExtraLight.ttf


BIN
assets/fonts/Poppins-ExtraLightItalic.ttf


BIN
assets/fonts/Poppins-Italic.ttf


BIN
assets/fonts/Poppins-Light.ttf


BIN
assets/fonts/Poppins-LightItalic.ttf


BIN
assets/fonts/Poppins-Medium.ttf


BIN
assets/fonts/Poppins-MediumItalic.ttf


BIN
assets/fonts/Poppins-Regular.ttf


BIN
assets/fonts/Poppins-SemiBold.ttf


BIN
assets/fonts/Poppins-SemiBoldItalic.ttf


BIN
assets/fonts/Poppins-Thin.ttf


BIN
assets/fonts/Poppins-ThinItalic.ttf


BIN
assets/images/VertCard.png


BIN
assets/images/hp_newscard.png


+ 9 - 0
assets/images/images.js

@@ -0,0 +1,9 @@
+const images = {
+    newscout_dark: require("../images/newscout_logo_dark.png"),
+    newscout_light: require("./newscout_logo_light.png"),
+    imageCard: require("../images/hp_newscard.png"),
+    horizontalCard: require("../images/pubg.png"),
+    verticalCard: require("../images/VertCard.png")
+}
+
+export default images;

BIN
assets/images/newscout_logo_dark.png


BIN
assets/images/newscout_logo_light.png


BIN
assets/images/pubg.png


+ 3 - 0
babel.config.js

@@ -0,0 +1,3 @@
+module.exports = {
+  presets: ['module:metro-react-native-babel-preset'],
+};

+ 25 - 0
components/atoms/Button.js

@@ -0,0 +1,25 @@
+import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'
+import React from 'react'
+import fonts from '../../theme/fonts'
+
+const Button = ({ style, onPress, children }) => {
+    return (
+        <TouchableOpacity style={[styles.button,style]}onPress={onPress}>
+            <View>
+                {children}
+            </View>
+        </TouchableOpacity>
+
+    )
+}
+
+export default Button
+
+const styles = StyleSheet.create({
+    button:{
+        paddingVertical: fonts.getSize(12),
+        paddingHorizontal: fonts.getSize(12),
+        backgroundColor: 'grey',
+        borderRadius: fonts.getSize(4)
+    }
+})

+ 24 - 0
components/atoms/Card.js

@@ -0,0 +1,24 @@
+/*
+  ! Dont Use
+
+*/ 
+
+import { StyleSheet, Text, View, TouchableOpacity} from 'react-native'
+import React from 'react'
+import metrics from '../../theme/metrics'
+
+const Card = ({style,onPress,children}) => {
+  return (
+    <TouchableOpacity style={[styles.cardContainer,style]} onPress={onPress}>
+        {children}
+    </TouchableOpacity>
+  )
+}
+
+export default Card
+
+const styles = StyleSheet.create({
+    cardContainer:{
+
+    }
+})

+ 25 - 0
components/atoms/Header.js

@@ -0,0 +1,25 @@
+import { StyleSheet, Text, View } from 'react-native'
+import React from 'react'
+import fonts from '../../theme/fonts'
+
+
+const Header = ({style,children}) => {
+  return (
+    <View style={[styles.headerContainer,style]}>
+      {children}
+    </View>
+  )
+}
+
+export default Header
+
+const styles = StyleSheet.create({
+    headerContainer:{
+        paddingHorizontal: fonts.getSize(20),
+        flexDirection: 'row',
+        alignItems:'center',
+        justifyContent:'space-between',
+        height: 60,
+        maxHeight: 60
+    }
+})

+ 20 - 0
components/molecules/NewscoutLogo.js

@@ -0,0 +1,20 @@
+import { StyleSheet, Image, View } from 'react-native'
+import React from 'react'
+import images from '../../assets/images/images'
+
+const NewscoutLogo = ({style}) => {
+  return (
+    <View>
+      <Image source={images.newscout_light} style={[styles.image,style]}/>
+    </View>
+  )
+}
+
+export default NewscoutLogo
+
+const styles = StyleSheet.create({
+    image:{
+        height:32,
+        width:32
+    }
+})

+ 14 - 0
components/molecules/PrimaryButton.js

@@ -0,0 +1,14 @@
+import { StyleSheet, Text, View } from 'react-native'
+import React from 'react'
+
+const PrimaryButton = ({label,onPress, children}) => {
+  return (
+    <View>
+      <Text>PrimaryButtom</Text>
+    </View>
+  )
+}
+
+export default PrimaryButton
+
+const styles = StyleSheet.create({})

+ 14 - 0
components/molecules/SecondaryButton.js

@@ -0,0 +1,14 @@
+import { StyleSheet, Text, View } from 'react-native'
+import React from 'react'
+
+const SecondaryButton = () => {
+  return (
+    <View>
+      <Text>SecondaryButton</Text>
+    </View>
+  )
+}
+
+export default SecondaryButton
+
+const styles = StyleSheet.create({})

+ 20 - 0
components/organisms/Buttons/BookmarkButton.js

@@ -0,0 +1,20 @@
+import { StyleSheet, Text, View } from 'react-native'
+import React from 'react'
+import { IconButton } from 'react-native-paper'
+import colors from '../../../theme/colors'
+import fonts from '../../../theme/fonts'
+
+const BookmarkButton = ({ size, onPress}) => {
+    return (
+        <IconButton
+            icon='bookmark-outline'
+            iconColor={colors.topColor}
+            size={size ?? fonts.getSize(24)}
+            onPress={onPress}
+        />
+    )
+}
+
+export default BookmarkButton
+
+// const styles = StyleSheet.create({})

+ 20 - 0
components/organisms/Buttons/ShareButton.js

@@ -0,0 +1,20 @@
+import { StyleSheet, Text, View } from 'react-native'
+import React from 'react'
+import { IconButton } from 'react-native-paper'
+import colors from '../../../theme/colors'
+import fonts from '../../../theme/fonts'
+
+const ShareButton = ({size, onPress}) => {
+  return (
+    <IconButton
+        icon='share-outline'
+        iconColor={colors.topColor}
+        size={size ?? fonts.getSize(24)}
+        onPress={onPress}
+    />
+  )
+}
+
+export default ShareButton
+
+// const styles = StyleSheet.create({})

+ 96 - 0
components/organisms/Cards/HorizontalNewsCard.js

@@ -0,0 +1,96 @@
+import { Image, StyleSheet, Text, TouchableWithoutFeedback, View } from 'react-native'
+import React from 'react'
+import metrics from '../../../theme/metrics'
+import fonts from '../../../theme/fonts'
+import colors from '../../../theme/colors'
+import images from '../../../assets/images/images'
+import BookmarkButton from '../Buttons/BookmarkButton'
+import ShareButton from '../Buttons/ShareButton'
+
+
+const HorizontalNewsCard = ({ style, headline, tagline, category, timestamp, image, onPress }) => {
+    return (
+        <TouchableWithoutFeedback onPress={onPress}>
+            <View style={[styles.cardContainer, style]}>
+                <View style={styles.textContainer}>
+                    <View>
+                    <Text style={styles.headline}> {headline ?? "Battlegrounds Mobile India iOS release date"}</Text>
+                    <Text style={styles.tagline}>{tagline ?? "government is the people, for the people, by the people but the people are retarded "}</Text>
+                    </View>
+                    <View style={styles.descriptors}>
+                        <Text style={styles.categoryDescriptor}>{category ?? "Sports"}</Text>
+                        <Text style={styles.timeDescriptor}>{timestamp ?? "27 mins ago"}</Text>
+                    </View>
+                </View>
+                <View style={styles.imageContainer}>
+                    <View style={styles.imageSub}>
+                        <Image source={image ?? images.horizontalCard} style={{aspectRatio: 0.9}} />
+                    </View>
+                    <View style={styles.utilButtons}>
+                        <BookmarkButton onPress={true} />
+                        <ShareButton onPress={true}/>
+                    </View>
+                </View>
+            </View>
+        </TouchableWithoutFeedback>
+    )
+}
+
+export default HorizontalNewsCard
+
+const styles = StyleSheet.create({
+    cardContainer: {
+        width: 'auto',
+        maxWidth: metrics.screenWidth,
+        height: fonts.getSize(190),
+        backgroundColor: colors.white,
+        borderRadius: fonts.getSize(4),
+        flexDirection: 'row',
+        // paddingBottom:fonts.getSize(24)
+    },
+    imageContainer: {
+        width: "45%",
+        
+    },
+    textContainer: {
+        width: "55%",
+        paddingVertical: fonts.getSize(8),
+        paddingLeft: fonts.getSize(16),
+        justifyContent:'flex-start',
+        gap:fonts.getSize(12)
+    },
+    headline: {
+        fontFamily: fonts.type.medium,
+        textDecorationLine: 'underline',
+        fontSize: fonts.getSize(16),
+        color: colors.black
+    },
+    tagline: {
+        fontSize: fonts.getSize(12),
+        fontFamily: fonts.type.regular,
+        maxHeight: '40%',
+        overflow: 'hidden',
+        
+    },
+    descriptors: {
+        flexDirection: 'row',
+        justifyContent: 'space-around'
+    },
+    categoryDescriptor: {
+        fontFamily: fonts.type.light
+    },
+    timeDescriptor: {
+        fontFamily: fonts.type.light
+    },
+    imageSub:{
+        alignItems:'center',
+        justifyContent:'center',
+        padding: fonts.getSize(14),
+        paddingBottom: 0
+    },
+    utilButtons:{
+        flexDirection: 'row',
+        alignItems: 'center',
+        justifyContent: 'space-around'
+    }
+})

+ 59 - 0
components/organisms/Cards/ImageBGCard.js

@@ -0,0 +1,59 @@
+import { Image, StyleSheet, Text, View, ImageBackground, TouchableOpacity } from 'react-native'
+import React from 'react'
+import Card from '../../atoms/Card'
+import fonts from '../../../theme/fonts'
+import metrics from '../../../theme/metrics'
+import images from '../../../assets/images/images'
+import LinearGradient from 'react-native-linear-gradient'
+import colors from '../../../theme/colors'
+
+const ImageBGCard = ({image, author, headline, onPress, }) => {
+  return (
+    <TouchableOpacity onPress={onPress}>
+      <ImageBackground source={image}
+        imageStyle={{ borderRadius: fonts.getSize(8), }}
+        style={styles.cardImage}
+      >
+        <LinearGradient
+          colors={['transparent', 'black']}
+          style={styles.gradient}
+          start={{ x: 0.5, y: 0.3 }}
+
+        >
+          <Text style={styles.authorText}>
+            by {author}
+          </Text>
+          <Text style={styles.headlineText}>{headline}</Text>
+        </LinearGradient>
+      </ImageBackground>
+
+    </TouchableOpacity>
+  )
+}
+
+export default ImageBGCard
+
+const styles = StyleSheet.create({
+  cardImage: {
+    height: 'auto',
+    width: 'auto',
+
+  },
+  gradient: {
+    borderRadius: fonts.getSize(8),
+    height: fonts.getSize(240),
+    justifyContent: 'flex-end',
+    paddingHorizontal: fonts.getSize(16),
+    paddingVertical: fonts.getSize(10)
+  },
+  authorText: {
+    color: colors.white,
+    fontFamily: fonts.type.bold,
+    fontSize: fonts.getSize(12)
+  },
+  headlineText: {
+    color: colors.white,
+    fontFamily: fonts.type.medium,
+    fontSize: fonts.getSize(16)
+  }
+})

+ 68 - 0
components/organisms/Cards/VerticalNewsCard.js

@@ -0,0 +1,68 @@
+import { Image, StyleSheet, Text, TouchableWithoutFeedback, View } from 'react-native'
+import React from 'react'
+import metrics from '../../../theme/metrics'
+import fonts from '../../../theme/fonts'
+import colors from '../../../theme/colors'
+import images from '../../../assets/images/images'
+
+const VerticalNewsCard = ({image,headline,tagline,style, onPress}) => {
+  return (
+    <TouchableWithoutFeedback onPress={onPress}>
+        <View style={[styles.cardContainer, style]}>
+           <View style={styles.imagesContainer}>
+           <Image source={image ?? images.verticalCard} style={styles.image}/>
+           </View>
+           <View style={styles.textContainer}>
+                <Text style={styles.headline}> {headline ?? "Aston Villa avoid relegation on final day"}</Text>
+                <Text style={styles.tagline}>{tagline ?? "The reason behind their disappointment is that iPir disappointment is that iPhonsers have been."}</Text>
+           </View>
+        </View>
+    </TouchableWithoutFeedback>
+  )
+}
+
+export default VerticalNewsCard
+
+const styles = StyleSheet.create({
+    cardContainer: {
+        width: 'auto',
+        maxWidth: fonts.getSize(210),
+        backgroundColor: colors.white,
+        borderRadius: fonts.getSize(4),
+        height: fonts.getSize(300),
+        maxHeight: fonts.getSize(300),
+        marginRight: fonts.getSize(16),
+        paddingBottom:fonts.getSize(24)
+    },
+    textContainer:{
+        width: fonts.getSize(210),
+        maxWidth:  metrics.screenWidth,
+        height:"50%",
+        paddingHorizontal: fonts.getSize(14),
+        paddingVertical: fonts.getSize(8)
+    },  
+    imagesContainer:{
+        width: '100%',
+        height: '50%'
+        
+    },
+    image:{
+        borderRadius: fonts.getSize(4),
+        width:'100%',
+        height:'100%'
+    },
+    headline: {
+        fontFamily: fonts.type.medium,
+        textDecorationLine: 'underline',
+        fontSize: fonts.getSize(16),
+        color: colors.black,
+        paddingBottom: fonts.getSize(8)
+    },
+    tagline: {
+        fontSize: fonts.getSize(12),
+        fontFamily: fonts.type.regular,
+        maxHeight: '40%',
+        overflow: 'hidden',
+        
+    }
+})

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