From 9aa75961adae6e6154b873f1ccaf24f7948ff2df Mon Sep 17 00:00:00 2001 From: Amit Davidi Date: Sun, 9 Oct 2016 19:31:26 +0300 Subject: [PATCH] Android example project --- README.md | 40 ++++- example/android/.gitignore | 8 + example/android/app/BUCK | 66 --------- example/android/app/build.gradle | 139 ------------------ example/android/app/proguard-rules.pro | 66 --------- example/android/app/react.gradle | 97 ------------ .../android/app/src/main/AndroidManifest.xml | 23 --- .../notificationsexampleapp/MainActivity.java | 15 -- .../MainApplication.java | 35 ----- .../smartnotificationsapp/MainActivity.java | 40 ----- .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/values/styles.xml | 8 - example/android/build.gradle | 11 +- example/android/gradle.properties | 4 +- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 52266 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- example/android/gradlew | 10 +- example/android/myapplication/.gitignore | 1 + example/android/myapplication/build.gradle | 38 +++++ .../android/myapplication/proguard-rules.pro | 17 +++ .../src/main/AndroidManifest.xml | 29 ++++ .../app/MainActivity.java | 101 +++++++++++++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes .../src/main/res/values-v21/styles.xml | 8 + .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/strings.xml | 4 + .../src/main/res/values/styles.xml | 17 +++ .../reactnativenotification/.gitignore | 1 + .../reactnativenotification/build.gradle | 27 ++++ .../proguard-rules.pro | 17 +++ .../src/main/AndroidManifest.xml | 53 +++++++ .../wix/reactnativenotifications/Defs.java | 8 + .../GcmInstanceIdListenerService.java | 21 +++ .../GcmInstanceIdRefreshHandlerService.java | 76 ++++++++++ .../GcmMessageHandlerService.java | 84 +++++++++++ .../RNNotificationsContextHolder.java | 30 ++++ .../RNNotificationsModule.java | 43 ++++++ .../RNNotificationsPackage.java | 31 ++++ .../main/res/drawable-hdpi/notification.png | Bin 0 -> 3418 bytes .../main/res/drawable-mdpi/notification.png | Bin 0 -> 2206 bytes .../main/res/drawable-xhdpi/notification.png | Bin 0 -> 4842 bytes .../main/res/drawable-xxhdpi/notification.png | Bin 0 -> 7718 bytes .../res/drawable-xxxhdpi/notification.png | Bin 0 -> 10486 bytes .../src/main/res/values/strings.xml | 3 + example/android/send_notif.py | 27 ++++ example/android/settings.gradle | 4 +- example/index.android.js | 46 ++---- package.json | 3 +- 52 files changed, 715 insertions(+), 548 deletions(-) create mode 100644 example/android/.gitignore delete mode 100644 example/android/app/BUCK delete mode 100644 example/android/app/build.gradle delete mode 100644 example/android/app/proguard-rules.pro delete mode 100644 example/android/app/react.gradle delete mode 100644 example/android/app/src/main/AndroidManifest.xml delete mode 100644 example/android/app/src/main/java/com/notificationsexampleapp/MainActivity.java delete mode 100644 example/android/app/src/main/java/com/notificationsexampleapp/MainApplication.java delete mode 100644 example/android/app/src/main/java/com/smartnotificationsapp/MainActivity.java delete mode 100644 example/android/app/src/main/res/values/strings.xml delete mode 100644 example/android/app/src/main/res/values/styles.xml create mode 100644 example/android/myapplication/.gitignore create mode 100644 example/android/myapplication/build.gradle create mode 100644 example/android/myapplication/proguard-rules.pro create mode 100644 example/android/myapplication/src/main/AndroidManifest.xml create mode 100644 example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java rename example/android/{app => myapplication}/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename example/android/{app => myapplication}/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename example/android/{app => myapplication}/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename example/android/{app => myapplication}/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) create mode 100644 example/android/myapplication/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 example/android/myapplication/src/main/res/values-v21/styles.xml create mode 100644 example/android/myapplication/src/main/res/values/colors.xml create mode 100644 example/android/myapplication/src/main/res/values/strings.xml create mode 100644 example/android/myapplication/src/main/res/values/styles.xml create mode 100644 example/android/reactnativenotification/.gitignore create mode 100644 example/android/reactnativenotification/build.gradle create mode 100644 example/android/reactnativenotification/proguard-rules.pro create mode 100644 example/android/reactnativenotification/src/main/AndroidManifest.xml create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/Defs.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/GcmInstanceIdListenerService.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/GcmInstanceIdRefreshHandlerService.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/GcmMessageHandlerService.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/RNNotificationsContextHolder.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java create mode 100644 example/android/reactnativenotification/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java create mode 100644 example/android/reactnativenotification/src/main/res/drawable-hdpi/notification.png create mode 100644 example/android/reactnativenotification/src/main/res/drawable-mdpi/notification.png create mode 100644 example/android/reactnativenotification/src/main/res/drawable-xhdpi/notification.png create mode 100644 example/android/reactnativenotification/src/main/res/drawable-xxhdpi/notification.png create mode 100644 example/android/reactnativenotification/src/main/res/drawable-xxxhdpi/notification.png create mode 100644 example/android/reactnativenotification/src/main/res/values/strings.xml create mode 100644 example/android/send_notif.py diff --git a/README.md b/README.md index 3042c16..f6cfa13 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,11 @@ Handle all the aspects of push notifications for your app, including remote and local notifications, interactive notifications, silent notifications, and more. -**All the native iOS notifications features are supported!** Android push support is in progress. +**All the native iOS notifications features are supported!** -### Supported Features (iOS) + +## Supported Features +### iOS - [Remote notifications](#handling-received-notifications). - [Local notifications](#triggering-local-notifications). @@ -15,6 +17,9 @@ Handle all the aspects of push notifications for your app, including remote and ![Interactive notifications example](https://s3.amazonaws.com/nrjio/interactive.gif) +### Android + +TODO ## Installation @@ -58,13 +63,40 @@ And the following methods to support registration and receiving notifications: } ``` -### Android -WIP. +### Android + +> Note: Explicit installation on Android is only required if you're planning on **receiving push notifications**. It is **not** needed if you're only going to use 'local' notifications. + +Push notifications on Android are managed and dispatched using [Google's GCM service](https://developers.google.com/cloud-messaging/gcm) (now integrated into Firebase). The following installation steps are a TL;DR of [Google's GCM setup guide](https://developers.google.com/cloud-messaging/android/client). You can follow them to get GCM integrated quickly, but we recommend you in the very least have a peek at the guide's overview. + +#### Step #1: Subscribe to Google's GCM + +To set GCM in your app, you must first create a Google Firebase API-project and obtain a **Sender ID** and a **Server API Key**. If you have no existing API projects yet, the easiest way to go about is to create a project and get these attributes using [this step-by-step installation process](https://developers.google.com/mobile/add); Use [this tutorial](https://code.tutsplus.com/tutorials/how-to-get-started-with-push-notifications-on-android--cms-25870) for insturctions. + +Alternatively, follow [Google's complete guide](https://developers.google.com/cloud-messaging/android/client#create-an-api-project). + +#### Step #2: Add Sender ID to Manifest File + +``` + +... + + ... + // Replace '1234567890' with your sender ID. + // Important: Leave the trailing \0 intact! + + + + +``` + --- ## Register to Push Notifications +### iOS + In order to handle notifications, you must register before- handle `remoteNotificationsRegistered` event. In your React Native app: diff --git a/example/android/.gitignore b/example/android/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/example/android/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/example/android/app/BUCK b/example/android/app/BUCK deleted file mode 100644 index 282196f..0000000 --- a/example/android/app/BUCK +++ /dev/null @@ -1,66 +0,0 @@ -import re - -# To learn about Buck see [Docs](https://buckbuild.com/). -# To run your application with Buck: -# - install Buck -# - `npm start` - to start the packager -# - `cd android` -# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` -# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck -# - `buck install -r android/app` - compile, install and run application -# - -lib_deps = [] -for jarfile in glob(['libs/*.jar']): - name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) - lib_deps.append(':' + name) - prebuilt_jar( - name = name, - binary_jar = jarfile, - ) - -for aarfile in glob(['libs/*.aar']): - name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) - lib_deps.append(':' + name) - android_prebuilt_aar( - name = name, - aar = aarfile, - ) - -android_library( - name = 'all-libs', - exported_deps = lib_deps -) - -android_library( - name = 'app-code', - srcs = glob([ - 'src/main/java/**/*.java', - ]), - deps = [ - ':all-libs', - ':build_config', - ':res', - ], -) - -android_build_config( - name = 'build_config', - package = 'com.notificationsexampleapp', -) - -android_resource( - name = 'res', - res = 'src/main/res', - package = 'com.notificationsexampleapp', -) - -android_binary( - name = 'app', - package_type = 'debug', - manifest = 'src/main/AndroidManifest.xml', - keystore = '//android/keystores:debug', - deps = [ - ':app-code', - ], -) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index 7610514..0000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,139 +0,0 @@ -apply plugin: "com.android.application" - -import com.android.build.OutputFile - -/** - * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets - * and bundleReleaseJsAndAssets). - * These basically call `react-native bundle` with the correct arguments during the Android build - * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the - * bundle directly from the development server. Below you can see all the possible configurations - * and their defaults. If you decide to add a configuration block, make sure to add it before the - * `apply from: "../../node_modules/react-native/react.gradle"` line. - * - * project.ext.react = [ - * // the name of the generated asset file containing your JS bundle - * bundleAssetName: "index.android.bundle", - * - * // the entry file for bundle generation - * entryFile: "index.android.js", - * - * // whether to bundle JS and assets in debug mode - * bundleInDebug: false, - * - * // whether to bundle JS and assets in release mode - * bundleInRelease: true, - * - * // whether to bundle JS and assets in another build variant (if configured). - * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants - * // The configuration property can be in the following formats - * // 'bundleIn${productFlavor}${buildType}' - * // 'bundleIn${buildType}' - * // bundleInFreeDebug: true, - * // bundleInPaidRelease: true, - * // bundleInBeta: true, - * - * // the root of your project, i.e. where "package.json" lives - * root: "../../", - * - * // where to put the JS bundle asset in debug mode - * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", - * - * // where to put the JS bundle asset in release mode - * jsBundleDirRelease: "$buildDir/intermediates/assets/release", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in debug mode - * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", - * - * // where to put drawable resources / React Native assets, e.g. the ones you use via - * // require('./image.png')), in release mode - * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", - * - * // by default the gradle tasks are skipped if none of the JS files or assets change; this means - * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to - * // date; if you have any other folders that you want to ignore for performance reasons (gradle - * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ - * // for example, you might want to remove it from here. - * inputExcludes: ["android/**", "ios/**"], - * - * // override which node gets called and with what additional arguments - * nodeExecutableAndArgs: ["node"] - * - * // supply additional arguments to the packager - * extraPackagerArgs: [] - * ] - */ - -apply from: "../../node_modules/react-native/react.gradle" - -/** - * Set this to true to create two separate APKs instead of one: - * - An APK that only works on ARM devices - * - An APK that only works on x86 devices - * The advantage is the size of the APK is reduced by about 4MB. - * Upload all the APKs to the Play Store and people will download - * the correct one based on the CPU architecture of their device. - */ -def enableSeparateBuildPerCPUArchitecture = false - -/** - * Run Proguard to shrink the Java bytecode in release builds. - */ -def enableProguardInReleaseBuilds = false - -android { - compileSdkVersion 23 - buildToolsVersion "23.0.1" - - defaultConfig { - applicationId "com.notificationsexampleapp" - minSdkVersion 16 - targetSdkVersion 22 - versionCode 1 - versionName "1.0" - ndk { - abiFilters "armeabi-v7a", "x86" - } - } - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86" - } - } - buildTypes { - release { - 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: - // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits - def versionCodes = ["armeabi-v7a":1, "x86":2] - 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 - } - } - } -} - -dependencies { - compile fileTree(dir: "libs", include: ["*.jar"]) - compile "com.android.support:appcompat-v7:23.0.1" - compile "com.facebook.react:react-native:+" // From node_modules -} - -// 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 - into 'libs' -} diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro deleted file mode 100644 index 48361a9..0000000 --- a/example/android/app/proguard-rules.pro +++ /dev/null @@ -1,66 +0,0 @@ -# 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: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Disabling obfuscation is useful if you collect stack traces from production crashes -# (unless you are using a system that supports de-obfuscate the stack traces). --dontobfuscate - -# React Native - -# Keep our interfaces so they can be used by other ProGuard rules. -# See http://sourceforge.net/p/proguard/bugs/466/ --keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip --keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters --keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip - -# Do not strip any method/class that is annotated with @DoNotStrip --keep @com.facebook.proguard.annotations.DoNotStrip class * --keep @com.facebook.common.internal.DoNotStrip class * --keepclassmembers class * { - @com.facebook.proguard.annotations.DoNotStrip *; - @com.facebook.common.internal.DoNotStrip *; -} - --keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { - void set*(***); - *** get*(); -} - --keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } --keep class * extends com.facebook.react.bridge.NativeModule { *; } --keepclassmembers,includedescriptorclasses class * { native ; } --keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } --keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } - --dontwarn com.facebook.react.** - -# okhttp - --keepattributes Signature --keepattributes *Annotation* --keep class okhttp3.** { *; } --keep interface okhttp3.** { *; } --dontwarn okhttp3.** - -# okio - --keep class sun.misc.Unsafe { *; } --dontwarn java.nio.file.* --dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement --dontwarn okio.** diff --git a/example/android/app/react.gradle b/example/android/app/react.gradle deleted file mode 100644 index 348fb12..0000000 --- a/example/android/app/react.gradle +++ /dev/null @@ -1,97 +0,0 @@ -import org.apache.tools.ant.taskdefs.condition.Os - -def config = project.hasProperty("react") ? project.react : []; - -def bundleAssetName = config.bundleAssetName ?: "index.android.bundle" -def entryFile = config.entryFile ?: "index.android.js" - -// because elvis operator -def elvisFile(thing) { - return thing ? file(thing) : null; -} - -def reactRoot = elvisFile(config.root) ?: file("../../") -def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"] - -void runBefore(String dependentTaskName, Task task) { - Task dependentTask = tasks.findByPath(dependentTaskName); - if (dependentTask != null) { - dependentTask.dependsOn task - } -} - -gradle.projectsEvaluated { - // Grab all build types and product flavors - def buildTypes = android.buildTypes.collect { type -> type.name } - def productFlavors = android.productFlavors.collect { flavor -> flavor.name } - - // When no product flavors defined, use empty - if (!productFlavors) productFlavors.add('') - - productFlavors.each { productFlavorName -> - buildTypes.each { buildTypeName -> - // Create variant and target names - def targetName = "${productFlavorName.capitalize()}${buildTypeName.capitalize()}" - def targetPath = productFlavorName ? - "${productFlavorName}/${buildTypeName}" : - "${buildTypeName}" - - // React js bundle directories - def jsBundleDirConfigName = "jsBundleDir${targetName}" - def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?: - file("$buildDir/intermediates/assets/${targetPath}") - - def resourcesDirConfigName = "resourcesDir${targetName}" - def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?: - file("$buildDir/intermediates/res/merged/${targetPath}") - def jsBundleFile = file("$jsBundleDir/$bundleAssetName") - - // Bundle task name for variant - def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets" - - def currentBundleTask = tasks.create( - name: bundleJsAndAssetsTaskName, - type: Exec) { - group = "react" - description = "bundle JS and assets for ${targetName}." - - // Create dirs if they are not there (e.g. the "clean" task just ran) - doFirst { - jsBundleDir.mkdirs() - resourcesDir.mkdirs() - } - - // Set up inputs and outputs so gradle can cache the result - inputs.files fileTree(dir: reactRoot, excludes: inputExcludes) - outputs.dir jsBundleDir - outputs.dir resourcesDir - - // Set up the call to the react-native cli - workingDir reactRoot - - // Set up dev mode - def devEnabled = !targetName.toLowerCase().contains("release") - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - commandLine "cmd", "/c", "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", - "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir - } else { - commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", - "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir - } - - enabled config."bundleIn${targetName}" || - config."bundleIn${buildTypeName.capitalize()}" ?: - targetName.toLowerCase().contains("release") - } - - // Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process - currentBundleTask.dependsOn("merge${targetName}Resources") - currentBundleTask.dependsOn("merge${targetName}Assets") - - runBefore("processArmeabi-v7a${targetName}Resources", currentBundleTask) - runBefore("processX86${targetName}Resources", currentBundleTask) - runBefore("processUniversal${targetName}Resources", currentBundleTask) - runBefore("process${targetName}Resources", currentBundleTask) - } - } -} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 0f3a214..0000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/example/android/app/src/main/java/com/notificationsexampleapp/MainActivity.java b/example/android/app/src/main/java/com/notificationsexampleapp/MainActivity.java deleted file mode 100644 index c4329f3..0000000 --- a/example/android/app/src/main/java/com/notificationsexampleapp/MainActivity.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.notificationsexampleapp; - -import com.facebook.react.ReactActivity; - -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 "NotificationsExampleApp"; - } -} diff --git a/example/android/app/src/main/java/com/notificationsexampleapp/MainApplication.java b/example/android/app/src/main/java/com/notificationsexampleapp/MainApplication.java deleted file mode 100644 index 55dc8e4..0000000 --- a/example/android/app/src/main/java/com/notificationsexampleapp/MainApplication.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.notificationsexampleapp; - -import android.app.Application; -import android.util.Log; - -import com.facebook.react.ReactApplication; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactNativeHost; -import com.facebook.react.ReactPackage; -import com.facebook.react.shell.MainReactPackage; - -import java.util.Arrays; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override - protected boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage() - ); - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } -} diff --git a/example/android/app/src/main/java/com/smartnotificationsapp/MainActivity.java b/example/android/app/src/main/java/com/smartnotificationsapp/MainActivity.java deleted file mode 100644 index 72decbd..0000000 --- a/example/android/app/src/main/java/com/smartnotificationsapp/MainActivity.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.smartnotificationsapp; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactPackage; -import com.facebook.react.shell.MainReactPackage; - -import java.util.Arrays; -import java.util.List; - -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 "NotificationsExampleApp"; - } - - /** - * Returns whether dev mode should be enabled. - * This enables e.g. the dev menu. - */ - @Override - protected boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - /** - * A list of packages used by the app. If the app uses additional views - * or modules besides the default ones, add more packages here. - */ - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage() - ); - } -} diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 66110ff..0000000 --- a/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - NotificationsExampleApp - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 319eb0c..0000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle index fcba4c5..f2464c1 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,20 +5,21 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath 'com.android.tools.build:gradle:2.2.0' } } allprojects { repositories { - mavenLocal() jcenter() + maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url "$rootDir/../node_modules/react-native/android" } } } + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 1fd964e..1d3591c 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -15,6 +15,4 @@ # 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 - -android.useDeprecatedNdk=true +# org.gradle.parallel=true \ No newline at end of file diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar index b5166dad4d90021f6a0b45268c0755719f1d5cd4..13372aef5e24af05341d49695ee84e5f9b594659 100644 GIT binary patch delta 12526 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 Kpmo}R_xwNY%LGpV delta 11161 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 HALai6b5uB& diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index b9fbfab..1d4f8cb 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sun Oct 09 14:30:04 IDT 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/example/android/gradlew b/example/android/gradlew index 91a7e26..9d82f78 100755 --- a/example/android/gradlew +++ b/example/android/gradlew @@ -42,11 +42,6 @@ case "`uname`" in ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" @@ -61,9 +56,9 @@ while [ -h "$PRG" ] ; do fi done SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- +cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" -cd "$SAVED" >&- +cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -114,6 +109,7 @@ fi 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` diff --git a/example/android/myapplication/.gitignore b/example/android/myapplication/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/example/android/myapplication/.gitignore @@ -0,0 +1 @@ +/build diff --git a/example/android/myapplication/build.gradle b/example/android/myapplication/build.gradle new file mode 100644 index 0000000..e18eb02 --- /dev/null +++ b/example/android/myapplication/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "24.0.1" + + defaultConfig { + applicationId "com.wix.reactnativenotifications" + minSdkVersion 16 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + + ndk { + abiFilters "armeabi-v7a", "x86" + } +// packagingOptions { +// exclude "lib/arm64-v8a/librealm-jni.so" +// } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.android.support:design:23.4.0' + compile 'com.facebook.react:react-native:+' + compile project(':reactnativenotification') + + testCompile 'junit:junit:4.12' +} diff --git a/example/android/myapplication/proguard-rules.pro b/example/android/myapplication/proguard-rules.pro new file mode 100644 index 0000000..d603615 --- /dev/null +++ b/example/android/myapplication/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/amitd/Library/Android/sdk/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: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/example/android/myapplication/src/main/AndroidManifest.xml b/example/android/myapplication/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ec5c059 --- /dev/null +++ b/example/android/myapplication/src/main/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java new file mode 100644 index 0000000..67e3b24 --- /dev/null +++ b/example/android/myapplication/src/main/java/com/wix/reactnativenotifications/app/MainActivity.java @@ -0,0 +1,101 @@ +package com.wix.reactnativenotifications.app; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; +import android.util.Log; + +import com.facebook.react.LifecycleState; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactRootView; +import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; +import com.facebook.react.shell.MainReactPackage; +import com.wix.reactnativenotifications.RNNotificationsPackage; + +import static android.os.Build.VERSION.SDK_INT; + +public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler { + + private static final int OVERLAY_PERMISSION_REQ_CODE = 1234; + + private ReactRootView mReactRootView; + private ReactInstanceManager mReactInstanceManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mReactRootView = new ReactRootView(this); + mReactInstanceManager = ReactInstanceManager.builder() + .setApplication(getApplication()) + .setBundleAssetName("index.android.bundle") + .setJSMainModuleName("index.android") + .addPackage(new MainReactPackage()) + .addPackage(new RNNotificationsPackage()) + .setUseDeveloperSupport(BuildConfig.DEBUG) + .setInitialLifecycleState(LifecycleState.RESUMED) + .build(); + + if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) { + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); + } else { + startReactApplication(); + } + } + + @TargetApi(Build.VERSION_CODES.M) + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == OVERLAY_PERMISSION_REQ_CODE) { + if (Settings.canDrawOverlays(this)) { + startReactApplication(); + } else { + finish(); + } + } + } + + @Override + protected void onResume() { + super.onResume(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostResume(this, this); + } + } + + @Override + protected void onPause() { + super.onPause(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostPause(this); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + if (mReactInstanceManager != null) { + mReactInstanceManager.onHostDestroy(this); + } + } + + @Override + public void invokeDefaultOnBackPressed() { + super.onBackPressed(); + } + + private void startReactApplication() { + mReactRootView.startReactApplication(mReactInstanceManager, "WixRNNotifications", null); + setContentView(mReactRootView); + } +} diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/myapplication/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to example/android/myapplication/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/myapplication/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to example/android/myapplication/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/myapplication/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to example/android/myapplication/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/myapplication/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to example/android/myapplication/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/example/android/myapplication/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/myapplication/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..aee44e138434630332d88b1680f33c4b24c70ab3 GIT binary patch literal 10486 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 + + diff --git a/example/android/myapplication/src/main/res/values/colors.xml b/example/android/myapplication/src/main/res/values/colors.xml new file mode 100644 index 0000000..3ab3e9c --- /dev/null +++ b/example/android/myapplication/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/example/android/myapplication/src/main/res/values/strings.xml b/example/android/myapplication/src/main/res/values/strings.xml new file mode 100644 index 0000000..3e65fa4 --- /dev/null +++ b/example/android/myapplication/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + Wix RN Notifications + Settings + diff --git a/example/android/myapplication/src/main/res/values/styles.xml b/example/android/myapplication/src/main/res/values/styles.xml new file mode 100644 index 0000000..fa3d07c --- /dev/null +++ b/example/android/myapplication/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + +