From 315965358256b13aa8fb03345f4153574600d453 Mon Sep 17 00:00:00 2001 From: James Hill Date: Sat, 11 Mar 2017 22:04:47 +1300 Subject: [PATCH 01/56] Upgrade to RN 0.40.0 --- .flowconfig | 7 +- .gitignore | 11 + .../project.pbxproj | 205 +++++++++++++++++- .../WebviewFileUploadAndroid.xcscheme | 27 ++- ios/WebviewFileUploadAndroid/AppDelegate.m | 4 +- .../WebviewFileUploadAndroidTests.m | 4 +- package.json | 2 +- 7 files changed, 236 insertions(+), 24 deletions(-) diff --git a/.flowconfig b/.flowconfig index 5912f47..876e701 100644 --- a/.flowconfig +++ b/.flowconfig @@ -28,18 +28,17 @@ experimental.strict_type_args=true munge_underscores=true -module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-5]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-5]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy unsafe.enable_getters_and_setters=true [version] -^0.35.0 +^0.36.0 diff --git a/.gitignore b/.gitignore index 41fc71b..81846a4 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,14 @@ tasks.txt *.pem *.cer *.keystore + +# 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://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots diff --git a/ios/WebviewFileUploadAndroid.xcodeproj/project.pbxproj b/ios/WebviewFileUploadAndroid.xcodeproj/project.pbxproj index 0ae815a..45a23d9 100644 --- a/ios/WebviewFileUploadAndroid.xcodeproj/project.pbxproj +++ b/ios/WebviewFileUploadAndroid.xcodeproj/project.pbxproj @@ -90,6 +90,97 @@ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; remoteInfo = React; }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; + remoteInfo = jschelpers; + }; + 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; + remoteInfo = "jschelpers-tvOS"; + }; 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; @@ -195,6 +286,7 @@ isa = PBXGroup; children = ( 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, ); name = Products; sourceTree = ""; @@ -203,6 +295,7 @@ isa = PBXGroup; children = ( 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, ); name = Products; sourceTree = ""; @@ -236,6 +329,7 @@ isa = PBXGroup; children = ( 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, ); name = Products; sourceTree = ""; @@ -244,6 +338,7 @@ isa = PBXGroup; children = ( 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, ); name = Products; sourceTree = ""; @@ -266,6 +361,13 @@ isa = PBXGroup; children = ( 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, ); name = Products; sourceTree = ""; @@ -283,6 +385,7 @@ isa = PBXGroup; children = ( 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, ); name = Products; sourceTree = ""; @@ -309,6 +412,7 @@ isa = PBXGroup; children = ( 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, ); name = Products; sourceTree = ""; @@ -510,6 +614,97 @@ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -715,11 +910,6 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native/ReactCommon/**", - ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; @@ -755,11 +945,6 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native/ReactCommon/**", - ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; diff --git a/ios/WebviewFileUploadAndroid.xcodeproj/xcshareddata/xcschemes/WebviewFileUploadAndroid.xcscheme b/ios/WebviewFileUploadAndroid.xcodeproj/xcshareddata/xcschemes/WebviewFileUploadAndroid.xcscheme index 603db4d..dbe14be 100644 --- a/ios/WebviewFileUploadAndroid.xcodeproj/xcshareddata/xcschemes/WebviewFileUploadAndroid.xcscheme +++ b/ios/WebviewFileUploadAndroid.xcodeproj/xcshareddata/xcschemes/WebviewFileUploadAndroid.xcscheme @@ -3,9 +3,23 @@ LastUpgradeVersion = "0620" version = "1.3"> + + + + + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -62,15 +76,18 @@ ReferencedContainer = "container:WebviewFileUploadAndroid.xcodeproj"> + + @@ -86,10 +103,10 @@ diff --git a/ios/WebviewFileUploadAndroid/AppDelegate.m b/ios/WebviewFileUploadAndroid/AppDelegate.m index 4585ce9..832d709 100644 --- a/ios/WebviewFileUploadAndroid/AppDelegate.m +++ b/ios/WebviewFileUploadAndroid/AppDelegate.m @@ -9,8 +9,8 @@ #import "AppDelegate.h" -#import "RCTBundleURLProvider.h" -#import "RCTRootView.h" +#import +#import @implementation AppDelegate diff --git a/ios/WebviewFileUploadAndroidTests/WebviewFileUploadAndroidTests.m b/ios/WebviewFileUploadAndroidTests/WebviewFileUploadAndroidTests.m index cd9a2fc..8de449e 100644 --- a/ios/WebviewFileUploadAndroidTests/WebviewFileUploadAndroidTests.m +++ b/ios/WebviewFileUploadAndroidTests/WebviewFileUploadAndroidTests.m @@ -10,8 +10,8 @@ #import #import -#import "RCTLog.h" -#import "RCTRootView.h" +#import +#import #define TIMEOUT_SECONDS 600 #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" diff --git a/package.json b/package.json index 1d9b6b9..d346868 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,6 @@ }, "dependencies": { "react": "^15.3.2", - "react-native": "^0.39.2" + "react-native": "^0.40.0" } } From 80d978b76b6f952883d13c33f923bdfcb7bde657 Mon Sep 17 00:00:00 2001 From: James Hill Date: Sat, 11 Mar 2017 22:05:32 +1300 Subject: [PATCH 02/56] Revert "Update build.gradle" This reverts commit 0230ae21e5a465e9ea1d776ca3ac2d6af5b62e22. --- android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index eac58b9..4fa696b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,4 +1,4 @@ -apply plugin: "com.android.library" +apply plugin: "com.android.application" import com.android.build.OutputFile From 44a56b283d75ce592e648e3a095f0379a1633874 Mon Sep 17 00:00:00 2001 From: James Hill Date: Sat, 11 Mar 2017 22:23:57 +1300 Subject: [PATCH 03/56] Add linting to dev dependencies --- .eslintrc.json | 17 +++++++++++++++++ package.json | 12 ++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..7ee1ce8 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "extends": "eslint-config-airbnb", + "parser": "babel-eslint", + "env": { + "browser": true, + "mocha": true, + "node": true + }, + "rules": { + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/react-in-jsx-scope": 2 + }, + "plugins": [ + "react" + ] +} diff --git a/package.json b/package.json index d346868..7368c53 100644 --- a/package.json +++ b/package.json @@ -8,5 +8,17 @@ "dependencies": { "react": "^15.3.2", "react-native": "^0.40.0" + }, + "devDependencies": { + "babel-eslint": "^7.1.1", + "babel-jest": "18.0.0", + "babel-preset-react-native": "1.9.1", + "eslint": "^3.14.0", + "eslint-config-airbnb": "^14.1.0", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-jsx-a11y": "^4.0.0", + "eslint-plugin-react": "^6.9.0", + "jest": "18.1.0", + "react-test-renderer": "15.4.2" } } From 730d199215b0a1147f7eb0e1921d1860f8c718fb Mon Sep 17 00:00:00 2001 From: James Hill Date: Sun, 12 Mar 2017 00:24:38 +1300 Subject: [PATCH 04/56] Fix formatting, outdated/deprecated style/imports --- .eslintrc.json | 6 +- AndroidWebView.js | 621 ++++++++++++++++++++++++---------------------- package.json | 4 +- 3 files changed, 334 insertions(+), 297 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 7ee1ce8..7c59346 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,11 @@ "rules": { "react/jsx-uses-react": 2, "react/jsx-uses-vars": 2, - "react/react-in-jsx-scope": 2 + "react/react-in-jsx-scope": 2, + "react/jsx-filename-extension": 0, + "react/jsx-boolean-value":0, + "no-console": 0, + "no-unused-expressions": 0 }, "plugins": [ "react" diff --git a/AndroidWebView.js b/AndroidWebView.js index 68d49bb..8b208ba 100644 --- a/AndroidWebView.js +++ b/AndroidWebView.js @@ -8,32 +8,80 @@ * * @providesModule AndroidWebView */ -'use strict'; +import React, { + Component, + PropTypes, +} from 'react'; +import ReactNative, { + EdgeInsetsPropType, + ActivityIndicator, + StyleSheet, + UIManager, + View, + requireNativeComponent, +} from 'react-native'; +import warning from 'warning'; +import keyMirror from 'keymirror'; +import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource'; -var EdgeInsetsPropType = require('EdgeInsetsPropType'); -var ActivityIndicator = require('ActivityIndicator'); -var React = require('React'); -var ReactNative = require('ReactNative'); -var StyleSheet = require('StyleSheet'); -var UIManager = require('UIManager'); -var View = require('View'); +/** + * Adds a function for warning Users of deprecated prop use (when something was + * valid in previous versions of a component, but not any more). + * + * In a fit of hilarious irony, the built in React deprecatedPropType used for + * warning users about deprecated PropTypes, has itself been deprecated, and + * this fact is terribly documented (or at least the SEO is subpar), with most + * of the "documentation" found through google being users being caught out by + * this change. + * https://facebook.github.io/react/warnings/dont-call-proptypes.html sort of + * contains a replacement, but not fully documented (e.g. no declaration of + * the 'warned' const). Finding the fix for this was a great experience + * all round, would recommend. + */ +const warned = {}; +export default function deprecatedPropType(propType, explanation) { + return function validate(props, propName, componentName, ...rest) { // Note ...rest here + if (props[propName] != null) { + const message = `"${propName}" property of "${componentName}" has been deprecated.\n${explanation}`; + if (!warned[message]) { + warning(false, message); + warned[message] = true; + } + } -var deprecatedPropType = require('deprecatedPropType'); -var keyMirror = require('fbjs/lib/keyMirror'); -var requireNativeComponent = require('requireNativeComponent'); -var resolveAssetSource = require('resolveAssetSource'); + return propType(props, propName, componentName, ...rest); // and here + }; +} -var PropTypes = React.PropTypes; -var RCT_WEBVIEW_REF = 'AndroidWebView'; +const RCT_WEBVIEW_REF = 'AndroidWebView'; + + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + hidden: { + height: 0, + flex: 0, // disable 'flex:1' when hiding a View + }, + loadingView: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + loadingProgressBar: { + height: 20, + }, +}); -var WebViewState = keyMirror({ - IDLE: null, - LOADING: null, - ERROR: null, +const WebViewState = keyMirror({ + IDLE: null, + LOADING: null, + ERROR: null, }); -var defaultRenderLoading = () => ( +const defaultRenderLoading = () => ( ( /** * Renders a native AndroidWebView that allows file upload. */ -class AndroidWebView extends React.Component { - static propTypes = { - ...View.propTypes, - renderError: PropTypes.func, - renderLoading: PropTypes.func, - onLoad: PropTypes.func, - onLoadEnd: PropTypes.func, - onLoadStart: PropTypes.func, - onError: PropTypes.func, - automaticallyAdjustContentInsets: PropTypes.bool, - contentInset: EdgeInsetsPropType, - onNavigationStateChange: PropTypes.func, - onMessage: PropTypes.func, - onContentSizeChange: PropTypes.func, - startInLoadingState: PropTypes.bool, // force WebView to show loadingView on first load - style: View.propTypes.style, - - html: deprecatedPropType( - PropTypes.string, - 'Use the `source` prop instead.' - ), - - url: deprecatedPropType( - PropTypes.string, - 'Use the `source` prop instead.' - ), - - /** - * Loads static html or a uri (with optional headers) in the WebView. +class AndroidWebView extends Component { + static propTypes = { + ...View.propTypes, + renderError: PropTypes.func, + renderLoading: PropTypes.func, + onLoad: PropTypes.func, + onLoadEnd: PropTypes.func, + onLoadStart: PropTypes.func, + onError: PropTypes.func, + automaticallyAdjustContentInsets: PropTypes.bool, + contentInset: EdgeInsetsPropType, + onNavigationStateChange: PropTypes.func, + onMessage: PropTypes.func, + onContentSizeChange: PropTypes.func, + startInLoadingState: PropTypes.bool, // force WebView to show loadingView on first load + style: View.propTypes.style, + + html: deprecatedPropType( + PropTypes.string, + 'Use the `source` prop instead.', + ), + + url: deprecatedPropType( + PropTypes.string, + 'Use the `source` prop instead.', + ), + + /** + * Loads static html or a uri (with optional headers) in the WebView. + */ + source: PropTypes.oneOfType([ + PropTypes.shape({ + /* + * The URI to load in the WebView. Can be a local or remote file. */ - source: PropTypes.oneOfType([ - PropTypes.shape({ - /* - * The URI to load in the WebView. Can be a local or remote file. - */ - uri: PropTypes.string, - /* - * The HTTP Method to use. Defaults to GET if not specified. - * NOTE: On Android, only GET and POST are supported. - */ - method: PropTypes.oneOf(['GET', 'POST']), - /* - * Additional HTTP headers to send with the request. - * NOTE: On Android, this can only be used with GET requests. - */ - headers: PropTypes.object, - /* - * The HTTP body to send with the request. This must be a valid - * UTF-8 string, and will be sent exactly as specified, with no - * additional encoding (e.g. URL-escaping or base64) applied. - * NOTE: On Android, this can only be used with POST requests. - */ - body: PropTypes.string, - }), - PropTypes.shape({ - /* - * A static HTML page to display in the WebView. - */ - html: PropTypes.string, - /* - * The base URL to be used for any relative links in the HTML. - */ - baseUrl: PropTypes.string, - }), - /* - * Used internally by packager. - */ - PropTypes.number, - ]), - - /** - * Used on Android only, JS is enabled by default for WebView on iOS - * @platform android + uri: PropTypes.string, + /* + * The HTTP Method to use. Defaults to GET if not specified. + * NOTE: On Android, only GET and POST are supported. */ - javaScriptEnabled: PropTypes.bool, - - /** - * Used on Android only, controls whether DOM Storage is enabled or not - * @platform android + method: PropTypes.oneOf(['GET', 'POST']), + /* + * Additional HTTP headers to send with the request. + * NOTE: On Android, this can only be used with GET requests. */ - domStorageEnabled: PropTypes.bool, - - /** - * Sets the JS to be injected when the webpage loads. + headers: PropTypes.object, + /* + * The HTTP body to send with the request. This must be a valid + * UTF-8 string, and will be sent exactly as specified, with no + * additional encoding (e.g. URL-escaping or base64) applied. + * NOTE: On Android, this can only be used with POST requests. */ - injectedJavaScript: PropTypes.string, - - /** - * Sets whether the webpage scales to fit the view and the user can change the scale. + body: PropTypes.string, + }), + PropTypes.shape({ + /* + * A static HTML page to display in the WebView. */ - scalesPageToFit: PropTypes.bool, - - /** - * Sets the user-agent for this WebView. The user-agent can also be set in native using - * WebViewConfig. This prop will overwrite that config. + html: PropTypes.string, + /* + * The base URL to be used for any relative links in the HTML. */ - userAgent: PropTypes.string, + baseUrl: PropTypes.string, + }), + /* + * Used internally by packager. + */ + PropTypes.number, + ]), - /** - * Used to locate this view in end-to-end tests. - */ - testID: PropTypes.string, + /** + * Used on Android only, JS is enabled by default for WebView on iOS + * @platform android + */ + javaScriptEnabled: PropTypes.bool, - /** - * Determines whether HTML5 audio & videos require the user to tap before they can - * start playing. The default value is `false`. - */ - mediaPlaybackRequiresUserAction: PropTypes.bool, - /** - * Make upload file available - */ - uploadEnabledAndroid: PropTypes.bool, + /** + * Used on Android only, controls whether DOM Storage is enabled or not + * @platform android + */ + domStorageEnabled: PropTypes.bool, - /** - * Boolean that sets whether JavaScript running in the context of a file - * scheme URL should be allowed to access content from any origin. - * Including accessing content from other file scheme URLs - * @platform android - */ - allowUniversalAccessFromFileURLs: PropTypes.bool, - }; - - static defaultProps = { - javaScriptEnabled : true, - scalesPageToFit: true, - }; - - state = { - viewState: WebViewState.IDLE, - lastErrorEvent: null, - startInLoadingState: true, - }; - - componentWillMount() { - if (this.props.startInLoadingState) { - this.setState({viewState: WebViewState.LOADING}); - } - } + /** + * Sets the JS to be injected when the webpage loads. + */ + injectedJavaScript: PropTypes.string, - render() { - var otherView = null; + /** + * Sets whether the webpage scales to fit the view and the user can change the scale. + */ + scalesPageToFit: PropTypes.bool, - if (this.state.viewState === WebViewState.LOADING) { - otherView = (this.props.renderLoading || defaultRenderLoading)(); - } else if (this.state.viewState === WebViewState.ERROR) { - var errorEvent = this.state.lastErrorEvent; - otherView = this.props.renderError && this.props.renderError( - errorEvent.domain, - errorEvent.code, - errorEvent.description); - } else if (this.state.viewState !== WebViewState.IDLE) { - console.error('RCTWebView invalid state encountered: ' + this.state.loading); - } + /** + * Sets the user-agent for this WebView. The user-agent can also be set in native using + * WebViewConfig. This prop will overwrite that config. + */ + userAgent: PropTypes.string, - var webViewStyles = [styles.container, this.props.style]; - if (this.state.viewState === WebViewState.LOADING || - this.state.viewState === WebViewState.ERROR) { - // if we're in either LOADING or ERROR states, don't show the webView - webViewStyles.push(styles.hidden); - } + /** + * Used to locate this view in end-to-end tests. + */ + testID: PropTypes.string, - var source = this.props.source || {}; - if (this.props.html) { - source.html = this.props.html; - } else if (this.props.url) { - source.uri = this.props.url; - } + /** + * Determines whether HTML5 audio & videos require the user to tap before they can + * start playing. The default value is `false`. + */ + mediaPlaybackRequiresUserAction: PropTypes.bool, + /** + * Make upload file available + */ + uploadEnabledAndroid: PropTypes.bool, - if (source.method === 'POST' && source.headers) { - console.warn('WebView: `source.headers` is not supported when using POST.'); - } else if (source.method === 'GET' && source.body) { - console.warn('WebView: `source.body` is not supported when using GET.'); + /** + * Boolean that sets whether JavaScript running in the context of a file + * scheme URL should be allowed to access content from any origin. + * Including accessing content from other file scheme URLs + * @platform android + */ + allowUniversalAccessFromFileURLs: PropTypes.bool, + }; + + static defaultProps = { + javaScriptEnabled: true, + scalesPageToFit: true, + }; + + state = { + viewState: WebViewState.IDLE, + lastErrorEvent: null, + startInLoadingState: true, + }; + + componentWillMount() { + if (this.props.startInLoadingState) { + this.setState({ viewState: WebViewState.LOADING }); } + } - var webView = - ; + onLoadingStart = (event) => { + const onLoadStart = this.props.onLoadStart; + onLoadStart && onLoadStart(event); + this.updateNavigationState(event); + }; - return ( - - {webView} - {otherView} - - ); + onLoadingError = (event) => { + event.persist(); // persist this event because we need to store it + const { onError, onLoadEnd } = this.props; + onError && onError(event); + onLoadEnd && onLoadEnd(event); + console.warn('Encountered an error loading page', event.nativeEvent); + + this.setState({ + lastErrorEvent: event.nativeEvent, + viewState: WebViewState.ERROR, + }); + }; + + onLoadingFinish = (event) => { + const { onLoad, onLoadEnd } = this.props; + onLoad && onLoad(event); + onLoadEnd && onLoadEnd(event); + this.setState({ + viewState: WebViewState.IDLE, + }); + this.updateNavigationState(event); + }; + + onMessage = (event: Event) => { + const { onMessage } = this.props; + onMessage && onMessage(event); } + getWebViewHandle = () => ReactNative.findNodeHandle(this[RCT_WEBVIEW_REF]); + + goForward = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.RCTWebView.Commands.goForward, - null - ); + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + UIManager.RCTWebView.Commands.goForward, + null, + ); }; goBack = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.RCTWebView.Commands.goBack, - null - ); + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + UIManager.RCTWebView.Commands.goBack, + null, + ); + }; + + postMessage = (data) => { + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + UIManager.RCTWebView.Commands.postMessage, + [String(data)], + ); }; reload = () => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.RCTWebView.Commands.reload, - null - ); + UIManager.dispatchViewManagerCommand( + this.getWebViewHandle(), + UIManager.RCTWebView.Commands.reload, + null, + ); }; stopLoading = () => { UIManager.dispatchViewManagerCommand( this.getWebViewHandle(), UIManager.RCTWebView.Commands.stopLoading, - null + null, ); }; - postMessage = (data) => { - UIManager.dispatchViewManagerCommand( - this.getWebViewHandle(), - UIManager.RCTWebView.Commands.postMessage, - [String(data)] - ); + /** + * We return an event with a bunch of fields including: + * url, title, loading, canGoBack, canGoForward + */ + updateNavigationState = (event) => { + if (this.props.onNavigationStateChange) { + this.props.onNavigationStateChange(event.nativeEvent); + } }; - /** - * We return an event with a bunch of fields including: - * url, title, loading, canGoBack, canGoForward - */ - updateNavigationState = (event) => { - if (this.props.onNavigationStateChange) { - this.props.onNavigationStateChange(event.nativeEvent); - } - }; - - getWebViewHandle = () => { - return ReactNative.findNodeHandle(this.refs[RCT_WEBVIEW_REF]); - }; - - onLoadingStart = (event) => { - var onLoadStart = this.props.onLoadStart; - onLoadStart && onLoadStart(event); - this.updateNavigationState(event); - }; - - onLoadingError = (event) => { - event.persist(); // persist this event because we need to store it - var {onError, onLoadEnd} = this.props; - onError && onError(event); - onLoadEnd && onLoadEnd(event); - console.warn('Encountered an error loading page', event.nativeEvent); - - this.setState({ - lastErrorEvent: event.nativeEvent, - viewState: WebViewState.ERROR - }); - }; - - onLoadingFinish = (event) => { - var {onLoad, onLoadEnd} = this.props; - onLoad && onLoad(event); - onLoadEnd && onLoadEnd(event); - this.setState({ - viewState: WebViewState.IDLE, - }); - this.updateNavigationState(event); - }; - - onMessage = (event: Event) => { - var {onMessage} = this.props; - onMessage && onMessage(event); + render() { + let otherView = null; + + if (this.state.viewState === WebViewState.LOADING) { + otherView = (this.props.renderLoading || defaultRenderLoading)(); + } else if (this.state.viewState === WebViewState.ERROR) { + const errorEvent = this.state.lastErrorEvent; + otherView = this.props.renderError && this.props.renderError( + errorEvent.domain, + errorEvent.code, + errorEvent.description); + } else if (this.state.viewState !== WebViewState.IDLE) { + console.error(`RCTWebView invalid state encountered: ${this.state.loading}`); + } + + const webViewStyles = [styles.container, this.props.style]; + if (this.state.viewState === WebViewState.LOADING || + this.state.viewState === WebViewState.ERROR) { + // if we're in either LOADING or ERROR states, don't show the webView + webViewStyles.push(styles.hidden); + } + + const source = this.props.source || {}; + if (this.props.html) { + source.html = this.props.html; + } else if (this.props.url) { + source.uri = this.props.url; + } + + if (source.method === 'POST' && source.headers) { + console.warn('WebView: `source.headers` is not supported when using POST.'); + } else if (source.method === 'GET' && source.body) { + console.warn('WebView: `source.body` is not supported when using GET.'); } + + const webView = ( + { this[RCT_WEBVIEW_REF] = c; }} + key="androidwebViewKey" + style={webViewStyles} + source={resolveAssetSource(source)} + scalesPageToFit={this.props.scalesPageToFit} + injectedJavaScript={this.props.injectedJavaScript} + userAgent={this.props.userAgent} + javaScriptEnabled={this.props.javaScriptEnabled} + domStorageEnabled={this.props.domStorageEnabled} + messagingEnabled={typeof this.props.onMessage === 'function'} + onMessage={this.onMessage} + contentInset={this.props.contentInset} + automaticallyAdjustContentInsets={this.props.automaticallyAdjustContentInsets} + onContentSizeChange={this.props.onContentSizeChange} + onLoadingStart={this.onLoadingStart} + onLoadingFinish={this.onLoadingFinish} + onLoadingError={this.onLoadingError} + testID={this.props.testID} + mediaPlaybackRequiresUserAction={this.props.mediaPlaybackRequiresUserAction} + uploadEnabledAndroid={true} + /> + ); + + return ( + + {webView} + {otherView} + + ); + } } -var WebViewForAndroid = requireNativeComponent('AndroidWebView', AndroidWebView, { - nativeOnly: { - messagingEnabled: PropTypes.bool, - }, +const WebViewForAndroid = requireNativeComponent('AndroidWebView', AndroidWebView, { + nativeOnly: { + messagingEnabled: PropTypes.bool, + }, }); -var styles = StyleSheet.create({ - container: { - flex: 1, - }, - hidden: { - height: 0, - flex: 0, // disable 'flex:1' when hiding a View - }, - loadingView: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - loadingProgressBar: { - height: 20, - }, -}); module.exports = AndroidWebView; diff --git a/package.json b/package.json index 7368c53..01a9af5 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,10 @@ "start": "node node_modules/react-native/local-cli/cli.js start" }, "dependencies": { + "keymirror": "^0.1.1", "react": "^15.3.2", - "react-native": "^0.40.0" + "react-native": "^0.40.0", + "warning": "^3.0.0" }, "devDependencies": { "babel-eslint": "^7.1.1", From e7adadbab136e60dc6f92472212cd087d8c4a4d5 Mon Sep 17 00:00:00 2001 From: James Hill Date: Sun, 12 Mar 2017 02:16:07 +1300 Subject: [PATCH 05/56] Make project more npm friendly --- index.js | 3 +++ package.json | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 index.js diff --git a/index.js b/index.js new file mode 100644 index 0000000..07fc2f6 --- /dev/null +++ b/index.js @@ -0,0 +1,3 @@ +import AndroidWebView from './AndroidWebView'; + +export default AndroidWebView; diff --git a/package.json b/package.json index 01a9af5..f54df90 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,13 @@ { - "name": "WebviewFileUploadAndroid", - "version": "0.0.1", + "name": "react-native-webview-android-file-upload", + "version": "0.1.0", "private": true, + "main": "index.js", + "files": [ + "index.js", + "AndroidWebView.js", + "android/" + ], "scripts": { "start": "node node_modules/react-native/local-cli/cli.js start" }, From 469a9e25400b1a46ffc240d3f921d5a24e34e594 Mon Sep 17 00:00:00 2001 From: James Hill Date: Sun, 12 Mar 2017 16:49:44 +1300 Subject: [PATCH 06/56] Strip unnecessary files, refactor into library --- .buckconfig | 6 - .flowconfig | 44 - .gitattributes | 1 - .watchmanconfig | 1 - WebViewForUploadImages.js | 25 - android/.idea/.name | 1 - android/.idea/compiler.xml | 22 - android/.idea/copyright/profiles_settings.xml | 3 - android/.idea/gradle.xml | 18 - .../.idea/libraries/android_jsc_r174650.xml | 10 - .../.idea/libraries/appcompat_v7_23_0_1.xml | 15 - .../.idea/libraries/bolts_android_1_1_4.xml | 11 - android/.idea/libraries/commons_cli_1_2.xml | 11 - android/.idea/libraries/drawee_0_8_1.xml | 10 - android/.idea/libraries/fbcore_0_8_1.xml | 10 - android/.idea/libraries/fresco_0_8_1.xml | 10 - .../.idea/libraries/imagepipeline_0_8_1.xml | 10 - .../libraries/imagepipeline_okhttp_0_8_1.xml | 10 - .../.idea/libraries/jackson_core_2_2_3.xml | 11 - android/.idea/libraries/jsr305_3_0_0.xml | 11 - android/.idea/libraries/library_2_4_0.xml | 11 - android/.idea/libraries/okhttp_2_5_0.xml | 11 - android/.idea/libraries/okhttp_ws_2_5_0.xml | 11 - android/.idea/libraries/okio_1_6_0.xml | 11 - .../.idea/libraries/react_native_0_23_1.xml | 14 - .../libraries/recyclerview_v7_23_0_1.xml | 12 - android/.idea/libraries/stetho_1_2_0.xml | 11 - .../.idea/libraries/stetho_okhttp_1_2_0.xml | 11 - .../libraries/support_annotations_23_0_1.xml | 11 - android/.idea/libraries/support_v4_23_0_1.xml | 16 - android/.idea/misc.xml | 47 - android/.idea/modules.xml | 9 - android/.idea/vcs.xml | 6 - android/app/BUCK | 66 -- android/app/build.gradle | 139 --- android/app/proguard-rules.pro | 66 -- android/app/react.gradle | 97 -- android/app/src/main/AndroidManifest.xml | 31 - .../MainActivity.java | 88 -- .../MainApplication.java | 45 - .../androidWebView/AndroidWebViewManager.java | 94 -- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 0 bytes android/app/src/main/res/values/strings.xml | 3 - android/app/src/main/res/values/styles.xml | 8 - android/build.gradle | 33 +- android/gradle.properties | 21 - android/gradle/wrapper/gradle-wrapper.jar | Bin 52266 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - android/gradlew | 164 --- android/gradlew.bat | 90 -- android/keystores/BUCK | 8 - android/keystores/debug.keystore.properties | 4 - android/settings.gradle | 3 - android/src/main/AndroidManifest.xml | 3 + .../androidWebView/AndroidWebViewManager.java | 96 ++ .../androidWebView/AndroidWebViewModule.java | 36 +- .../androidWebView/AndroidWebViewPackage.java | 0 choose-file-finished.png | Bin 16128 -> 0 bytes fileUpload.html | 13 - images/choose-file-finished.png | Bin 297791 -> 0 bytes images/show-file-chooser.png | Bin 318918 -> 0 bytes index.android.js | 27 - index.ios.js | 52 - .../project.pbxproj | 988 ------------------ .../WebviewFileUploadAndroid.xcscheme | 129 --- ios/WebviewFileUploadAndroid/AppDelegate.h | 16 - ios/WebviewFileUploadAndroid/AppDelegate.m | 37 - .../Base.lproj/LaunchScreen.xib | 42 - .../AppIcon.appiconset/Contents.json | 38 - ios/WebviewFileUploadAndroid/Info.plist | 54 - ios/WebviewFileUploadAndroid/main.m | 18 - ios/WebviewFileUploadAndroidTests/Info.plist | 24 - .../WebviewFileUploadAndroidTests.m | 70 -- package.json | 2 +- show-file-chooser.png | Bin 84044 -> 0 bytes 78 files changed, 138 insertions(+), 2893 deletions(-) delete mode 100644 .buckconfig delete mode 100644 .flowconfig delete mode 100644 .gitattributes delete mode 100644 .watchmanconfig delete mode 100644 WebViewForUploadImages.js delete mode 100644 android/.idea/.name delete mode 100644 android/.idea/compiler.xml delete mode 100644 android/.idea/copyright/profiles_settings.xml delete mode 100644 android/.idea/gradle.xml delete mode 100644 android/.idea/libraries/android_jsc_r174650.xml delete mode 100644 android/.idea/libraries/appcompat_v7_23_0_1.xml delete mode 100644 android/.idea/libraries/bolts_android_1_1_4.xml delete mode 100644 android/.idea/libraries/commons_cli_1_2.xml delete mode 100644 android/.idea/libraries/drawee_0_8_1.xml delete mode 100644 android/.idea/libraries/fbcore_0_8_1.xml delete mode 100644 android/.idea/libraries/fresco_0_8_1.xml delete mode 100644 android/.idea/libraries/imagepipeline_0_8_1.xml delete mode 100644 android/.idea/libraries/imagepipeline_okhttp_0_8_1.xml delete mode 100644 android/.idea/libraries/jackson_core_2_2_3.xml delete mode 100644 android/.idea/libraries/jsr305_3_0_0.xml delete mode 100644 android/.idea/libraries/library_2_4_0.xml delete mode 100644 android/.idea/libraries/okhttp_2_5_0.xml delete mode 100644 android/.idea/libraries/okhttp_ws_2_5_0.xml delete mode 100644 android/.idea/libraries/okio_1_6_0.xml delete mode 100644 android/.idea/libraries/react_native_0_23_1.xml delete mode 100644 android/.idea/libraries/recyclerview_v7_23_0_1.xml delete mode 100644 android/.idea/libraries/stetho_1_2_0.xml delete mode 100644 android/.idea/libraries/stetho_okhttp_1_2_0.xml delete mode 100644 android/.idea/libraries/support_annotations_23_0_1.xml delete mode 100644 android/.idea/libraries/support_v4_23_0_1.xml delete mode 100644 android/.idea/misc.xml delete mode 100644 android/.idea/modules.xml delete mode 100644 android/.idea/vcs.xml delete mode 100644 android/app/BUCK delete mode 100644 android/app/build.gradle delete mode 100644 android/app/proguard-rules.pro delete mode 100644 android/app/react.gradle delete mode 100644 android/app/src/main/AndroidManifest.xml delete mode 100644 android/app/src/main/java/com/webviewfileuploadandroid/MainActivity.java delete mode 100644 android/app/src/main/java/com/webviewfileuploadandroid/MainApplication.java delete mode 100644 android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java delete mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 android/app/src/main/res/values/strings.xml delete mode 100644 android/app/src/main/res/values/styles.xml delete mode 100644 android/gradle.properties delete mode 100644 android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 android/gradlew delete mode 100644 android/gradlew.bat delete mode 100644 android/keystores/BUCK delete mode 100644 android/keystores/debug.keystore.properties delete mode 100644 android/settings.gradle create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java rename android/{app => }/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java (77%) rename android/{app => }/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewPackage.java (100%) delete mode 100644 choose-file-finished.png delete mode 100644 fileUpload.html delete mode 100644 images/choose-file-finished.png delete mode 100644 images/show-file-chooser.png delete mode 100644 index.android.js delete mode 100644 index.ios.js delete mode 100644 ios/WebviewFileUploadAndroid.xcodeproj/project.pbxproj delete mode 100644 ios/WebviewFileUploadAndroid.xcodeproj/xcshareddata/xcschemes/WebviewFileUploadAndroid.xcscheme delete mode 100644 ios/WebviewFileUploadAndroid/AppDelegate.h delete mode 100644 ios/WebviewFileUploadAndroid/AppDelegate.m delete mode 100644 ios/WebviewFileUploadAndroid/Base.lproj/LaunchScreen.xib delete mode 100644 ios/WebviewFileUploadAndroid/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 ios/WebviewFileUploadAndroid/Info.plist delete mode 100644 ios/WebviewFileUploadAndroid/main.m delete mode 100644 ios/WebviewFileUploadAndroidTests/Info.plist delete mode 100644 ios/WebviewFileUploadAndroidTests/WebviewFileUploadAndroidTests.m delete mode 100644 show-file-chooser.png diff --git a/.buckconfig b/.buckconfig deleted file mode 100644 index 934256c..0000000 --- a/.buckconfig +++ /dev/null @@ -1,6 +0,0 @@ - -[android] - target = Google Inc.:Google APIs:23 - -[maven_repositories] - central = https://repo1.maven.org/maven2 diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 876e701..0000000 --- a/.flowconfig +++ /dev/null @@ -1,44 +0,0 @@ -[ignore] -; We fork some components by platform -.*/*[.]android.js - -; Ignore "BUCK" generated dirs -/\.buckd/ - -; Ignore unexpected extra "@providesModule" -.*/node_modules/.*/node_modules/fbjs/.* - -; Ignore duplicate module providers -; For RN Apps installed via npm, "Libraries" folder is inside -; "node_modules/react-native" but in the source repo it is in the root -.*/Libraries/react-native/React.js -.*/Libraries/react-native/ReactNative.js - -[include] - -[libs] -node_modules/react-native/Libraries/react-native/react-native-interface.js -node_modules/react-native/flow -flow/ - -[options] -module.system=haste - -experimental.strict_type_args=true - -munge_underscores=true - -module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' - -suppress_type=$FlowIssue -suppress_type=$FlowFixMe -suppress_type=$FixMe - -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ -suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy - -unsafe.enable_getters_and_setters=true - -[version] -^0.36.0 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index d42ff18..0000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.pbxproj -text diff --git a/.watchmanconfig b/.watchmanconfig deleted file mode 100644 index 9e26dfe..0000000 --- a/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/WebViewForUploadImages.js b/WebViewForUploadImages.js deleted file mode 100644 index 222513d..0000000 --- a/WebViewForUploadImages.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - */ - -import React, {Component} from 'react'; -import { - Dimensions -} from 'react-native'; - -import AndroidWebView from './AndroidWebView' - -export default class WebViewForUploadImages extends Component { - render() { - return ( - - ); - } -} diff --git a/android/.idea/.name b/android/.idea/.name deleted file mode 100644 index 1fd74d1..0000000 --- a/android/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -android \ No newline at end of file diff --git a/android/.idea/compiler.xml b/android/.idea/compiler.xml deleted file mode 100644 index 96cc43e..0000000 --- a/android/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/copyright/profiles_settings.xml b/android/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/android/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/android/.idea/gradle.xml b/android/.idea/gradle.xml deleted file mode 100644 index 8d2df47..0000000 --- a/android/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/android_jsc_r174650.xml b/android/.idea/libraries/android_jsc_r174650.xml deleted file mode 100644 index 0b37f40..0000000 --- a/android/.idea/libraries/android_jsc_r174650.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/appcompat_v7_23_0_1.xml b/android/.idea/libraries/appcompat_v7_23_0_1.xml deleted file mode 100644 index 1388d9d..0000000 --- a/android/.idea/libraries/appcompat_v7_23_0_1.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/bolts_android_1_1_4.xml b/android/.idea/libraries/bolts_android_1_1_4.xml deleted file mode 100644 index 16a0c28..0000000 --- a/android/.idea/libraries/bolts_android_1_1_4.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/commons_cli_1_2.xml b/android/.idea/libraries/commons_cli_1_2.xml deleted file mode 100644 index 9f82d5c..0000000 --- a/android/.idea/libraries/commons_cli_1_2.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/drawee_0_8_1.xml b/android/.idea/libraries/drawee_0_8_1.xml deleted file mode 100644 index b75bcf8..0000000 --- a/android/.idea/libraries/drawee_0_8_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/fbcore_0_8_1.xml b/android/.idea/libraries/fbcore_0_8_1.xml deleted file mode 100644 index 5426d8c..0000000 --- a/android/.idea/libraries/fbcore_0_8_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/fresco_0_8_1.xml b/android/.idea/libraries/fresco_0_8_1.xml deleted file mode 100644 index ee1d2cb..0000000 --- a/android/.idea/libraries/fresco_0_8_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/imagepipeline_0_8_1.xml b/android/.idea/libraries/imagepipeline_0_8_1.xml deleted file mode 100644 index da9077d..0000000 --- a/android/.idea/libraries/imagepipeline_0_8_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/imagepipeline_okhttp_0_8_1.xml b/android/.idea/libraries/imagepipeline_okhttp_0_8_1.xml deleted file mode 100644 index 811bcab..0000000 --- a/android/.idea/libraries/imagepipeline_okhttp_0_8_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/jackson_core_2_2_3.xml b/android/.idea/libraries/jackson_core_2_2_3.xml deleted file mode 100644 index cbf3ffe..0000000 --- a/android/.idea/libraries/jackson_core_2_2_3.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/jsr305_3_0_0.xml b/android/.idea/libraries/jsr305_3_0_0.xml deleted file mode 100644 index b9fbaab..0000000 --- a/android/.idea/libraries/jsr305_3_0_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/library_2_4_0.xml b/android/.idea/libraries/library_2_4_0.xml deleted file mode 100644 index eedfc0d..0000000 --- a/android/.idea/libraries/library_2_4_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/okhttp_2_5_0.xml b/android/.idea/libraries/okhttp_2_5_0.xml deleted file mode 100644 index 7cc2954..0000000 --- a/android/.idea/libraries/okhttp_2_5_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/okhttp_ws_2_5_0.xml b/android/.idea/libraries/okhttp_ws_2_5_0.xml deleted file mode 100644 index a3751d5..0000000 --- a/android/.idea/libraries/okhttp_ws_2_5_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/okio_1_6_0.xml b/android/.idea/libraries/okio_1_6_0.xml deleted file mode 100644 index ec753df..0000000 --- a/android/.idea/libraries/okio_1_6_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/react_native_0_23_1.xml b/android/.idea/libraries/react_native_0_23_1.xml deleted file mode 100644 index bb14a10..0000000 --- a/android/.idea/libraries/react_native_0_23_1.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/recyclerview_v7_23_0_1.xml b/android/.idea/libraries/recyclerview_v7_23_0_1.xml deleted file mode 100644 index cf1b6b2..0000000 --- a/android/.idea/libraries/recyclerview_v7_23_0_1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/stetho_1_2_0.xml b/android/.idea/libraries/stetho_1_2_0.xml deleted file mode 100644 index 252bbc2..0000000 --- a/android/.idea/libraries/stetho_1_2_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/stetho_okhttp_1_2_0.xml b/android/.idea/libraries/stetho_okhttp_1_2_0.xml deleted file mode 100644 index e05468c..0000000 --- a/android/.idea/libraries/stetho_okhttp_1_2_0.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/support_annotations_23_0_1.xml b/android/.idea/libraries/support_annotations_23_0_1.xml deleted file mode 100644 index 0c36ca5..0000000 --- a/android/.idea/libraries/support_annotations_23_0_1.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/libraries/support_v4_23_0_1.xml b/android/.idea/libraries/support_v4_23_0_1.xml deleted file mode 100644 index e7ead72..0000000 --- a/android/.idea/libraries/support_v4_23_0_1.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/misc.xml b/android/.idea/misc.xml deleted file mode 100644 index 47b8492..0000000 --- a/android/.idea/misc.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - Android Lint - - - General - - - Maven - - - - - Android - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/modules.xml b/android/.idea/modules.xml deleted file mode 100644 index 9c183da..0000000 --- a/android/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/android/.idea/vcs.xml b/android/.idea/vcs.xml deleted file mode 100644 index 6564d52..0000000 --- a/android/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/app/BUCK b/android/app/BUCK deleted file mode 100644 index 34d3b56..0000000 --- a/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.webviewfileuploadandroid', -) - -android_resource( - name = 'res', - res = 'src/main/res', - package = 'com.webviewfileuploadandroid', -) - -android_binary( - name = 'app', - package_type = 'debug', - manifest = 'src/main/AndroidManifest.xml', - keystore = '//android/keystores:debug', - deps = [ - ':app-code', - ], -) diff --git a/android/app/build.gradle b/android/app/build.gradle deleted file mode 100644 index 4fa696b..0000000 --- a/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.webviewfileuploadandroid" - 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/android/app/proguard-rules.pro b/android/app/proguard-rules.pro deleted file mode 100644 index 48361a9..0000000 --- a/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/android/app/react.gradle b/android/app/react.gradle deleted file mode 100644 index 850e40d..0000000 --- a/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", "node", "node_modules/react-native/local-cli/cli.js", "bundle", "--platform", "android", "--dev", "${devEnabled}", - "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir - } else { - commandLine "node", "node_modules/react-native/local-cli/cli.js", "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/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 3b14d94..0000000 --- a/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/android/app/src/main/java/com/webviewfileuploadandroid/MainActivity.java b/android/app/src/main/java/com/webviewfileuploadandroid/MainActivity.java deleted file mode 100644 index 096740e..0000000 --- a/android/app/src/main/java/com/webviewfileuploadandroid/MainActivity.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.webviewfileuploadandroid; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.ClipData; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.webkit.ValueCallback; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.ReactPackage; -import com.facebook.react.shell.MainReactPackage; -import com.webviewfileuploadandroid.androidWebView.AndroidWebViewPackage; - -import java.util.Arrays; -import java.util.List; - -public class MainActivity extends ReactActivity { - - private ValueCallback mUploadMessage; - private ValueCallback mUploadCallbackAboveL; - - /** - * Returns the name of the main component registered from JavaScript. - * This is used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "WebviewFileUploadAndroid"; - } - - public void setUploadMessage(ValueCallback uploadMessage) { - mUploadMessage = uploadMessage; - } - - - public void setmUploadCallbackAboveL(ValueCallback mUploadCallbackAboveL) { - this.mUploadCallbackAboveL = mUploadCallbackAboveL; - } - - @Override - public void onActivityResult(int requestCode, int resultCode, - Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == 1) { - if (null == mUploadMessage && null == mUploadCallbackAboveL) return; - Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); - if (mUploadCallbackAboveL != null) { - onActivityResultAboveL(requestCode, resultCode, data); - } else if (mUploadMessage != null) { - mUploadMessage.onReceiveValue(result); - mUploadMessage = null; - } - } - - - } - - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) { - if (requestCode != 1 - || mUploadCallbackAboveL == null) { - return; - } - Uri[] results = null; - if (resultCode == Activity.RESULT_OK) { - if (data == null) { - } else { - String dataString = data.getDataString(); - ClipData clipData = data.getClipData(); - if (clipData != null) { - results = new Uri[clipData.getItemCount()]; - for (int i = 0; i < clipData.getItemCount(); i++) { - ClipData.Item item = clipData.getItemAt(i); - results[i] = item.getUri(); - } - } - if (dataString != null) - results = new Uri[]{Uri.parse(dataString)}; - } - } - mUploadCallbackAboveL.onReceiveValue(results); - mUploadCallbackAboveL = null; - return; - } -} diff --git a/android/app/src/main/java/com/webviewfileuploadandroid/MainApplication.java b/android/app/src/main/java/com/webviewfileuploadandroid/MainApplication.java deleted file mode 100644 index f1e01a9..0000000 --- a/android/app/src/main/java/com/webviewfileuploadandroid/MainApplication.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.webviewfileuploadandroid; - -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 com.facebook.soloader.SoLoader; - -import com.webviewfileuploadandroid.androidWebView.AndroidWebViewPackage; - -import java.util.Arrays; -import java.util.List; - -public class MainApplication extends Application implements ReactApplication { - - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } - - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new AndroidWebViewPackage() - ); - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - } -} diff --git a/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java b/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java deleted file mode 100644 index f9baedb..0000000 --- a/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.webviewfileuploadandroid.androidWebView; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.util.Log; -import android.webkit.JsPromptResult; -import android.webkit.JsResult; -import android.webkit.ValueCallback; -import android.webkit.WebChromeClient; -import android.webkit.WebView; - - -import com.facebook.react.uimanager.annotations.ReactProp; -import com.facebook.react.views.webview.ReactWebViewManager; -import com.webviewfileuploadandroid.MainActivity; - -/** - * Created by ydq on 16/4/12. - */ -public class AndroidWebViewManager extends ReactWebViewManager { - - - private Activity mActivity = null; - private AndroidWebViewPackage aPackage; - public String getName() { - return "AndroidWebView"; - } - - @ReactProp(name = "uploadEnabledAndroid") - public void uploadEnabledAndroid(WebView view, boolean enabled) { - if(enabled) { - final AndroidWebViewModule module = this.aPackage.getModule(); - view.setWebChromeClient(new WebChromeClient(){ - - public void openFileChooser(ValueCallback uploadMsg, String acceptType) { - ((MainActivity)module.getActivity()).setUploadMessage(uploadMsg); - openFileChooserView(); - - } - - public boolean onJsConfirm (WebView view, String url, String message, JsResult result){ - return true; - } - - public boolean onJsPrompt (WebView view, String url, String message, String defaultValue, JsPromptResult result){ - return true; - } - - // For Android < 3.0 - public void openFileChooser(ValueCallback uploadMsg) { - ((MainActivity)module.getActivity()).setUploadMessage(uploadMsg); - openFileChooserView(); - } - - // For Android > 4.1.1 - public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) { - ((MainActivity)module.getActivity()).setUploadMessage(uploadMsg); - openFileChooserView(); - } - - // For Android > 5.0 - public boolean onShowFileChooser (WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { - Log.d("customwebview", "onShowFileChooser"); - - ((MainActivity)module.getActivity()).setmUploadCallbackAboveL(filePathCallback); - openFileChooserView(); - return true; - } - - private void openFileChooserView(){ - try { - final Intent galleryIntent = new Intent(Intent.ACTION_PICK); - galleryIntent.setType("image/*"); - final Intent chooserIntent = Intent.createChooser(galleryIntent, "choose file"); - module.getActivity().startActivityForResult(chooserIntent, 1); - } catch (Exception e) { - Log.d("customwebview", e.toString()); - } - } - }); - } - } - - public void setPackage(AndroidWebViewPackage aPackage){ - this.aPackage = aPackage; - } - - public AndroidWebViewPackage getPackage(){ - return this.aPackage; - } -} - - diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bcccec65160d92116f20ffce4fce0b5245c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 zcmZ{nX*|@A^T0p5j$I+^%FVhdvMbgt%d+mG98ubwNv_tpITppba^GiieBBZGI>I89 zGgm8TA>_)DlEu&W;s3#ZUNiH4&CF{a%siTjzG;eOzQB6{003qKeT?}z_5U*{{kgZ; zdV@U&tqa-&4FGisjMN8o=P}$t-`oTM2oeB5d9mHPgTYJx4jup)+5a;Tke$m708DocFzDL>U$$}s6FGiy_I1?O zHXq`q884|^O4Q*%V#vwxqCz-#8i`Gu)2LeB0{%%VKunOF%9~JcFB9MM>N00M`E~;o zBU%)O5u-D6NF~OQV7TV#JAN;=Lylgxy0kncoQpGq<<_gxw`FC=C-cV#$L|(47Hatl ztq3Jngq00x#}HGW@_tj{&A?lwOwrVX4@d66vLVyj1H@i}VD2YXd)n03?U5?cKtFz4 zW#@+MLeDVP>fY0F2IzT;r5*MAJ2}P8Z{g3utX0<+ZdAC)Tvm-4uN!I7|BTw&G%RQn zR+A5VFx(}r<1q9^N40XzP=Jp?i=jlS7}T~tB4CsWx!XbiHSm zLu}yar%t>-3jlutK=wdZhES->*1X({YI;DN?6R=C*{1U6%wG`0>^?u}h0hhqns|SeTmV=s;Gxx5F9DtK>{>{f-`SpJ`dO26Ujk?^%ucsuCPe zIUk1(@I3D^7{@jmXO2@<84|}`tDjB}?S#k$ik;jC))BH8>8mQWmZ zF#V|$gW|Xc_wmmkoI-b5;4AWxkA>>0t4&&-eC-J_iP(tLT~c6*(ZnSFlhw%}0IbiJ ztgnrZwP{RBd(6Ds`dM~k;rNFgkbU&Yo$KR#q&%Kno^YXF5ONJwGwZ*wEr4wYkGiXs z$&?qX!H5sV*m%5t@3_>ijaS5hp#^Pu>N_9Q?2grdNp({IZnt|P9Xyh);q|BuoqeUJ zfk(AGX4odIVADHEmozF|I{9j>Vj^jCU}K)r>^%9#E#Y6B0i#f^iYsNA!b|kVS$*zE zx7+P?0{oudeZ2(ke=YEjn#+_cdu_``g9R95qet28SG>}@Me!D6&}un*e#CyvlURrg8d;i$&-0B?4{eYEgzwotp*DOQ_<=Ai21Kzb0u zegCN%3bdwxj!ZTLvBvexHmpTw{Z3GRGtvkwEoKB1?!#+6h1i2JR%4>vOkPN_6`J}N zk}zeyY3dPV+IAyn;zRtFH5e$Mx}V(|k+Ey#=nMg-4F#%h(*nDZDK=k1snlh~Pd3dA zV!$BoX_JfEGw^R6Q2kpdKD_e0m*NX?M5;)C zb3x+v?J1d#jRGr=*?(7Habkk1F_#72_iT7{IQFl<;hkqK83fA8Q8@(oS?WYuQd4z^ z)7eB?N01v=oS47`bBcBnKvI&)yS8`W8qHi(h2na?c6%t4mU(}H(n4MO zHIpFdsWql()UNTE8b=|ZzY*>$Z@O5m9QCnhOiM%)+P0S06prr6!VET%*HTeL4iu~!y$pN!mOo5t@1 z?$$q-!uP(+O-%7<+Zn5i=)2OftC+wOV;zAU8b`M5f))CrM6xu94e2s78i&zck@}%= zZq2l!$N8~@63!^|`{<=A&*fg;XN*7CndL&;zE(y+GZVs-IkK~}+5F`?ergDp=9x1w z0hkii!N(o!iiQr`k`^P2LvljczPcM`%7~2n#|K7nJq_e0Ew;UsXV_~3)<;L?K9$&D zUzgUOr{C6VLl{Aon}zp`+fH3>$*~swkjCw|e>_31G<=U0@B*~hIE)|WSb_MaE41Prxp-2eEg!gcon$fN6Ctl7A_lV8^@B9B+G~0=IYgc%VsprfC`e zoBn&O3O)3MraW#z{h3bWm;*HPbp*h+I*DoB%Y~(Fqp9+x;c>K2+niydO5&@E?SoiX_zf+cI09%%m$y=YMA~rg!xP*>k zmYxKS-|3r*n0J4y`Nt1eO@oyT0Xvj*E3ssVNZAqQnj-Uq{N_&3e45Gg5pna+r~Z6^ z>4PJ7r(gO~D0TctJQyMVyMIwmzw3rbM!};>C@8JA<&6j3+Y9zHUw?tT_-uNh^u@np zM?4qmcc4MZjY1mWLK!>1>7uZ*%Pe%=DV|skj)@OLYvwGXuYBoZvbB{@l}cHK!~UHm z4jV&m&uQAOLsZUYxORkW4|>9t3L@*ieU&b0$sAMH&tKidc%;nb4Z=)D7H<-`#%$^# zi`>amtzJ^^#zB2e%o*wF!gZBqML9>Hq9jqsl-|a}yD&JKsX{Op$7)_=CiZvqj;xN& zqb@L;#4xW$+icPN?@MB|{I!>6U(h!Wxa}14Z0S&y|A5$zbH(DXuE?~WrqNv^;x}vI z0PWfSUuL7Yy``H~*?|%z zT~ZWYq}{X;q*u-}CT;zc_NM|2MKT8)cMy|d>?i^^k)O*}hbEcCrU5Bk{Tjf1>$Q=@ zJ9=R}%vW$~GFV_PuXqE4!6AIuC?Tn~Z=m#Kbj3bUfpb82bxsJ=?2wL>EGp=wsj zAPVwM=CffcycEF; z@kPngVDwPM>T-Bj4##H9VONhbq%=SG;$AjQlV^HOH7!_vZk=}TMt*8qFI}bI=K9g$fgD9$! zO%cK1_+Wbk0Ph}E$BR2}4wO<_b0{qtIA1ll>s*2^!7d2e`Y>$!z54Z4FmZ*vyO}EP z@p&MG_C_?XiKBaP#_XrmRYszF;Hyz#2xqG%yr991pez^qN!~gT_Jc=PPCq^8V(Y9K zz33S+Mzi#$R}ncqe!oJ3>{gacj44kx(SOuC%^9~vT}%7itrC3b;ZPfX;R`D2AlGgN zw$o4-F77!eWU0$?^MhG9zxO@&zDcF;@w2beXEa3SL^htWYY{5k?ywyq7u&)~Nys;@ z8ZNIzUw$#ci&^bZ9mp@A;7y^*XpdWlzy%auO1hU=UfNvfHtiPM@+99# z!uo2`>!*MzphecTjN4x6H)xLeeDVEO#@1oDp`*QsBvmky=JpY@fC0$yIexO%f>c-O zAzUA{ch#N&l;RClb~;`@dqeLPh?e-Mr)T-*?Sr{32|n(}m>4}4c3_H3*U&Yj)grth z{%F0z7YPyjux9hfqa+J|`Y%4gwrZ_TZCQq~0wUR8}9@Jj4lh( z#~%AcbKZ++&f1e^G8LPQ)*Yy?lp5^z4pDTI@b^hlv06?GC%{ZywJcy}3U@zS3|M{M zGPp|cq4Zu~9o_cEZiiNyU*tc73=#Mf>7uzue|6Qo_e!U;oJ)Z$DP~(hOcRy&hR{`J zP7cNIgc)F%E2?p%{%&sxXGDb0yF#zac5fr2x>b)NZz8prv~HBhw^q=R$nZ~@&zdBi z)cEDu+cc1?-;ZLm?^x5Ov#XRhw9{zr;Q#0*wglhWD={Pn$Qm$;z?Vx)_f>igNB!id zmTlMmkp@8kP212#@jq=m%g4ZEl$*a_T;5nHrbt-6D0@eqFP7u+P`;X_Qk68bzwA0h zf{EW5xAV5fD)il-cV&zFmPG|KV4^Z{YJe-g^>uL2l7Ep|NeA2#;k$yerpffdlXY<2 znDODl8(v(24^8Cs3wr(UajK*lY*9yAqcS>92eF=W8<&GtU-}>|S$M5}kyxz~p>-~Pb{(irc?QF~icx8A201&Xin%Hxx@kekd zw>yHjlemC*8(JFz05gs6x7#7EM|xoGtpVVs0szqB0bqwaqAdVG7&rLc6#(=y0YEA! z=jFw}xeKVfmAMI*+}bv7qH=LK2#X5^06wul0s+}M(f|O@&WMyG9frlGyLb z&Eix=47rL84J+tEWcy_XTyc*xw9uOQy`qmHCjAeJ?d=dUhm;P}^F=LH42AEMIh6X8 z*I7Q1jK%gVlL|8w?%##)xSIY`Y+9$SC8!X*_A*S0SWOKNUtza(FZHahoC2|6f=*oD zxJ8-RZk!+YpG+J}Uqnq$y%y>O^@e5M3SSw^29PMwt%8lX^9FT=O@VX$FCLBdlj#<{ zJWWH<#iU!^E7axvK+`u;$*sGq1SmGYc&{g03Md&$r@btQSUIjl&yJXA&=79FdJ+D< z4K^ORdM{M0b2{wRROvjz1@Rb>5dFb@gfkYiIOAKM(NR3*1JpeR_Hk3>WGvU&>}D^HXZ02JUnM z@1s_HhX#rG7;|FkSh2#agJ_2fREo)L`ws+6{?IeWV(>Dy8A(6)IjpSH-n_uO=810y z#4?ez9NnERv6k)N13sXmx)=sv=$$i_QK`hp%I2cyi*J=ihBWZLwpx9Z#|s;+XI!0s zLjYRVt!1KO;mnb7ZL~XoefWU02f{jcY`2wZ4QK+q7gc4iz%d0)5$tPUg~$jVI6vFO zK^wG7t=**T40km@TNUK+WTx<1mL|6Tn6+kB+E$Gpt8SauF9E-CR9Uui_EHn_nmBqS z>o#G}58nHFtICqJPx<_?UZ;z0_(0&UqMnTftMKW@%AxYpa!g0fxGe060^xkRtYguj ze&fPtC!?RgE}FsE0*^2lnE>42K#jp^nJDyzp{JV*jU?{+%KzW37-q|d3i&%eooE6C8Z2t2 z9bBL;^fzVhdLxCQh1+Ms5P)ilz9MYFKdqYN%*u^ch(Fq~QJASr5V_=szAKA4Xm5M} z(Kka%r!noMtz6ZUbjBrJ?Hy&c+mHB{OFQ}=41Irej{0N90`E*~_F1&7Du+zF{Dky) z+KN|-mmIT`Thcij!{3=ibyIn830G zN{kI3d`NgUEJ|2If}J!?@w~FV+v?~tlo8ps3Nl`3^kI)WfZ0|ms6U8HEvD9HIDWkz6`T_QSewYZyzkRh)!g~R>!jaR9;K|#82kfE5^;R!~}H4C?q{1AG?O$5kGp)G$f%VML%aPD?{ zG6)*KodSZRXbl8OD=ETxQLJz)KMI7xjArKUNh3@0f|T|75?Yy=pD7056ja0W)O;Td zCEJ=7q?d|$3rZb+8Cvt6mybV-#1B2}Jai^DOjM2<90tpql|M5tmheg){2NyZR}x3w zL6u}F+C-PIzZ56q0x$;mVJXM1V0;F}y9F29ob51f;;+)t&7l30gloMMHPTuod530FC}j^4#qOJV%5!&e!H9#!N&XQvs5{R zD_FOomd-uk@?_JiWP%&nQ_myBlM6so1Ffa1aaL7B`!ZTXPg_S%TUS*>M^8iJRj1*~ e{{%>Z1YfTk|3C04d;8A^0$7;Zm{b|L#{L(;l>}-4 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4842 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 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7718 zcmZ{JWl)?=u?hpbj?h-6mfK3P*Eck~k0Tzeg5-hkABxtZea0_k$f-mlF z0S@Qqtva`>x}TYzc}9LrO?P#qj+P1@HZ?W?0C;Muih9o&|G$cb@ocx1*PEUJ%~tM} z901hB;rx4#{@jOHs_MN00ADr$2n+#$yJuJ64gh!x0KlF(07#?(0ENrf7G3D`0EUHz zisCaq%dJ9dz%zhdRNuG*01nCjDhiPCl@b8xIMfv7^t~4jVRrSTGYyZUWqY@yW=)V_ z&3sUP1SK9v1f{4lDSN(agrKYULc;#EGDVeU*5b@#MOSY5JBn#QG8wqxQh+mdR638{mo5f>O zLUdZIPSjFk0~F26zDrM3y_#P^P91oWtLlPaZrhnM$NR%qsbHHK#?fN?cX?EvAhY1Sr9A(1;Kw4@87~|;2QP~ z(kKOGvCdB}qr4m#)1DwQFlh^NdBZvNLkld&yg%&GU`+boBMsoj5o?8tVuY^b0?4;E zsxoLxz8?S$y~a~x0{?dqk+6~Dd(EG7px_yH(X&NX&qEtHPUhu*JHD258=5$JS12rQ zcN+7p>R>tbFJ3NzEcRIpS98?}YEYxBIA8}1Y8zH9wq0c{hx+EXY&ZQ!-Hvy03X zLTMo4EZwtKfwb294-cY5XhQRxYJSybphcrNJWW2FY+b?|QB^?$5ZN=JlSs9Og(;8+ z*~-#CeeEOxt~F#aWn8wy-N_ilDDe_o+SwJD>4y?j5Lpj z2&!EX)RNxnadPBAa?fOj5D1C{l1E0X?&G3+ckcVfk`?%2FTsoUf4@~eaS#th=zq7v zMEJR@1T?Pi4;$xiPv`3)9rsrbVUH&b0e2{YTEG%;$GGzKUKEim;R6r>F@Q-}9JR-< zOPpQI>W0Vt6&7d?~$d&}chKTr_rELu} zWY;KTvtpJFr?P~ReHL4~2=ABn1`GN4Li%OI_1{mMRQi1Bf?+^Va?xdn4>h)Bq#ZRK zYo%R_h5etrv|!$1QF8fu80fN?1oXe(Jx#e6H^$+>C}N{*i$bNbELsXDA>cxlh|iFq zh~$yJ?1lTdcFd1Yv+Hr^PP!yupP!0H@Y6(wFcaVE+0?qjDJ1;*-Q8qL{NNPc{GAoi z_kBH`kw^(^7ShmzArk^A-!3_$W%!M-pGaZC=K`p-ch&iT%CV0>ofS74aPd7oT&cRr zXI30fVV6#PR*Z?c*orR0!$K6SUl9!H>hG+%`LdifNk`!Sw7Hon{Wn=|qV{a%v9nEq zAdBW*5kq6il=yA}x8cZQt^c+RBS|TRn;!?$ue?@jIV~0w1dt1FJRYI-K5>z-^01)R z)r}A&QXp^?-?}Uj`}ZPqB#}xO-?{0wrmi|eJOEjzdXbey4$rtKNHz)M*o?Ov+;S=K z-l~`)xV`%7Gvzy5wfvwqc0|80K29k0G~1nuBO+y-6)w11Kz2{>yD{HTt-uybe2pe? zUZK*Eij7TT4NwF1Jr@6R7gMuu^@qn#zPIgRtF?-SJL83LBDrh7k#{F^222EXPg}S0d4Lf0!|1 z|2k$^b~)^8$Z-yH{B-vo%7sVU@ZCvXN+Am)-fy$afZ_4HAUpK}j4p`UyXRel-+(VS z#K>-=-oA1pH+Lo$&|!lYB|M7Y&&bF##Oi@y_G3p1X$0I{jS1!NEdTz#x0`H`d*l%X z*8Y3>L*>j@ZQGOdPqwY(GzbA4nxqT(UAP<-tBf{_cb&Hn8hO5gEAotoV;tF6K4~wr2-M0v|2acQ!E@G*g$J z)~&_lvwN%WW>@U_taX5YX@a~pnG7A~jGwQwd4)QKk|^d_x9j+3JYmI5H`a)XMKwDt zk(nmso_I$Kc5m+8iVbIhY<4$34Oz!sg3oZF%UtS(sc6iq3?e8Z;P<{OFU9MACE6y( zeVprnhr!P;oc8pbE%A~S<+NGI2ZT@4A|o9bByQ0er$rYB3(c)7;=)^?$%a${0@70N zuiBVnAMd|qX7BE)8})+FAI&HM|BIb3e=e`b{Do8`J0jc$H>gl$zF26=haG31FDaep zd~i}CHSn$#8|WtE06vcA%1yxiy_TH|RmZ5>pI5*8pJZk0X54JDQQZgIf1Pp3*6hepV_cXe)L2iW$Ov=RZ4T)SP^a_8V} z+Nl?NJL7fAi<)Gt98U+LhE>x4W=bfo4F>5)qBx@^8&5-b>y*Wq19MyS(72ka8XFr2 zf*j(ExtQkjwN|4B?D z7+WzS*h6e_Po+Iqc-2n)gTz|de%FcTd_i9n+Y5*Vb=E{8xj&|h`CcUC*(yeCf~#Mf zzb-_ji&PNcctK6Xhe#gB0skjFFK5C4=k%tQQ}F|ZvEnPcH=#yH4n%z78?McMh!vek zVzwC0*OpmW2*-A6xz0=pE#WdXHMNxSJ*qGY(RoV9)|eu)HSSi_+|)IgT|!7HRx~ zjM$zp%LEBY)1AKKNI?~*>9DE3Y2t5p#jeqeq`1 zsjA-8eQKC*!$%k#=&jm+JG?UD(}M!tI{wD*3FQFt8jgv2xrRUJ}t}rWx2>XWz9ndH*cxl()ZC zoq?di!h6HY$fsglgay7|b6$cUG-f!U4blbj(rpP^1ZhHv@Oi~;BBvrv<+uC;%6QK!nyQ!bb3i3D~cvnpDAo3*3 zXRfZ@$J{FP?jf(NY7~-%Kem>jzZ2+LtbG!9I_fdJdD*;^T9gaiY>d+S$EdQrW9W62 z6w8M&v*8VWD_j)fmt?+bdavPn>oW8djd zRnQ}{XsIlwYWPp;GWLXvbSZ8#w25z1T}!<{_~(dcR_i1U?hyAe+lL*(Y6c;j2q7l! zMeN(nuA8Z9$#w2%ETSLjF{A#kE#WKus+%pal;-wx&tTsmFPOcbJtT?j&i(#-rB}l@ zXz|&%MXjD2YcYCZ3h4)?KnC*X$G%5N)1s!0!Ok!F9KLgV@wxMiFJIVH?E5JcwAnZF zU8ZPDJ_U_l81@&npI5WS7Y@_gf3vTXa;511h_(@{y1q-O{&bzJ z*8g>?c5=lUH6UfPj3=iuuHf4j?KJPq`x@en2Bp>#zIQjX5(C<9-X4X{a^S znWF1zJ=7rEUwQ&cZgyV4L12f&2^eIc^dGIJP@ToOgrU_Qe=T)utR;W$_2Vb7NiZ+d z$I0I>GFIutqOWiLmT~-Q<(?n5QaatHWj**>L8sxh1*pAkwG>siFMGEZYuZ)E!^Hfs zYBj`sbMQ5MR;6=1^0W*qO*Zthx-svsYqrUbJW)!vTGhWKGEu8c+=Yc%xi}Rncu3ph zTT1j_>={i3l#~$!rW!%ZtD9e6l6k-k8l{2w53!mmROAD^2yB^e)3f9_Qyf&C#zk`( z|5RL%r&}#t(;vF4nO&n}`iZpIL=p9tYtYv3%r@GzLWJ6%y_D(icSF^swYM`e8-n43iwo$C~>G<)dd0ze@5}n(!^YD zHf#OVbQ$Li@J}-qcOYn_iWF=_%)EXhrVuaYiai|B<1tXwNsow(m;XfL6^x~|Tr%L3~cs0@c) zDvOFU-AYn1!A;RBM0S}*EhYK49H$mBAxus)CB*KW(87#!#_C0wDr<0*dZ+GN&(3wR z6)cFLiDvOfs*-7Q75ekTAx)k!dtENUKHbP|2y4=tf*d_BeZ(9kR*m;dVzm&0fkKuD zVw5y9N>pz9C_wR+&Ql&&y{4@2M2?fWx~+>f|F%8E@fIfvSM$Dsk26(UL32oNvTR;M zE?F<7<;;jR4)ChzQaN((foV z)XqautTdMYtv<=oo-3W-t|gN7Q43N~%fnClny|NNcW9bIPPP5KK7_N8g!LB8{mK#! zH$74|$b4TAy@hAZ!;irT2?^B0kZ)7Dc?(7xawRUpO~AmA#}eX9A>+BA7{oDi)LA?F ze&CT`Cu_2=;8CWI)e~I_65cUmMPw5fqY1^6v))pc_TBArvAw_5Y8v0+fFFT`T zHP3&PYi2>CDO=a|@`asXnwe>W80%%<>JPo(DS}IQiBEBaNN0EF6HQ1L2i6GOPMOdN zjf3EMN!E(ceXhpd8~<6;6k<57OFRs;mpFM6VviPN>p3?NxrpNs0>K&nH_s ze)2#HhR9JHPAXf#viTkbc{-5C7U`N!`>J-$T!T6%=xo-)1_WO=+BG{J`iIk%tvxF39rJtK49Kj#ne;WG1JF1h7;~wauZ)nMvmBa2PPfrqREMKWX z@v}$0&+|nJrAAfRY-%?hS4+$B%DNMzBb_=Hl*i%euVLI5Ts~UsBVi(QHyKQ2LMXf` z0W+~Kz7$t#MuN|X2BJ(M=xZDRAyTLhPvC8i&9b=rS-T{k34X}|t+FMqf5gwQirD~N1!kK&^#+#8WvcfENOLA`Mcy@u~ zH10E=t+W=Q;gn}&;`R1D$n(8@Nd6f)9=F%l?A>?2w)H}O4avWOP@7IMVRjQ&aQDb) zzj{)MTY~Nk78>B!^EbpT{&h zy{wTABQlVVQG<4;UHY?;#Je#-E;cF3gVTx520^#XjvTlEX>+s{?KP#Rh@hM6R;~DE zaQY16$Axm5ycukte}4FtY-VZHc>=Ps8mJDLx3mwVvcF<^`Y6)v5tF`RMXhW1kE-;! z7~tpIQvz5a6~q-8@hTfF9`J;$QGQN%+VF#`>F4K3>h!tFU^L2jEagQ5Pk1U_I5&B> z+i<8EMFGFO$f7Z?pzI(jT0QkKnV)gw=j74h4*jfkk3UsUT5PemxD`pO^Y#~;P2Cte zzZ^pr>SQHC-576SI{p&FRy36<`&{Iej&&A&%>3-L{h(fUbGnb)*b&eaXj>i>gzllk zLXjw`pp#|yQIQ@;?mS=O-1Tj+ZLzy+aqr7%QwWl?j=*6dw5&4}>!wXqh&j%NuF{1q zzx$OXeWiAue+g#nkqQ#Uej@Zu;D+@z^VU*&HuNqqEm?V~(Z%7D`W5KSy^e|yF6kM7 z8Z9fEpcs^ElF9Vnolfs7^4b0fsNt+i?LwUX8Cv|iJeR|GOiFV!JyHdq+XQ&dER(KSqMxW{=M)lA?Exe&ZEB~6SmHg`zkcD7x#myq0h61+zhLr_NzEIjX zr~NGX_Uh~gdcrvjGI(&5K_zaEf}1t*)v3uT>~Gi$r^}R;H+0FEE5El{y;&DniH2@A z@!71_8mFHt1#V8MVsIYn={v&*0;3SWf4M$yLB^BdewOxz;Q=+gakk`S{_R_t!z2b| z+0d^C?G&7U6$_-W9@eR6SH%+qLx_Tf&Gu5%pn*mOGU0~kv~^K zhPeqYZMWWoA(Y+4GgQo9nNe6S#MZnyce_na@78ZnpwFenVafZC3N2lc5Jk-@V`{|l zhaF`zAL)+($xq8mFm{7fXtHru+DANoGz-A^1*@lTnE;1?03lz8kAnD{zQU=Pb^3f` zT5-g`z5|%qOa!WTBed-8`#AQ~wb9TrUZKU)H*O7!LtNnEd!r8!Oda)u!Gb5P`9(`b z`lMP6CLh4OzvXC#CR|@uo$EcHAyGr=)LB7)>=s3 zvU;aR#cN3<5&CLMFU@keW^R-Tqyf4fdkOnwI(H$x#@I1D6#dkUo@YW#7MU0@=NV-4 zEh2K?O@+2e{qW^7r?B~QTO)j}>hR$q9*n$8M(4+DOZ00WXFonLlk^;os8*zI>YG#? z9oq$CD~byz>;`--_NMy|iJRALZ#+qV8OXn=AmL^GL&|q1Qw-^*#~;WNNNbk(96Tnw zGjjscNyIyM2CYwiJ2l-}u_7mUGcvM+puPF^F89eIBx27&$|p_NG)fOaafGv|_b9G$;1LzZ-1aIE?*R6kHg}dy%~K(Q5S2O6086 z{lN&8;0>!pq^f*Jlh=J%Rmaoed<=uf@$iKl+bieC83IT!09J&IF)9H)C?d!eW1UQ}BQwxaqQY47DpOk@`zZ zo>#SM@oI^|nrWm~Ol7=r`!Bp9lQNbBCeHcfN&X$kjj0R(@?f$OHHt|fWe6jDrYg3(mdEd$8P2Yzjt9*EM zLE|cp-Tzsdyt(dvLhU8}_IX&I?B=|yoZ!&<`9&H5PtApt=VUIB4l0a1NH v0SQqt3DM`an1p};^>=lX|A*k@Y-MNT^ZzF}9G-1G696?OEyXH%^Pv9$0dR%J diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml deleted file mode 100644 index c4e6f9a..0000000 --- a/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - WebviewFileUploadAndroid - diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 319eb0c..0000000 --- a/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/android/build.gradle b/android/build.gradle index fcba4c5..112c156 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,24 +1,21 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. +apply plugin: 'com.android.library' -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + defaultConfig { + minSdkVersion 16 + targetSdkVersion 22 + versionCode 3 + versionName "0.3.0" + ndk { + abiFilters "armeabi-v7a", "x86" + } } } -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" - } - } +dependencies { + compile "com.android.support:appcompat-v7:23.0.1" //Remove?? + compile "com.facebook.react:react-native:+" // From node_modules } diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index 78ac832..0000000 --- a/android/gradle.properties +++ /dev/null @@ -1,21 +0,0 @@ -# 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: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# 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.daemon=true diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index b5166dad4d90021f6a0b45268c0755719f1d5cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52266 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 z 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 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index b9fbfab..0000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -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 diff --git a/android/gradlew b/android/gradlew deleted file mode 100755 index 91a7e26..0000000 --- a/android/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -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" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -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" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100644 index aec9973..0000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@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 - -@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= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@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 init - -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 init - -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 - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -: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 diff --git a/android/keystores/BUCK b/android/keystores/BUCK deleted file mode 100644 index 15da20e..0000000 --- a/android/keystores/BUCK +++ /dev/null @@ -1,8 +0,0 @@ -keystore( - name = 'debug', - store = 'debug.keystore', - properties = 'debug.keystore.properties', - visibility = [ - 'PUBLIC', - ], -) diff --git a/android/keystores/debug.keystore.properties b/android/keystores/debug.keystore.properties deleted file mode 100644 index 121bfb4..0000000 --- a/android/keystores/debug.keystore.properties +++ /dev/null @@ -1,4 +0,0 @@ -key.store=debug.keystore -key.alias=androiddebugkey -key.store.password=android -key.alias.password=android diff --git a/android/settings.gradle b/android/settings.gradle deleted file mode 100644 index 8952048..0000000 --- a/android/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -rootProject.name = 'WebviewFileUploadAndroid' - -include ':app' diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4ccf684 --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java b/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java new file mode 100644 index 0000000..011aa96 --- /dev/null +++ b/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewManager.java @@ -0,0 +1,96 @@ +package com.webviewfileuploadandroid.androidWebView; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.util.Log; +import android.webkit.JsPromptResult; +import android.webkit.JsResult; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebView; + + +import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.views.webview.ReactWebViewManager; +import com.webviewfileuploadandroid.androidWebView.AndroidWebViewModule; + +/** + * Created by ydq on 16/4/12. + */ +public class AndroidWebViewManager extends ReactWebViewManager { + + + private Activity mActivity = null; + private AndroidWebViewPackage aPackage; + public String getName() { + return "AndroidWebView"; + } + + @Override + protected WebView createViewInstance(ThemedReactContext reactContext) { + WebView view = super.createViewInstance(reactContext); + //Now do our own setWebChromeClient, patching in file chooser support + final AndroidWebViewModule module = this.aPackage.getModule(); + view.setWebChromeClient(new WebChromeClient(){ + + public void openFileChooser(ValueCallback uploadMsg, String acceptType) { + module.setUploadMessage(uploadMsg); + openFileChooserView(); + + } + + public boolean onJsConfirm (WebView view, String url, String message, JsResult result){ + return true; + } + + public boolean onJsPrompt (WebView view, String url, String message, String defaultValue, JsPromptResult result){ + return true; + } + + // For Android < 3.0 + public void openFileChooser(ValueCallback uploadMsg) { + module.setUploadMessage(uploadMsg); + openFileChooserView(); + } + + // For Android > 4.1.1 + public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) { + module.setUploadMessage(uploadMsg); + openFileChooserView(); + } + + // For Android > 5.0 + public boolean onShowFileChooser (WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) { + Log.d("customwebview", "onShowFileChooser"); + + module.setmUploadCallbackAboveL(filePathCallback); + openFileChooserView(); + return true; + } + + private void openFileChooserView(){ + try { + final Intent galleryIntent = new Intent(Intent.ACTION_PICK); + galleryIntent.setType("image/*"); + final Intent chooserIntent = Intent.createChooser(galleryIntent, "choose file"); + module.getActivity().startActivityForResult(chooserIntent, 1); + } catch (Exception e) { + Log.d("customwebview", e.toString()); + } + } + }); + return view; + } + + public void setPackage(AndroidWebViewPackage aPackage){ + this.aPackage = aPackage; + } + + public AndroidWebViewPackage getPackage(){ + return this.aPackage; + } +} + + diff --git a/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java b/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java similarity index 77% rename from android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java rename to android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java index 4074b68..5199216 100644 --- a/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java +++ b/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewModule.java @@ -15,19 +15,20 @@ import com.facebook.react.common.annotations.VisibleForTesting; public class AndroidWebViewModule extends ReactContextBaseJavaModule implements ActivityEventListener { - private ValueCallback mUploadMessage; + private ValueCallback mUploadMessage; private ValueCallback mUploadCallbackAboveL; - @VisibleForTesting + @VisibleForTesting public static final String REACT_CLASS = "AndroidWebViewModule"; - public AndroidWebViewModule(ReactApplicationContext context){ - super(context); - } + public AndroidWebViewModule(ReactApplicationContext context){ + super(context); + context.addActivityEventListener(this); + } - private AndroidWebViewPackage aPackage; + private AndroidWebViewPackage aPackage; - public void setPackage(AndroidWebViewPackage aPackage) { + public void setPackage(AndroidWebViewPackage aPackage) { this.aPackage = aPackage; } @@ -35,21 +36,30 @@ public AndroidWebViewPackage getPackage() { return this.aPackage; } - @Override - public String getName(){ - return REACT_CLASS; - } + @Override + public String getName(){ + return REACT_CLASS; + } - @SuppressWarnings("unused") + @SuppressWarnings("unused") public Activity getActivity() { return getCurrentActivity(); } + public void setUploadMessage(ValueCallback uploadMessage) { + mUploadMessage = uploadMessage; + } + + public void setmUploadCallbackAboveL(ValueCallback mUploadCallbackAboveL) { + this.mUploadCallbackAboveL = mUploadCallbackAboveL; + } + @Override public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { + // super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if (null == mUploadMessage && null == mUploadCallbackAboveL){ - return; + return; } Uri result = data == null || resultCode != Activity.RESULT_OK ? null : data.getData(); if (mUploadCallbackAboveL != null) { diff --git a/android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewPackage.java b/android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewPackage.java similarity index 100% rename from android/app/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewPackage.java rename to android/src/main/java/com/webviewfileuploadandroid/androidWebView/AndroidWebViewPackage.java diff --git a/choose-file-finished.png b/choose-file-finished.png deleted file mode 100644 index 7c9347d2cc263b7f0f52a1086876486c3a24af51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16128 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

