summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xStoneIsland/platforms/android/AndroidManifest.xml12
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java13
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java13
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java13
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml27
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jarbin130289 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml27
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jarbin130213 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.classbin776 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.classbin711 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.classbin3329 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.classbin1491 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.classbin1841 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.classbin4919 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.classbin943 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.classbin1019 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.classbin1522 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.classbin1090 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.classbin2012 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.classbin11826 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.classbin2561 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.classbin5470 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.classbin1426 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.classbin1221 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.classbin1201 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.classbin1352 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.classbin1223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.classbin1223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.classbin1203 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.classbin1354 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.classbin1506 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.classbin1240 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.classbin277 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.classbin3796 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.classbin821 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.classbin725 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.classbin1064 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.classbin7855 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.classbin6877 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.classbin3223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.classbin905 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.classbin12711 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.classbin2239 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.classbin549 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.classbin308 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.classbin1170 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.classbin1660 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.classbin1560 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.classbin1468 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.classbin1256 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.classbin1482 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.classbin4953 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.classbin16044 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.classbin1027 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.classbin748 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.classbin737 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.classbin748 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.classbin1988 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.classbin9479 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.classbin442 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.classbin443 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.classbin345 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.classbin229 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.classbin3616 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.classbin814 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.classbin1456 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.classbin1544 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.classbin4055 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.classbin1594 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.classbin1562 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.classbin712 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.classbin1407 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.classbin1733 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.classbin499 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.classbin2619 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.classbin7448 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.classbin1042 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.classbin12314 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.classbin1651 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.classbin5908 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.classbin2995 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.classbin3133 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.classbin2952 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.classbin1843 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.classbin1433 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.classbin1202 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.classbin1204 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.classbin1270 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.classbin1707 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.classbin1787 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.classbin10992 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.classbin2658 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.classbin9561 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.classbin1841 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.classbin1050 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.classbin12173 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.classbin776 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.classbin576 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.classbin3329 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.classbin1491 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.classbin1841 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.classbin4919 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.classbin943 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.classbin1019 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.classbin1522 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.classbin1090 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.classbin2012 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.classbin11826 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.classbin2561 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.classbin5470 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.classbin1426 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.classbin1221 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.classbin1201 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.classbin1352 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.classbin1223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.classbin1223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.classbin1203 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.classbin1354 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.classbin1506 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.classbin1240 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.classbin277 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.classbin3796 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.classbin821 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.classbin725 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.classbin1064 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.classbin7855 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.classbin6877 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.classbin3223 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.classbin905 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.classbin12711 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.classbin2239 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.classbin549 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.classbin308 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.classbin1170 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.classbin1660 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.classbin1560 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.classbin1468 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.classbin1256 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.classbin1482 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.classbin4953 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.classbin16044 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.classbin1027 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.classbin748 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.classbin737 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.classbin748 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.classbin1988 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.classbin9479 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.classbin442 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.classbin443 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.classbin345 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.classbin229 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.classbin3616 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.classbin814 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.classbin1456 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.classbin1544 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.classbin4055 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.classbin1594 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.classbin1562 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.classbin712 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.classbin1407 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.classbin1733 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.classbin499 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.classbin2619 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.classbin7448 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.classbin1042 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.classbin12314 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.classbin1651 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.classbin5908 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.classbin2995 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.classbin3133 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.classbin2952 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.classbin1843 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.classbin1433 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.classbin1202 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.classbin1204 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.classbin1270 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.classbin1707 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.classbin1787 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.classbin10992 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.classbin2658 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.classbin9561 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.classbin1841 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.classbin1050 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.classbin12173 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt1
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt1
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.storebin5 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.storebin5 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.storebin5 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties1
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties1
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties1
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml2
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml20
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml27
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml27
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_bin749 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aarbin117333 -> 0 bytes
-rw-r--r--StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aarbin117258 -> 0 bytes
-rwxr-xr-xStoneIsland/platforms/android/android.json41
-rwxr-xr-xStoneIsland/platforms/android/assets/www/cordova_plugins.js12
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rw-r--r--StoneIsland/platforms/android/build.gradle1
-rwxr-xr-xStoneIsland/platforms/android/platform_www/cordova_plugins.js12
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rwxr-xr-xStoneIsland/platforms/android/project.properties3
-rw-r--r--StoneIsland/platforms/android/res/xml/config.xml3
-rw-r--r--StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java469
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj61
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h192
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h217
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h124
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h102
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h107
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h54
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h133
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h49
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h33
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h57
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h34
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m543
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.abin0 -> 99320 bytes
-rw-r--r--StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.abin0 -> 34421440 bytes
-rwxr-xr-xStoneIsland/platforms/ios/Stone Island/config.xml3
-rw-r--r--StoneIsland/platforms/ios/frameworks.json8
-rw-r--r--StoneIsland/platforms/ios/ios.json19
-rw-r--r--StoneIsland/platforms/ios/platform_www/cordova_plugins.js12
-rw-r--r--StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rw-r--r--StoneIsland/platforms/ios/www/cordova_plugins.js12
-rw-r--r--StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js130
-rwxr-xr-xStoneIsland/plugins/android.json3
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE20
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/README.md203
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java469
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js253
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h192
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h217
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h124
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h102
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h107
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h54
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h133
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h49
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h33
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h57
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h34
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m543
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.abin0 -> 99320 bytes
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.abin0 -> 34421440 bytes
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js121
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/package.json29
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml99
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts62
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs30
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs578
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs103
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs399
-rw-r--r--StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js127
-rwxr-xr-xStoneIsland/plugins/fetch.json8
-rw-r--r--StoneIsland/plugins/ios.json3
268 files changed, 6974 insertions, 201 deletions
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml
index 1a0d30c7..25ce62dd 100755
--- a/StoneIsland/platforms/android/AndroidManifest.xml
+++ b/StoneIsland/platforms/android/AndroidManifest.xml
@@ -41,6 +41,18 @@
</intent-filter>
</service>
<service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" />
+ <receiver android:enabled="true" android:name="com.google.android.gms.analytics.AnalyticsReceiver">
+ <intent-filter>
+ <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
+ </intent-filter>
+ </receiver>
+ <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.AnalyticsService" />
+ <receiver android:enabled="true" android:exported="true" android:name="com.google.android.gms.analytics.CampaignTrackingReceiver">
+ <intent-filter>
+ <action android:name="com.android.vending.INSTALL_REFERRER" />
+ </intent-filter>
+ </receiver>
+ <service android:enabled="true" android:exported="false" android:name="com.google.android.gms.analytics.CampaignTrackingService" />
</application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="22" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java
deleted file mode 100644
index 85186877..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/androidTest/debug/org/apache/cordova/test/BuildConfig.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Automatically generated file. DO NOT MODIFY
- */
-package org.apache.cordova.test;
-
-public final class BuildConfig {
- public static final boolean DEBUG = Boolean.parseBoolean("true");
- public static final String APPLICATION_ID = "org.apache.cordova.test";
- public static final String BUILD_TYPE = "debug";
- public static final String FLAVOR = "";
- public static final int VERSION_CODE = -1;
- public static final String VERSION_NAME = "";
-}
diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java
deleted file mode 100644
index f2feb906..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Automatically generated file. DO NOT MODIFY
- */
-package org.apache.cordova;
-
-public final class BuildConfig {
- public static final boolean DEBUG = Boolean.parseBoolean("true");
- public static final String APPLICATION_ID = "org.apache.cordova";
- public static final String BUILD_TYPE = "debug";
- public static final String FLAVOR = "";
- public static final int VERSION_CODE = 1;
- public static final String VERSION_NAME = "1.0";
-}
diff --git a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java b/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java
deleted file mode 100644
index 3e3c0cfe..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Automatically generated file. DO NOT MODIFY
- */
-package org.apache.cordova;
-
-public final class BuildConfig {
- public static final boolean DEBUG = false;
- public static final String APPLICATION_ID = "org.apache.cordova";
- public static final String BUILD_TYPE = "release";
- public static final String FLAVOR = "";
- public static final int VERSION_CODE = 1;
- public static final String VERSION_NAME = "1.0";
-}
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml
deleted file mode 100644
index 90863ed8..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.apache.cordova"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk android:minSdkVersion="14" />
-
-</manifest> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar
deleted file mode 100644
index 9e8389ce..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/classes.jar
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml
deleted file mode 100644
index 90863ed8..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.apache.cordova"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk android:minSdkVersion="14" />
-
-</manifest> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar b/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar
deleted file mode 100644
index d04b9183..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/release/classes.jar
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class
deleted file mode 100644
index e9d51465..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/AuthenticationToken.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class
deleted file mode 100644
index 4c5619f6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/BuildConfig.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class
deleted file mode 100644
index 2ee39be7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackContext.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class
deleted file mode 100644
index 462375d9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CallbackMap.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class
deleted file mode 100644
index 66cb1be9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Config.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class
deleted file mode 100644
index 62fa0b3d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ConfigXmlParser.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class
deleted file mode 100644
index c4624d15..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class
deleted file mode 100644
index 33738151..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class
deleted file mode 100644
index fabe9efa..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class
deleted file mode 100644
index 3c062db9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class
deleted file mode 100644
index 76695eb5..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class
deleted file mode 100644
index bfe0c70e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaActivity.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class
deleted file mode 100644
index 18014a39..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaArgs.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class
deleted file mode 100644
index c7f3f237..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaBridge.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class
deleted file mode 100644
index 46007d42..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaClientCertRequest.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class
deleted file mode 100644
index 683ff52e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class
deleted file mode 100644
index c7f3d4af..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class
deleted file mode 100644
index 4cb4f9bc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class
deleted file mode 100644
index ac24ba52..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class
deleted file mode 100644
index 3ab9531e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class
deleted file mode 100644
index 05530d9e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$6.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class
deleted file mode 100644
index 5cd2cb8c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$7.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class
deleted file mode 100644
index e57fded7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$8.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class
deleted file mode 100644
index 628d4627..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$9.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class
deleted file mode 100644
index c4dd9997..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper$Result.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class
deleted file mode 100644
index fd873766..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaDialogsHelper.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class
deleted file mode 100644
index c912f928..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaHttpAuthHandler.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class
deleted file mode 100644
index b2059438..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterface.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class
deleted file mode 100644
index 92dae914..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class
deleted file mode 100644
index 22ffbfe4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaInterfaceImpl.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class
deleted file mode 100644
index d8906c9c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPlugin.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class
deleted file mode 100644
index ed0b3da5..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaPreferences.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class
deleted file mode 100644
index 15ab1f62..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class
deleted file mode 100644
index f11f59a3..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaResourceApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class
deleted file mode 100644
index 9fb80528..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class
deleted file mode 100644
index deb6dfda..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$Client.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class
deleted file mode 100644
index 1149bf24..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine$EngineView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class
deleted file mode 100644
index 7a7dcb4f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewEngine.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class
deleted file mode 100644
index 4cf05bbe..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class
deleted file mode 100644
index af9110d2..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class
deleted file mode 100644
index e5c567e3..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class
deleted file mode 100644
index 1370f669..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class
deleted file mode 100644
index a93f9374..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class
deleted file mode 100644
index 4df9559c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl$EngineClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class
deleted file mode 100644
index a8921a41..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CordovaWebViewImpl.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class
deleted file mode 100644
index 5365b497..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class
deleted file mode 100644
index 7509891d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class
deleted file mode 100644
index 6f01ec94..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class
deleted file mode 100644
index 12c2685d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class
deleted file mode 100644
index 306f92b6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class
deleted file mode 100644
index 324266e6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/CoreAndroid.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class
deleted file mode 100644
index 6e675205..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ExposedJsApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class
deleted file mode 100644
index 18ad39ec..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaClientCertRequest.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class
deleted file mode 100644
index 142b69c9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaCookieManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class
deleted file mode 100644
index ac03d2d9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ICordovaHttpAuthHandler.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class
deleted file mode 100644
index 11bd8f7c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/LOG.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class
deleted file mode 100644
index 1d25e8d1..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class
deleted file mode 100644
index 9f380c55..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class
deleted file mode 100644
index 8bae598b..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class
deleted file mode 100644
index 599bdc02..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class
deleted file mode 100644
index 1f58f471..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class
deleted file mode 100644
index 58ab6eea..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class
deleted file mode 100644
index 5befb5dd..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class
deleted file mode 100644
index 3d637415..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class
deleted file mode 100644
index 58299a40..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class
deleted file mode 100644
index c3848041..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class
deleted file mode 100644
index 4281bfde..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class
deleted file mode 100644
index 7048a7b4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/NativeToJsMessageQueue.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class
deleted file mode 100644
index 4adc8d03..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginEntry.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class
deleted file mode 100644
index c59578c4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class
deleted file mode 100644
index d9ff981f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult$Status.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class
deleted file mode 100644
index dfefc658..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/PluginResult.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class
deleted file mode 100644
index fc6a4d13..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/ResumeCallback.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class
deleted file mode 100644
index 05973c38..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist$URLPattern.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class
deleted file mode 100644
index 1be2bfca..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/Whitelist.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class
deleted file mode 100644
index 4d1199c6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemCookieManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class
deleted file mode 100644
index 8511795f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemExposedJsApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class
deleted file mode 100644
index 9b3e91ee..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class
deleted file mode 100644
index 2d0ac1a4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class
deleted file mode 100644
index 5c6f1a01..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class
deleted file mode 100644
index d7817b09..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class
deleted file mode 100644
index 797cdd71..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class
deleted file mode 100644
index f4959cc7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebChromeClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class
deleted file mode 100644
index 9dfe6ede..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class
deleted file mode 100644
index 4ded5789..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class
deleted file mode 100644
index 88b63e1e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class
deleted file mode 100644
index 2502947c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class
deleted file mode 100644
index 8ea85524..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/debug/org/apache/cordova/engine/SystemWebViewEngine.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class
deleted file mode 100644
index e9d51465..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/AuthenticationToken.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class
deleted file mode 100644
index bf0083a2..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/BuildConfig.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class
deleted file mode 100644
index 2ee39be7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackContext.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class
deleted file mode 100644
index 462375d9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CallbackMap.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class
deleted file mode 100644
index 66cb1be9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Config.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class
deleted file mode 100644
index 62fa0b3d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ConfigXmlParser.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class
deleted file mode 100644
index c4624d15..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class
deleted file mode 100644
index 33738151..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class
deleted file mode 100644
index fabe9efa..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class
deleted file mode 100644
index 3c062db9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class
deleted file mode 100644
index 76695eb5..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class
deleted file mode 100644
index bfe0c70e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaActivity.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class
deleted file mode 100644
index 18014a39..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaArgs.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class
deleted file mode 100644
index c7f3f237..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaBridge.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class
deleted file mode 100644
index 46007d42..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaClientCertRequest.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class
deleted file mode 100644
index 683ff52e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class
deleted file mode 100644
index c7f3d4af..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class
deleted file mode 100644
index 4cb4f9bc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class
deleted file mode 100644
index ac24ba52..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class
deleted file mode 100644
index 3ab9531e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class
deleted file mode 100644
index 05530d9e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$6.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class
deleted file mode 100644
index 5cd2cb8c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$7.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class
deleted file mode 100644
index e57fded7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$8.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class
deleted file mode 100644
index 628d4627..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$9.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class
deleted file mode 100644
index c4dd9997..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper$Result.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class
deleted file mode 100644
index fd873766..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaDialogsHelper.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class
deleted file mode 100644
index c912f928..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaHttpAuthHandler.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class
deleted file mode 100644
index b2059438..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterface.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class
deleted file mode 100644
index 92dae914..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl$ActivityResultHolder.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class
deleted file mode 100644
index 22ffbfe4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaInterfaceImpl.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class
deleted file mode 100644
index d8906c9c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPlugin.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class
deleted file mode 100644
index ed0b3da5..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaPreferences.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class
deleted file mode 100644
index 15ab1f62..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi$OpenForReadResult.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class
deleted file mode 100644
index f11f59a3..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaResourceApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class
deleted file mode 100644
index 9fb80528..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class
deleted file mode 100644
index deb6dfda..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$Client.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class
deleted file mode 100644
index 1149bf24..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine$EngineView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class
deleted file mode 100644
index 7a7dcb4f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewEngine.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class
deleted file mode 100644
index 4cf05bbe..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class
deleted file mode 100644
index af9110d2..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class
deleted file mode 100644
index e5c567e3..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class
deleted file mode 100644
index 1370f669..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class
deleted file mode 100644
index a93f9374..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class
deleted file mode 100644
index 4df9559c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl$EngineClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class
deleted file mode 100644
index a8921a41..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CordovaWebViewImpl.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class
deleted file mode 100644
index 5365b497..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class
deleted file mode 100644
index 7509891d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class
deleted file mode 100644
index 6f01ec94..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class
deleted file mode 100644
index 12c2685d..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class
deleted file mode 100644
index 306f92b6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class
deleted file mode 100644
index 324266e6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/CoreAndroid.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class
deleted file mode 100644
index 6e675205..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ExposedJsApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class
deleted file mode 100644
index 18ad39ec..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaClientCertRequest.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class
deleted file mode 100644
index 142b69c9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaCookieManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class
deleted file mode 100644
index ac03d2d9..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ICordovaHttpAuthHandler.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class
deleted file mode 100644
index 11bd8f7c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/LOG.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class
deleted file mode 100644
index 1d25e8d1..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$BridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class
deleted file mode 100644
index 9f380c55..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class
deleted file mode 100644
index 8bae598b..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$EvalBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class
deleted file mode 100644
index 599bdc02..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$JsMessage.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class
deleted file mode 100644
index 1f58f471..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class
deleted file mode 100644
index 58ab6eea..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$LoadUrlBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class
deleted file mode 100644
index 5befb5dd..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$NoOpBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class
deleted file mode 100644
index 3d637415..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class
deleted file mode 100644
index 58299a40..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class
deleted file mode 100644
index c3848041..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode$OnlineEventsBridgeModeDelegate.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class
deleted file mode 100644
index 4281bfde..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue$OnlineEventsBridgeMode.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class
deleted file mode 100644
index 7048a7b4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/NativeToJsMessageQueue.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class
deleted file mode 100644
index 4adc8d03..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginEntry.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class
deleted file mode 100644
index c59578c4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class
deleted file mode 100644
index d9ff981f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult$Status.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class
deleted file mode 100644
index dfefc658..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/PluginResult.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class
deleted file mode 100644
index fc6a4d13..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/ResumeCallback.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class
deleted file mode 100644
index 05973c38..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist$URLPattern.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class
deleted file mode 100644
index 1be2bfca..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/Whitelist.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class
deleted file mode 100644
index 4d1199c6..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemCookieManager.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class
deleted file mode 100644
index 8511795f..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemExposedJsApi.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class
deleted file mode 100644
index 9b3e91ee..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class
deleted file mode 100644
index 2d0ac1a4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class
deleted file mode 100644
index 5c6f1a01..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$3.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class
deleted file mode 100644
index d7817b09..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$4.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class
deleted file mode 100644
index 797cdd71..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient$5.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class
deleted file mode 100644
index f4959cc7..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebChromeClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class
deleted file mode 100644
index 9dfe6ede..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebView.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class
deleted file mode 100644
index 4ded5789..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewClient.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class
deleted file mode 100644
index 88b63e1e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$1.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class
deleted file mode 100644
index 2502947c..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine$2.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class b/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class
deleted file mode 100644
index 8ea85524..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/classes/release/org/apache/cordova/engine/SystemWebViewEngine.class
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt
deleted file mode 100644
index c01a13dc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt
+++ /dev/null
@@ -1 +0,0 @@
-incremental task execution \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt
deleted file mode 100644
index c01a13dc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt
+++ /dev/null
@@ -1 +0,0 @@
-incremental task execution \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store
deleted file mode 100644
index 8b8400dc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAidl/dependency.store
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store
deleted file mode 100644
index 8b8400dc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileDebugAndroidTestAidl/dependency.store
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store
deleted file mode 100644
index 8b8400dc..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/compileReleaseAidl/dependency.store
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties
deleted file mode 100644
index bac4bafe..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Thu Mar 02 23:48:55 CET 2017
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml
deleted file mode 100644
index 319e8e1e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAndroidTestResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="debug$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/res"/></dataSet><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/androidTest/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/androidTest/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/androidTest/debug"/></dataSet><dataSet config="debug" from-dependency="true" generated-set="debug$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/intermediates/bundles/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/androidTest/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/androidTest/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/androidTest/debug"/></dataSet><mergedItems/></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml
deleted file mode 100644
index b925a276..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/assets"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/assets/shaders/debug"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/assets"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
deleted file mode 100644
index 56e891d1..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/jniLibs"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml
deleted file mode 100644
index b3dfb877..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="debug"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/shaders"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml
deleted file mode 100644
index 931d5465..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/assets"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/assets/shaders/release"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/assets"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml
deleted file mode 100644
index 241302c2..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/jniLibs"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml
deleted file mode 100644
index 7a2c8288..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="release"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/shaders"/></dataSet></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
deleted file mode 100644
index af099dc5..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Thu Mar 02 23:48:50 CET 2017
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml
deleted file mode 100644
index a1d3d35e..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug" generated-set="debug$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/debug/res"/></dataSet><mergedItems/></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
deleted file mode 100644
index bac4bafe..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
+++ /dev/null
@@ -1 +0,0 @@
-#Thu Mar 02 23:48:55 CET 2017
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml
deleted file mode 100644
index 116d54b4..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release$Generated" generated="true"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/res"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release" generated-set="release$Generated"><source path="/Users/user/Sites/stone-island/StoneIsland/platforms/android/CordovaLib/src/release/res"/></dataSet><mergedItems/></merger> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml
deleted file mode 100644
index 47d41c84..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifest/androidTest/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.apache.cordova.test" >
-
- <uses-sdk
- android:minSdkVersion="14"
- android:targetSdkVersion="14" />
-
- <instrumentation
- android:name="android.test.InstrumentationTestRunner"
- android:functionalTest="false"
- android:handleProfiling="false"
- android:label="Tests for org.apache.cordova.test"
- android:targetPackage="org.apache.cordova.test" />
-
- <application>
- <uses-library android:name="android.test.runner" />
- </application>
-
-</manifest> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml
deleted file mode 100644
index 90863ed8..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.apache.cordova"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk android:minSdkVersion="14" />
-
-</manifest> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml b/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml
deleted file mode 100644
index 90863ed8..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.apache.cordova"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-sdk android:minSdkVersion="14" />
-
-</manifest> \ No newline at end of file
diff --git a/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_ b/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_
deleted file mode 100644
index 16e06416..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/intermediates/res/resources-debug-androidTest.ap_
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar b/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar
deleted file mode 100644
index b5dc0c93..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-debug.aar
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar b/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar
deleted file mode 100644
index 095a7996..00000000
--- a/StoneIsland/platforms/android/CordovaLib/build/outputs/aar/CordovaLib-release.aar
+++ /dev/null
Binary files differ
diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json
index e93b27be..d30b7891 100755
--- a/StoneIsland/platforms/android/android.json
+++ b/StoneIsland/platforms/android/android.json
@@ -51,6 +51,10 @@
{
"xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"UniversalAnalytics\"><param name=\"android-package\" value=\"com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin\" /></feature>",
+ "count": 1
}
]
}
@@ -81,6 +85,22 @@
{
"xml": "<service android:exported=\"false\" android:name=\"com.adobe.phonegap.push.RegistrationIntentService\" />",
"count": 1
+ },
+ {
+ "xml": "<receiver android:enabled=\"true\" android:name=\"com.google.android.gms.analytics.AnalyticsReceiver\"><intent-filter><action android:name=\"com.google.android.gms.analytics.ANALYTICS_DISPATCH\" /></intent-filter></receiver>",
+ "count": 1
+ },
+ {
+ "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.AnalyticsService\" />",
+ "count": 1
+ },
+ {
+ "xml": "<receiver android:enabled=\"true\" android:exported=\"true\" android:name=\"com.google.android.gms.analytics.CampaignTrackingReceiver\"><intent-filter><action android:name=\"com.android.vending.INSTALL_REFERRER\" /></intent-filter></receiver>",
+ "count": 1
+ },
+ {
+ "xml": "<service android:enabled=\"true\" android:exported=\"false\" android:name=\"com.google.android.gms.analytics.CampaignTrackingService\" />",
+ "count": 1
}
],
"/manifest": [
@@ -129,7 +149,7 @@
},
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
- "count": 1
+ "count": 2
},
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",
@@ -142,6 +162,10 @@
{
"xml": "<uses-feature android:name=\"android.hardware.location.gps\" />",
"count": 1
+ },
+ {
+ "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />",
+ "count": 1
}
],
"/manifest/application/activity": [
@@ -217,6 +241,9 @@
"phonegap-plugin-push": {
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
+ },
+ "cordova-plugin-google-analytics": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {},
@@ -325,6 +352,15 @@
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
],
"plugin_metadata": {
@@ -340,6 +376,7 @@
"cordova-plugin-compat": "1.1.0",
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/cordova_plugins.js b/StoneIsland/platforms/android/assets/www/cordova_plugins.js
index 3db0cfd0..564d770b 100755
--- a/StoneIsland/platforms/android/assets/www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js
@@ -104,6 +104,15 @@ module.exports = [
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
];
module.exports.metadata =
@@ -121,7 +130,8 @@ module.exports.metadata =
"cordova-plugin-compat": "1.1.0",
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js
new file mode 100644
index 00000000..b46b19ea
--- /dev/null
+++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-google-analytics/www/analytics.js
@@ -0,0 +1,130 @@
+cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
+function UniversalAnalyticsPlugin() {}
+
+UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
+ if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
+ dispatchPeriod = 30;
+ } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
+ // Called without dispatchPeriod but with a callback.
+ // Looks like the original API was used so shift parameters over to remain compatible.
+ error = success;
+ success = dispatchPeriod;
+ dispatchPeriod = 30;
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
+};
+
+UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
+};
+
+UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
+};
+
+/* enables verbose logging */
+UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
+};
+
+UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
+ if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
+ campaignUrl = '';
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
+};
+
+UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
+ if (typeof key !== "number") {
+ throw Error("key must be a valid integer not '" + typeof key + "'");
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+ if (typeof value === 'undefined' || value === null) {
+ value = 0;
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
+};
+
+/**
+ * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
+ */
+UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
+ if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
+ intervalInMilliseconds = 0;
+ }
+ if (typeof name === 'undefined' || name === null) {
+ name = '';
+ }
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
+};
+
+/* Google Analytics e-Commerce Tracking */
+/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
+};
+
+UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
+};
+
+/* automatic uncaught exception tracking */
+UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
+};
+
+module.exports = new UniversalAnalyticsPlugin();
+
+});
diff --git a/StoneIsland/platforms/android/build.gradle b/StoneIsland/platforms/android/build.gradle
index df341800..a6e144c5 100644
--- a/StoneIsland/platforms/android/build.gradle
+++ b/StoneIsland/platforms/android/build.gradle
@@ -255,6 +255,7 @@ dependencies {
compile "com.android.support:support-v13:23+"
compile "com.google.android.gms:play-services-gcm:9.8+"
compile "me.leolin:ShortcutBadger:1.1.11@aar"
+ compile "com.google.android.gms:play-services-analytics:+"
// SUB-PROJECT DEPENDENCIES END
}
diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
index 3db0cfd0..564d770b 100755
--- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js
@@ -104,6 +104,15 @@ module.exports = [
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
];
module.exports.metadata =
@@ -121,7 +130,8 @@ module.exports.metadata =
"cordova-plugin-compat": "1.1.0",
"cordova-plugin-geolocation": "2.4.0",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
new file mode 100644
index 00000000..b46b19ea
--- /dev/null
+++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
@@ -0,0 +1,130 @@
+cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
+function UniversalAnalyticsPlugin() {}
+
+UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
+ if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
+ dispatchPeriod = 30;
+ } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
+ // Called without dispatchPeriod but with a callback.
+ // Looks like the original API was used so shift parameters over to remain compatible.
+ error = success;
+ success = dispatchPeriod;
+ dispatchPeriod = 30;
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
+};
+
+UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
+};
+
+UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
+};
+
+/* enables verbose logging */
+UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
+};
+
+UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
+ if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
+ campaignUrl = '';
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
+};
+
+UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
+ if (typeof key !== "number") {
+ throw Error("key must be a valid integer not '" + typeof key + "'");
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+ if (typeof value === 'undefined' || value === null) {
+ value = 0;
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
+};
+
+/**
+ * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
+ */
+UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
+ if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
+ intervalInMilliseconds = 0;
+ }
+ if (typeof name === 'undefined' || name === null) {
+ name = '';
+ }
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
+};
+
+/* Google Analytics e-Commerce Tracking */
+/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
+};
+
+UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
+};
+
+/* automatic uncaught exception tracking */
+UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
+};
+
+module.exports = new UniversalAnalyticsPlugin();
+
+});
diff --git a/StoneIsland/platforms/android/project.properties b/StoneIsland/platforms/android/project.properties
index 6936daa2..edb81941 100755
--- a/StoneIsland/platforms/android/project.properties
+++ b/StoneIsland/platforms/android/project.properties
@@ -15,4 +15,5 @@ android.library.reference.1=CordovaLib
cordova.gradle.include.1=phonegap-plugin-push/stoneisland-push.gradle
cordova.system.library.1=com.android.support:support-v13:23+
cordova.system.library.2=com.google.android.gms:play-services-gcm:9.8+
-cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar \ No newline at end of file
+cordova.system.library.3=me.leolin:ShortcutBadger:1.1.11@aar
+cordova.system.library.4=com.google.android.gms:play-services-analytics:+ \ No newline at end of file
diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml
index c0998d2c..1bcdbb83 100644
--- a/StoneIsland/platforms/android/res/xml/config.xml
+++ b/StoneIsland/platforms/android/res/xml/config.xml
@@ -69,4 +69,7 @@
<preference name="AllowInlineMediaPlayback" value="true" />
<preference name="AndroidLaunchMode" value="singleTop" />
<preference name="android-minSdkVersion" value="21" />
+ <feature name="UniversalAnalytics">
+ <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
+ </feature>
</widget>
diff --git a/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java b/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java
new file mode 100644
index 00000000..23c20023
--- /dev/null
+++ b/StoneIsland/platforms/android/src/com/danielcwilson/plugins/analytics/UniversalAnalyticsPlugin.java
@@ -0,0 +1,469 @@
+package com.danielcwilson.plugins.analytics;
+
+import com.google.android.gms.analytics.GoogleAnalytics;
+import com.google.android.gms.analytics.Logger.LogLevel;
+import com.google.android.gms.analytics.HitBuilders;
+import com.google.android.gms.analytics.Tracker;
+
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CallbackContext;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+public class UniversalAnalyticsPlugin extends CordovaPlugin {
+ public static final String START_TRACKER = "startTrackerWithId";
+ public static final String TRACK_VIEW = "trackView";
+ public static final String TRACK_EVENT = "trackEvent";
+ public static final String TRACK_EXCEPTION = "trackException";
+ public static final String TRACK_TIMING = "trackTiming";
+ public static final String TRACK_METRIC = "trackMetric";
+ public static final String ADD_DIMENSION = "addCustomDimension";
+ public static final String ADD_TRANSACTION = "addTransaction";
+ public static final String ADD_TRANSACTION_ITEM = "addTransactionItem";
+
+ public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection";
+ public static final String SET_USER_ID = "setUserId";
+ public static final String SET_ANONYMIZE_IP = "setAnonymizeIp";
+ public static final String SET_OPT_OUT = "setOptOut";
+ public static final String SET_APP_VERSION = "setAppVersion";
+ public static final String GET_VAR = "getVar";
+ public static final String SET_VAR = "setVar";
+ public static final String DISPATCH = "dispatch";
+ public static final String DEBUG_MODE = "debugMode";
+ public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting";
+
+ public Boolean trackerStarted = false;
+ public Boolean debugModeEnabled = false;
+ public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>();
+
+ public Tracker tracker;
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (START_TRACKER.equals(action)) {
+ String id = args.getString(0);
+ int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30;
+ this.startTracker(id, dispatchPeriod, callbackContext);
+ return true;
+ } else if (TRACK_VIEW.equals(action)) {
+ int length = args.length();
+ String screen = args.getString(0);
+ this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext);
+ return true;
+ } else if (TRACK_EVENT.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackEvent(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getString(2) : "",
+ length > 3 ? args.getLong(3) : 0,
+ length > 4 ? args.getBoolean(4) : false,
+ callbackContext);
+ }
+ return true;
+ } else if (TRACK_EXCEPTION.equals(action)) {
+ String description = args.getString(0);
+ Boolean fatal = args.getBoolean(1);
+ this.trackException(description, fatal, callbackContext);
+ return true;
+ } else if (TRACK_TIMING.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext);
+ }
+ return true;
+ } else if (TRACK_METRIC.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext);
+ }
+ return true;
+ } else if (ADD_DIMENSION.equals(action)) {
+ Integer key = args.getInt(0);
+ String value = args.getString(1);
+ this.addCustomDimension(key, value, callbackContext);
+ return true;
+ } else if (ADD_TRANSACTION.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.addTransaction(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getDouble(2) : 0,
+ length > 3 ? args.getDouble(3) : 0,
+ length > 4 ? args.getDouble(4) : 0,
+ length > 5 ? args.getString(5) : null,
+ callbackContext);
+ }
+ return true;
+ } else if (ADD_TRANSACTION_ITEM.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.addTransactionItem(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getString(2) : "",
+ length > 3 ? args.getString(3) : "",
+ length > 4 ? args.getDouble(4) : 0,
+ length > 5 ? args.getLong(5) : 0,
+ length > 6 ? args.getString(6) : null,
+ callbackContext);
+ }
+ return true;
+ } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) {
+ this.setAllowIDFACollection(args.getBoolean(0), callbackContext);
+ } else if (SET_USER_ID.equals(action)) {
+ String userId = args.getString(0);
+ this.setUserId(userId, callbackContext);
+ } else if (SET_ANONYMIZE_IP.equals(action)) {
+ boolean anonymize = args.getBoolean(0);
+ this.setAnonymizeIp(anonymize, callbackContext);
+ } else if (SET_OPT_OUT.equals(action)) {
+ boolean optout = args.getBoolean(0);
+ this.setOptOut(optout, callbackContext);
+ } else if (SET_APP_VERSION.equals(action)) {
+ String version = args.getString(0);
+ this.setAppVersion(version, callbackContext);
+ } else if (GET_VAR.equals(action)) {
+ String variable = args.getString(0);
+ this.getVar(variable, callbackContext);
+ } else if (SET_VAR.equals(action)) {
+ String variable = args.getString(0);
+ String value = args.getString(1);
+ this.setVar(variable, value, callbackContext);
+ return true;
+ } else if (DISPATCH.equals(action)) {
+ this.dispatch(callbackContext);
+ return true;
+ } else if (DEBUG_MODE.equals(action)) {
+ this.debugMode(callbackContext);
+ } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) {
+ Boolean enable = args.getBoolean(0);
+ this.enableUncaughtExceptionReporting(enable, callbackContext);
+ }
+ return false;
+ }
+
+ private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) {
+ if (null != id && id.length() > 0) {
+ tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id);
+ callbackContext.success("tracker started");
+ trackerStarted = true;
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod);
+ } else {
+ callbackContext.error("tracker id is not valid");
+ }
+ }
+
+ private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) {
+ if (key <= 0) {
+ callbackContext.error("Expected positive integer argument for key.");
+ return;
+ }
+
+ if (null == value || value.length() == 0) {
+ callbackContext.error("Expected non-empty string argument for value.");
+ return;
+ }
+
+ customDimensions.put(key, value);
+ callbackContext.success("custom dimension started");
+ }
+
+ private <T> void addCustomDimensionsToHitBuilder(T builder) {
+ //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use
+ //the common setCustomDimension (int index, String dimension) method
+ try {
+ Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class);
+
+ for (Entry<Integer, String> entry : customDimensions.entrySet()) {
+ Integer key = entry.getKey();
+ String value = entry.getValue();
+ try {
+ builderMethod.invoke(builder, (key), value);
+ } catch (IllegalArgumentException e) {
+ } catch (IllegalAccessException e) {
+ } catch (InvocationTargetException e) {
+ }
+ }
+ } catch (SecurityException e) {
+ } catch (NoSuchMethodException e) {
+ }
+ }
+
+ private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) {
+ if (! trackerStarted ) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != screenname && screenname.length() > 0) {
+ tracker.setScreenName(screenname);
+
+ HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ if(!campaignUrl.equals("")){
+ hitBuilder.setCampaignParamsFromUrl(campaignUrl);
+ }
+
+ if(!newSession) {
+ tracker.send(hitBuilder.build());
+ } else {
+ tracker.send(hitBuilder.setNewSession().build());
+ }
+
+ callbackContext.success("Track Screen: " + screenname);
+ } else {
+ callbackContext.error("Expected one non-empty string argument.");
+ }
+ }
+
+ private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != category && category.length() > 0) {
+ HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ if(!newSession){
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setAction(action)
+ .setLabel(label)
+ .setValue(value)
+ .build());
+ } else {
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setAction(action)
+ .setLabel(label)
+ .setValue(value)
+ .setNewSession()
+ .build());
+ }
+
+ callbackContext.success("Track Event: " + category);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void trackMetric(Integer key, String value, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (key >= 0) {
+ HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
+ tracker.send(hitBuilder
+ .setCustomMetric(key, Float.parseFloat(value))
+ .build()
+ );
+ callbackContext.success("Track Metric: " + key + ", value: " + value);
+ } else {
+ callbackContext.error("Expected integer key: " + key + ", and string value: " + value);
+ }
+ }
+
+ private void trackException(String description, Boolean fatal, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != description && description.length() > 0) {
+ HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setDescription(description)
+ .setFatal(fatal)
+ .build()
+ );
+ callbackContext.success("Track Exception: " + description);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != category && category.length() > 0) {
+ HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setValue(intervalInMilliseconds)
+ .setVariable(name)
+ .setLabel(label)
+ .build()
+ );
+ callbackContext.success("Track Timing: " + category);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != id && id.length() > 0) {
+ HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setTransactionId(id)
+ .setAffiliation(affiliation)
+ .setRevenue(revenue).setTax(tax)
+ .setShipping(shipping)
+ .setCurrencyCode(currencyCode)
+ .build()
+ ); //Deprecated
+ callbackContext.success("Add Transaction: " + id);
+ } else {
+ callbackContext.error("Expected non-empty ID.");
+ }
+ }
+
+ private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != id && id.length() > 0) {
+ HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setTransactionId(id)
+ .setName(name)
+ .setSku(sku)
+ .setCategory(category)
+ .setPrice(price)
+ .setQuantity(quantity)
+ .setCurrencyCode(currencyCode)
+ .build()
+ ); //Deprecated
+ callbackContext.success("Add Transaction Item: " + id);
+ } else {
+ callbackContext.error("Expected non-empty ID.");
+ }
+ }
+
+ private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.enableAdvertisingIdCollection(enable);
+ callbackContext.success("Enable Advertising Id Collection: " + enable);
+ }
+
+ private void setVar(String variable, String value, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set(variable, value);
+ callbackContext.success("Set variable " + variable + "to " + value);
+ }
+ private void dispatch(CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits();
+ callbackContext.success("dispatch sent");
+ }
+
+ private void getVar(String variable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ String result = tracker.get(variable);
+ callbackContext.success(result);
+ }
+
+ private void debugMode(CallbackContext callbackContext) {
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE);
+
+ this.debugModeEnabled = true;
+ callbackContext.success("debugMode enabled");
+ }
+
+ private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.setAnonymizeIp(anonymize);
+ callbackContext.success("Set AnonymizeIp " + anonymize);
+ }
+
+ private void setOptOut(boolean optout, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout);
+ callbackContext.success("Set Opt-Out " + optout);
+ }
+
+ private void setUserId(String userId, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set("&uid", userId);
+ callbackContext.success("Set user id" + userId);
+ }
+
+ private void setAppVersion(String version, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set("&av", version);
+ callbackContext.success("Set app version: " + version);
+ }
+
+ private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.enableExceptionReporting(enable);
+ callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting");
+ }
+}
diff --git a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
index e2303cfe..9b8aa41d 100755
--- a/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
+++ b/StoneIsland/platforms/ios/Stone Island.xcodeproj/project.pbxproj
@@ -5,7 +5,6 @@
};
objectVersion = 46;
objects = {
-
/* Begin PBXBuildFile section */
0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
099C5D0E05AF43F4B95AAA4A /* CDVNotification.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2F49F2111FC649498658CF3B /* CDVNotification.bundle */; };
@@ -39,6 +38,13 @@
EF28FE2B49A344FBA3F7306F /* CDVInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 729B6141DF9D4C1BB64A7097 /* CDVInAppBrowser.m */; };
F4862C5594894163A3C3AB06 /* CDVConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7CCBA15DC14F20830BD1B3 /* CDVConnection.m */; };
F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6465D215A1B148A387730F27 /* libz.tbd */; };
+ EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */; };
+ 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */; };
+ C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 92230324A2954C6AADBA989A /* libAdIdAccess.a */; };
+ 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBF0272D99FA4D308445B382 /* CoreData.framework */; };
+ D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */; };
+ 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5133B28F80C74DA0A4EF900A /* libz.dylib */; };
+ 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -118,6 +124,24 @@
F6093E605D6D49D1918413AA /* CDVDevice.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVDevice.m; path = "cordova-plugin-device/CDVDevice.m"; sourceTree = "<group>"; };
F840E1F0165FE0F500CFE078 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = config.xml; path = "Stone Island/config.xml"; sourceTree = "<group>"; };
FCCC22BF4385472E88382D56 /* MessageUI.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
+ FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */ = {isa = PBXFileReference; name = "UniversalAnalyticsPlugin.m"; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+ 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; name = "libGoogleAnalyticsServices.a"; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
+ 92230324A2954C6AADBA989A /* libAdIdAccess.a */ = {isa = PBXFileReference; name = "libAdIdAccess.a"; path = "Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
+ A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */ = {isa = PBXFileReference; name = "UniversalAnalyticsPlugin.h"; path = "cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; name = "GAIDictionaryBuilder.h"; path = "cordova-plugin-google-analytics/GAIDictionaryBuilder.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 1380CC4A1CFE434BB20950B7 /* GAIFields.h */ = {isa = PBXFileReference; name = "GAIFields.h"; path = "cordova-plugin-google-analytics/GAIFields.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 71D1AD5902B0425F8154F30F /* GAILogger.h */ = {isa = PBXFileReference; name = "GAILogger.h"; path = "cordova-plugin-google-analytics/GAILogger.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */ = {isa = PBXFileReference; name = "GAITrackedViewController.h"; path = "cordova-plugin-google-analytics/GAITrackedViewController.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 7EECC2D2BFEA43FE966814C6 /* GAI.h */ = {isa = PBXFileReference; name = "GAI.h"; path = "cordova-plugin-google-analytics/GAI.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ F52665B1E3624AACB50A72B1 /* GAITracker.h */ = {isa = PBXFileReference; name = "GAITracker.h"; path = "cordova-plugin-google-analytics/GAITracker.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */ = {isa = PBXFileReference; name = "GAIEcommerceFields.h"; path = "cordova-plugin-google-analytics/GAIEcommerceFields.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */ = {isa = PBXFileReference; name = "GAIEcommerceProduct.h"; path = "cordova-plugin-google-analytics/GAIEcommerceProduct.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */ = {isa = PBXFileReference; name = "GAIEcommerceProductAction.h"; path = "cordova-plugin-google-analytics/GAIEcommerceProductAction.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */ = {isa = PBXFileReference; name = "GAIEcommercePromotion.h"; path = "cordova-plugin-google-analytics/GAIEcommercePromotion.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ BBF0272D99FA4D308445B382 /* CoreData.framework */ = {isa = PBXFileReference; name = "CoreData.framework"; path = "System/Library/Frameworks/CoreData.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */ = {isa = PBXFileReference; name = "AdSupport.framework"; path = "System/Library/Frameworks/AdSupport.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ 5133B28F80C74DA0A4EF900A /* libz.dylib */ = {isa = PBXFileReference; name = "libz.dylib"; path = "usr/lib/libz.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; };
+ 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */ = {isa = PBXFileReference; name = "libsqlite3.dylib"; path = "usr/lib/libsqlite3.dylib"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = compiled.mach-o.dylib; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -136,6 +160,12 @@
A9267928B9A04BE29B534458 /* AddressBook.framework in Frameworks */,
36186AA3639F426384682A75 /* libsqlite3.tbd in Frameworks */,
F990B4C12C3746EAA8C30F8D /* libz.tbd in Frameworks */,
+ 600310C41D3B400498A5890B /* libGoogleAnalyticsServices.a in Frameworks */,
+ C4E60C33635D44649CAAF727 /* libAdIdAccess.a in Frameworks */,
+ 7739C5D961784F519029D858 /* CoreData.framework in Frameworks */,
+ D54B6FB071A94BED99CBF7E6 /* AdSupport.framework in Frameworks */,
+ 6B52986769BB47ED98DF12F6 /* libz.dylib in Frameworks */,
+ 0245BD3C98FD4F04A11BBCAA /* libsqlite3.dylib in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -218,6 +248,12 @@
6940DEA5B3084B54B48BD8F1 /* AddressBook.framework */,
014A3BF81C154724B8D195A5 /* libsqlite3.tbd */,
6465D215A1B148A387730F27 /* libz.tbd */,
+ 281039EFAD1B4A8C90FDC17F /* libGoogleAnalyticsServices.a */,
+ 92230324A2954C6AADBA989A /* libAdIdAccess.a */,
+ BBF0272D99FA4D308445B382 /* CoreData.framework */,
+ A3D8D77BE5A0496891F24BF9 /* AdSupport.framework */,
+ 5133B28F80C74DA0A4EF900A /* libz.dylib */,
+ 4A4D6FDE815144E3BC47859B /* libsqlite3.dylib */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -271,6 +307,18 @@
B195BD92B31445039168DCCC /* PushPlugin.m */,
40CE234F002F419597A039E4 /* AppDelegate+notification.h */,
9AA8E7740E114B6E967452F8 /* PushPlugin.h */,
+ FFB5E8C21AD14D10A7088119 /* UniversalAnalyticsPlugin.m */,
+ A37B0133EF7A42B6BAF5F317 /* UniversalAnalyticsPlugin.h */,
+ 36C6224E10CC4C1DB3DEAAF4 /* GAIDictionaryBuilder.h */,
+ 1380CC4A1CFE434BB20950B7 /* GAIFields.h */,
+ 71D1AD5902B0425F8154F30F /* GAILogger.h */,
+ 9A8A8193C2794F48888355D3 /* GAITrackedViewController.h */,
+ 7EECC2D2BFEA43FE966814C6 /* GAI.h */,
+ F52665B1E3624AACB50A72B1 /* GAITracker.h */,
+ 2953CC1328564E13AE3FE7CD /* GAIEcommerceFields.h */,
+ CAAD7EE259C942989156C616 /* GAIEcommerceProduct.h */,
+ 8A49AF7CDE3040039CE14E5A /* GAIEcommerceProductAction.h */,
+ E2AFABA192234A0E9C198427 /* GAIEcommercePromotion.h */,
);
name = Plugins;
path = "Stone Island/Plugins";
@@ -463,6 +511,7 @@
E162E7029FC24C4595D1D82D /* IonicKeyboard.m in Sources */,
35DC9CF8FDC24E6DA829674B /* AppDelegate+notification.m in Sources */,
76C30D264E504728A7F0FD0C /* PushPlugin.m in Sources */,
+ EE465A3641884122A7088AC5 /* UniversalAnalyticsPlugin.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -505,6 +554,11 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_NAME = "Stone Island";
TARGETED_DEVICE_FAMILY = "1,2";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
+ "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
+ );
};
name = Debug;
};
@@ -534,6 +588,11 @@
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
PRODUCT_NAME = "Stone Island";
TARGETED_DEVICE_FAMILY = "1,2";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
+ "\"$(SRCROOT)/Stone Island/Plugins/cordova-plugin-google-analytics\"",
+ );
};
name = Release;
};
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h
new file mode 100644
index 00000000..7f3f7029
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAI.h
@@ -0,0 +1,192 @@
+/*!
+ @header GAI.h
+ @abstract Google Analytics iOS SDK Header
+ @version 3.14
+ @copyright Copyright 2015 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "GAILogger.h"
+#import "GAITrackedViewController.h"
+#import "GAITracker.h"
+
+typedef NS_ENUM(NSUInteger, GAIDispatchResult) {
+ kGAIDispatchNoData,
+ kGAIDispatchGood,
+ kGAIDispatchError
+};
+
+/*! Google Analytics product string. */
+extern NSString *const kGAIProduct;
+
+/*! Google Analytics version string. */
+extern NSString *const kGAIVersion;
+
+/*!
+ NSError objects returned by the Google Analytics SDK may have this error domain
+ to indicate that the error originated in the Google Analytics SDK.
+ */
+extern NSString *const kGAIErrorDomain;
+
+/*! Google Analytics error codes. */
+typedef enum {
+ // This error code indicates that there was no error. Never used.
+ kGAINoError = 0,
+
+ // This error code indicates that there was a database-related error.
+ kGAIDatabaseError,
+
+ // This error code indicates that there was a network-related error.
+ kGAINetworkError,
+} GAIErrorCode;
+
+/*!
+ Google Analytics iOS top-level class. Provides facilities to create trackers
+ and set behaviorial flags.
+ */
+@interface GAI : NSObject
+
+/*!
+ For convenience, this class exposes a default tracker instance.
+ This is initialized to `nil` and will be set to the first tracker that is
+ instantiated in trackerWithTrackingId:. It may be overridden as desired.
+
+ The GAITrackedViewController class will, by default, use this tracker instance.
+ */
+@property(nonatomic, assign) id<GAITracker> defaultTracker;
+
+/*!
+ The GAILogger to use.
+ */
+@property(nonatomic, retain) id<GAILogger> logger;
+
+/*!
+ When this is true, no tracking information will be gathered; tracking calls
+ will effectively become no-ops. When set to true, all tracking information that
+ has not yet been submitted. The value of this flag will be persisted
+ automatically by the SDK. Developers can optionally use this flag to implement
+ an opt-out setting in the app to allows users to opt out of Google Analytics
+ tracking.
+
+ This is set to `NO` the first time the Google Analytics SDK is used on a
+ device, and is persisted thereafter.
+ */
+@property(nonatomic, assign) BOOL optOut;
+
+/*!
+ If this value is positive, tracking information will be automatically
+ dispatched every dispatchInterval seconds. Otherwise, tracking information must
+ be sent manually by calling dispatch.
+
+ By default, this is set to `120`, which indicates tracking information should
+ be dispatched automatically every 120 seconds.
+ */
+@property(nonatomic, assign) NSTimeInterval dispatchInterval;
+
+/*!
+ When set to true, the SDK will record the currently registered uncaught
+ exception handler, and then register an uncaught exception handler which tracks
+ the exceptions that occurred using defaultTracker. If defaultTracker is not
+ `nil`, this function will track the exception on the tracker and attempt to
+ dispatch any outstanding tracking information for 5 seconds. It will then call
+ the previously registered exception handler, if any. When set back to false,
+ the previously registered uncaught exception handler will be restored.
+ */
+@property(nonatomic, assign) BOOL trackUncaughtExceptions;
+
+/*!
+ When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
+ */
+@property(nonatomic, assign) BOOL dryRun;
+
+/*! Get the shared instance of the Google Analytics for iOS class. */
++ (GAI *)sharedInstance;
+
+/*!
+ Creates or retrieves a GAITracker implementation with the specified name and
+ tracking ID. If the tracker for the specified name does not already exist, then
+ it will be created and returned; otherwise, the existing tracker will be
+ returned. If the existing tracker for the respective name has a different
+ tracking ID, that tracking ID is not changed by this method. If defaultTracker
+ is not set, it will be set to the tracker instance returned here.
+
+ @param name The name of this tracker. Must not be `nil` or empty.
+
+ @param trackingId The tracking ID to use for this tracker. It should be of
+ the form `UA-xxxxx-y`.
+
+ @return A GAITracker associated with the specified name. The tracker
+ can be used to send tracking data to Google Analytics. The first time this
+ method is called with a particular name, the tracker for that name will be
+ returned, and subsequent calls with the same name will return the same
+ instance. It is not necessary to retain the tracker because the tracker will be
+ retained internally by the library.
+
+ If an error occurs or the name is not valid, this method will return
+ `nil`.
+ */
+- (id<GAITracker>)trackerWithName:(NSString *)name
+ trackingId:(NSString *)trackingId;
+
+/*!
+ Creates or retrieves a GAITracker implementation with name equal to
+ the specified tracking ID. If the tracker for the respective name does not
+ already exist, it is created, has it's tracking ID set to |trackingId|,
+ and is returned; otherwise, the existing tracker is returned. If the existing
+ tracker for the respective name has a different tracking ID, that tracking ID
+ is not changed by this method. If defaultTracker is not set, it is set to the
+ tracker instance returned here.
+
+ @param trackingId The tracking ID to use for this tracker. It should be of
+ the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
+
+ @return A GAITracker associated with the specified trackingID. The tracker
+ can be used to send tracking data to Google Analytics. The first time this
+ method is called with a particular trackingID, the tracker for the respective
+ name will be returned, and subsequent calls with the same trackingID
+ will return the same instance. It is not necessary to retain the tracker
+ because the tracker will be retained internally by the library.
+
+ If an error occurs or the trackingId is not valid, this method will return
+ `nil`.
+ */
+- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
+
+/*!
+ Remove a tracker from the trackers dictionary. If it is the default tracker,
+ clears the default tracker as well.
+
+ @param name The name of the tracker.
+ */
+- (void)removeTrackerByName:(NSString *)name;
+
+/*!
+ Dispatches any pending tracking information.
+
+ Note that this does not have any effect on dispatchInterval, and can be used in
+ conjunction with periodic dispatch. */
+- (void)dispatch;
+
+/*!
+ Dispatches the next tracking beacon in the queue, calling completionHandler when
+ the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted
+ (returning kGAIDispatchError). If there is no network connection or there is no data to send,
+ kGAIDispatchNoData is returned.
+
+ Note that calling this method with a non-nil completionHandler disables periodic dispatch.
+ Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when
+ the app resumes from the background.
+
+ Calling this method with a nil completionHandler is the same as calling the dispatch
+ above.
+
+ This method can be used for background data fetching in iOS 7.0 or later. It would be wise to
+ call this when the application is exiting to initiate the submission of any unsubmitted
+ tracking information.
+
+ @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult
+ param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch.
+ */
+- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h
new file mode 100644
index 00000000..b8c5fdab
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIDictionaryBuilder.h
@@ -0,0 +1,217 @@
+/*!
+ @header GAIDictionaryBuilder.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "GAIEcommerceProduct.h"
+#import "GAIEcommerceProductAction.h"
+#import "GAIEcommercePromotion.h"
+
+/*!
+ * Helper class to build a dictionary of hit parameters and values.
+ * <br>
+ * Examples:
+ * <code>
+ * id<GAITracker> t = // get a tracker.
+ * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
+ * action:@"EventAction"
+ * label:nil
+ * value:nil]
+ * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]];
+ * </code>
+ * This will send an event hit type with the specified parameters
+ * and a custom dimension parameter.
+ * <br>
+ * If you want to send a parameter with all hits, set it on GAITracker directly.
+ * <code>
+ * [t set:kGAIScreenName value:@"Home"];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"PlusOne"
+ * target:@"SOME_URL"] build]];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"Share"
+ * target:@"SOME_POST"] build]];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"HangOut"
+ * target:@"SOME_CIRCLE"]
+ * build]];
+ * </code>
+ * You can override a value set on the tracker by adding it to the dictionary.
+ * <code>
+ * [t set:kGAIScreenName value:@"Home"];
+ * [t send:...];
+ * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
+ * action:@"popup"
+ * label:nil
+ * value:nil]
+ * set:@"popup title" forKey:kGAIScreenName] build]];
+ * </code>
+ * The values set via [GAIDictionaryBuilder set] or
+ * [GAIDictionaryBuilder setAll] will override any existing values in the
+ * GAIDictionaryBuilder object (i.e. initialized by
+ * [GAIDictionaryBuilder createXYZ]). e.g.
+ * <code>
+ * GAIDictionaryBuilder *m =
+ * GAIDictionaryBuilder createTimingWithCategory:@"category"
+ * interval:@0
+ * name:@"name"
+ * label:nil];
+ * [t send:[m.set:@"10" forKey:kGAITimingVar] build];
+ * [t send:[m.set:@"20" forKey:kGAITimingVar] build];
+ * </code>
+ */
+@interface GAIDictionaryBuilder : NSObject
+
+- (GAIDictionaryBuilder *)set:(NSString *)value
+ forKey:(NSString *)key;
+
+/*!
+ * Copies all the name-value pairs from params into this object, ignoring any
+ * keys that are not NSString and any values that are neither NSString or
+ * NSNull.
+ */
+- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
+
+/*!
+ * Returns the value for the input parameter paramName, or nil if paramName
+ * is not present.
+ */
+- (NSString *)get:(NSString *)paramName;
+
+/*!
+ * Return an NSMutableDictionary object with all the parameters set in this
+ */
+- (NSMutableDictionary *)build;
+
+/*!
+ * Parses and translates utm campaign parameters to analytics campaign param
+ * and returns them as a map.
+ *
+ * @param urlString url containing utm campaign parameters.
+ *
+ * Valid campaign parameters are:
+ * <ul>
+ * <li>utm_id</li>
+ * <li>utm_campaign</li>
+ * <li>utm_content</li>
+ * <li>utm_medium</li>
+ * <li>utm_source</li>
+ * <li>utm_term</li>
+ * <li>dclid</li>
+ * <li>gclid</li>
+ * <li>gmob_t</li>
+ * <li>aclid</li>
+ * <li>anid</li>
+ * </ul>
+ * <p>
+ * Example:
+ * http://my.site.com/index.html?utm_campaign=wow&utm_source=source
+ * utm_campaign=wow&utm_source=source.
+ * <p>
+ * For more information on auto-tagging, see
+ * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
+ * <p>
+ * For more information on manual tagging, see
+ * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
+ */
+- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an appview
+ hit.
+
+ Note that using this method will not set the screen name for followon hits. To
+ do that you need to call set:kGAIDescription value:<screenName> on the
+ GAITracker instance.
+
+ This method is deprecated. Use createScreenView instead.
+ */
++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead.");
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a screenview
+ hit.
+
+ Note that using this method will not set the screen name for followon hits. To
+ do that you need to call set:kGAIDescription value:<screenName> on the
+ GAITracker instance.
+ */
++ (GAIDictionaryBuilder *)createScreenView;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
+ */
++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
+ action:(NSString *)action
+ label:(NSString *)label
+ value:(NSNumber *)value;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an exception
+ hit.
+ */
++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
+ withFatal:(NSNumber *)fatal;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
+ */
++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
+ name:(NSString *)name
+ sku:(NSString *)sku
+ category:(NSString *)category
+ price:(NSNumber *)price
+ quantity:(NSNumber *)quantity
+ currencyCode:(NSString *)currencyCode;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
+ */
++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
+ action:(NSString *)action
+ target:(NSString *)target;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
+ */
++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
+ interval:(NSNumber *)intervalMillis
+ name:(NSString *)name
+ label:(NSString *)label;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a transaction
+ hit.
+ */
++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
+ affiliation:(NSString *)affiliation
+ revenue:(NSNumber *)revenue
+ tax:(NSNumber *)tax
+ shipping:(NSNumber *)shipping
+ currencyCode:(NSString *)currencyCode;
+
+/*!
+ Set the product action field for this hit.
+ */
+- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction;
+
+/*!
+ Adds a product to this hit.
+ */
+- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product;
+
+/*!
+ Add a product impression to this hit.
+ */
+- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product
+ impressionList:(NSString *)name
+ impressionSource:(NSString *)source;
+
+/*!
+ Add a promotion to this hit.
+ */
+- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h
new file mode 100644
index 00000000..b3ba60ae
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceFields.h
@@ -0,0 +1,124 @@
+/*!
+ @header GAIEcommerceFields.h
+ @abstract Google Analytics iOS SDK Ecommerce Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ This class provides several fields and methods useful as wire format parameters for
+ Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details
+ on how to use the Enhanced Ecommerce features.
+ */
+
+// Enhanced Ecommerce Product fields
+extern NSString *const kGAIProductId;
+extern NSString *const kGAIProductName;
+extern NSString *const kGAIProductBrand;
+extern NSString *const kGAIProductCategory;
+extern NSString *const kGAIProductVariant;
+extern NSString *const kGAIProductPrice;
+extern NSString *const kGAIProductQuantity;
+extern NSString *const kGAIProductCouponCode;
+extern NSString *const kGAIProductPosition;
+
+extern NSString *const kGAIProductAction;
+
+// product action values
+extern NSString *const kGAIPADetail;
+extern NSString *const kGAIPAClick;
+extern NSString *const kGAIPAAdd;
+extern NSString *const kGAIPARemove;
+extern NSString *const kGAIPACheckout;
+extern NSString *const kGAIPACheckoutOption;
+extern NSString *const kGAIPAPurchase;
+extern NSString *const kGAIPARefund;
+
+// product action fields
+// used for 'purchase' and 'refund' actions
+extern NSString *const kGAIPATransactionId;
+extern NSString *const kGAIPAAffiliation;
+extern NSString *const kGAIPARevenue;
+extern NSString *const kGAIPATax;
+extern NSString *const kGAIPAShipping;
+extern NSString *const kGAIPACouponCode;
+// used for 'checkout' action
+extern NSString *const kGAICheckoutStep;
+extern NSString *const kGAICheckoutOption;
+// used for 'detail' and 'click' actions
+extern NSString *const kGAIProductActionList;
+extern NSString *const kGAIProductListSource;
+
+// Enhanced Ecommerce Impressions fields
+extern NSString *const kGAIImpressionName;
+extern NSString *const kGAIImpressionListSource;
+extern NSString *const kGAIImpressionProduct;
+extern NSString *const kGAIImpressionProductId;
+extern NSString *const kGAIImpressionProductName;
+extern NSString *const kGAIImpressionProductBrand;
+extern NSString *const kGAIImpressionProductCategory;
+extern NSString *const kGAIImpressionProductVariant;
+extern NSString *const kGAIImpressionProductPosition;
+extern NSString *const kGAIImpressionProductPrice;
+
+// Enhanced Ecommerce Promotions fields
+extern NSString *const kGAIPromotionId;
+extern NSString *const kGAIPromotionName;
+extern NSString *const kGAIPromotionCreative;
+extern NSString *const kGAIPromotionPosition;
+
+// Promotion actions
+extern NSString *const kGAIPromotionAction;
+extern NSString *const kGAIPromotionView;
+extern NSString *const kGAIPromotionClick;
+
+@interface GAIEcommerceFields : NSObject
+
+/*!
+ Generates an enhanced ecommerce product field. Note that field names generated by
+ customDimensionForIndex and customMetricForIndex can be used as suffixes.
+
+ @param index the index of the product
+ @param suffix the product field suffix (such as kGAIProductPrice).
+
+ @return an NSString representing the product field parameter
+ */
++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix;
+
+/*!
+ Genrates an enhanced ecommerce impression list field name with an index. The return value of
+ this method should also be used as input to the productImpressionForList method below.
+
+ @param index the index of the impression list
+
+ @return an NSString representing the impression list parameter
+ */
++ (NSString *)impressionListForIndex:(NSUInteger)index;
+
+/*!
+ Generates an enhanced ecommerce product impression field with the impression list, product index
+ and product suffix as parameters. The output of the method impressionListForIndex above should be
+ used as the input list for this method. The output of customDimensionForIndex and
+ customMetricForIndex can be used as suffixes.
+
+ @param list the impression list for this product impression
+ @param index the index of this product in the impression list
+ @param suffix the product impression suffix for this field
+
+ @return an NSString representing this product impression field parameter
+ */
++ (NSString *)productImpressionForList:(NSString *)list
+ index:(NSUInteger)index
+ suffix:(NSString *)Suffix;
+
+/*!
+ Generates an enhanced ecommerce promotion field with an index and suffix.
+
+ @param index the index of the promotion
+ @param suffix the promotion suffix (such as kGAIPromotionId)
+
+ @return an NSString representing this promotion field paramter
+ */
++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h
new file mode 100644
index 00000000..029f7638
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProduct.h
@@ -0,0 +1,102 @@
+/*!
+ @header GAIEcommerceProduct.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct product related information for a Google Analytics beacon. Use this class to
+ * report information about products sold by merchants or impressions of products seen by users.
+ * Instances of this class can be associated with both Product Actions and Product
+ * Impression Lists.
+ * <br>
+ * Typical usage:
+ * <code>
+ * [tracker set:kGAIScreenName value:@"MyScreen"];
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
+ * [product setId:@""PID-1234""];
+ * [product setName:@"Space Monkeys!"];
+ * [product setPrice:@100];
+ * [product setQuantity:@2];
+ * [builder addProductImpression:product impressionList:@"listName"];
+ * [tracker send:[builder build]];
+ * </code>
+ */
+@interface GAIEcommerceProduct : NSObject
+
+/*!
+ Sets the id that is used to identify a product in GA reports.
+ */
+- (GAIEcommerceProduct *)setId:(NSString *)productId;
+
+/*!
+ Sets the name that is used to indentify the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setName:(NSString *)productName;
+
+/*!
+ Sets the brand associated with the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand;
+
+/*!
+ Sets the category associated with the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory;
+
+/*!
+ Sets the variant of the product.
+ */
+- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant;
+
+/*!
+ Sets the price of the product.
+ */
+- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice;
+
+/*!
+ Sets the quantity of the product. This field is usually not used with product impressions.
+ */
+- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity;
+
+/*!
+ Sets the coupon code associated with the product. This field is usually not used with product
+ impressions.
+ */
+- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode;
+
+/*!
+ Sets the position of the product on the screen/product impression list, etc.
+ */
+- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition;
+
+/*!
+ Sets the custom dimension associated with this product.
+ */
+- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value;
+
+/*!
+ Sets the custom metric associated with this product.
+ */
+- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance suitable for a product action. The
+ index parameter is the index of this product in the product action list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithIndex:(NSUInteger)index;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance suitable for an impression list. The
+ lIndex parameter is the index of the product impression list while the index parameter is the
+ index of this product in that impression list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h
new file mode 100644
index 00000000..e3da1c15
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommerceProductAction.h
@@ -0,0 +1,107 @@
+/*!
+ @header GAIProductAction.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct transaction/checkout or other product interaction related information for a
+ * Google Analytics hit. Use this class to report information about products sold, viewed or
+ * refunded. This class is intended to be used with GAIDictionaryBuilder.
+ * <br>
+ * Typical usage:
+ * <code>
+ * [tracker set:kGAIScreenName value:@"MyScreen"];
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init];
+ * [action setAction:kGAIPAPurchase];
+ * [action setTransactionId:@"TT-1234"];
+ * [action setRevenue:@3.14];
+ * [action setCouponCode:@"EXTRA100"];
+ * [builder setProductAction:action];
+ * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
+ * [product setId:@""PID-1234""];
+ * [product setName:@"Space Monkeys!"];
+ * [product setPrice:@100];
+ * [product setQuantity:@2];
+ * [builder addProduct:product];
+ * [tracker send:[builder build]];
+ * </code>
+ */
+@interface GAIEcommerceProductAction : NSObject
+
+/*!
+ Sets the product action field for this product action. Valid values can be found in
+ GAIEcommerceFields.h under "product action values".
+ */
+- (GAIEcommerceProductAction *)setAction:(NSString *)productAction;
+
+/*!
+ The unique id associated with the transaction. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId;
+
+/*!
+ Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation;
+
+/*!
+ Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund
+ product actions.
+ */
+- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue;
+
+/*!
+ Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund
+ product actions.
+ */
+- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax;
+
+/*!
+ Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping;
+
+/*!
+ Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode;
+
+/*!
+ Sets the checkout process's progress. This value is used for kGAICheckout and
+ kGAICheckoutOptions product actions.
+ */
+- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep;
+
+/*!
+ Sets the option associated with the checkout. This value is used for kGAICheckout and
+ kGAICheckoutOptions product actions.
+ */
+- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption;
+
+/*!
+ Sets the list name associated with the products in Google Analytics beacons. This value is
+ used in kGAIPADetail and kGAIPAClick product actions.
+ */
+- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList;
+
+/*!
+ Sets the list source name associated with the products in Google Analytics beacons. This value
+ is used in kGAIPADetail and kGAIPAClick product actions.
+ */
+- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance representing this product action.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)build;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h
new file mode 100644
index 00000000..c7bf25af
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIEcommercePromotion.h
@@ -0,0 +1,54 @@
+/*!
+ @header GAIEcommercePromotion.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct promotion related fields for Google Analytics hits. The fields from this class
+ * can be used to represent internal promotions that run within an app, such as banners, banner ads
+ * etc.
+ *
+ * Typical usage:
+ * <code>
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init];
+ * [promotion setId:@"PROMO-ID1234"];
+ * [promotion setName:@"Home screen banner"];
+ * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction];
+ * [builder addPromotion:promotion];
+ * [tracker send:builder.build]];
+ * </code>
+ */
+@interface GAIEcommercePromotion : NSObject
+
+/*!
+ Sets the id that is used to identify a promotion in GA reports.
+ */
+- (GAIEcommercePromotion *)setId:(NSString *)pid;
+
+/*!
+ Sets the name that is used to identify a promotion in GA reports.
+ */
+- (GAIEcommercePromotion *)setName:(NSString *)name;
+
+/*!
+ Sets the name of the creative associated with the promotion.
+ */
+- (GAIEcommercePromotion *)setCreative:(NSString *)creative;
+
+/*!
+ Sets the position of the promotion.
+ */
+- (GAIEcommercePromotion *)setPosition:(NSString *)position;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance. The index parameter is the
+ index of this promotion in that promotion list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithIndex:(NSUInteger)index;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h
new file mode 100644
index 00000000..e54cef03
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAIFields.h
@@ -0,0 +1,133 @@
+/*!
+ @header GAIFields.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ These fields can be used for the wire format parameter names required by
+ the |GAITracker| get, set and send methods as well as the set methods in the
+ |GAIDictionaryBuilder| class.
+ */
+extern NSString *const kGAIUseSecure;
+
+extern NSString *const kGAIHitType;
+extern NSString *const kGAITrackingId;
+extern NSString *const kGAIClientId;
+extern NSString *const kGAIDataSource;
+extern NSString *const kGAIAnonymizeIp;
+extern NSString *const kGAISessionControl;
+extern NSString *const kGAIDeviceModelVersion;
+extern NSString *const kGAIScreenResolution;
+extern NSString *const kGAIViewportSize;
+extern NSString *const kGAIEncoding;
+extern NSString *const kGAIScreenColors;
+extern NSString *const kGAILanguage;
+extern NSString *const kGAIJavaEnabled;
+extern NSString *const kGAIFlashVersion;
+extern NSString *const kGAINonInteraction;
+extern NSString *const kGAIReferrer;
+extern NSString *const kGAILocation;
+extern NSString *const kGAIHostname;
+extern NSString *const kGAIPage;
+extern NSString *const kGAIDescription; // synonym for kGAIScreenName
+extern NSString *const kGAIScreenName; // synonym for kGAIDescription
+extern NSString *const kGAITitle;
+extern NSString *const kGAIAdMobHitId;
+extern NSString *const kGAIAppName;
+extern NSString *const kGAIAppVersion;
+extern NSString *const kGAIAppId;
+extern NSString *const kGAIAppInstallerId;
+extern NSString *const kGAIUserId;
+
+extern NSString *const kGAIEventCategory;
+extern NSString *const kGAIEventAction;
+extern NSString *const kGAIEventLabel;
+extern NSString *const kGAIEventValue;
+
+extern NSString *const kGAISocialNetwork;
+extern NSString *const kGAISocialAction;
+extern NSString *const kGAISocialTarget;
+
+extern NSString *const kGAITransactionId;
+extern NSString *const kGAITransactionAffiliation;
+extern NSString *const kGAITransactionRevenue;
+extern NSString *const kGAITransactionShipping;
+extern NSString *const kGAITransactionTax;
+extern NSString *const kGAICurrencyCode;
+
+extern NSString *const kGAIItemPrice;
+extern NSString *const kGAIItemQuantity;
+extern NSString *const kGAIItemSku;
+extern NSString *const kGAIItemName;
+extern NSString *const kGAIItemCategory;
+
+extern NSString *const kGAICampaignSource;
+extern NSString *const kGAICampaignMedium;
+extern NSString *const kGAICampaignName;
+extern NSString *const kGAICampaignKeyword;
+extern NSString *const kGAICampaignContent;
+extern NSString *const kGAICampaignId;
+extern NSString *const kGAICampaignAdNetworkClickId;
+extern NSString *const kGAICampaignAdNetworkId;
+
+extern NSString *const kGAITimingCategory;
+extern NSString *const kGAITimingVar;
+extern NSString *const kGAITimingValue;
+extern NSString *const kGAITimingLabel;
+
+extern NSString *const kGAIExDescription;
+extern NSString *const kGAIExFatal;
+
+extern NSString *const kGAISampleRate;
+
+extern NSString *const kGAIIdfa;
+extern NSString *const kGAIAdTargetingEnabled;
+
+// hit types
+extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead.");
+extern NSString *const kGAIScreenView;
+extern NSString *const kGAIEvent;
+extern NSString *const kGAISocial;
+extern NSString *const kGAITransaction;
+extern NSString *const kGAIItem;
+extern NSString *const kGAIException;
+extern NSString *const kGAITiming;
+
+/*!
+ This class provides several fields and methods useful as wire format parameter
+ names. The methods are used for wire format parameter names that are indexed.
+ */
+
+@interface GAIFields : NSObject
+
+/*!
+ Generates the correct parameter name for a content group with an index.
+
+ @param index the index of the content group.
+
+ @return an NSString representing the content group parameter for the index.
+ */
++ (NSString *)contentGroupForIndex:(NSUInteger)index;
+
+/*!
+ Generates the correct parameter name for a custon dimension with an index.
+
+ @param index the index of the custom dimension.
+
+ @return an NSString representing the custom dimension parameter for the index.
+ */
++ (NSString *)customDimensionForIndex:(NSUInteger)index;
+
+/*!
+ Generates the correct parameter name for a custom metric with an index.
+
+ @param index the index of the custom metric.
+
+ @return an NSString representing the custom metric parameter for the index.
+ */
++ (NSString *)customMetricForIndex:(NSUInteger)index;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h
new file mode 100644
index 00000000..06291f2c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAILogger.h
@@ -0,0 +1,49 @@
+/*!
+ @header GAILogger.h
+ @abstract Google Analytics iOS SDK Source
+ @copyright Copyright 2011 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+typedef NS_ENUM(NSUInteger, GAILogLevel) {
+ kGAILogLevelNone = 0,
+ kGAILogLevelError = 1,
+ kGAILogLevelWarning = 2,
+ kGAILogLevelInfo = 3,
+ kGAILogLevelVerbose = 4
+};
+
+/*!
+ Protocol to be used for logging debug and informational messages from the SDK.
+ Implementations of this protocol can be provided to the |GAI| class,
+ to be used as the logger by the SDK. See the |logger| property in GAI.h.
+ */
+@protocol GAILogger<NSObject>
+@required
+
+/*!
+ Only messages of |logLevel| and below are logged.
+ */
+@property (nonatomic, assign) GAILogLevel logLevel;
+
+/*!
+ Logs message with log level |kGAILogLevelVerbose|.
+ */
+- (void)verbose:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelInfo|.
+ */
+- (void)info:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelWarning|.
+ */
+- (void)warning:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelError|.
+ */
+- (void)error:(NSString *)message;
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h
new file mode 100644
index 00000000..de19def0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITrackedViewController.h
@@ -0,0 +1,33 @@
+/*!
+ @header GAITrackedViewController.h
+ @abstract Google Analytics for iOS Tracked View Controller Header
+ @copyright Copyright 2012 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@protocol GAITracker;
+
+/*!
+ Extends UIViewController to generate Google Analytics screenview calls
+ whenever the view appears; this is done by overriding the `viewDidAppear:`
+ method. The screen name must be set for any tracking calls to be made.
+
+ By default, this will use [GAI defaultTracker] for tracking calls, but one can
+ override this by setting the tracker property.
+ */
+@interface GAITrackedViewController : UIViewController
+
+/*!
+ The tracker on which view tracking calls are be made, or `nil`, in which case
+ [GAI defaultTracker] will be used.
+ */
+@property(nonatomic, assign) id<GAITracker> tracker;
+/*!
+ The screen name, for purposes of Google Analytics tracking. If this is `nil`,
+ no tracking calls will be made.
+ */
+@property(nonatomic, copy) NSString *screenName;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h
new file mode 100644
index 00000000..fdc5c5df
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/GAITracker.h
@@ -0,0 +1,57 @@
+/*!
+ @header GAITracker.h
+ @abstract Google Analytics iOS SDK Tracker Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+*/
+
+#import <Foundation/Foundation.h>
+
+/*!
+ Google Analytics tracking interface. Obtain instances of this interface from
+ [GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
+ and exceptions. The implementation of this interface is thread-safe, and no
+ calls are expected to block or take a long time. All network and disk activity
+ will take place in the background.
+ */
+@protocol GAITracker<NSObject>
+
+/*!
+ Name of this tracker.
+ */
+@property(nonatomic, readonly) NSString *name;
+
+/*!
+ Allow collection of IDFA and related fields if set to true. Default is false.
+ */
+@property(nonatomic) BOOL allowIDFACollection;
+
+/*!
+ Set a tracking parameter.
+
+ @param parameterName The parameter name.
+
+ @param value The value to set for the parameter. If this is nil, the
+ value for the parameter will be cleared.
+ */
+- (void)set:(NSString *)parameterName
+ value:(NSString *)value;
+
+/*!
+ Get a tracking parameter.
+
+ @param parameterName The parameter name.
+
+ @returns The parameter value, or nil if no value for the given parameter is
+ set.
+ */
+- (NSString *)get:(NSString *)parameterName;
+
+/*!
+ Queue tracking information with the given parameter values.
+
+ @param parameters A map from parameter names to parameter values which will be
+ set just for this piece of tracking information, or nil for none.
+ */
+- (void)send:(NSDictionary *)parameters;
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h
new file mode 100644
index 00000000..dde480ac
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.h
@@ -0,0 +1,34 @@
+//UniversalAnalyticsPlugin.h
+//Created by Daniel Wilson 2013-09-19
+
+#import <Foundation/Foundation.h>
+#import <Cordova/CDV.h>
+#import "GAI.h"
+
+@interface UniversalAnalyticsPlugin : CDVPlugin {
+ bool _trackerStarted;
+ bool _debugMode;
+ NSMutableDictionary *_customDimensions;
+}
+
+- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command;
+- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command;
+- (void) setUserId: (CDVInvokedUrlCommand*)command;
+- (void) setAppVersion: (CDVInvokedUrlCommand*)command;
+- (void) getVar: (CDVInvokedUrlCommand*)command;
+- (void) setVar: (CDVInvokedUrlCommand*)command;
+- (void) dispatch: (CDVInvokedUrlCommand*)command;
+- (void) debugMode: (CDVInvokedUrlCommand*)command;
+- (void) setOptOut: (CDVInvokedUrlCommand*)command;
+- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command;
+- (void) addCustomDimension: (CDVInvokedUrlCommand*)command;
+- (void) trackEvent: (CDVInvokedUrlCommand*)command;
+- (void) trackMetric: (CDVInvokedUrlCommand*)command;
+- (void) trackTiming: (CDVInvokedUrlCommand*)command;
+- (void) trackView: (CDVInvokedUrlCommand*)command;
+- (void) trackException: (CDVInvokedUrlCommand*)command;
+- (void) addTransaction: (CDVInvokedUrlCommand*)command;
+- (void) addTransactionItem: (CDVInvokedUrlCommand*)command;
+
+@end
+
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m
new file mode 100644
index 00000000..12355da6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/UniversalAnalyticsPlugin.m
@@ -0,0 +1,543 @@
+//UniversalAnalyticsPlugin.m
+//Created by Daniel Wilson 2013-09-19
+
+#import "UniversalAnalyticsPlugin.h"
+#import "GAI.h"
+#import "GAIDictionaryBuilder.h"
+#import "GAIFields.h"
+
+@implementation UniversalAnalyticsPlugin
+
+- (void) pluginInitialize
+{
+ _debugMode = false;
+ _trackerStarted = false;
+ _customDimensions = nil;
+}
+
+- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* accountId = [command.arguments objectAtIndex:0];
+ NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1];
+
+ if ([dispatchPeriod isKindOfClass:[NSNumber class]])
+ [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue];
+ else
+ [GAI sharedInstance].dispatchInterval = 30;
+
+ [[GAI sharedInstance] trackerWithTrackingId:accountId];
+
+ _trackerStarted = true;
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ /* NSLog(@"successfully started GAI tracker"); */
+}
+
+- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command
+{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue];
+}
+
+- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker
+{
+ if (_customDimensions) {
+ for (NSString *key in _customDimensions.allKeys) {
+ NSString *value = [_customDimensions objectForKey:key];
+
+ NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
+ f.numberStyle = NSNumberFormatterDecimalStyle;
+ NSNumber *myKey = [f numberFromString:key];
+
+ /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */
+ [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue]
+ value:value];
+ }
+ }
+}
+
+- (void) getVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* result = [tracker get:parameterName];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) setVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* parameter = [command.arguments objectAtIndex:1];
+ [tracker set:parameterName value:parameter];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) dispatch: (CDVInvokedUrlCommand*) command
+{
+ [[GAI sharedInstance] dispatch];
+}
+
+- (void) debugMode: (CDVInvokedUrlCommand*) command
+{
+ _debugMode = true;
+ [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
+}
+
+- (void) setUserId: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* userId = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&uid" value: userId];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* anonymize = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:kGAIAnonymizeIp value:anonymize];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setOptOut: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ bool optout = [[command.arguments objectAtIndex:0] boolValue];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [[GAI sharedInstance] setOptOut:optout];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAppVersion: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* version = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&av" value: version];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ bool enabled = [[command.arguments objectAtIndex:0] boolValue];
+ [[GAI sharedInstance] setTrackUncaughtExceptions:enabled];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) addCustomDimension: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber* key = [command.arguments objectAtIndex:0];
+ NSString* value = [command.arguments objectAtIndex:1];
+
+ if ( ! _customDimensions) {
+ _customDimensions = [[NSMutableDictionary alloc] init];
+ }
+
+ _customDimensions[key.stringValue] = value;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) trackMetric: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber *key = nil;
+ NSString *value = nil;
+
+ if ([command.arguments count] > 0)
+ key = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ value = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value];
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackEvent: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *category = nil;
+ NSString *action = nil;
+ NSString *label = nil;
+ NSNumber *value = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ action = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ label = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ value = [command.arguments objectAtIndex:3];
+
+ bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ GAIDictionaryBuilder *builder = [GAIDictionaryBuilder
+ createEventWithCategory: category //required
+ action: action //required
+ label: label
+ value: value];
+ if(newSession){
+ [builder set:@"start" forKey:kGAISessionControl];
+ }
+ [tracker send:[builder build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+
+ }];
+
+}
+
+- (void) trackException: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *description = nil;
+ NSNumber *fatal = nil;
+
+ if ([command.arguments count] > 0)
+ description = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ fatal = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createExceptionWithDescription: description
+ withFatal: fatal] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackView: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* screenName = [command.arguments objectAtIndex:0];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [self addCustomDimensionsToTracker:tracker];
+
+ NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
+ GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];
+
+ if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) {
+ [[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
+ }
+
+ bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue];
+ if(newSession){
+ [openParams set:@"start" forKey:kGAISessionControl];
+ }
+
+ NSDictionary *hitParamsDict = [openParams build];
+
+ [tracker set:kGAIScreenName value:screenName];
+ [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackTiming: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *category = nil;
+ NSNumber *intervalInMilliseconds = nil;
+ NSString *name = nil;
+ NSString *label = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ intervalInMilliseconds = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ name = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ label = [command.arguments objectAtIndex:3];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createTimingWithCategory: category //required
+ interval: intervalInMilliseconds //required
+ name: name
+ label: label] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) addTransaction: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *transactionId = nil;
+ NSString *affiliation = nil;
+ NSNumber *revenue = nil;
+ NSNumber *tax = nil;
+ NSNumber *shipping = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ affiliation = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ revenue = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ tax = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ shipping = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ currencyCode = [command.arguments objectAtIndex:5];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID
+ affiliation:affiliation // (NSString) Affiliation
+ revenue:revenue // (NSNumber) Order revenue (including tax and shipping)
+ tax:tax // (NSNumber) Tax
+ shipping:shipping // (NSNumber) Shipping
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+
+
+- (void) addTransactionItem: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+
+ CDVPluginResult* pluginResult = nil;
+ NSString *transactionId = nil;
+ NSString *name = nil;
+ NSString *sku = nil;
+ NSString *category = nil;
+ NSNumber *price = nil;
+ NSNumber *quantity = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ name = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ sku = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ category = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ price = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ quantity = [command.arguments objectAtIndex:5];
+
+ if ([command.arguments count] > 6)
+ currencyCode = [command.arguments objectAtIndex:6];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID
+ name:name // (NSString) Product Name
+ sku:sku // (NSString) Product SKU
+ category:category // (NSString) Product category
+ price:price // (NSNumber) Product price
+ quantity:quantity // (NSNumber) Product quantity
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a
new file mode 100644
index 00000000..9813beaf
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libAdIdAccess.a
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a
new file mode 100644
index 00000000..45ca87e8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Stone Island/Plugins/cordova-plugin-google-analytics/libGoogleAnalyticsServices.a
Binary files differ
diff --git a/StoneIsland/platforms/ios/Stone Island/config.xml b/StoneIsland/platforms/ios/Stone Island/config.xml
index 19f7b057..89ade77f 100755
--- a/StoneIsland/platforms/ios/Stone Island/config.xml
+++ b/StoneIsland/platforms/ios/Stone Island/config.xml
@@ -86,4 +86,7 @@
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="AutoHideSplashScreen" value="false" />
+ <feature name="UniversalAnalytics">
+ <param name="ios-package" value="UniversalAnalyticsPlugin" />
+ </feature>
</widget>
diff --git a/StoneIsland/platforms/ios/frameworks.json b/StoneIsland/platforms/ios/frameworks.json
index 6cb97880..dc881b1d 100644
--- a/StoneIsland/platforms/ios/frameworks.json
+++ b/StoneIsland/platforms/ios/frameworks.json
@@ -2,10 +2,14 @@
"AudioToolbox.framework": 1,
"CoreLocation.framework": 1,
"Social.framework": 1,
- "SystemConfiguration.framework": 1,
+ "SystemConfiguration.framework": 2,
"CoreTelephony.framework": 1,
"MessageUI.framework": 1,
"AddressBook.framework": 1,
"libsqlite3.tbd": 1,
- "libz.tbd": 1
+ "libz.tbd": 1,
+ "CoreData.framework": 1,
+ "AdSupport.framework": 1,
+ "libz.dylib": 1,
+ "libsqlite3.dylib": 1
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/ios.json b/StoneIsland/platforms/ios/ios.json
index 0a8ab85c..800f8e02 100644
--- a/StoneIsland/platforms/ios/ios.json
+++ b/StoneIsland/platforms/ios/ios.json
@@ -47,6 +47,10 @@
{
"xml": "<feature name=\"PushNotification\"><param name=\"ios-package\" value=\"PushPlugin\" /></feature>",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"UniversalAnalytics\"><param name=\"ios-package\" value=\"UniversalAnalyticsPlugin\" /></feature>",
+ "count": 1
}
]
}
@@ -148,6 +152,9 @@
"phonegap-plugin-push": {
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
+ },
+ "cordova-plugin-google-analytics": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {},
@@ -282,6 +289,15 @@
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
],
"plugin_metadata": {
@@ -297,6 +313,7 @@
"cordova-plugin-whitelist": "1.3.0",
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
}
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
index 4c67a219..878291ea 100644
--- a/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/platform_www/cordova_plugins.js
@@ -130,6 +130,15 @@ module.exports = [
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
];
module.exports.metadata =
@@ -147,7 +156,8 @@ module.exports.metadata =
"cordova-plugin-whitelist": "1.3.0",
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
new file mode 100644
index 00000000..b46b19ea
--- /dev/null
+++ b/StoneIsland/platforms/ios/platform_www/plugins/cordova-plugin-google-analytics/www/analytics.js
@@ -0,0 +1,130 @@
+cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
+function UniversalAnalyticsPlugin() {}
+
+UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
+ if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
+ dispatchPeriod = 30;
+ } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
+ // Called without dispatchPeriod but with a callback.
+ // Looks like the original API was used so shift parameters over to remain compatible.
+ error = success;
+ success = dispatchPeriod;
+ dispatchPeriod = 30;
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
+};
+
+UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
+};
+
+UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
+};
+
+/* enables verbose logging */
+UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
+};
+
+UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
+ if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
+ campaignUrl = '';
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
+};
+
+UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
+ if (typeof key !== "number") {
+ throw Error("key must be a valid integer not '" + typeof key + "'");
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+ if (typeof value === 'undefined' || value === null) {
+ value = 0;
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
+};
+
+/**
+ * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
+ */
+UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
+ if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
+ intervalInMilliseconds = 0;
+ }
+ if (typeof name === 'undefined' || name === null) {
+ name = '';
+ }
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
+};
+
+/* Google Analytics e-Commerce Tracking */
+/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
+};
+
+UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
+};
+
+/* automatic uncaught exception tracking */
+UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
+};
+
+module.exports = new UniversalAnalyticsPlugin();
+
+});
diff --git a/StoneIsland/platforms/ios/www/cordova_plugins.js b/StoneIsland/platforms/ios/www/cordova_plugins.js
index 4c67a219..878291ea 100644
--- a/StoneIsland/platforms/ios/www/cordova_plugins.js
+++ b/StoneIsland/platforms/ios/www/cordova_plugins.js
@@ -130,6 +130,15 @@ module.exports = [
"clobbers": [
"PushNotification"
]
+ },
+ {
+ "id": "cordova-plugin-google-analytics.UniversalAnalytics",
+ "file": "plugins/cordova-plugin-google-analytics/www/analytics.js",
+ "pluginId": "cordova-plugin-google-analytics",
+ "clobbers": [
+ "analytics",
+ "ga"
+ ]
}
];
module.exports.metadata =
@@ -147,7 +156,8 @@ module.exports.metadata =
"cordova-plugin-whitelist": "1.3.0",
"cordova-plugin-x-socialsharing": "5.1.3",
"ionic-plugin-keyboard": "2.2.1",
- "phonegap-plugin-push": "1.9.2"
+ "phonegap-plugin-push": "1.9.2",
+ "cordova-plugin-google-analytics": "1.8.3"
};
// BOTTOM OF METADATA
}); \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js
new file mode 100644
index 00000000..b46b19ea
--- /dev/null
+++ b/StoneIsland/platforms/ios/www/plugins/cordova-plugin-google-analytics/www/analytics.js
@@ -0,0 +1,130 @@
+cordova.define("cordova-plugin-google-analytics.UniversalAnalytics", function(require, exports, module) {
+function UniversalAnalyticsPlugin() {}
+
+UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
+ if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
+ dispatchPeriod = 30;
+ } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
+ // Called without dispatchPeriod but with a callback.
+ // Looks like the original API was used so shift parameters over to remain compatible.
+ error = success;
+ success = dispatchPeriod;
+ dispatchPeriod = 30;
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
+};
+
+UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
+};
+
+UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
+};
+
+/* enables verbose logging */
+UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
+};
+
+UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
+ if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
+ campaignUrl = '';
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
+};
+
+UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
+ if (typeof key !== "number") {
+ throw Error("key must be a valid integer not '" + typeof key + "'");
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+ if (typeof value === 'undefined' || value === null) {
+ value = 0;
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
+};
+
+/**
+ * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
+ */
+UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
+ if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
+ intervalInMilliseconds = 0;
+ }
+ if (typeof name === 'undefined' || name === null) {
+ name = '';
+ }
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
+};
+
+/* Google Analytics e-Commerce Tracking */
+/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
+};
+
+UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
+};
+
+/* automatic uncaught exception tracking */
+UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
+};
+
+module.exports = new UniversalAnalyticsPlugin();
+
+});
diff --git a/StoneIsland/plugins/android.json b/StoneIsland/plugins/android.json
index 326cd38e..e3f00921 100755
--- a/StoneIsland/plugins/android.json
+++ b/StoneIsland/plugins/android.json
@@ -47,6 +47,9 @@
"phonegap-plugin-push": {
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
+ },
+ "cordova-plugin-google-analytics": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE b/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE
new file mode 100644
index 00000000..bb1eb977
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 danwilson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/README.md b/StoneIsland/plugins/cordova-plugin-google-analytics/README.md
new file mode 100644
index 00000000..52433004
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/README.md
@@ -0,0 +1,203 @@
+google-analytics-plugin
+=======================
+[![npm](https://img.shields.io/npm/v/cordova-plugin-google-analytics.svg)](https://www.npmjs.com/package/cordova-plugin-google-analytics)
+[![npm](https://img.shields.io/npm/dt/cordova-plugin-google-analytics.svg?label=npm%20downloads)](https://www.npmjs.com/package/cordova-plugin-google-analytics)
+[![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
+
+Cordova (PhoneGap) 3.0+ Plugin to connect to Google's native Universal Analytics SDK
+
+Prerequisites:
+* A Cordova 3.0+ project for iOS, Android, browser (PWA), and/or Windows Phone 8
+* A Mobile App property through the Google Analytics Admin Console
+* (Android) Google Play Services SDK installed via [Android SDK Manager](https://developer.android.com/sdk/installing/adding-packages.html)
+
+# Installing
+
+This plugin follows the Cordova 3.0+ plugin spec, so it can be installed through the Cordova CLI in your existing Cordova project:
+```bash
+cordova plugin add https://github.com/danwilson/google-analytics-plugin.git
+```
+
+This plugin is also available on npm if you are using Cordova 5.0+:
+```bash
+cordova plugin add cordova-plugin-google-analytics
+```
+
+... OR the Cordova Plugin Registry if you are using a version of Cordova before 5.0 (while it remains open, as it is planning to shut down soon due to the move to npm):
+```bash
+cordova plugin add com.danielcwilson.plugins.googleanalytics
+```
+
+*Important Note* If the latest versions (0.8.0+) of this plugin are not working for you with Android on Cordova 5.0+, please try the suggestions in [Issues 123](https://github.com/danwilson/google-analytics-plugin/issues/123#issuecomment-151145095). Google Play Services has been very confusing to integrate, but in recent months it has been simplified. This plugin uses the new simpler way (including it as a framework instead of bundling it which can conflict with other plugins bundling it), but if you previously installed this plugin some old files might still be lingering.
+
+The plugin.xml file will add the Google Analytics SDK files for Android, iOS, browser (PWA) and/or Windows Phone 8. Follow [Google's steps](#sdk-files) if you need to update these later. Also make sure to review the Google Analytics [terms](http://www.google.com/analytics/terms/us.html) and [SDK Policy](https://developers.google.com/analytics/devguides/collection/protocol/policy)
+
+If you are not using the CLI, follow the steps in the section [Installing Without the CLI](#nocli)
+
+Windows Phone users have to manually add the [Google Analytics SDK for Windows 8 and Windows Phone](https://googleanalyticssdk.codeplex.com/) to your solution. To do this, just open your Cordova solution in Visual Studio, and add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK). This plugin requires v1.3.0 or higher.
+
+# Release note
+
+v1.0.0 -- api change from ```window.analytics``` to ```window.ga```, 'analytics' is deprecated since 1.0.0 and you should use the new api 'ga',
+because in the next release we are removing the analytics.
+
+v1.7.x -- since this version there are new parameters in some of the old methods like `startTrackerWithId('UA-XXXX-YY', 30)`
+and this is causing errors for those who are using the ionic 2(ionic-native) or ionic 1 (ngCordova);
+these wrapper interfaces don't have the new parameters at the time we did the changes; so please update you ionic framework to the lastest version.
+
+v1.7.11 -- since this version there is back compatibility with the new and old parameters in the method `startTrackerWithId('UA-XXXX-YY', 30)` to avoid loading issues reported.
+
+
+# JavaScript Usage
+
+**All the following methods accept optional success and error callbacks after all other available parameters.**
+
+In your 'deviceready' handler, set up your Analytics tracker:
+* `window.ga.startTrackerWithId('UA-XXXX-YY', 30)` where UA-XXXX-YY is your Google Analytics Mobile App property and 30 is the dispatch period (optional)
+
+To track a Screen (PageView):
+* `window.ga.trackView('Screen Title')`
+
+To track a Screen (PageView) w/ campaign details:
+* `window.ga.trackView('Screen Title', 'my-scheme://content/1111?utm_source=google&utm_campaign=my-campaign')`
+
+To track a Screen (PageView) and create a new session:
+* `window.ga.trackView('Screen Title', '', true)`
+
+To track an Event:
+* `window.ga.trackEvent('Category', 'Action', 'Label', Value)` Label and Value are optional, Value is numeric
+
+To track an Event and create a new session:
+* `window.ga.trackEvent('Category', 'Action', 'Label', Value, true)` Label, Value and newSession are optional, Value is numeric, newSession is true/false
+
+To track custom metrics:
+* `window.ga.trackMetric('key', Value)` Value is optional
+
+To track an Exception:
+* `window.ga.trackException('Description', Fatal)` where Fatal is boolean
+
+To track User Timing (App Speed):
+* `window.ga.trackTiming('Category', IntervalInMilliseconds, 'Variable', 'Label')` where IntervalInMilliseconds is numeric
+
+To add a Transaction (Ecommerce)
+* `window.ga.addTransaction('ID', 'Affiliation', Revenue, Tax, Shipping, 'Currency Code')` where Revenue, Tax, and Shipping are numeric
+
+To add a Transaction Item (Ecommerce)
+* `window.ga.addTransactionItem('ID', 'Name', 'SKU', 'Category', Price, Quantity, 'Currency Code')` where Price and Quantity are numeric
+
+To add a Custom Dimension
+* `window.ga.addCustomDimension('Key', 'Value', success, error)`
+* Key should be integer index of the dimension i.e. send `1` instead of `dimension1` for the first custom dimension you are tracking.
+* e.g. `window.ga.addCustomDimension(1, 'Value', success, error)`
+
+To set a UserId:
+* `window.ga.setUserId('my-user-id')`
+
+To set a specific app version:
+* `window.ga.setAppVersion('1.33.7')`
+
+To get a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters:
+for example to get campaign name:
+* `window.ga.getVar('cn', function(result){ console.log(result);})`
+
+To set a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters:
+for example to set session control:
+* `window.ga.setVar('sc', 'end', function(result){ console.log(result);})`
+
+To manually dispatch any data (this is not implemented in browser platform):
+* `window.ga.dispatch()`
+
+To set a anonymize Ip address:
+* `window.ga.setAnonymizeIp(true)`
+
+To set Opt-out:
+* `window.ga.setOptOut(true)`
+
+To enabling Advertising Features in Google Analytics allows you to take advantage of Remarketing, Demographics & Interests reports, and more:
+* `window.ga.setAllowIDFACollection(true)`
+
+To enable verbose logging:
+* `window.ga.debugMode()`
+
+To enable/disable automatic reporting of uncaught exceptions
+* `window.ga.enableUncaughtExceptionReporting(Enable, success, error)` where Enable is boolean
+
+# Example use ionic 2 (Ionic Native)
+```shell
+npm i --save @ionic-native/google-analytics
+```
+```javascript
+import { GoogleAnalytics } from '@ionic-native/google-analytics';
+import { Platform } from 'ionic-angular';
+
+...
+
+ constructor(private ga: GoogleAnalytics, private platform: Platform) { }
+
+ initializeApp() {
+ this.platform.ready().then(() => {
+ this.ga.startTrackerWithId('UA-00000000-0')
+ .then(() => {
+ console.log('Google analytics is ready now');
+ //the component is ready and you can call any method here
+ this.ga.debugMode();
+ this.ga.setAllowIDFACollection(true);
+ })
+ .catch(e => console.log('Error starting GoogleAnalytics', e));
+ });
+ }
+```
+
+# Installing Without the CLI <a name="nocli"></a>
+
+Copy the files manually into your project and add the following to your config.xml files:
+```xml
+<feature name="UniversalAnalytics">
+ <param name="ios-package" value="UniversalAnalyticsPlugin" />
+</feature>
+```
+```xml
+<feature name="UniversalAnalytics">
+ <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
+</feature>
+```
+```xml
+<feature name="UniversalAnalytics">
+ <param name="wp-package" value="UniversalAnalyticsPlugin" />
+</feature>
+```
+<a name="sdk-files"></a>
+You also will need to manually add the Google Analytics SDK files:
+* Download the Google Analytics SDK 3.0 for [iOS](https://developers.google.com/analytics/devguides/collection/ios/) and/or [Android](https://developers.google.com/analytics/devguides/collection/android/)
+* For iOS, add the downloaded Google Analytics SDK header files and libraries according to the [Getting Started](https://developers.google.com/analytics/devguides/collection/ios/v3) documentation
+* For Android, add `libGoogleAnalyticsServices.jar` to your Cordova Android project's `/libs` directory and build path
+* For Windows Phone, add the [GoogleAnalyticsSDK package via NuGet](http://nuget.org/packages/GoogleAnalyticsSDK)
+
+# Integrating with Lavaca
+
+The `lavaca` directory includes a component that can be added to a <a href="http://getlavaca.com">Lavaca</a> project. It offers a way to use the web `analytics.js` when the app is running in the browser and not packaged as Cordova.
+
+* Copy `AnalyticsService.js` to your Lavaca project (I create a directory under `js/app` called `data`).
+* In your config files (`local.json`, `staging.json`, `production.js`) create properties called `google_analytics_id` (for the Mobile App UA property) and `google_analytics_web_id` (for the Web UA property) and set the appropriate IDs or leave blank as needed.
+* In any file you want to track screen views or events, require AnalyticsService and use the methods provided.
+
+```javascript
+var analyticsService = require('app/data/AnalyticsService');
+
+analyticsService.trackView('Home');
+```
+
+# Browser (PWA)
+
+For browser (PWA), people who want to use the plugin in a website that has already integrated google analytics needs
+to make sure that they remove the google analytics snippet from the head section of the page and change the global `ga`
+object name to something else. The plugin uses `nativeGa` instead. This can be changed by the following code.
+
+```js
+// insert this in your head
+<script>
+window['GoogleAnalyticsObject'] = 'fooGa';
+</script>
+```
+
+The plugin will pick up the new name.
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java b/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java
new file mode 100644
index 00000000..23c20023
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/android/UniversalAnalyticsPlugin.java
@@ -0,0 +1,469 @@
+package com.danielcwilson.plugins.analytics;
+
+import com.google.android.gms.analytics.GoogleAnalytics;
+import com.google.android.gms.analytics.Logger.LogLevel;
+import com.google.android.gms.analytics.HitBuilders;
+import com.google.android.gms.analytics.Tracker;
+
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.CallbackContext;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+public class UniversalAnalyticsPlugin extends CordovaPlugin {
+ public static final String START_TRACKER = "startTrackerWithId";
+ public static final String TRACK_VIEW = "trackView";
+ public static final String TRACK_EVENT = "trackEvent";
+ public static final String TRACK_EXCEPTION = "trackException";
+ public static final String TRACK_TIMING = "trackTiming";
+ public static final String TRACK_METRIC = "trackMetric";
+ public static final String ADD_DIMENSION = "addCustomDimension";
+ public static final String ADD_TRANSACTION = "addTransaction";
+ public static final String ADD_TRANSACTION_ITEM = "addTransactionItem";
+
+ public static final String SET_ALLOW_IDFA_COLLECTION = "setAllowIDFACollection";
+ public static final String SET_USER_ID = "setUserId";
+ public static final String SET_ANONYMIZE_IP = "setAnonymizeIp";
+ public static final String SET_OPT_OUT = "setOptOut";
+ public static final String SET_APP_VERSION = "setAppVersion";
+ public static final String GET_VAR = "getVar";
+ public static final String SET_VAR = "setVar";
+ public static final String DISPATCH = "dispatch";
+ public static final String DEBUG_MODE = "debugMode";
+ public static final String ENABLE_UNCAUGHT_EXCEPTION_REPORTING = "enableUncaughtExceptionReporting";
+
+ public Boolean trackerStarted = false;
+ public Boolean debugModeEnabled = false;
+ public HashMap<Integer, String> customDimensions = new HashMap<Integer, String>();
+
+ public Tracker tracker;
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
+ if (START_TRACKER.equals(action)) {
+ String id = args.getString(0);
+ int dispatchPeriod = args.length() > 1 ? args.getInt(1) : 30;
+ this.startTracker(id, dispatchPeriod, callbackContext);
+ return true;
+ } else if (TRACK_VIEW.equals(action)) {
+ int length = args.length();
+ String screen = args.getString(0);
+ this.trackView(screen, length > 1 && !args.isNull(1) ? args.getString(1) : "", length > 2 && !args.isNull(2) ? args.getBoolean(2) : false, callbackContext);
+ return true;
+ } else if (TRACK_EVENT.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackEvent(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getString(2) : "",
+ length > 3 ? args.getLong(3) : 0,
+ length > 4 ? args.getBoolean(4) : false,
+ callbackContext);
+ }
+ return true;
+ } else if (TRACK_EXCEPTION.equals(action)) {
+ String description = args.getString(0);
+ Boolean fatal = args.getBoolean(1);
+ this.trackException(description, fatal, callbackContext);
+ return true;
+ } else if (TRACK_TIMING.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackTiming(args.getString(0), length > 1 ? args.getLong(1) : 0, length > 2 ? args.getString(2) : "", length > 3 ? args.getString(3) : "", callbackContext);
+ }
+ return true;
+ } else if (TRACK_METRIC.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.trackMetric(args.getInt(0), length > 1 ? args.getString(1) : "", callbackContext);
+ }
+ return true;
+ } else if (ADD_DIMENSION.equals(action)) {
+ Integer key = args.getInt(0);
+ String value = args.getString(1);
+ this.addCustomDimension(key, value, callbackContext);
+ return true;
+ } else if (ADD_TRANSACTION.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.addTransaction(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getDouble(2) : 0,
+ length > 3 ? args.getDouble(3) : 0,
+ length > 4 ? args.getDouble(4) : 0,
+ length > 5 ? args.getString(5) : null,
+ callbackContext);
+ }
+ return true;
+ } else if (ADD_TRANSACTION_ITEM.equals(action)) {
+ int length = args.length();
+ if (length > 0) {
+ this.addTransactionItem(
+ args.getString(0),
+ length > 1 ? args.getString(1) : "",
+ length > 2 ? args.getString(2) : "",
+ length > 3 ? args.getString(3) : "",
+ length > 4 ? args.getDouble(4) : 0,
+ length > 5 ? args.getLong(5) : 0,
+ length > 6 ? args.getString(6) : null,
+ callbackContext);
+ }
+ return true;
+ } else if (SET_ALLOW_IDFA_COLLECTION.equals(action)) {
+ this.setAllowIDFACollection(args.getBoolean(0), callbackContext);
+ } else if (SET_USER_ID.equals(action)) {
+ String userId = args.getString(0);
+ this.setUserId(userId, callbackContext);
+ } else if (SET_ANONYMIZE_IP.equals(action)) {
+ boolean anonymize = args.getBoolean(0);
+ this.setAnonymizeIp(anonymize, callbackContext);
+ } else if (SET_OPT_OUT.equals(action)) {
+ boolean optout = args.getBoolean(0);
+ this.setOptOut(optout, callbackContext);
+ } else if (SET_APP_VERSION.equals(action)) {
+ String version = args.getString(0);
+ this.setAppVersion(version, callbackContext);
+ } else if (GET_VAR.equals(action)) {
+ String variable = args.getString(0);
+ this.getVar(variable, callbackContext);
+ } else if (SET_VAR.equals(action)) {
+ String variable = args.getString(0);
+ String value = args.getString(1);
+ this.setVar(variable, value, callbackContext);
+ return true;
+ } else if (DISPATCH.equals(action)) {
+ this.dispatch(callbackContext);
+ return true;
+ } else if (DEBUG_MODE.equals(action)) {
+ this.debugMode(callbackContext);
+ } else if (ENABLE_UNCAUGHT_EXCEPTION_REPORTING.equals(action)) {
+ Boolean enable = args.getBoolean(0);
+ this.enableUncaughtExceptionReporting(enable, callbackContext);
+ }
+ return false;
+ }
+
+ private void startTracker(String id, int dispatchPeriod, CallbackContext callbackContext) {
+ if (null != id && id.length() > 0) {
+ tracker = GoogleAnalytics.getInstance(this.cordova.getActivity()).newTracker(id);
+ callbackContext.success("tracker started");
+ trackerStarted = true;
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).setLocalDispatchPeriod(dispatchPeriod);
+ } else {
+ callbackContext.error("tracker id is not valid");
+ }
+ }
+
+ private void addCustomDimension(Integer key, String value, CallbackContext callbackContext) {
+ if (key <= 0) {
+ callbackContext.error("Expected positive integer argument for key.");
+ return;
+ }
+
+ if (null == value || value.length() == 0) {
+ callbackContext.error("Expected non-empty string argument for value.");
+ return;
+ }
+
+ customDimensions.put(key, value);
+ callbackContext.success("custom dimension started");
+ }
+
+ private <T> void addCustomDimensionsToHitBuilder(T builder) {
+ //unfortunately the base HitBuilders.HitBuilder class is not public, therefore have to use reflection to use
+ //the common setCustomDimension (int index, String dimension) method
+ try {
+ Method builderMethod = builder.getClass().getMethod("setCustomDimension", Integer.TYPE, String.class);
+
+ for (Entry<Integer, String> entry : customDimensions.entrySet()) {
+ Integer key = entry.getKey();
+ String value = entry.getValue();
+ try {
+ builderMethod.invoke(builder, (key), value);
+ } catch (IllegalArgumentException e) {
+ } catch (IllegalAccessException e) {
+ } catch (InvocationTargetException e) {
+ }
+ }
+ } catch (SecurityException e) {
+ } catch (NoSuchMethodException e) {
+ }
+ }
+
+ private void trackView(String screenname, String campaignUrl, boolean newSession, CallbackContext callbackContext) {
+ if (! trackerStarted ) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != screenname && screenname.length() > 0) {
+ tracker.setScreenName(screenname);
+
+ HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ if(!campaignUrl.equals("")){
+ hitBuilder.setCampaignParamsFromUrl(campaignUrl);
+ }
+
+ if(!newSession) {
+ tracker.send(hitBuilder.build());
+ } else {
+ tracker.send(hitBuilder.setNewSession().build());
+ }
+
+ callbackContext.success("Track Screen: " + screenname);
+ } else {
+ callbackContext.error("Expected one non-empty string argument.");
+ }
+ }
+
+ private void trackEvent(String category, String action, String label, long value, boolean newSession, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != category && category.length() > 0) {
+ HitBuilders.EventBuilder hitBuilder = new HitBuilders.EventBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ if(!newSession){
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setAction(action)
+ .setLabel(label)
+ .setValue(value)
+ .build());
+ } else {
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setAction(action)
+ .setLabel(label)
+ .setValue(value)
+ .setNewSession()
+ .build());
+ }
+
+ callbackContext.success("Track Event: " + category);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void trackMetric(Integer key, String value, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (key >= 0) {
+ HitBuilders.ScreenViewBuilder hitBuilder = new HitBuilders.ScreenViewBuilder();
+ tracker.send(hitBuilder
+ .setCustomMetric(key, Float.parseFloat(value))
+ .build()
+ );
+ callbackContext.success("Track Metric: " + key + ", value: " + value);
+ } else {
+ callbackContext.error("Expected integer key: " + key + ", and string value: " + value);
+ }
+ }
+
+ private void trackException(String description, Boolean fatal, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != description && description.length() > 0) {
+ HitBuilders.ExceptionBuilder hitBuilder = new HitBuilders.ExceptionBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setDescription(description)
+ .setFatal(fatal)
+ .build()
+ );
+ callbackContext.success("Track Exception: " + description);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void trackTiming(String category, long intervalInMilliseconds, String name, String label, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != category && category.length() > 0) {
+ HitBuilders.TimingBuilder hitBuilder = new HitBuilders.TimingBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setCategory(category)
+ .setValue(intervalInMilliseconds)
+ .setVariable(name)
+ .setLabel(label)
+ .build()
+ );
+ callbackContext.success("Track Timing: " + category);
+ } else {
+ callbackContext.error("Expected non-empty string arguments.");
+ }
+ }
+
+ private void addTransaction(String id, String affiliation, double revenue, double tax, double shipping, String currencyCode, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != id && id.length() > 0) {
+ HitBuilders.TransactionBuilder hitBuilder = new HitBuilders.TransactionBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setTransactionId(id)
+ .setAffiliation(affiliation)
+ .setRevenue(revenue).setTax(tax)
+ .setShipping(shipping)
+ .setCurrencyCode(currencyCode)
+ .build()
+ ); //Deprecated
+ callbackContext.success("Add Transaction: " + id);
+ } else {
+ callbackContext.error("Expected non-empty ID.");
+ }
+ }
+
+ private void addTransactionItem(String id, String name, String sku, String category, double price, long quantity, String currencyCode, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ if (null != id && id.length() > 0) {
+ HitBuilders.ItemBuilder hitBuilder = new HitBuilders.ItemBuilder();
+ addCustomDimensionsToHitBuilder(hitBuilder);
+
+ tracker.send(hitBuilder
+ .setTransactionId(id)
+ .setName(name)
+ .setSku(sku)
+ .setCategory(category)
+ .setPrice(price)
+ .setQuantity(quantity)
+ .setCurrencyCode(currencyCode)
+ .build()
+ ); //Deprecated
+ callbackContext.success("Add Transaction Item: " + id);
+ } else {
+ callbackContext.error("Expected non-empty ID.");
+ }
+ }
+
+ private void setAllowIDFACollection(Boolean enable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.enableAdvertisingIdCollection(enable);
+ callbackContext.success("Enable Advertising Id Collection: " + enable);
+ }
+
+ private void setVar(String variable, String value, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set(variable, value);
+ callbackContext.success("Set variable " + variable + "to " + value);
+ }
+ private void dispatch(CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).dispatchLocalHits();
+ callbackContext.success("dispatch sent");
+ }
+
+ private void getVar(String variable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ String result = tracker.get(variable);
+ callbackContext.success(result);
+ }
+
+ private void debugMode(CallbackContext callbackContext) {
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).getLogger().setLogLevel(LogLevel.VERBOSE);
+
+ this.debugModeEnabled = true;
+ callbackContext.success("debugMode enabled");
+ }
+
+ private void setAnonymizeIp(boolean anonymize, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.setAnonymizeIp(anonymize);
+ callbackContext.success("Set AnonymizeIp " + anonymize);
+ }
+
+ private void setOptOut(boolean optout, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ GoogleAnalytics.getInstance(this.cordova.getActivity()).setAppOptOut(optout);
+ callbackContext.success("Set Opt-Out " + optout);
+ }
+
+ private void setUserId(String userId, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set("&uid", userId);
+ callbackContext.success("Set user id" + userId);
+ }
+
+ private void setAppVersion(String version, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.set("&av", version);
+ callbackContext.success("Set app version: " + version);
+ }
+
+ private void enableUncaughtExceptionReporting(Boolean enable, CallbackContext callbackContext) {
+ if (!trackerStarted) {
+ callbackContext.error("Tracker not started");
+ return;
+ }
+
+ tracker.enableExceptionReporting(enable);
+ callbackContext.success((enable ? "Enabled" : "Disabled") + " uncaught exception reporting");
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js b/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js
new file mode 100644
index 00000000..a42eee39
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/browser/UniversalAnalyticsProxy.js
@@ -0,0 +1,253 @@
+function UniversalAnalyticsProxy() {
+ this._isDebug = false;
+ this._isEcommerceRequired = false;
+ this._trackingId = null;
+
+ var namespace = window.GoogleAnalyticsObject || 'nativeGa';
+ loadGoogleAnalytics.call(this, namespace);
+
+ bindAll(this, [
+ '_ensureEcommerce',
+ '_uncaughtExceptionHandler',
+ 'addCustomDimension',
+ 'addTransaction',
+ 'addTransactionItem',
+ 'debugMode',
+ 'enableUncaughtExceptionReporting',
+ 'setAllowIDFACollection',
+ 'setAnonymizeIp',
+ 'setAppVersion',
+ 'setOptOut',
+ 'setUserId',
+ 'getVar',
+ 'setVar',
+ 'startTrackerWithId',
+ 'trackEvent',
+ 'trackException',
+ 'trackMetric',
+ 'trackTiming',
+ 'trackView'
+ ]);
+}
+
+UniversalAnalyticsProxy.prototype = {
+ startTrackerWithId: wrap(function (trackingId) {
+ this._trackingId = trackingId;
+
+ this._ga('create', {
+ trackingId: trackingId,
+ cookieDomain: 'auto'
+ });
+ this._ga('set', 'appName', document.title);
+ }),
+
+ setUserId: wrap(function (userId) {
+ this._ga('set', 'userId', userId);
+ }),
+
+ setAnonymizeIp: wrap(function (anonymize) {
+ this._ga('set', 'anonymizeIp', anonymize);
+ }),
+
+ setOptOut: wrap(function (optout) {
+ if (!this._trackingId) {
+ throw new Error('TrackingId not available');
+ }
+ window['ga-disable-' + this._trackingId] = optout;
+ }),
+
+ setAppVersion: wrap(function (version) {
+ this._ga('set', 'appVersion', version);
+ }),
+
+ setAllowIDFACollection: wrap(function (enable) {
+ // Not supported by browser platofrm
+ }),
+
+ getVar: function (param, success, error) {
+ this._ga(function(tracker){
+ success(tracker.get(param));
+ });
+ },
+
+ setVar: wrap(function(param, value){
+ this._ga('set', param, value);
+ }),
+
+ debugMode: wrap(function () {
+ this._isDebug = true;
+ }),
+
+ addCustomDimension: wrap(function (key, value) {
+ this._ga('set', 'dimension' + key, value);
+ }),
+
+ trackMetric: wrap(function (key, value) {
+ this._ga('set', 'metric' + key, value);
+ }),
+
+ trackEvent: send(function (category, action, label, value, newSession) {
+ return {
+ hitType: 'event',
+ eventCategory: category,
+ eventAction: action,
+ eventLabel: label,
+ eventValue: value
+ };
+ }),
+
+ trackView: send(function (screen) {
+ return {
+ hitType: 'screenview',
+ screenName: screen
+ };
+ }),
+
+ trackException: send(function (description, fatal) {
+ return {
+ hitType: 'exception',
+ exDescription: description,
+ exFatal: fatal
+ };
+ }),
+
+ trackTiming: send(function (category, intervalInMilliseconds, name, label) {
+ return {
+ hitType: 'timing',
+ timingCategory: category,
+ timingVar: name,
+ timingValue: intervalInMilliseconds,
+ timingLabel: label
+ };
+ }),
+
+ addTransaction: wrap(function (transactionId, affiliation, revenue, tax, shipping, currencyCode) {
+ this._ensureEcommerce();
+ this._ga('ecommerce:addTransaction', {
+ id: transactionId,
+ affiliation: affiliation,
+ revenue: String(revenue),
+ shipping: String(shipping),
+ tax: String(tax),
+ currency: currencyCode
+ });
+ }),
+
+ addTransactionItem: wrap(function (transactionId, name, sku, category, price, quantity, currencyCode) {
+ this._ensureEcommerce();
+ this._ga('ecommerce:addItem', {
+ id: transactionId,
+ name: name,
+ sku: sku,
+ category: category,
+ price: String(price),
+ quantity: String(quantity),
+ currency: currencyCode
+ });
+ }),
+
+ enableUncaughtExceptionReporting: wrap(function (enable) {
+ if (enable) {
+ window.addEventListener('error', this._uncaughtExceptionHandler);
+ } else {
+ window.removeEventListener('error', this._uncaughtExceptionHandler);
+ }
+ }),
+
+ _ga: function () {
+ var args = Array.prototype.slice.call(arguments);
+ if (this._isDebug) {
+ console.debug('UniversalAnalyticsProxy', args);
+ }
+ this._nativeGa.apply(this._nativeGa, args);
+ },
+
+ _uncaughtExceptionHandler: function (err) {
+ this._ga('send', {
+ hitType: 'exception',
+ exDescription: err.message,
+ exFatal: true
+ });
+ },
+
+ _ensureEcommerce: function() {
+ if (this._isEcommerceRequired) return;
+ this._ga('require', 'ecommerce');
+ this._isEcommerceRequired = true;
+ }
+};
+
+function send(fn) {
+ return function (success, error, args) {
+ var command = fn.apply(this, args);
+ var timeout = setTimeout(function () {
+ error(new Error('send timeout'));
+ }, 3000);
+
+ command.hitCallback = function hitCallback(result) {
+ clearTimeout(timeout);
+ success(result);
+ };
+
+ try {
+ this._ga('send', command);
+ } catch (err) {
+ clearTimeout(timeout);
+ defer(error, err);
+ }
+ };
+}
+
+function bindAll(that, names) {
+ names.forEach(function(name) {
+ if (typeof that[name] === 'function') {
+ that[name] = that[name].bind(that);
+ }
+ });
+}
+
+/**
+ * Proceed to the asynchronous loading of Google's analytics.js.
+ * Initialize `this._nativeGa` once the script is loaded, using
+ * the `onload` callback of the `script` DOM node.
+ *
+ * @param {string} name Reference (global namespace) of the GA object.
+ */
+function loadGoogleAnalytics(name) {
+ window.GoogleAnalyticsObject = name;
+
+ window[name] = window[name] || function () {
+ (window[name].q = window[name].q || []).push(arguments);
+ };
+ window[name].l = 1 * new Date();
+ this._nativeGa = window[name];
+
+ var script = document.createElement('script');
+ var scripts = document.getElementsByTagName('script')[0];
+ script.src = 'https://www.google-analytics.com/analytics.js';
+ script.async = 1;
+ scripts.parentNode.insertBefore(script, scripts);
+
+ // analytics.js creates a new object once initialized, update our reference
+ script.onload = (function() { this._nativeGa = window[name]; }).bind(this);
+}
+
+function wrap(fn) {
+ return function (success, error, args) {
+ try {
+ fn.apply(this, args);
+ setTimeout(success, 0);
+ } catch (err) {
+ defer(error, err);
+ }
+ };
+}
+
+function defer(fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ setTimeout(function () {
+ fn.apply(null, args);
+ }, 0);
+}
+
+require('cordova/exec/proxy').add('UniversalAnalytics', new UniversalAnalyticsProxy());
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h
new file mode 100644
index 00000000..7f3f7029
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAI.h
@@ -0,0 +1,192 @@
+/*!
+ @header GAI.h
+ @abstract Google Analytics iOS SDK Header
+ @version 3.14
+ @copyright Copyright 2015 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "GAILogger.h"
+#import "GAITrackedViewController.h"
+#import "GAITracker.h"
+
+typedef NS_ENUM(NSUInteger, GAIDispatchResult) {
+ kGAIDispatchNoData,
+ kGAIDispatchGood,
+ kGAIDispatchError
+};
+
+/*! Google Analytics product string. */
+extern NSString *const kGAIProduct;
+
+/*! Google Analytics version string. */
+extern NSString *const kGAIVersion;
+
+/*!
+ NSError objects returned by the Google Analytics SDK may have this error domain
+ to indicate that the error originated in the Google Analytics SDK.
+ */
+extern NSString *const kGAIErrorDomain;
+
+/*! Google Analytics error codes. */
+typedef enum {
+ // This error code indicates that there was no error. Never used.
+ kGAINoError = 0,
+
+ // This error code indicates that there was a database-related error.
+ kGAIDatabaseError,
+
+ // This error code indicates that there was a network-related error.
+ kGAINetworkError,
+} GAIErrorCode;
+
+/*!
+ Google Analytics iOS top-level class. Provides facilities to create trackers
+ and set behaviorial flags.
+ */
+@interface GAI : NSObject
+
+/*!
+ For convenience, this class exposes a default tracker instance.
+ This is initialized to `nil` and will be set to the first tracker that is
+ instantiated in trackerWithTrackingId:. It may be overridden as desired.
+
+ The GAITrackedViewController class will, by default, use this tracker instance.
+ */
+@property(nonatomic, assign) id<GAITracker> defaultTracker;
+
+/*!
+ The GAILogger to use.
+ */
+@property(nonatomic, retain) id<GAILogger> logger;
+
+/*!
+ When this is true, no tracking information will be gathered; tracking calls
+ will effectively become no-ops. When set to true, all tracking information that
+ has not yet been submitted. The value of this flag will be persisted
+ automatically by the SDK. Developers can optionally use this flag to implement
+ an opt-out setting in the app to allows users to opt out of Google Analytics
+ tracking.
+
+ This is set to `NO` the first time the Google Analytics SDK is used on a
+ device, and is persisted thereafter.
+ */
+@property(nonatomic, assign) BOOL optOut;
+
+/*!
+ If this value is positive, tracking information will be automatically
+ dispatched every dispatchInterval seconds. Otherwise, tracking information must
+ be sent manually by calling dispatch.
+
+ By default, this is set to `120`, which indicates tracking information should
+ be dispatched automatically every 120 seconds.
+ */
+@property(nonatomic, assign) NSTimeInterval dispatchInterval;
+
+/*!
+ When set to true, the SDK will record the currently registered uncaught
+ exception handler, and then register an uncaught exception handler which tracks
+ the exceptions that occurred using defaultTracker. If defaultTracker is not
+ `nil`, this function will track the exception on the tracker and attempt to
+ dispatch any outstanding tracking information for 5 seconds. It will then call
+ the previously registered exception handler, if any. When set back to false,
+ the previously registered uncaught exception handler will be restored.
+ */
+@property(nonatomic, assign) BOOL trackUncaughtExceptions;
+
+/*!
+ When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
+ */
+@property(nonatomic, assign) BOOL dryRun;
+
+/*! Get the shared instance of the Google Analytics for iOS class. */
++ (GAI *)sharedInstance;
+
+/*!
+ Creates or retrieves a GAITracker implementation with the specified name and
+ tracking ID. If the tracker for the specified name does not already exist, then
+ it will be created and returned; otherwise, the existing tracker will be
+ returned. If the existing tracker for the respective name has a different
+ tracking ID, that tracking ID is not changed by this method. If defaultTracker
+ is not set, it will be set to the tracker instance returned here.
+
+ @param name The name of this tracker. Must not be `nil` or empty.
+
+ @param trackingId The tracking ID to use for this tracker. It should be of
+ the form `UA-xxxxx-y`.
+
+ @return A GAITracker associated with the specified name. The tracker
+ can be used to send tracking data to Google Analytics. The first time this
+ method is called with a particular name, the tracker for that name will be
+ returned, and subsequent calls with the same name will return the same
+ instance. It is not necessary to retain the tracker because the tracker will be
+ retained internally by the library.
+
+ If an error occurs or the name is not valid, this method will return
+ `nil`.
+ */
+- (id<GAITracker>)trackerWithName:(NSString *)name
+ trackingId:(NSString *)trackingId;
+
+/*!
+ Creates or retrieves a GAITracker implementation with name equal to
+ the specified tracking ID. If the tracker for the respective name does not
+ already exist, it is created, has it's tracking ID set to |trackingId|,
+ and is returned; otherwise, the existing tracker is returned. If the existing
+ tracker for the respective name has a different tracking ID, that tracking ID
+ is not changed by this method. If defaultTracker is not set, it is set to the
+ tracker instance returned here.
+
+ @param trackingId The tracking ID to use for this tracker. It should be of
+ the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
+
+ @return A GAITracker associated with the specified trackingID. The tracker
+ can be used to send tracking data to Google Analytics. The first time this
+ method is called with a particular trackingID, the tracker for the respective
+ name will be returned, and subsequent calls with the same trackingID
+ will return the same instance. It is not necessary to retain the tracker
+ because the tracker will be retained internally by the library.
+
+ If an error occurs or the trackingId is not valid, this method will return
+ `nil`.
+ */
+- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
+
+/*!
+ Remove a tracker from the trackers dictionary. If it is the default tracker,
+ clears the default tracker as well.
+
+ @param name The name of the tracker.
+ */
+- (void)removeTrackerByName:(NSString *)name;
+
+/*!
+ Dispatches any pending tracking information.
+
+ Note that this does not have any effect on dispatchInterval, and can be used in
+ conjunction with periodic dispatch. */
+- (void)dispatch;
+
+/*!
+ Dispatches the next tracking beacon in the queue, calling completionHandler when
+ the tracking beacon has either been sent (returning kGAIDispatchGood) or an error has resulted
+ (returning kGAIDispatchError). If there is no network connection or there is no data to send,
+ kGAIDispatchNoData is returned.
+
+ Note that calling this method with a non-nil completionHandler disables periodic dispatch.
+ Periodic dispatch can be reenabled by setting the dispatchInterval to a positive number when
+ the app resumes from the background.
+
+ Calling this method with a nil completionHandler is the same as calling the dispatch
+ above.
+
+ This method can be used for background data fetching in iOS 7.0 or later. It would be wise to
+ call this when the application is exiting to initiate the submission of any unsubmitted
+ tracking information.
+
+ @param completionHandler The block to run after a single dispatch request. The GAIDispatchResult
+ param indicates whether the dispatch succeeded, had an error, or had no hits to dispatch.
+ */
+- (void)dispatchWithCompletionHandler:(void (^)(GAIDispatchResult result))completionHandler;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h
new file mode 100644
index 00000000..b8c5fdab
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIDictionaryBuilder.h
@@ -0,0 +1,217 @@
+/*!
+ @header GAIDictionaryBuilder.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "GAIEcommerceProduct.h"
+#import "GAIEcommerceProductAction.h"
+#import "GAIEcommercePromotion.h"
+
+/*!
+ * Helper class to build a dictionary of hit parameters and values.
+ * <br>
+ * Examples:
+ * <code>
+ * id<GAITracker> t = // get a tracker.
+ * [t send:[[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
+ * action:@"EventAction"
+ * label:nil
+ * value:nil]
+ * set:@"dimension1" forKey:[GAIFields customDimensionForIndex:1]] build]];
+ * </code>
+ * This will send an event hit type with the specified parameters
+ * and a custom dimension parameter.
+ * <br>
+ * If you want to send a parameter with all hits, set it on GAITracker directly.
+ * <code>
+ * [t set:kGAIScreenName value:@"Home"];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"PlusOne"
+ * target:@"SOME_URL"] build]];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"Share"
+ * target:@"SOME_POST"] build]];
+ * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
+ * action:@"HangOut"
+ * target:@"SOME_CIRCLE"]
+ * build]];
+ * </code>
+ * You can override a value set on the tracker by adding it to the dictionary.
+ * <code>
+ * [t set:kGAIScreenName value:@"Home"];
+ * [t send:...];
+ * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
+ * action:@"popup"
+ * label:nil
+ * value:nil]
+ * set:@"popup title" forKey:kGAIScreenName] build]];
+ * </code>
+ * The values set via [GAIDictionaryBuilder set] or
+ * [GAIDictionaryBuilder setAll] will override any existing values in the
+ * GAIDictionaryBuilder object (i.e. initialized by
+ * [GAIDictionaryBuilder createXYZ]). e.g.
+ * <code>
+ * GAIDictionaryBuilder *m =
+ * GAIDictionaryBuilder createTimingWithCategory:@"category"
+ * interval:@0
+ * name:@"name"
+ * label:nil];
+ * [t send:[m.set:@"10" forKey:kGAITimingVar] build];
+ * [t send:[m.set:@"20" forKey:kGAITimingVar] build];
+ * </code>
+ */
+@interface GAIDictionaryBuilder : NSObject
+
+- (GAIDictionaryBuilder *)set:(NSString *)value
+ forKey:(NSString *)key;
+
+/*!
+ * Copies all the name-value pairs from params into this object, ignoring any
+ * keys that are not NSString and any values that are neither NSString or
+ * NSNull.
+ */
+- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
+
+/*!
+ * Returns the value for the input parameter paramName, or nil if paramName
+ * is not present.
+ */
+- (NSString *)get:(NSString *)paramName;
+
+/*!
+ * Return an NSMutableDictionary object with all the parameters set in this
+ */
+- (NSMutableDictionary *)build;
+
+/*!
+ * Parses and translates utm campaign parameters to analytics campaign param
+ * and returns them as a map.
+ *
+ * @param urlString url containing utm campaign parameters.
+ *
+ * Valid campaign parameters are:
+ * <ul>
+ * <li>utm_id</li>
+ * <li>utm_campaign</li>
+ * <li>utm_content</li>
+ * <li>utm_medium</li>
+ * <li>utm_source</li>
+ * <li>utm_term</li>
+ * <li>dclid</li>
+ * <li>gclid</li>
+ * <li>gmob_t</li>
+ * <li>aclid</li>
+ * <li>anid</li>
+ * </ul>
+ * <p>
+ * Example:
+ * http://my.site.com/index.html?utm_campaign=wow&utm_source=source
+ * utm_campaign=wow&utm_source=source.
+ * <p>
+ * For more information on auto-tagging, see
+ * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
+ * <p>
+ * For more information on manual tagging, see
+ * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
+ */
+- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an appview
+ hit.
+
+ Note that using this method will not set the screen name for followon hits. To
+ do that you need to call set:kGAIDescription value:<screenName> on the
+ GAITracker instance.
+
+ This method is deprecated. Use createScreenView instead.
+ */
++ (GAIDictionaryBuilder *)createAppView DEPRECATED_MSG_ATTRIBUTE("Use createScreenView instead.");
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a screenview
+ hit.
+
+ Note that using this method will not set the screen name for followon hits. To
+ do that you need to call set:kGAIDescription value:<screenName> on the
+ GAITracker instance.
+ */
++ (GAIDictionaryBuilder *)createScreenView;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
+ */
++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
+ action:(NSString *)action
+ label:(NSString *)label
+ value:(NSNumber *)value;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an exception
+ hit.
+ */
++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
+ withFatal:(NSNumber *)fatal;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
+ */
++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
+ name:(NSString *)name
+ sku:(NSString *)sku
+ category:(NSString *)category
+ price:(NSNumber *)price
+ quantity:(NSNumber *)quantity
+ currencyCode:(NSString *)currencyCode;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
+ */
++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
+ action:(NSString *)action
+ target:(NSString *)target;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
+ */
++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
+ interval:(NSNumber *)intervalMillis
+ name:(NSString *)name
+ label:(NSString *)label;
+
+/*!
+ Returns a GAIDictionaryBuilder object with parameters specific to a transaction
+ hit.
+ */
++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
+ affiliation:(NSString *)affiliation
+ revenue:(NSNumber *)revenue
+ tax:(NSNumber *)tax
+ shipping:(NSNumber *)shipping
+ currencyCode:(NSString *)currencyCode;
+
+/*!
+ Set the product action field for this hit.
+ */
+- (GAIDictionaryBuilder *)setProductAction:(GAIEcommerceProductAction *)productAction;
+
+/*!
+ Adds a product to this hit.
+ */
+- (GAIDictionaryBuilder *)addProduct:(GAIEcommerceProduct *)product;
+
+/*!
+ Add a product impression to this hit.
+ */
+- (GAIDictionaryBuilder *)addProductImpression:(GAIEcommerceProduct *)product
+ impressionList:(NSString *)name
+ impressionSource:(NSString *)source;
+
+/*!
+ Add a promotion to this hit.
+ */
+- (GAIDictionaryBuilder *)addPromotion:(GAIEcommercePromotion *)promotion;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h
new file mode 100644
index 00000000..b3ba60ae
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceFields.h
@@ -0,0 +1,124 @@
+/*!
+ @header GAIEcommerceFields.h
+ @abstract Google Analytics iOS SDK Ecommerce Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ This class provides several fields and methods useful as wire format parameters for
+ Enhanced Ecommerce. See the online developer guides for Enhanced Ecommerce for details
+ on how to use the Enhanced Ecommerce features.
+ */
+
+// Enhanced Ecommerce Product fields
+extern NSString *const kGAIProductId;
+extern NSString *const kGAIProductName;
+extern NSString *const kGAIProductBrand;
+extern NSString *const kGAIProductCategory;
+extern NSString *const kGAIProductVariant;
+extern NSString *const kGAIProductPrice;
+extern NSString *const kGAIProductQuantity;
+extern NSString *const kGAIProductCouponCode;
+extern NSString *const kGAIProductPosition;
+
+extern NSString *const kGAIProductAction;
+
+// product action values
+extern NSString *const kGAIPADetail;
+extern NSString *const kGAIPAClick;
+extern NSString *const kGAIPAAdd;
+extern NSString *const kGAIPARemove;
+extern NSString *const kGAIPACheckout;
+extern NSString *const kGAIPACheckoutOption;
+extern NSString *const kGAIPAPurchase;
+extern NSString *const kGAIPARefund;
+
+// product action fields
+// used for 'purchase' and 'refund' actions
+extern NSString *const kGAIPATransactionId;
+extern NSString *const kGAIPAAffiliation;
+extern NSString *const kGAIPARevenue;
+extern NSString *const kGAIPATax;
+extern NSString *const kGAIPAShipping;
+extern NSString *const kGAIPACouponCode;
+// used for 'checkout' action
+extern NSString *const kGAICheckoutStep;
+extern NSString *const kGAICheckoutOption;
+// used for 'detail' and 'click' actions
+extern NSString *const kGAIProductActionList;
+extern NSString *const kGAIProductListSource;
+
+// Enhanced Ecommerce Impressions fields
+extern NSString *const kGAIImpressionName;
+extern NSString *const kGAIImpressionListSource;
+extern NSString *const kGAIImpressionProduct;
+extern NSString *const kGAIImpressionProductId;
+extern NSString *const kGAIImpressionProductName;
+extern NSString *const kGAIImpressionProductBrand;
+extern NSString *const kGAIImpressionProductCategory;
+extern NSString *const kGAIImpressionProductVariant;
+extern NSString *const kGAIImpressionProductPosition;
+extern NSString *const kGAIImpressionProductPrice;
+
+// Enhanced Ecommerce Promotions fields
+extern NSString *const kGAIPromotionId;
+extern NSString *const kGAIPromotionName;
+extern NSString *const kGAIPromotionCreative;
+extern NSString *const kGAIPromotionPosition;
+
+// Promotion actions
+extern NSString *const kGAIPromotionAction;
+extern NSString *const kGAIPromotionView;
+extern NSString *const kGAIPromotionClick;
+
+@interface GAIEcommerceFields : NSObject
+
+/*!
+ Generates an enhanced ecommerce product field. Note that field names generated by
+ customDimensionForIndex and customMetricForIndex can be used as suffixes.
+
+ @param index the index of the product
+ @param suffix the product field suffix (such as kGAIProductPrice).
+
+ @return an NSString representing the product field parameter
+ */
++ (NSString *)productFieldForIndex:(NSUInteger)index suffix:(NSString *)suffix;
+
+/*!
+ Genrates an enhanced ecommerce impression list field name with an index. The return value of
+ this method should also be used as input to the productImpressionForList method below.
+
+ @param index the index of the impression list
+
+ @return an NSString representing the impression list parameter
+ */
++ (NSString *)impressionListForIndex:(NSUInteger)index;
+
+/*!
+ Generates an enhanced ecommerce product impression field with the impression list, product index
+ and product suffix as parameters. The output of the method impressionListForIndex above should be
+ used as the input list for this method. The output of customDimensionForIndex and
+ customMetricForIndex can be used as suffixes.
+
+ @param list the impression list for this product impression
+ @param index the index of this product in the impression list
+ @param suffix the product impression suffix for this field
+
+ @return an NSString representing this product impression field parameter
+ */
++ (NSString *)productImpressionForList:(NSString *)list
+ index:(NSUInteger)index
+ suffix:(NSString *)Suffix;
+
+/*!
+ Generates an enhanced ecommerce promotion field with an index and suffix.
+
+ @param index the index of the promotion
+ @param suffix the promotion suffix (such as kGAIPromotionId)
+
+ @return an NSString representing this promotion field paramter
+ */
++ (NSString *)promotionForIndex:(NSUInteger)index suffix:(NSString *)suffix;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h
new file mode 100644
index 00000000..029f7638
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProduct.h
@@ -0,0 +1,102 @@
+/*!
+ @header GAIEcommerceProduct.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct product related information for a Google Analytics beacon. Use this class to
+ * report information about products sold by merchants or impressions of products seen by users.
+ * Instances of this class can be associated with both Product Actions and Product
+ * Impression Lists.
+ * <br>
+ * Typical usage:
+ * <code>
+ * [tracker set:kGAIScreenName value:@"MyScreen"];
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
+ * [product setId:@""PID-1234""];
+ * [product setName:@"Space Monkeys!"];
+ * [product setPrice:@100];
+ * [product setQuantity:@2];
+ * [builder addProductImpression:product impressionList:@"listName"];
+ * [tracker send:[builder build]];
+ * </code>
+ */
+@interface GAIEcommerceProduct : NSObject
+
+/*!
+ Sets the id that is used to identify a product in GA reports.
+ */
+- (GAIEcommerceProduct *)setId:(NSString *)productId;
+
+/*!
+ Sets the name that is used to indentify the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setName:(NSString *)productName;
+
+/*!
+ Sets the brand associated with the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setBrand:(NSString *)productBrand;
+
+/*!
+ Sets the category associated with the product in GA reports.
+ */
+- (GAIEcommerceProduct *)setCategory:(NSString *)productCategory;
+
+/*!
+ Sets the variant of the product.
+ */
+- (GAIEcommerceProduct *)setVariant:(NSString *)productVariant;
+
+/*!
+ Sets the price of the product.
+ */
+- (GAIEcommerceProduct *)setPrice:(NSNumber *)productPrice;
+
+/*!
+ Sets the quantity of the product. This field is usually not used with product impressions.
+ */
+- (GAIEcommerceProduct *)setQuantity:(NSNumber *)productQuantity;
+
+/*!
+ Sets the coupon code associated with the product. This field is usually not used with product
+ impressions.
+ */
+- (GAIEcommerceProduct *)setCouponCode:(NSString *)productCouponCode;
+
+/*!
+ Sets the position of the product on the screen/product impression list, etc.
+ */
+- (GAIEcommerceProduct *)setPosition:(NSNumber *)productPosition;
+
+/*!
+ Sets the custom dimension associated with this product.
+ */
+- (GAIEcommerceProduct *)setCustomDimension:(NSUInteger)index value:(NSString *)value;
+
+/*!
+ Sets the custom metric associated with this product.
+ */
+- (GAIEcommerceProduct *)setCustomMetric:(NSUInteger)index value:(NSNumber *)value;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance suitable for a product action. The
+ index parameter is the index of this product in the product action list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithIndex:(NSUInteger)index;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance suitable for an impression list. The
+ lIndex parameter is the index of the product impression list while the index parameter is the
+ index of this product in that impression list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithListIndex:(NSUInteger)lIndex index:(NSUInteger)index;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h
new file mode 100644
index 00000000..e3da1c15
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommerceProductAction.h
@@ -0,0 +1,107 @@
+/*!
+ @header GAIProductAction.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct transaction/checkout or other product interaction related information for a
+ * Google Analytics hit. Use this class to report information about products sold, viewed or
+ * refunded. This class is intended to be used with GAIDictionaryBuilder.
+ * <br>
+ * Typical usage:
+ * <code>
+ * [tracker set:kGAIScreenName value:@"MyScreen"];
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommerceProductAction *action = [[GAIEcommerceProductAction alloc] init];
+ * [action setAction:kGAIPAPurchase];
+ * [action setTransactionId:@"TT-1234"];
+ * [action setRevenue:@3.14];
+ * [action setCouponCode:@"EXTRA100"];
+ * [builder setProductAction:action];
+ * GAIEcommerceProduct *product = [[GAIEcommerceProduct alloc] init];
+ * [product setId:@""PID-1234""];
+ * [product setName:@"Space Monkeys!"];
+ * [product setPrice:@100];
+ * [product setQuantity:@2];
+ * [builder addProduct:product];
+ * [tracker send:[builder build]];
+ * </code>
+ */
+@interface GAIEcommerceProductAction : NSObject
+
+/*!
+ Sets the product action field for this product action. Valid values can be found in
+ GAIEcommerceFields.h under "product action values".
+ */
+- (GAIEcommerceProductAction *)setAction:(NSString *)productAction;
+
+/*!
+ The unique id associated with the transaction. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setTransactionId:(NSString *)transactionId;
+
+/*!
+ Sets the transaction's affiliation value. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setAffiliation:(NSString *)affiliation;
+
+/*!
+ Sets the transaction's total revenue. This value is used for kGAIPAPurchase and kGAIPARefund
+ product actions.
+ */
+- (GAIEcommerceProductAction *)setRevenue:(NSNumber *)revenue;
+
+/*!
+ Sets the transaction's total tax. This value is used for kGAIPAPurchase and kGAIPARefund
+ product actions.
+ */
+- (GAIEcommerceProductAction *)setTax:(NSNumber *)tax;
+
+/*!
+ Sets the transaction's total shipping costs. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setShipping:(NSNumber *)shipping;
+
+/*!
+ Sets the coupon code used in this transaction. This value is used for kGAIPAPurchase and
+ kGAIPARefund product actions.
+ */
+- (GAIEcommerceProductAction *)setCouponCode:(NSString *)couponCode;
+
+/*!
+ Sets the checkout process's progress. This value is used for kGAICheckout and
+ kGAICheckoutOptions product actions.
+ */
+- (GAIEcommerceProductAction *)setCheckoutStep:(NSNumber *)checkoutStep;
+
+/*!
+ Sets the option associated with the checkout. This value is used for kGAICheckout and
+ kGAICheckoutOptions product actions.
+ */
+- (GAIEcommerceProductAction *)setCheckoutOption:(NSString *)checkoutOption;
+
+/*!
+ Sets the list name associated with the products in Google Analytics beacons. This value is
+ used in kGAIPADetail and kGAIPAClick product actions.
+ */
+- (GAIEcommerceProductAction *)setProductActionList:(NSString *)productActionList;
+
+/*!
+ Sets the list source name associated with the products in Google Analytics beacons. This value
+ is used in kGAIPADetail and kGAIPAClick product actions.
+ */
+- (GAIEcommerceProductAction *)setProductListSource:(NSString *)productListSource;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance representing this product action.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)build;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h
new file mode 100644
index 00000000..c7bf25af
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIEcommercePromotion.h
@@ -0,0 +1,54 @@
+/*!
+ @header GAIEcommercePromotion.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2014 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ * Class to construct promotion related fields for Google Analytics hits. The fields from this class
+ * can be used to represent internal promotions that run within an app, such as banners, banner ads
+ * etc.
+ *
+ * Typical usage:
+ * <code>
+ * GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createScreenView];
+ * GAIEcommercePromotion *promotion = [[GAIEcommercePromotion alloc] init];
+ * [promotion setId:@"PROMO-ID1234"];
+ * [promotion setName:@"Home screen banner"];
+ * [builder set:kGAIPromotionClick forKey:kGAIPromotionAction];
+ * [builder addPromotion:promotion];
+ * [tracker send:builder.build]];
+ * </code>
+ */
+@interface GAIEcommercePromotion : NSObject
+
+/*!
+ Sets the id that is used to identify a promotion in GA reports.
+ */
+- (GAIEcommercePromotion *)setId:(NSString *)pid;
+
+/*!
+ Sets the name that is used to identify a promotion in GA reports.
+ */
+- (GAIEcommercePromotion *)setName:(NSString *)name;
+
+/*!
+ Sets the name of the creative associated with the promotion.
+ */
+- (GAIEcommercePromotion *)setCreative:(NSString *)creative;
+
+/*!
+ Sets the position of the promotion.
+ */
+- (GAIEcommercePromotion *)setPosition:(NSString *)position;
+
+/*!
+ Builds an NSDictionary of fields stored in this instance. The index parameter is the
+ index of this promotion in that promotion list.
+ <br>
+ Normally, users will have no need to call this method.
+ */
+- (NSDictionary *)buildWithIndex:(NSUInteger)index;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h
new file mode 100644
index 00000000..e54cef03
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAIFields.h
@@ -0,0 +1,133 @@
+/*!
+ @header GAIFields.h
+ @abstract Google Analytics iOS SDK Hit Format Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+/*!
+ These fields can be used for the wire format parameter names required by
+ the |GAITracker| get, set and send methods as well as the set methods in the
+ |GAIDictionaryBuilder| class.
+ */
+extern NSString *const kGAIUseSecure;
+
+extern NSString *const kGAIHitType;
+extern NSString *const kGAITrackingId;
+extern NSString *const kGAIClientId;
+extern NSString *const kGAIDataSource;
+extern NSString *const kGAIAnonymizeIp;
+extern NSString *const kGAISessionControl;
+extern NSString *const kGAIDeviceModelVersion;
+extern NSString *const kGAIScreenResolution;
+extern NSString *const kGAIViewportSize;
+extern NSString *const kGAIEncoding;
+extern NSString *const kGAIScreenColors;
+extern NSString *const kGAILanguage;
+extern NSString *const kGAIJavaEnabled;
+extern NSString *const kGAIFlashVersion;
+extern NSString *const kGAINonInteraction;
+extern NSString *const kGAIReferrer;
+extern NSString *const kGAILocation;
+extern NSString *const kGAIHostname;
+extern NSString *const kGAIPage;
+extern NSString *const kGAIDescription; // synonym for kGAIScreenName
+extern NSString *const kGAIScreenName; // synonym for kGAIDescription
+extern NSString *const kGAITitle;
+extern NSString *const kGAIAdMobHitId;
+extern NSString *const kGAIAppName;
+extern NSString *const kGAIAppVersion;
+extern NSString *const kGAIAppId;
+extern NSString *const kGAIAppInstallerId;
+extern NSString *const kGAIUserId;
+
+extern NSString *const kGAIEventCategory;
+extern NSString *const kGAIEventAction;
+extern NSString *const kGAIEventLabel;
+extern NSString *const kGAIEventValue;
+
+extern NSString *const kGAISocialNetwork;
+extern NSString *const kGAISocialAction;
+extern NSString *const kGAISocialTarget;
+
+extern NSString *const kGAITransactionId;
+extern NSString *const kGAITransactionAffiliation;
+extern NSString *const kGAITransactionRevenue;
+extern NSString *const kGAITransactionShipping;
+extern NSString *const kGAITransactionTax;
+extern NSString *const kGAICurrencyCode;
+
+extern NSString *const kGAIItemPrice;
+extern NSString *const kGAIItemQuantity;
+extern NSString *const kGAIItemSku;
+extern NSString *const kGAIItemName;
+extern NSString *const kGAIItemCategory;
+
+extern NSString *const kGAICampaignSource;
+extern NSString *const kGAICampaignMedium;
+extern NSString *const kGAICampaignName;
+extern NSString *const kGAICampaignKeyword;
+extern NSString *const kGAICampaignContent;
+extern NSString *const kGAICampaignId;
+extern NSString *const kGAICampaignAdNetworkClickId;
+extern NSString *const kGAICampaignAdNetworkId;
+
+extern NSString *const kGAITimingCategory;
+extern NSString *const kGAITimingVar;
+extern NSString *const kGAITimingValue;
+extern NSString *const kGAITimingLabel;
+
+extern NSString *const kGAIExDescription;
+extern NSString *const kGAIExFatal;
+
+extern NSString *const kGAISampleRate;
+
+extern NSString *const kGAIIdfa;
+extern NSString *const kGAIAdTargetingEnabled;
+
+// hit types
+extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead.");
+extern NSString *const kGAIScreenView;
+extern NSString *const kGAIEvent;
+extern NSString *const kGAISocial;
+extern NSString *const kGAITransaction;
+extern NSString *const kGAIItem;
+extern NSString *const kGAIException;
+extern NSString *const kGAITiming;
+
+/*!
+ This class provides several fields and methods useful as wire format parameter
+ names. The methods are used for wire format parameter names that are indexed.
+ */
+
+@interface GAIFields : NSObject
+
+/*!
+ Generates the correct parameter name for a content group with an index.
+
+ @param index the index of the content group.
+
+ @return an NSString representing the content group parameter for the index.
+ */
++ (NSString *)contentGroupForIndex:(NSUInteger)index;
+
+/*!
+ Generates the correct parameter name for a custon dimension with an index.
+
+ @param index the index of the custom dimension.
+
+ @return an NSString representing the custom dimension parameter for the index.
+ */
++ (NSString *)customDimensionForIndex:(NSUInteger)index;
+
+/*!
+ Generates the correct parameter name for a custom metric with an index.
+
+ @param index the index of the custom metric.
+
+ @return an NSString representing the custom metric parameter for the index.
+ */
++ (NSString *)customMetricForIndex:(NSUInteger)index;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h
new file mode 100644
index 00000000..06291f2c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAILogger.h
@@ -0,0 +1,49 @@
+/*!
+ @header GAILogger.h
+ @abstract Google Analytics iOS SDK Source
+ @copyright Copyright 2011 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+typedef NS_ENUM(NSUInteger, GAILogLevel) {
+ kGAILogLevelNone = 0,
+ kGAILogLevelError = 1,
+ kGAILogLevelWarning = 2,
+ kGAILogLevelInfo = 3,
+ kGAILogLevelVerbose = 4
+};
+
+/*!
+ Protocol to be used for logging debug and informational messages from the SDK.
+ Implementations of this protocol can be provided to the |GAI| class,
+ to be used as the logger by the SDK. See the |logger| property in GAI.h.
+ */
+@protocol GAILogger<NSObject>
+@required
+
+/*!
+ Only messages of |logLevel| and below are logged.
+ */
+@property (nonatomic, assign) GAILogLevel logLevel;
+
+/*!
+ Logs message with log level |kGAILogLevelVerbose|.
+ */
+- (void)verbose:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelInfo|.
+ */
+- (void)info:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelWarning|.
+ */
+- (void)warning:(NSString *)message;
+
+/*!
+ Logs message with log level |kGAILogLevelError|.
+ */
+- (void)error:(NSString *)message;
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h
new file mode 100644
index 00000000..de19def0
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITrackedViewController.h
@@ -0,0 +1,33 @@
+/*!
+ @header GAITrackedViewController.h
+ @abstract Google Analytics for iOS Tracked View Controller Header
+ @copyright Copyright 2012 Google Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@protocol GAITracker;
+
+/*!
+ Extends UIViewController to generate Google Analytics screenview calls
+ whenever the view appears; this is done by overriding the `viewDidAppear:`
+ method. The screen name must be set for any tracking calls to be made.
+
+ By default, this will use [GAI defaultTracker] for tracking calls, but one can
+ override this by setting the tracker property.
+ */
+@interface GAITrackedViewController : UIViewController
+
+/*!
+ The tracker on which view tracking calls are be made, or `nil`, in which case
+ [GAI defaultTracker] will be used.
+ */
+@property(nonatomic, assign) id<GAITracker> tracker;
+/*!
+ The screen name, for purposes of Google Analytics tracking. If this is `nil`,
+ no tracking calls will be made.
+ */
+@property(nonatomic, copy) NSString *screenName;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h
new file mode 100644
index 00000000..fdc5c5df
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/GAITracker.h
@@ -0,0 +1,57 @@
+/*!
+ @header GAITracker.h
+ @abstract Google Analytics iOS SDK Tracker Header
+ @copyright Copyright 2013 Google Inc. All rights reserved.
+*/
+
+#import <Foundation/Foundation.h>
+
+/*!
+ Google Analytics tracking interface. Obtain instances of this interface from
+ [GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
+ and exceptions. The implementation of this interface is thread-safe, and no
+ calls are expected to block or take a long time. All network and disk activity
+ will take place in the background.
+ */
+@protocol GAITracker<NSObject>
+
+/*!
+ Name of this tracker.
+ */
+@property(nonatomic, readonly) NSString *name;
+
+/*!
+ Allow collection of IDFA and related fields if set to true. Default is false.
+ */
+@property(nonatomic) BOOL allowIDFACollection;
+
+/*!
+ Set a tracking parameter.
+
+ @param parameterName The parameter name.
+
+ @param value The value to set for the parameter. If this is nil, the
+ value for the parameter will be cleared.
+ */
+- (void)set:(NSString *)parameterName
+ value:(NSString *)value;
+
+/*!
+ Get a tracking parameter.
+
+ @param parameterName The parameter name.
+
+ @returns The parameter value, or nil if no value for the given parameter is
+ set.
+ */
+- (NSString *)get:(NSString *)parameterName;
+
+/*!
+ Queue tracking information with the given parameter values.
+
+ @param parameters A map from parameter names to parameter values which will be
+ set just for this piece of tracking information, or nil for none.
+ */
+- (void)send:(NSDictionary *)parameters;
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h
new file mode 100644
index 00000000..dde480ac
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.h
@@ -0,0 +1,34 @@
+//UniversalAnalyticsPlugin.h
+//Created by Daniel Wilson 2013-09-19
+
+#import <Foundation/Foundation.h>
+#import <Cordova/CDV.h>
+#import "GAI.h"
+
+@interface UniversalAnalyticsPlugin : CDVPlugin {
+ bool _trackerStarted;
+ bool _debugMode;
+ NSMutableDictionary *_customDimensions;
+}
+
+- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command;
+- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command;
+- (void) setUserId: (CDVInvokedUrlCommand*)command;
+- (void) setAppVersion: (CDVInvokedUrlCommand*)command;
+- (void) getVar: (CDVInvokedUrlCommand*)command;
+- (void) setVar: (CDVInvokedUrlCommand*)command;
+- (void) dispatch: (CDVInvokedUrlCommand*)command;
+- (void) debugMode: (CDVInvokedUrlCommand*)command;
+- (void) setOptOut: (CDVInvokedUrlCommand*)command;
+- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command;
+- (void) addCustomDimension: (CDVInvokedUrlCommand*)command;
+- (void) trackEvent: (CDVInvokedUrlCommand*)command;
+- (void) trackMetric: (CDVInvokedUrlCommand*)command;
+- (void) trackTiming: (CDVInvokedUrlCommand*)command;
+- (void) trackView: (CDVInvokedUrlCommand*)command;
+- (void) trackException: (CDVInvokedUrlCommand*)command;
+- (void) addTransaction: (CDVInvokedUrlCommand*)command;
+- (void) addTransactionItem: (CDVInvokedUrlCommand*)command;
+
+@end
+
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
new file mode 100644
index 00000000..12355da6
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/UniversalAnalyticsPlugin.m
@@ -0,0 +1,543 @@
+//UniversalAnalyticsPlugin.m
+//Created by Daniel Wilson 2013-09-19
+
+#import "UniversalAnalyticsPlugin.h"
+#import "GAI.h"
+#import "GAIDictionaryBuilder.h"
+#import "GAIFields.h"
+
+@implementation UniversalAnalyticsPlugin
+
+- (void) pluginInitialize
+{
+ _debugMode = false;
+ _trackerStarted = false;
+ _customDimensions = nil;
+}
+
+- (void) startTrackerWithId: (CDVInvokedUrlCommand*)command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* accountId = [command.arguments objectAtIndex:0];
+ NSNumber* dispatchPeriod = [command.arguments objectAtIndex:1];
+
+ if ([dispatchPeriod isKindOfClass:[NSNumber class]])
+ [GAI sharedInstance].dispatchInterval = [dispatchPeriod doubleValue];
+ else
+ [GAI sharedInstance].dispatchInterval = 30;
+
+ [[GAI sharedInstance] trackerWithTrackingId:accountId];
+
+ _trackerStarted = true;
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+ /* NSLog(@"successfully started GAI tracker"); */
+}
+
+- (void) setAllowIDFACollection: (CDVInvokedUrlCommand*) command
+{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ tracker.allowIDFACollection = [[command argumentAtIndex:0 withDefault:@(NO)] boolValue];
+}
+
+- (void) addCustomDimensionsToTracker: (id<GAITracker>)tracker
+{
+ if (_customDimensions) {
+ for (NSString *key in _customDimensions.allKeys) {
+ NSString *value = [_customDimensions objectForKey:key];
+
+ NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
+ f.numberStyle = NSNumberFormatterDecimalStyle;
+ NSNumber *myKey = [f numberFromString:key];
+
+ /* NSLog(@"Setting tracker dimension slot %@: <%@>", key, value); */
+ [tracker set:[GAIFields customDimensionForIndex:myKey.unsignedIntegerValue]
+ value:value];
+ }
+ }
+}
+
+- (void) getVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* result = [tracker get:parameterName];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:result];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) setVar: (CDVInvokedUrlCommand*) command
+{
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ NSString* parameterName = [command.arguments objectAtIndex:0];
+ NSString* parameter = [command.arguments objectAtIndex:1];
+ [tracker set:parameterName value:parameter];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) dispatch: (CDVInvokedUrlCommand*) command
+{
+ [[GAI sharedInstance] dispatch];
+}
+
+- (void) debugMode: (CDVInvokedUrlCommand*) command
+{
+ _debugMode = true;
+ [[GAI sharedInstance].logger setLogLevel:kGAILogLevelVerbose];
+}
+
+- (void) setUserId: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* userId = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&uid" value: userId];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAnonymizeIp: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* anonymize = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:kGAIAnonymizeIp value:anonymize];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setOptOut: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ bool optout = [[command.arguments objectAtIndex:0] boolValue];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [[GAI sharedInstance] setOptOut:optout];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) setAppVersion: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSString* version = [command.arguments objectAtIndex:0];
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [tracker set:@"&av" value: version];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) enableUncaughtExceptionReporting: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ bool enabled = [[command.arguments objectAtIndex:0] boolValue];
+ [[GAI sharedInstance] setTrackUncaughtExceptions:enabled];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) addCustomDimension: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber* key = [command.arguments objectAtIndex:0];
+ NSString* value = [command.arguments objectAtIndex:1];
+
+ if ( ! _customDimensions) {
+ _customDimensions = [[NSMutableDictionary alloc] init];
+ }
+
+ _customDimensions[key.stringValue] = value;
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+}
+
+- (void) trackMetric: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSNumber *key = nil;
+ NSString *value = nil;
+
+ if ([command.arguments count] > 0)
+ key = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ value = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [tracker set:[GAIFields customMetricForIndex:[key intValue]] value:value];
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackEvent: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *category = nil;
+ NSString *action = nil;
+ NSString *label = nil;
+ NSNumber *value = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ action = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ label = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ value = [command.arguments objectAtIndex:3];
+
+ bool newSession = [[command argumentAtIndex:4 withDefault:@(NO)] boolValue];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ GAIDictionaryBuilder *builder = [GAIDictionaryBuilder
+ createEventWithCategory: category //required
+ action: action //required
+ label: label
+ value: value];
+ if(newSession){
+ [builder set:@"start" forKey:kGAISessionControl];
+ }
+ [tracker send:[builder build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+
+ }];
+
+}
+
+- (void) trackException: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString *description = nil;
+ NSNumber *fatal = nil;
+
+ if ([command.arguments count] > 0)
+ description = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ fatal = [command.arguments objectAtIndex:1];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder createScreenView] build]];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createExceptionWithDescription: description
+ withFatal: fatal] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackView: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+ NSString* screenName = [command.arguments objectAtIndex:0];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+ [self addCustomDimensionsToTracker:tracker];
+
+ NSString* deepLinkUrl = [command.arguments objectAtIndex:1];
+ GAIDictionaryBuilder* openParams = [[GAIDictionaryBuilder alloc] init];
+
+ if (deepLinkUrl && deepLinkUrl != (NSString *)[NSNull null]) {
+ [[openParams setCampaignParametersFromUrl:deepLinkUrl] build];
+ }
+
+ bool newSession = [[command argumentAtIndex:2 withDefault:@(NO)] boolValue];
+ if(newSession){
+ [openParams set:@"start" forKey:kGAISessionControl];
+ }
+
+ NSDictionary *hitParamsDict = [openParams build];
+
+ [tracker set:kGAIScreenName value:screenName];
+ [tracker send:[[[GAIDictionaryBuilder createScreenView] setAll:hitParamsDict] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) trackTiming: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *category = nil;
+ NSNumber *intervalInMilliseconds = nil;
+ NSString *name = nil;
+ NSString *label = nil;
+
+ if ([command.arguments count] > 0)
+ category = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ intervalInMilliseconds = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ name = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ label = [command.arguments objectAtIndex:3];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+ [self addCustomDimensionsToTracker:tracker];
+
+ [tracker send:[[GAIDictionaryBuilder
+ createTimingWithCategory: category //required
+ interval: intervalInMilliseconds //required
+ name: name
+ label: label] build]];
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+- (void) addTransaction: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+ CDVPluginResult* pluginResult = nil;
+
+ NSString *transactionId = nil;
+ NSString *affiliation = nil;
+ NSNumber *revenue = nil;
+ NSNumber *tax = nil;
+ NSNumber *shipping = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ affiliation = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ revenue = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ tax = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ shipping = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ currencyCode = [command.arguments objectAtIndex:5];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createTransactionWithId:transactionId // (NSString) Transaction ID
+ affiliation:affiliation // (NSString) Affiliation
+ revenue:revenue // (NSNumber) Order revenue (including tax and shipping)
+ tax:tax // (NSNumber) Tax
+ shipping:shipping // (NSNumber) Shipping
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+
+
+- (void) addTransactionItem: (CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* pluginResult = nil;
+
+ if ( ! _trackerStarted) {
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Tracker not started"];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ return;
+ }
+
+ [self.commandDelegate runInBackground:^{
+
+ CDVPluginResult* pluginResult = nil;
+ NSString *transactionId = nil;
+ NSString *name = nil;
+ NSString *sku = nil;
+ NSString *category = nil;
+ NSNumber *price = nil;
+ NSNumber *quantity = nil;
+ NSString *currencyCode = nil;
+
+
+ if ([command.arguments count] > 0)
+ transactionId = [command.arguments objectAtIndex:0];
+
+ if ([command.arguments count] > 1)
+ name = [command.arguments objectAtIndex:1];
+
+ if ([command.arguments count] > 2)
+ sku = [command.arguments objectAtIndex:2];
+
+ if ([command.arguments count] > 3)
+ category = [command.arguments objectAtIndex:3];
+
+ if ([command.arguments count] > 4)
+ price = [command.arguments objectAtIndex:4];
+
+ if ([command.arguments count] > 5)
+ quantity = [command.arguments objectAtIndex:5];
+
+ if ([command.arguments count] > 6)
+ currencyCode = [command.arguments objectAtIndex:6];
+
+ id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
+
+
+ [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionId // (NSString) Transaction ID
+ name:name // (NSString) Product Name
+ sku:sku // (NSString) Product SKU
+ category:category // (NSString) Product category
+ price:price // (NSNumber) Product price
+ quantity:quantity // (NSNumber) Product quantity
+ currencyCode:currencyCode] build]]; // (NSString) Currency code
+
+
+ pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+ }];
+}
+
+@end
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a
new file mode 100644
index 00000000..9813beaf
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libAdIdAccess.a
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a
new file mode 100644
index 00000000..45ca87e8
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/ios/libGoogleAnalyticsServices.a
Binary files differ
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js
new file mode 100644
index 00000000..6b789895
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/lavaca/AnalyticsService.js
@@ -0,0 +1,121 @@
+define(function(require) {
+
+ var Disposable = require('lavaca/util/Disposable');
+ var Config = require('lavaca/util/Config');
+ var Device = require('lavaca/env/Device');
+ var ga = require('google-analytics');
+
+ var AnalyticsService = Disposable.extend(function AnalyticsService() {
+ Disposable.call(this);
+ this.appId = Config.get('google_analytics_id');
+ this.webId = Config.get('google_analytics_web_id');
+ this.isWeb = this.webId.length;
+
+ if (!Device.isCordova() && this.isWeb) {
+ ga('create', this.webId);
+ }
+
+ document.addEventListener('deviceready', this.init.bind(this), false);
+ }, {
+ ready: false,
+ queue: [],
+ isWeb: false,
+ //isApp: false, //TODO need to research when Device.isCordova() is valid in Lavaca load flow
+ init: function() {
+ if (Device.isCordova() && analytics) {
+ this.ready = true;
+ analytics.startTrackerWithId(this.appId);
+ this.processQueue();
+ this.isWeb = false;
+ }
+ },
+ trackView: function(screen) {
+ if (Device.isCordova()) {
+ if (this.ready) {
+ analytics.trackView(screen);
+ } else {
+ this.queue.push({
+ action: 'trackView',
+ params: [screen]
+ });
+ }
+ } else if (this.isWeb) {
+ ga('send', 'pageview', {
+ 'title': screen
+ });
+ }
+ },
+ setUserId: function() {
+ throw 'setUserId is not implemented for Lavaca';
+ },
+ setAnonymizeIp: function() {
+ throw 'setAnonymizeIp is not implemented for Lavaca';
+ },
+ setOptOut: function() {
+ throw 'setOptOut is not implemented for Lavaca';
+ },
+ setAppVersion: function() {
+ throw 'setAppVersion is not implemented for Lavaca';
+ },
+ debugMode: function() {
+ throw 'debugMode is not implemented for Lavaca';
+ },
+ trackEvent: function(category, action, label, value) {
+ action = action || '';
+ label = label || '';
+ value = value || 0;
+ if (Device.isCordova()) {
+ if (this.ready) {
+ analytics.trackEvent(category, action, label, value);
+ } else {
+ this.queue.push({
+ action: 'trackEvent',
+ params: [category, action, label, value]
+ });
+ }
+ } else if (this.isWeb) {
+ ga('send', {
+ 'hitType': 'event',
+ 'eventCategory': category,
+ 'eventAction': action,
+ 'eventLabel': label,
+ 'eventValue': value
+ });
+ }
+ },
+ trackTiming: function(category, intervalInMilliseconds, name, label) {
+ action = action || '';
+ label = label || '';
+ value = value || 0;
+ if (Device.isCordova()) {
+ if (this.ready) {
+ analytics.trackTiming(category, intervalInMilliseconds, name, label);
+ } else {
+ this.queue.push({
+ action: 'trackTiming',
+ params: [category, intervalInMilliseconds, name, label]
+ });
+ }
+ } else if (this.isWeb) {
+ ga('send', {
+ 'hitType': 'timing',
+ 'timingCategory': category,
+ 'timingValue': intervalInMilliseconds,
+ 'timingVar': name,
+ 'timingLabel': label
+ });
+ }
+ },
+ processQueue: function() {
+ if (this.queue) {
+ var emptyFunction = function() {};
+ for (var i = 0; i < this.queue.length; ++i) {
+ cordova.exec(emptyFunction, emptyFunction,
+ 'UniversalAnalytics', this.queue[i].action, this.queue[i].params);
+ }
+ }
+ }
+ });
+
+ return new AnalyticsService();
+});
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/package.json b/StoneIsland/plugins/cordova-plugin-google-analytics/package.json
new file mode 100644
index 00000000..548de86b
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "cordova-plugin-google-analytics",
+ "version": "1.8.3",
+ "description": "Google Universal Analytics Plugin",
+ "cordova": {
+ "id": "cordova-plugin-google-analytics",
+ "platforms": [
+ "android",
+ "ios"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/danwilson/google-analytics-plugin.git"
+ },
+ "keywords": [
+ "cordova",
+ "googleanalytics",
+ "ecosystem:cordova",
+ "cordova-android",
+ "cordova-ios",
+ "analytics",
+ "google",
+ "universal",
+ "universalanalytics"
+ ],
+ "author": "Dan Wilson",
+ "license": "MIT"
+}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml b/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml
new file mode 100644
index 00000000..55a8db9d
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/plugin.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android"
+ id="cordova-plugin-google-analytics"
+ version="1.8.3">
+ <engines>
+ <engine name="cordova" version=">=3.0.0" />
+ </engines>
+ <name>Google Universal Analytics Plugin</name>
+ <description>Simple tracking (screens/events) for Google Analytics SDK 3.14 (iOS), SDK 4.0 (Android), Browsers and WP8</description>
+ <author>Daniel C. Wilson</author>
+ <license>MIT License</license>
+ <js-module src="www/analytics.js" name="UniversalAnalytics">
+ <!-- 'analytics' is deprecated, but supported to ease the transition -->
+ <clobbers target="analytics" />
+ <clobbers target="ga" />
+ </js-module>
+
+ <platform name="browser">
+ <js-module src="browser/UniversalAnalyticsProxy.js" name="UniversalAnalyticsProxy">
+ <runs />
+ </js-module>
+ </platform>
+
+ <platform name="ios">
+ <config-file target="config.xml" parent="/*">
+ <feature name="UniversalAnalytics">
+ <param name="ios-package" value="UniversalAnalyticsPlugin" />
+ </feature>
+ </config-file>
+
+ <header-file src="ios/UniversalAnalyticsPlugin.h" />
+ <source-file src="ios/UniversalAnalyticsPlugin.m" />
+ <source-file src="ios/libGoogleAnalyticsServices.a" framework="true" />
+ <source-file src="ios/libAdIdAccess.a" framework="true" />
+ <header-file src="ios/GAIDictionaryBuilder.h" />
+ <header-file src="ios/GAIFields.h" />
+ <header-file src="ios/GAILogger.h" />
+ <header-file src="ios/GAITrackedViewController.h" />
+ <header-file src="ios/GAI.h" />
+ <header-file src="ios/GAITracker.h" />
+ <header-file src="ios/GAIEcommerceFields.h" />
+ <header-file src="ios/GAIEcommerceProduct.h" />
+ <header-file src="ios/GAIEcommerceProductAction.h" />
+ <header-file src="ios/GAIEcommercePromotion.h" />
+
+ <framework src="SystemConfiguration.framework" />
+ <framework src="CoreData.framework" />
+ <framework src="AdSupport.framework" />
+ <framework src="libz.dylib" />
+ <framework src="libsqlite3.dylib" />
+ </platform>
+
+ <platform name="android">
+ <framework src="com.google.android.gms:play-services-analytics:+" />
+
+ <config-file target="res/xml/config.xml" parent="/*">
+ <feature name="UniversalAnalytics">
+ <param name="android-package" value="com.danielcwilson.plugins.analytics.UniversalAnalyticsPlugin" />
+ </feature>
+ </config-file>
+ <config-file target="AndroidManifest.xml" parent="/*">
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ </config-file>
+ <!-- Add support for devices without Google Play Services installed. -->
+ <config-file target="AndroidManifest.xml" parent="/manifest/application">
+ <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver" android:enabled="true">
+ <intent-filter>
+ <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
+ </intent-filter>
+ </receiver>
+ <service android:name="com.google.android.gms.analytics.AnalyticsService" android:enabled="true" android:exported="false"/>
+ <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:enabled="true" android:exported="true">
+ <intent-filter>
+ <action android:name="com.android.vending.INSTALL_REFERRER" />
+ </intent-filter>
+ </receiver>
+ <service android:name="com.google.android.gms.analytics.CampaignTrackingService" android:enabled="true" android:exported="false"/>
+ </config-file>
+ <source-file src="android/UniversalAnalyticsPlugin.java" target-dir="src/com/danielcwilson/plugins/analytics" />
+ </platform>
+
+ <platform name="wp8">
+ <config-file target="config.xml" parent="/*">
+ <feature name="UniversalAnalytics">
+ <param name="wp-package" value="UniversalAnalyticsPlugin" />
+ </feature>
+ </config-file>
+
+ <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
+ <Capability Name="ID_CAP_NETWORKING" />
+ </config-file>
+
+ <source-file src="wp8/UniversalAnalytics.cs" />
+ <source-file src="wp8/PhoneHelpers.cs" />
+ <source-file src="wp8/PhoneNameResolver.cs" />
+ <source-file src="wp8/PlatformInfoProvider.WP.cs" />
+ </platform>
+</plugin>
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts b/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts
new file mode 100644
index 00000000..d361ead8
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/typescript/analytics.d.ts
@@ -0,0 +1,62 @@
+declare class UniversalAnalyticsPlugin {
+
+ /** In your 'deviceready' handler, call this to set up your Analytics tracker,
+ where id is your Google Analytics Mobile App property */
+ public startTrackerWithId(id:String, dispatchPeriod?:Number, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Sets a UserId */
+ public setUserId(id:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Sets a setAnonymizeIp */
+ public setAnonymizeIp(anonymize:Boolean, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Sets a setOptOut */
+ public setOptOut(optout:Boolean, successCallback?:Function, errorCallback?:Function): void;
+
+ /** Sets a setAllowIDFACollection */
+ public setAllowIDFACollection(enable:Boolean, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Sets a AppVersion */
+ public setAppVersion(version:string, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Gets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */
+ public getVar(variable:string, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Sets a specific variable using this key list https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters */
+ public setVar(variable:string, value:string, successCallback?:Function, errorCallback?:Function):void;
+
+ /** To manually dispatch any data */
+ public dispatch(successCallback?:Function, errorCallback?:Function);
+
+ /** Enables verbose logging */
+ public debugMode(successCallback?:Function, errorCallback?:Function):void;
+
+ /** Track a Custom Metric */
+ public trackMetric(key:number, value:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Track a Screen (PageView) */
+ public trackView(screen:String, campaignUrl?:string, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Add a Custom Dimension */
+ public addCustomDimension(key:number, value:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Track an Event */
+ public trackEvent(category:String, action:String, label?:String, value?:Number, newSession?:boolean, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Track an Exception
+ https://developers.google.com/analytics/devguides/collection/android/v3/exceptions */
+ public trackException(description:String, fatal:Boolean, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Track User Timing (App Speed) */
+ public trackTiming(category:String, intervalInMilliseconds?:Number, name?:String, label?:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Add a Transaction (Google Analytics e-Ccommerce Tracking)
+ https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+ public addTransaction(transactionId:String, affiliation:String, revenue:Number, tax:Number, shipping:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Add a Transaction Item (Ecommerce) */
+ public addTransactionItem(transactionId:String, name:String, sku:String, category:String, price:Number, quantity:Number, currencyCode:String, successCallback?:Function, errorCallback?:Function):void;
+
+ /** Enable/disable automatic reporting of uncaught exceptions */
+ public enableUncaughtExceptionReporting(enable:Boolean, successCallback?:Function, errorCallback?:Function):void;
+}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs
new file mode 100644
index 00000000..4bf4f895
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneHelpers.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Xml;
+
+namespace UniversalAnalyticsPlugin
+{
+ internal static class Helpers
+ {
+ public static string GetAppAttribute(string attributeName)
+ {
+ try
+ {
+ XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
+ xmlReaderSettings.XmlResolver = new XmlXapResolver();
+ using (XmlReader xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings))
+ {
+ xmlReader.ReadToDescendant("App");
+ if (!xmlReader.IsStartElement())
+ {
+ throw new FormatException("WMAppManifest.xml is missing");
+ }
+ return xmlReader.GetAttribute(attributeName);
+ }
+ }
+ catch
+ {
+ return null;
+ }
+ }
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs
new file mode 100644
index 00000000..261739d0
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PhoneNameResolver.cs
@@ -0,0 +1,578 @@
+/*
+ * Copyright (c) 2013 by Alan Mendelevich
+ *
+ * Licensed under MIT license.
+ *
+ * See license.txt for details.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace UniversalAnalyticsPlugin
+{
+ public static class PhoneNameResolver
+ {
+ public static CanonicalPhoneName Resolve(string manufacturer, string model)
+ {
+ var manufacturerNormalized = manufacturer.Trim().ToUpper();
+
+ switch (manufacturerNormalized)
+ {
+ case "NOKIA":
+ case "MICROSOFT":
+ case "MICROSOFTMDG":
+ return ResolveNokia(manufacturer, model);
+ case "HTC":
+ return ResolveHtc(manufacturer, model);
+ case "SAMSUNG":
+ return ResolveSamsung(manufacturer, model);
+ case "LG":
+ return ResolveLg(manufacturer, model);
+ case "HUAWEI":
+ return ResolveHuawei(manufacturer, model);
+ default:
+ return new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = manufacturer,
+ CanonicalModel = model,
+ IsResolved = false
+ };
+ }
+ }
+
+ private static CanonicalPhoneName ResolveHuawei(string manufacturer, string model)
+ {
+ var modelNormalized = model.Trim().ToUpper();
+
+ var result = new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = "HUAWEI",
+ CanonicalModel = model,
+ IsResolved = false
+ };
+
+ var lookupValue = modelNormalized;
+
+ if (lookupValue.StartsWith("HUAWEI H883G"))
+ {
+ lookupValue = "HUAWEI H883G";
+ }
+
+ if (lookupValue.StartsWith("HUAWEI W1"))
+ {
+ lookupValue = "HUAWEI W1";
+ }
+
+ if (modelNormalized.StartsWith("HUAWEI W2"))
+ {
+ lookupValue = "HUAWEI W2";
+ }
+
+ if (huaweiLookupTable.ContainsKey(lookupValue))
+ {
+ var modelMetadata = huaweiLookupTable[lookupValue];
+ result.CanonicalModel = modelMetadata.CanonicalModel;
+ result.Comments = modelMetadata.Comments;
+ result.IsResolved = true;
+ }
+
+ return result;
+ }
+
+ private static CanonicalPhoneName ResolveLg(string manufacturer, string model)
+ {
+ var modelNormalized = model.Trim().ToUpper();
+
+ var result = new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = "LG",
+ CanonicalModel = model,
+ IsResolved = false
+ };
+
+ var lookupValue = modelNormalized;
+
+ if (lookupValue.StartsWith("LG-C900"))
+ {
+ lookupValue = "LG-C900";
+ }
+
+ if (lookupValue.StartsWith("LG-E900"))
+ {
+ lookupValue = "LG-E900";
+ }
+
+ if (lgLookupTable.ContainsKey(lookupValue))
+ {
+ var modelMetadata = lgLookupTable[lookupValue];
+ result.CanonicalModel = modelMetadata.CanonicalModel;
+ result.Comments = modelMetadata.Comments;
+ result.IsResolved = true;
+ }
+
+ return result;
+ }
+
+ private static CanonicalPhoneName ResolveSamsung(string manufacturer, string model)
+ {
+ var modelNormalized = model.Trim().ToUpper();
+
+ var result = new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = "SAMSUNG",
+ CanonicalModel = model,
+ IsResolved = false
+ };
+
+ var lookupValue = modelNormalized;
+
+ if (lookupValue.StartsWith("GT-S7530"))
+ {
+ lookupValue = "GT-S7530";
+ }
+
+ if (lookupValue.StartsWith("SGH-I917"))
+ {
+ lookupValue = "SGH-I917";
+ }
+
+ if (samsungLookupTable.ContainsKey(lookupValue))
+ {
+ var modelMetadata = samsungLookupTable[lookupValue];
+ result.CanonicalModel = modelMetadata.CanonicalModel;
+ result.Comments = modelMetadata.Comments;
+ result.IsResolved = true;
+ }
+
+ return result;
+ }
+
+ private static CanonicalPhoneName ResolveHtc(string manufacturer, string model)
+ {
+ var modelNormalized = model.Trim().ToUpper();
+
+ var result = new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = "HTC",
+ CanonicalModel = model,
+ IsResolved = false
+ };
+
+ var lookupValue = modelNormalized;
+
+ if (lookupValue.StartsWith("A620"))
+ {
+ lookupValue = "A620";
+ }
+
+ if (lookupValue.StartsWith("C625"))
+ {
+ lookupValue = "C625";
+ }
+
+ if (lookupValue.StartsWith("C620"))
+ {
+ lookupValue = "C620";
+ }
+
+ if (htcLookupTable.ContainsKey(lookupValue))
+ {
+ var modelMetadata = htcLookupTable[lookupValue];
+ result.CanonicalModel = modelMetadata.CanonicalModel;
+ result.Comments = modelMetadata.Comments;
+ result.IsResolved = true;
+ }
+
+ return result;
+ }
+
+ private static CanonicalPhoneName ResolveNokia(string manufacturer, string model)
+ {
+ var modelNormalized = model.Trim().ToUpper();
+
+ var result = new CanonicalPhoneName()
+ {
+ ReportedManufacturer = manufacturer,
+ ReportedModel = model,
+ CanonicalManufacturer = "NOKIA",
+ CanonicalModel = model,
+ IsResolved = false
+ };
+
+ var lookupValue = modelNormalized;
+ if (modelNormalized.StartsWith("RM-"))
+ {
+ var rms = Regex.Match(modelNormalized, "(RM-)([0-9]+)");
+ lookupValue = rms.Value;
+ }
+
+ if (nokiaLookupTable.ContainsKey(lookupValue))
+ {
+ var modelMetadata = nokiaLookupTable[lookupValue];
+
+ if (!string.IsNullOrEmpty(modelMetadata.CanonicalManufacturer))
+ {
+ result.CanonicalManufacturer = modelMetadata.CanonicalManufacturer;
+ }
+ result.CanonicalModel = modelMetadata.CanonicalModel;
+ result.Comments = modelMetadata.Comments;
+ result.IsResolved = true;
+ }
+
+ return result;
+ }
+
+
+ private static Dictionary<string, CanonicalPhoneName> huaweiLookupTable = new Dictionary<string, CanonicalPhoneName>()
+ {
+ // Huawei W1
+ { "HUAWEI H883G", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } },
+ { "HUAWEI W1", new CanonicalPhoneName() { CanonicalModel = "Ascend W1" } },
+
+ // Huawei Ascend W2
+ { "HUAWEI W2", new CanonicalPhoneName() { CanonicalModel = "Ascend W2" } },
+ };
+
+ private static Dictionary<string, CanonicalPhoneName> lgLookupTable = new Dictionary<string, CanonicalPhoneName>()
+ {
+ // Optimus 7Q/Quantum
+ { "LG-C900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7Q/Quantum" } },
+
+ // Optimus 7
+ { "LG-E900", new CanonicalPhoneName() { CanonicalModel = "Optimus 7" } },
+
+ // Jil Sander
+ { "LG-E906", new CanonicalPhoneName() { CanonicalModel = "Jil Sander" } },
+
+ // Lancet
+ { "LGVW820", new CanonicalPhoneName() { CanonicalModel = "Lancet" } },
+ };
+
+ private static Dictionary<string, CanonicalPhoneName> samsungLookupTable = new Dictionary<string, CanonicalPhoneName>()
+ {
+ // OMNIA W
+ { "GT-I8350", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
+ { "GT-I8350T", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
+ { "OMNIA W", new CanonicalPhoneName() { CanonicalModel = "Omnia W" } },
+
+ // OMNIA 7
+ { "GT-I8700", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
+ { "OMNIA7", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
+
+ // OMNIA M
+ { "GT-S7530", new CanonicalPhoneName() { CanonicalModel = "Omnia 7" } },
+
+ // Focus
+ { "I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } },
+ { "SGH-I917", new CanonicalPhoneName() { CanonicalModel = "Focus" } },
+
+ // Focus 2
+ { "SGH-I667", new CanonicalPhoneName() { CanonicalModel = "Focus 2" } },
+
+ // Focus Flash
+ { "SGH-I677", new CanonicalPhoneName() { CanonicalModel = "Focus Flash" } },
+
+ // Focus S
+ { "HADEN", new CanonicalPhoneName() { CanonicalModel = "Focus S" } },
+ { "SGH-I937", new CanonicalPhoneName() { CanonicalModel = "Focus S" } },
+
+ // ATIV S
+ { "GT-I8750", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } },
+ { "SGH-T899M", new CanonicalPhoneName() { CanonicalModel = "ATIV S" } },
+
+ // ATIV Odyssey
+ { "SCH-I930", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey" } },
+ { "SCH-R860U", new CanonicalPhoneName() { CanonicalModel = "ATIV Odyssey", Comments="US Cellular" } },
+
+ // ATIV S Neo
+ { "SPH-I800", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="Sprint" } },
+ { "SGH-I187", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo", Comments="AT&T" } },
+ { "GT-I8675", new CanonicalPhoneName() { CanonicalModel = "ATIV S Neo" } },
+
+ // ATIV SE
+ { "SM-W750V", new CanonicalPhoneName() { CanonicalModel = "ATIV SE", Comments="Verizon" } },
+ };
+
+ private static Dictionary<string, CanonicalPhoneName> htcLookupTable = new Dictionary<string, CanonicalPhoneName>()
+ {
+ // Surround
+ { "7 MONDRIAN T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
+ { "T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
+ { "SURROUND", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
+ { "SURROUND T8788", new CanonicalPhoneName() { CanonicalModel = "Surround" } },
+
+ // Mozart
+ { "7 MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "HTC MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "MERSAD 7 MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "MOZART", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "MOZART T8698", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "PD67100", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+ { "T8697", new CanonicalPhoneName() { CanonicalModel = "Mozart" } },
+
+ // Pro
+ { "7 PRO T7576", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
+ { "MWP6885", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
+ { "USCCHTC-PC93100", new CanonicalPhoneName() { CanonicalModel = "7 Pro" } },
+
+ // Arrive
+ { "PC93100", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } },
+ { "T7575", new CanonicalPhoneName() { CanonicalModel = "Arrive", Comments = "Sprint" } },
+
+ // HD2
+ { "HD2", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
+ { "HD2 LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
+ { "LEO", new CanonicalPhoneName() { CanonicalModel = "HD2" } },
+
+ // HD7
+ { "7 SCHUBERT T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "GOLD", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "HD7 T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "MONDRIAN", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "SCHUBERT", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "Schubert T9292", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+ { "T9296", new CanonicalPhoneName() { CanonicalModel = "HD7", Comments = "Telstra, AU" } },
+ { "TOUCH-IT HD7", new CanonicalPhoneName() { CanonicalModel = "HD7" } },
+
+ // HD7S
+ { "T9295", new CanonicalPhoneName() { CanonicalModel = "HD7S" } },
+
+ // Trophy
+ { "7 TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
+ { "7 TROPHY T8686", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
+ { "PC40100", new CanonicalPhoneName() { CanonicalModel = "Trophy", Comments = "Verizon" } },
+ { "SPARK", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
+ { "TOUCH-IT TROPHY", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
+ { "MWP6985", new CanonicalPhoneName() { CanonicalModel = "Trophy" } },
+
+ // 8S
+ { "A620", new CanonicalPhoneName() { CanonicalModel = "8S" } },
+ { "WINDOWS PHONE 8S BY HTC", new CanonicalPhoneName() { CanonicalModel = "8S" } },
+
+ // 8X
+ { "C620", new CanonicalPhoneName() { CanonicalModel = "8X" } },
+ { "C625", new CanonicalPhoneName() { CanonicalModel = "8X" } },
+ { "HTC6990LVW", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="Verizon" } },
+ { "PM23300", new CanonicalPhoneName() { CanonicalModel = "8X", Comments="AT&T" } },
+ { "WINDOWS PHONE 8X BY HTC", new CanonicalPhoneName() { CanonicalModel = "8X" } },
+
+ // 8XT
+ { "HTCPO881", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
+ { "HTCPO881 SPRINT", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
+ { "HTCPO881 HTC", new CanonicalPhoneName() { CanonicalModel = "8XT", Comments="Sprint" } },
+
+ // Titan
+ { "ETERNITY", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "China" } },
+ { "PI39100", new CanonicalPhoneName() { CanonicalModel = "Titan", Comments = "AT&T" } },
+ { "TITAN X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
+ { "ULTIMATE", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
+ { "X310E", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
+ { "X310E TITAN", new CanonicalPhoneName() { CanonicalModel = "Titan" } },
+
+ // Titan II
+ { "PI86100", new CanonicalPhoneName() { CanonicalModel = "Titan II", Comments = "AT&T" } },
+ { "RADIANT", new CanonicalPhoneName() { CanonicalModel = "Titan II" } },
+
+ // Radar
+ { "RADAR", new CanonicalPhoneName() { CanonicalModel = "Radar" } },
+ { "RADAR 4G", new CanonicalPhoneName() { CanonicalModel = "Radar", Comments = "T-Mobile USA" } },
+ { "RADAR C110E", new CanonicalPhoneName() { CanonicalModel = "Radar" } },
+
+ // One M8
+ { "HTC6995LVW", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Verizon" } },
+ { "0P6B180", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="AT&T" } },
+ { "0P6B140", new CanonicalPhoneName() { CanonicalModel = "One (M8)", Comments="Dual SIM?" } },
+ };
+
+ private static Dictionary<string, CanonicalPhoneName> nokiaLookupTable = new Dictionary<string, CanonicalPhoneName>()
+ {
+ // Lumia 505
+ { "LUMIA 505", new CanonicalPhoneName() { CanonicalModel = "Lumia 505" } },
+ // Lumia 510
+ { "LUMIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } },
+ { "NOKIA 510", new CanonicalPhoneName() { CanonicalModel = "Lumia 510" } },
+ // Lumia 610
+ { "LUMIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
+ { "LUMIA 610 NFC", new CanonicalPhoneName() { CanonicalModel = "Lumia 610", Comments = "NFC" } },
+ { "NOKIA 610", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
+ { "NOKIA 610C", new CanonicalPhoneName() { CanonicalModel = "Lumia 610" } },
+ // Lumia 620
+ { "LUMIA 620", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } },
+ { "RM-846", new CanonicalPhoneName() { CanonicalModel = "Lumia 620" } },
+ // Lumia 710
+ { "LUMIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } },
+ { "NOKIA 710", new CanonicalPhoneName() { CanonicalModel = "Lumia 710" } },
+ // Lumia 800
+ { "LUMIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
+ { "LUMIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
+ { "NOKIA 800", new CanonicalPhoneName() { CanonicalModel = "Lumia 800" } },
+ { "NOKIA 800C", new CanonicalPhoneName() { CanonicalModel = "Lumia 800", Comments = "China" } },
+ // Lumia 810
+ { "RM-878", new CanonicalPhoneName() { CanonicalModel = "Lumia 810" } },
+ // Lumia 820
+ { "RM-824", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
+ { "RM-825", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
+ { "RM-826", new CanonicalPhoneName() { CanonicalModel = "Lumia 820" } },
+ // Lumia 822
+ { "RM-845", new CanonicalPhoneName() { CanonicalModel = "Lumia 822", Comments = "Verizon" } },
+ // Lumia 900
+ { "LUMIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } },
+ { "NOKIA 900", new CanonicalPhoneName() { CanonicalModel = "Lumia 900" } },
+ // Lumia 920
+ { "RM-820", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
+ { "RM-821", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
+ { "RM-822", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
+ { "RM-867", new CanonicalPhoneName() { CanonicalModel = "Lumia 920", Comments = "920T" } },
+ { "NOKIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
+ { "LUMIA 920", new CanonicalPhoneName() { CanonicalModel = "Lumia 920" } },
+ // Lumia 520
+ { "RM-914", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } },
+ { "RM-915", new CanonicalPhoneName() { CanonicalModel = "Lumia 520" } },
+ { "RM-913", new CanonicalPhoneName() { CanonicalModel = "Lumia 520", Comments="520T" } },
+ // Lumia 521?
+ { "RM-917", new CanonicalPhoneName() { CanonicalModel = "Lumia 521", Comments="T-Mobile 520" } },
+ // Lumia 720
+ { "RM-885", new CanonicalPhoneName() { CanonicalModel = "Lumia 720" } },
+ { "RM-887", new CanonicalPhoneName() { CanonicalModel = "Lumia 720", Comments="China 720T" } },
+ // Lumia 928
+ { "RM-860", new CanonicalPhoneName() { CanonicalModel = "Lumia 928" } },
+ // Lumia 925
+ { "RM-892", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
+ { "RM-893", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
+ { "RM-910", new CanonicalPhoneName() { CanonicalModel = "Lumia 925" } },
+ { "RM-955", new CanonicalPhoneName() { CanonicalModel = "Lumia 925", Comments="China 925T" } },
+ // Lumia 1020
+ { "RM-875", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
+ { "RM-876", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
+ { "RM-877", new CanonicalPhoneName() { CanonicalModel = "Lumia 1020" } },
+ // Lumia 625
+ { "RM-941", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
+ { "RM-942", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
+ { "RM-943", new CanonicalPhoneName() { CanonicalModel = "Lumia 625" } },
+ // Lumia 1520
+ { "RM-937", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } },
+ { "RM-938", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } },
+ { "RM-939", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520" } },
+ { "RM-940", new CanonicalPhoneName() { CanonicalModel = "Lumia 1520", Comments="AT&T" } },
+ // Lumia 525
+ { "RM-998", new CanonicalPhoneName() { CanonicalModel = "Lumia 525" } },
+ // Lumia 1320
+ { "RM-994", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
+ { "RM-995", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
+ { "RM-996", new CanonicalPhoneName() { CanonicalModel = "Lumia 1320" } },
+ // Lumia Icon
+ { "RM-927", new CanonicalPhoneName() { CanonicalModel = "Lumia Icon", Comments="Verizon" } },
+ // Lumia 630
+ { "RM-976", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
+ { "RM-977", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
+ { "RM-978", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
+ { "RM-979", new CanonicalPhoneName() { CanonicalModel = "Lumia 630" } },
+ // Lumia 635
+ { "RM-974", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } },
+ { "RM-975", new CanonicalPhoneName() { CanonicalModel = "Lumia 635" } },
+ { "RM-1078", new CanonicalPhoneName() { CanonicalModel = "Lumia 635", Comments="Sprint" } },
+ // Lumia 526
+ { "RM-997", new CanonicalPhoneName() { CanonicalModel = "Lumia 526", Comments="China Mobile" } },
+ // Lumia 930
+ { "RM-1045", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } },
+ { "RM-1087", new CanonicalPhoneName() { CanonicalModel = "Lumia 930" } },
+ // Lumia 636
+ { "RM-1027", new CanonicalPhoneName() { CanonicalModel = "Lumia 636", Comments="China" } },
+ // Lumia 638
+ { "RM-1010", new CanonicalPhoneName() { CanonicalModel = "Lumia 638", Comments="China" } },
+ // Lumia 530
+ { "RM-1017", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } },
+ { "RM-1018", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Single SIM" } },
+ { "RM-1019", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } },
+ { "RM-1020", new CanonicalPhoneName() { CanonicalModel = "Lumia 530", Comments="Dual SIM" } },
+ // Lumia 730
+ { "RM-1040", new CanonicalPhoneName() { CanonicalModel = "Lumia 730", Comments="Dual SIM" } },
+ // Lumia 735
+ { "RM-1038", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } },
+ { "RM-1039", new CanonicalPhoneName() { CanonicalModel = "Lumia 735" } },
+ { "RM-1041", new CanonicalPhoneName() { CanonicalModel = "Lumia 735", Comments="Verizon" } },
+ // Lumia 830
+ { "RM-983", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
+ { "RM-984", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
+ { "RM-985", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
+ { "RM-1049", new CanonicalPhoneName() { CanonicalModel = "Lumia 830" } },
+ // Lumia 535
+ { "RM-1089", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
+ { "RM-1090", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
+ { "RM-1091", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
+ { "RM-1092", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 535" } },
+ // Lumia 435
+ { "RM-1068", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
+ { "RM-1069", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
+ { "RM-1070", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
+ { "RM-1071", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
+ { "RM-1114", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 435", Comments="DS" } },
+ // Lumia 532
+ { "RM-1031", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
+ { "RM-1032", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
+ { "RM-1034", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
+ { "RM-1115", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 532", Comments="DS" } },
+ // Lumia 640
+ { "RM-1072", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1073", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1074", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1075", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1077", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1109", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ { "RM-1113", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640" } },
+ // Lumia 640XL
+ { "RM-1062", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1063", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1064", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1065", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1066", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1067", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ { "RM-1096", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 640 XL" } },
+ // Lumia 540
+ { "RM-1140", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } },
+ { "RM-1141", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 540" } },
+ // Lumia 430
+ { "RM-1099", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 430", Comments="DS" } },
+ // Lumia 950
+ { "RM-1104", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
+ { "RM-1105", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
+ { "RM-1118", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950", Comments="DS" } },
+ // Lumia 950 XL
+ { "RM-1085", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL" } },
+ { "RM-1116", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 950 XL", Comments="DS" } },
+ // Lumia 550
+ { "RM-1127", new CanonicalPhoneName() { CanonicalManufacturer="MICROSOFT", CanonicalModel = "Lumia 550" } },
+ };
+ }
+
+ public class CanonicalPhoneName
+ {
+ public string ReportedManufacturer { get; set; }
+ public string ReportedModel { get; set; }
+ public string CanonicalManufacturer { get; set; }
+ public string CanonicalModel { get; set; }
+ public string Comments { get; set; }
+ public bool IsResolved { get; set; }
+
+ public string FullCanonicalName
+ {
+ get { return CanonicalManufacturer + " " + CanonicalModel; }
+ }
+ }
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs
new file mode 100644
index 00000000..4e1257f9
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/PlatformInfoProvider.WP.cs
@@ -0,0 +1,103 @@
+// PlatformInfoProvider.WP.cs
+
+using GoogleAnalytics.Core;
+using System;
+using System.IO.IsolatedStorage;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace UniversalAnalyticsPlugin
+{
+ public sealed class PlatformInfoProvider : IPlatformInfoProvider
+ {
+ const string Key_AnonymousClientId = "GoogleAnaltyics.AnonymousClientId";
+ string anonymousClientId;
+ Dimensions _screenResolution = new Dimensions(0,0);
+
+#pragma warning disable 0067
+ public event EventHandler ViewPortResolutionChanged;
+
+ public event EventHandler ScreenResolutionChanged;
+#pragma warning restore 0067
+
+ public PlatformInfoProvider()
+ {
+ Deployment.Current.Dispatcher.BeginInvoke(() => {
+ double scale = (double)Application.Current.Host.Content.ScaleFactor / 100;
+ int h = (int)Math.Ceiling(Application.Current.Host.Content.ActualHeight * scale);
+ int w = (int)Math.Ceiling(Application.Current.Host.Content.ActualWidth * scale);
+ _screenResolution = new Dimensions(h, w);
+ });
+ }
+
+ public string AnonymousClientId
+ {
+ get
+ {
+ if (anonymousClientId == null)
+ {
+ var appSettings = IsolatedStorageSettings.ApplicationSettings;
+ if (!appSettings.Contains(Key_AnonymousClientId))
+ {
+ anonymousClientId = Guid.NewGuid().ToString();
+ appSettings.Add(Key_AnonymousClientId, anonymousClientId);
+ appSettings.Save();
+ }
+ else
+ {
+ anonymousClientId = (string)appSettings[Key_AnonymousClientId];
+ }
+ }
+ return anonymousClientId;
+ }
+ set { anonymousClientId = value; }
+ }
+
+ public Dimensions ScreenResolution
+ {
+ get
+ {
+ return _screenResolution;
+ }
+ }
+
+ public Dimensions ViewPortResolution
+ {
+ get { return ScreenResolution; }
+ }
+
+ public string UserLanguage
+ {
+ get { return System.Globalization.CultureInfo.CurrentUICulture.Name; }
+ }
+
+ public int? ScreenColorDepthBits
+ {
+ get { return null; }
+ }
+
+ public void OnTracking()
+ { }
+
+ public string GetUserAgent()
+ {
+ var sysInfo = UniversalAnalyticsPlugin.PhoneNameResolver.Resolve(Microsoft.Phone.Info.DeviceStatus.DeviceManufacturer, Microsoft.Phone.Info.DeviceStatus.DeviceName);
+ Version osVer = Environment.OSVersion.Version;
+ string uaMask;
+
+ if (osVer.Minor == 10)
+ {
+ // Windows Phone 8.1
+ uaMask = "Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv11.0; IEMobile/11.0; {1}; {2}) like Gecko";
+ }
+ else
+ {
+ // Windows Phone 8.0
+ uaMask = "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone OS {0}; Trident/6.0; IEMobile/10.0; ARM; Touch; {1}; {2})";
+ }
+
+ //var userAgentMask = "Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]";
+ return string.Format(uaMask, Environment.OSVersion.Version, sysInfo.CanonicalManufacturer, sysInfo.CanonicalModel);
+ }
+ }
+}
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs
new file mode 100644
index 00000000..b4307922
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/wp8/UniversalAnalytics.cs
@@ -0,0 +1,399 @@
+/*
+ * Copyright (c) 2016 Dan Polivy
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using GoogleAnalytics.Core;
+using WPCordovaClassLib.Cordova;
+using WPCordovaClassLib.Cordova.Commands;
+using WPCordovaClassLib.Cordova.JSON;
+using System.Collections.Generic;
+using System.Windows;
+using System.Diagnostics;
+using System.Threading.Tasks;
+using Microsoft.Phone.Shell;
+
+namespace Cordova.Extension.Commands
+{
+ /// <summary>
+ /// UniversalAnalytics plugin class containing methods called from JavaScript
+ /// </summary>
+ public class UniversalAnalytics : BaseCommand
+ {
+ private TrackerManager _trackerManager = new TrackerManager(new UniversalAnalyticsPlugin.PlatformInfoProvider());
+ private Tracker _tracker;
+ private bool _trackerStarted = false;
+ DateTime? _suspended;
+ private IDictionary<int, string> _customDimensions = new Dictionary<int, string>();
+
+ public UniversalAnalytics()
+ {
+ this.AutoAppLifetimeTracking = false;
+ this.SessionTimeout = 30;
+ }
+
+ /// <summary>
+ /// Session timeout length, in seconds.
+ /// </summary>
+ public int? SessionTimeout {
+ get;
+ set;
+ }
+
+ /// <summary>
+ /// Determines whether events are automatically sent for app lifetime tracking.
+ /// </summary>
+ public bool AutoAppLifetimeTracking { get; set; }
+
+ public void startTrackerWithId(string options)
+ {
+ // If the tracker is already started, don't start it again
+ if (_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker is already started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (!_trackerStarted && args.Length > 0 && args[0].Length > 0)
+ {
+ _tracker = _trackerManager.GetTracker(args[0]);
+
+ // Set additional Tracker parameters here
+ _tracker.SetStartSession(true);
+ _tracker.IsUseSecure = true;
+ _tracker.AppName = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Title");
+ _tracker.AppVersion = UniversalAnalyticsPlugin.Helpers.GetAppAttribute("Version");
+
+ _trackerStarted = true;
+
+ Deployment.Current.Dispatcher.BeginInvoke(() =>
+ {
+ Application.Current.UnhandledException += Analytics_UnhandledException;
+ TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
+ });
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Tracker started"));
+ }
+ else
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker id is not valid"));
+ }
+ }
+
+ public override void OnResume(object sender, ActivatedEventArgs e)
+ {
+ if (_suspended.HasValue && SessionTimeout.HasValue)
+ {
+ var suspendedAgo = DateTime.UtcNow.Subtract(_suspended.Value);
+ if (suspendedAgo > TimeSpan.FromSeconds((double)SessionTimeout))
+ {
+ _tracker.SetStartSession(true);
+ }
+ }
+
+ if (_trackerStarted && AutoAppLifetimeTracking)
+ {
+ _tracker.SendEvent("app", "resume", !e.IsApplicationInstancePreserved ? "tombstoned" : null, 0);
+ }
+ }
+
+ public override void OnPause(object sender, DeactivatedEventArgs e)
+ {
+ if (_trackerStarted && AutoAppLifetimeTracking)
+ {
+ _tracker.SendEvent("app", "suspend", e.Reason.ToString(), 0);
+ }
+
+ _suspended = DateTime.UtcNow;
+ }
+
+ private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
+ {
+ var ex = e.Exception.InnerException ?? e.Exception; // inner exception contains better info for unobserved tasks
+ _tracker.SendException(ex.ToString(), false);
+ }
+
+ private void Analytics_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
+ {
+ _tracker.SendException(e.ExceptionObject.ToString(), true);
+
+ if (Debugger.IsAttached)
+ {
+ // An unhandled exception has occurred; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ public void setUserId(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+ string userId = null;
+
+ if (args.Length > 0) userId = args[0];
+
+ _tracker.UserId = userId;
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Set user id: " + args[0]));
+ }
+
+ public void debugMode(string options)
+ {
+ _trackerManager.IsDebugEnabled = true;
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "debugMode enabled"));
+ }
+
+ public void trackView(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (args.Length > 0 && args[0] != null && args[0].Length > 0)
+ {
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendView(args[0]);
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Screen: " + args[0]));
+ }
+ else
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected one non-empty string argument"));
+ }
+ }
+
+ public void addCustomDimension(string options)
+ {
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ int index = 0;
+ bool hasIndex = false;
+ string value = null;
+
+ if (args.Length > 0) hasIndex = int.TryParse(args[0], out index);
+ if (args.Length > 1) value = args[1];
+
+ if (hasIndex && value != null)
+ {
+ // Remove the key if it already exists
+ _customDimensions.Remove(index);
+ _customDimensions.Add(index, value);
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Custom Dimension: " + index));
+ }
+ else
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty integer, string arguments"));
+ }
+ }
+
+ public void trackEvent(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ // Default values
+ string category = null, action = null, label = null;
+ long value = 0;
+
+ if (args.Length > 0) category = args[0];
+ if (args.Length > 1) action = args[1];
+ if (args.Length > 2) label = args[2];
+ if (args.Length > 3) long.TryParse(args[3], out value);
+
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendEvent(category, action, label, value);
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Event: " + category));
+ }
+
+ public void trackException(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (args.Length == 0 || args[0] == null || args[0].Length == 0)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments."));
+ return;
+ }
+
+ // Default values
+ string description = null;
+ bool isFatal = false;
+
+ if (args.Length > 0) description = args[0];
+ if (args.Length > 1) bool.TryParse(args[1], out isFatal);
+
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendException(description, isFatal);
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Exception: " + description));
+ }
+
+ public void trackTiming(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (args.Length == 0 || args[0] == null || args[0].Length == 0)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty string arguments."));
+ return;
+ }
+
+ // Default values
+ string category = null, variable = null, label = null;
+ long intervalInMs = 0;
+
+ if (args.Length > 0) category = args[0];
+ if (args.Length > 1) long.TryParse(args[1], out intervalInMs);
+ if (args.Length > 2) variable = args[2];
+ if (args.Length > 3) label = args[3];
+
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendTiming(TimeSpan.FromMilliseconds(intervalInMs), category, variable, label);
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Track Timing: " + category));
+ }
+
+ public void addTransaction(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (args.Length == 0 || args[0] == null || args[0].Length == 0)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID."));
+ return;
+ }
+
+ Transaction transaction = new Transaction();
+
+ // Default values
+ double revenue = 0, tax = 0, shipping = 0;
+
+ if (args.Length > 0) transaction.TransactionId = args[0];
+ if (args.Length > 1) transaction.Affiliation = args[1];
+ if (args.Length > 2)
+ {
+ double.TryParse(args[2], out revenue);
+ transaction.TotalCostInMicros = (long)(revenue * 1000000);
+ }
+ if (args.Length > 3)
+ {
+ double.TryParse(args[3], out tax);
+ transaction.TotalTaxInMicros = (long)(tax * 1000000);
+ }
+ if (args.Length > 4)
+ {
+ double.TryParse(args[4], out shipping);
+ transaction.ShippingCostInMicros = (long)(shipping * 1000000);
+ }
+ if (args.Length > 5) transaction.CurrencyCode = args[5];
+
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendTransaction(transaction);
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction: " + transaction.TransactionId));
+ }
+
+ public void addTransactionItem(string options)
+ {
+ if (!_trackerStarted)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Tracker not started"));
+ return;
+ }
+
+ string[] args = JsonHelper.Deserialize<string[]>(options);
+
+ if (args.Length == 0 || args[0] == null || args[0].Length == 0)
+ {
+ DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Expected non-empty ID."));
+ return;
+ }
+
+ TransactionItem transactionItem = new TransactionItem();
+
+ // Default values
+ double price = 0;
+ long quantity = 0;
+
+ if (args.Length > 0) transactionItem.TransactionId = args[0];
+ if (args.Length > 1) transactionItem.Name = args[1];
+ if (args.Length > 2) transactionItem.SKU = args[2];
+ if (args.Length > 3) transactionItem.Category = args[3];
+ if (args.Length > 4)
+ {
+ double.TryParse(args[4], out price);
+ transactionItem.PriceInMicros = (long)(price * 1000000);
+ }
+ if (args.Length > 5)
+ {
+ long.TryParse(args[5], out quantity);
+ transactionItem.Quantity = quantity;
+ }
+ if (args.Length > 6) transactionItem.CurrencyCode = args[6];
+
+ addCustomDimensionsToTracker(_tracker);
+ _tracker.SendTransactionItem(transactionItem);
+
+ DispatchCommandResult(new PluginResult(PluginResult.Status.OK, "Add Transaction Item: " + transactionItem.TransactionId));
+ }
+
+ private void addCustomDimensionsToTracker(Tracker tracker)
+ {
+ foreach (KeyValuePair<int, string> dimension in _customDimensions)
+ {
+ tracker.SetCustomDimension(dimension.Key, dimension.Value);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js b/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js
new file mode 100644
index 00000000..03b4a9d4
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-google-analytics/www/analytics.js
@@ -0,0 +1,127 @@
+function UniversalAnalyticsPlugin() {}
+
+UniversalAnalyticsPlugin.prototype.startTrackerWithId = function(id, dispatchPeriod, success, error) {
+ if (typeof dispatchPeriod === 'undefined' || dispatchPeriod === null) {
+ dispatchPeriod = 30;
+ } else if (typeof dispatchPeriod === 'function' && typeof error === 'undefined') {
+ // Called without dispatchPeriod but with a callback.
+ // Looks like the original API was used so shift parameters over to remain compatible.
+ error = success;
+ success = dispatchPeriod;
+ dispatchPeriod = 30;
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'startTrackerWithId', [id, dispatchPeriod]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAllowIDFACollection = function(enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAllowIDFACollection', [enable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setUserId = function(id, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setUserId', [id]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAnonymizeIp = function(anonymize, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAnonymizeIp', [anonymize]);
+};
+
+UniversalAnalyticsPlugin.prototype.setOptOut = function(optout, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setOptOut', [optout]);
+};
+
+UniversalAnalyticsPlugin.prototype.setAppVersion = function(version, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setAppVersion', [version]);
+};
+
+UniversalAnalyticsPlugin.prototype.getVar = function(variable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'getVar', [variable]);
+};
+
+UniversalAnalyticsPlugin.prototype.setVar = function(variable, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'setVar', [variable, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.dispatch = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'dispatch', []);
+};
+
+/* enables verbose logging */
+UniversalAnalyticsPlugin.prototype.debugMode = function(success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'debugMode', []);
+};
+
+UniversalAnalyticsPlugin.prototype.trackMetric = function(key, value, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackMetric', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackView = function(screen, campaignUrl, newSession, success, error) {
+ if (typeof campaignUrl === 'undefined' || campaignUrl === null) {
+ campaignUrl = '';
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackView', [screen, campaignUrl, newSession]);
+};
+
+UniversalAnalyticsPlugin.prototype.addCustomDimension = function(key, value, success, error) {
+ if (typeof key !== "number") {
+ throw Error("key must be a valid integer not '" + typeof key + "'");
+ }
+ cordova.exec(success, error, 'UniversalAnalytics', 'addCustomDimension', [key, value]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackEvent = function(category, action, label, value, newSession, success, error) {
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+ if (typeof value === 'undefined' || value === null) {
+ value = 0;
+ }
+
+ if (typeof newSession === 'undefined' || newSession === null) {
+ newSession = false;
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackEvent', [category, action, label, value, newSession]);
+};
+
+/**
+ * https://developers.google.com/analytics/devguides/collection/android/v3/exceptions
+ */
+UniversalAnalyticsPlugin.prototype.trackException = function(description, fatal, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackException', [description, fatal]);
+};
+
+UniversalAnalyticsPlugin.prototype.trackTiming = function(category, intervalInMilliseconds, name, label, success, error) {
+ if (typeof intervalInMilliseconds === 'undefined' || intervalInMilliseconds === null) {
+ intervalInMilliseconds = 0;
+ }
+ if (typeof name === 'undefined' || name === null) {
+ name = '';
+ }
+ if (typeof label === 'undefined' || label === null) {
+ label = '';
+ }
+
+ cordova.exec(success, error, 'UniversalAnalytics', 'trackTiming', [category, intervalInMilliseconds, name, label]);
+};
+
+/* Google Analytics e-Commerce Tracking */
+/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce */
+UniversalAnalyticsPlugin.prototype.addTransaction = function(transactionId, affiliation, revenue, tax, shipping, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransaction', [transactionId, affiliation, revenue, tax, shipping, currencyCode]);
+};
+
+UniversalAnalyticsPlugin.prototype.addTransactionItem = function(transactionId, name ,sku, category, price, quantity, currencyCode, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'addTransactionItem', [transactionId, name ,sku, category, price, quantity, currencyCode]);
+};
+
+/* automatic uncaught exception tracking */
+UniversalAnalyticsPlugin.prototype.enableUncaughtExceptionReporting = function (enable, success, error) {
+ cordova.exec(success, error, 'UniversalAnalytics', 'enableUncaughtExceptionReporting', [enable]);
+};
+
+module.exports = new UniversalAnalyticsPlugin();
diff --git a/StoneIsland/plugins/fetch.json b/StoneIsland/plugins/fetch.json
index 7960a280..f1760eb1 100755
--- a/StoneIsland/plugins/fetch.json
+++ b/StoneIsland/plugins/fetch.json
@@ -106,5 +106,13 @@
"variables": {
"SENDER_ID": "XXXXXXX"
}
+ },
+ "cordova-plugin-google-analytics": {
+ "source": {
+ "type": "registry",
+ "id": "cordova-plugin-google-analytics"
+ },
+ "is_top_level": true,
+ "variables": {}
}
} \ No newline at end of file
diff --git a/StoneIsland/plugins/ios.json b/StoneIsland/plugins/ios.json
index 11f54f43..c090a55b 100644
--- a/StoneIsland/plugins/ios.json
+++ b/StoneIsland/plugins/ios.json
@@ -44,6 +44,9 @@
"phonegap-plugin-push": {
"SENDER_ID": "XXXXXXX",
"PACKAGE_NAME": "us.okfoc.stoneisland"
+ },
+ "cordova-plugin-google-analytics": {
+ "PACKAGE_NAME": "us.okfoc.stoneisland"
}
},
"dependent_plugins": {