1NcBZx+*TcpD3&`|)n6^0q z0GUQDc$c!KasN&_l5x}s`h45BYd)@ZhKSvGB3w?r6gQIw-<4fJb2(SIZ_^if zfKHzpxK-uFnuaDJmg2)^Lp#Ez(3j@L7OaWHcjYw|5%QXYV^7g`u`_AI*&$NR)d|3H z)QfTenGDi)#|jRu0a{iWj-{sUNhcYKcv_c8;Z%^IJ7UI?Z3={|oKg*3d_PyZ+Cf^s z^eZh_b}h%Y^0b`G=Nns1Ddgi$8rdyfi&Yq)<8mNyrn=Exs7>N>KIEKvQa|LhSA&Nc zP_q=J4VbJVr+S+CLd>0w34y$4k#7afi&m7x@)wvx) z^rVA**D=}*+D!c|LHUK_aL?eMTG{PDYCU@@8hT1e83p|M@ry6qD_vw|q(oY6Z6yMq z_K`9~wm2ytklj;Lanx*?MaaBJ7;-7+$ z$yIiIQ5B#8@!E*RLdcEGBe5T+cdQ7(1I2F0B?(nWj}sBH+pr=GUqk~wv|*a7dnRpe zvw8nqveZ3u+$!TcGuN%fm#W|Fh32{n)j3mlyeBvsDl`$ke5I-~iTO)qE~fU0Rj3#68y^RkXcBex9Qr~SE&2;Q9;7g@i3cNFd=Gp}J;cLz3ee&B96t$R z&$P!iO@bkMMb_1Z_$2lGBV?b-77Dt1?JZ+uHCd82*uz_T^e(e=Dar_$uJPJ)Z(KPL z-OfMo0-dD?8Gen9Qo_ShW(*>dS~2Nn?H;g`s8w4Jj_ayvY zYup@z5XnlaXQnqNMiMqWoH#2iZe98b={iG41x<%D!&Lp_N6sz=Dq<&1q9H@6qxdY2 zQ-a3J34P;8bsKD=7-z;h8198wlBlV6@;Cw9;Jwrk9}F+bM28q$1+l9e_CTta$G%jd z{BdOK+NS!MK9vx@Q^+AF?I!FL0w&=V;UhQaR6E`*phQ4zcnZVOIH^&iFvOB32kZ9k z)|1-Om4X=>w5V;R+U4#3B>a#5-iNgt=OH7w({ticg1vrE+OzqwLJ#*4@#UfRWJ7S4 zvwtdnfk0?Ccx~p2VoU=ax3dip!l-G)GD_Ls{H8}3z{Y1P(oVUyyd*dN9Ldu`az;_J zT+iQ)m>Qb2iO~n;T+C<1lAp$qy+@%{p>9YpZllvTYc$N3$^;nmw=Fc=bfiJL4S1cl zZx1%C$Y{YkJ&S$gt3PTlr@SggQi;LFQAiKKJt|vtg@7z|wyvI6_hO*9l`J5TCAJ!2t&P)Z!do_3(Q zB17*z&h!3kkDVj=$$=vZCzr`q1m+uQ{LygaN@TB-20s%zFEf6 z8KE7&HX@f@6YJk{%Rc|f37W>mRsl(3}f%ZOA7Iu5>>dUy9dRE)o%}9`<;JAvleZ9 W2ETt&n11-@AJgkrMimCGasLlA>59kz diff --git a/fileUpload.html b/fileUpload.html deleted file mode 100644 index 8dbcfc5..0000000 --- a/fileUpload.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - File Upload in WebView - -

- -
- - - diff --git a/images/choose-file-finished.png b/images/choose-file-finished.png deleted file mode 100644 index 34d1b1bebff1b0f68a0c0ac7389a3e761b375361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297791 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