Full Code of friimaind/pi-hole-droid for AI

master fd06eda5b96d cached
422 files
5.3 MB
1.4M tokens
1968 symbols
1 requests
Download .txt
Showing preview only (5,685K chars total). Download the full file or copy to clipboard to get everything.
Repository: friimaind/pi-hole-droid
Branch: master
Commit: fd06eda5b96d
Files: 422
Total size: 5.3 MB

Directory structure:
gitextract_97sv444t/

├── .gitignore
├── LICENSE
├── PRIVACY.MD
├── README.md
├── config.xml
├── hooks/
│   └── README.md
├── platforms/
│   ├── android/
│   │   ├── .gitignore
│   │   ├── AndroidManifest.xml
│   │   ├── CordovaLib/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── build/
│   │   │   │   ├── generated/
│   │   │   │   │   └── source/
│   │   │   │   │       └── buildConfig/
│   │   │   │   │           ├── debug/
│   │   │   │   │           │   └── org/
│   │   │   │   │           │       └── apache/
│   │   │   │   │           │           └── cordova/
│   │   │   │   │           │               └── BuildConfig.java
│   │   │   │   │           └── release/
│   │   │   │   │               └── org/
│   │   │   │   │                   └── apache/
│   │   │   │   │                       └── cordova/
│   │   │   │   │                           └── BuildConfig.java
│   │   │   │   ├── intermediates/
│   │   │   │   │   ├── bundles/
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   ├── AndroidManifest.xml
│   │   │   │   │   │   │   └── classes.jar
│   │   │   │   │   │   └── release/
│   │   │   │   │   │       ├── AndroidManifest.xml
│   │   │   │   │   │       └── classes.jar
│   │   │   │   │   ├── incremental/
│   │   │   │   │   │   ├── compileDebugAidl/
│   │   │   │   │   │   │   └── dependency.store
│   │   │   │   │   │   ├── compileReleaseAidl/
│   │   │   │   │   │   │   └── dependency.store
│   │   │   │   │   │   ├── mergeDebugAssets/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeDebugJniLibFolders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeDebugShaders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseAssets/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseJniLibFolders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseShaders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── packageDebugResources/
│   │   │   │   │   │   │   ├── compile-file-map.properties
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   └── packageReleaseResources/
│   │   │   │   │   │       ├── compile-file-map.properties
│   │   │   │   │   │       └── merger.xml
│   │   │   │   │   ├── incremental-safeguard/
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   └── tag.txt
│   │   │   │   │   │   └── release/
│   │   │   │   │   │       └── tag.txt
│   │   │   │   │   └── manifests/
│   │   │   │   │       └── aapt/
│   │   │   │   │           ├── debug/
│   │   │   │   │           │   └── AndroidManifest.xml
│   │   │   │   │           └── release/
│   │   │   │   │               └── AndroidManifest.xml
│   │   │   │   └── outputs/
│   │   │   │       └── aar/
│   │   │   │           ├── CordovaLib-debug.aar
│   │   │   │           └── CordovaLib-release.aar
│   │   │   ├── build.gradle
│   │   │   ├── cordova.gradle
│   │   │   ├── project.properties
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── apache/
│   │   │               └── cordova/
│   │   │                   ├── AuthenticationToken.java
│   │   │                   ├── CallbackContext.java
│   │   │                   ├── CallbackMap.java
│   │   │                   ├── Config.java
│   │   │                   ├── ConfigXmlParser.java
│   │   │                   ├── CordovaActivity.java
│   │   │                   ├── CordovaArgs.java
│   │   │                   ├── CordovaBridge.java
│   │   │                   ├── CordovaClientCertRequest.java
│   │   │                   ├── CordovaDialogsHelper.java
│   │   │                   ├── CordovaHttpAuthHandler.java
│   │   │                   ├── CordovaInterface.java
│   │   │                   ├── CordovaInterfaceImpl.java
│   │   │                   ├── CordovaPlugin.java
│   │   │                   ├── CordovaPreferences.java
│   │   │                   ├── CordovaResourceApi.java
│   │   │                   ├── CordovaWebView.java
│   │   │                   ├── CordovaWebViewEngine.java
│   │   │                   ├── CordovaWebViewImpl.java
│   │   │                   ├── CoreAndroid.java
│   │   │                   ├── ExposedJsApi.java
│   │   │                   ├── ICordovaClientCertRequest.java
│   │   │                   ├── ICordovaCookieManager.java
│   │   │                   ├── ICordovaHttpAuthHandler.java
│   │   │                   ├── LOG.java
│   │   │                   ├── NativeToJsMessageQueue.java
│   │   │                   ├── PluginEntry.java
│   │   │                   ├── PluginManager.java
│   │   │                   ├── PluginResult.java
│   │   │                   ├── ResumeCallback.java
│   │   │                   ├── Whitelist.java
│   │   │                   └── engine/
│   │   │                       ├── SystemCookieManager.java
│   │   │                       ├── SystemExposedJsApi.java
│   │   │                       ├── SystemWebChromeClient.java
│   │   │                       ├── SystemWebView.java
│   │   │                       ├── SystemWebViewClient.java
│   │   │                       └── SystemWebViewEngine.java
│   │   ├── android.json
│   │   ├── assets/
│   │   │   └── www/
│   │   │       ├── cordova-js-src/
│   │   │       │   ├── android/
│   │   │       │   │   ├── nativeapiprovider.js
│   │   │       │   │   └── promptbasednativeapi.js
│   │   │       │   ├── exec.js
│   │   │       │   ├── platform.js
│   │   │       │   └── plugin/
│   │   │       │       └── android/
│   │   │       │           └── app.js
│   │   │       ├── cordova.js
│   │   │       ├── cordova_plugins.js
│   │   │       ├── css/
│   │   │       │   ├── responsive.css
│   │   │       │   └── styles.css
│   │   │       ├── index.html
│   │   │       ├── js/
│   │   │       │   ├── main.js
│   │   │       │   └── utilities.js
│   │   │       ├── lib/
│   │   │       │   └── DataTables/
│   │   │       │       ├── DataTables-1.10.13/
│   │   │       │       │   ├── css/
│   │   │       │       │   │   ├── dataTables.bootstrap.css
│   │   │       │       │   │   ├── dataTables.foundation.css
│   │   │       │       │   │   ├── dataTables.jqueryui.css
│   │   │       │       │   │   ├── dataTables.semanticui.css
│   │   │       │       │   │   ├── jquery.dataTables.css
│   │   │       │       │   │   └── jquery.dataTables_themeroller.css
│   │   │       │       │   └── js/
│   │   │       │       │       ├── dataTables.bootstrap.js
│   │   │       │       │       ├── dataTables.foundation.js
│   │   │       │       │       ├── dataTables.jqueryui.js
│   │   │       │       │       ├── dataTables.semanticui.js
│   │   │       │       │       └── jquery.dataTables.js
│   │   │       │       ├── datatables.css
│   │   │       │       └── datatables.js
│   │   │       ├── partial/
│   │   │       │   ├── about-help.html
│   │   │       │   ├── app-settings.html
│   │   │       │   ├── dashboard.html
│   │   │       │   └── query-log.html
│   │   │       └── plugins/
│   │   │           ├── cordova-plugin-splashscreen/
│   │   │           │   └── www/
│   │   │           │       └── splashscreen.js
│   │   │           └── phonegap-plugin-barcodescanner/
│   │   │               └── www/
│   │   │                   └── barcodescanner.js
│   │   ├── build.gradle
│   │   ├── cordova/
│   │   │   ├── .jshintrc
│   │   │   ├── Api.js
│   │   │   ├── android_sdk_version
│   │   │   ├── android_sdk_version.bat
│   │   │   ├── build
│   │   │   ├── build.bat
│   │   │   ├── check_reqs
│   │   │   ├── check_reqs.bat
│   │   │   ├── clean
│   │   │   ├── clean.bat
│   │   │   ├── defaults.xml
│   │   │   ├── lib/
│   │   │   │   ├── Adb.js
│   │   │   │   ├── AndroidManifest.js
│   │   │   │   ├── AndroidProject.js
│   │   │   │   ├── AndroidStudio.js
│   │   │   │   ├── android_sdk.js
│   │   │   │   ├── build.js
│   │   │   │   ├── builders/
│   │   │   │   │   ├── AntBuilder.js
│   │   │   │   │   ├── GenericBuilder.js
│   │   │   │   │   ├── GradleBuilder.js
│   │   │   │   │   └── builders.js
│   │   │   │   ├── check_reqs.js
│   │   │   │   ├── device.js
│   │   │   │   ├── emulator.js
│   │   │   │   ├── install-device
│   │   │   │   ├── install-device.bat
│   │   │   │   ├── install-emulator
│   │   │   │   ├── install-emulator.bat
│   │   │   │   ├── list-devices
│   │   │   │   ├── list-devices.bat
│   │   │   │   ├── list-emulator-images
│   │   │   │   ├── list-emulator-images.bat
│   │   │   │   ├── list-started-emulators
│   │   │   │   ├── list-started-emulators.bat
│   │   │   │   ├── log.js
│   │   │   │   ├── plugin-build.gradle
│   │   │   │   ├── pluginHandlers.js
│   │   │   │   ├── prepare.js
│   │   │   │   ├── retry.js
│   │   │   │   ├── run.js
│   │   │   │   ├── start-emulator
│   │   │   │   └── start-emulator.bat
│   │   │   ├── log
│   │   │   ├── log.bat
│   │   │   ├── loggingHelper.js
│   │   │   ├── run
│   │   │   ├── run.bat
│   │   │   ├── version
│   │   │   └── version.bat
│   │   ├── libs/
│   │   │   └── barcodescanner.aar
│   │   ├── phonegap-plugin-barcodescanner/
│   │   │   └── piholedroid-barcodescanner.gradle
│   │   ├── platform_www/
│   │   │   ├── cordova-js-src/
│   │   │   │   ├── android/
│   │   │   │   │   ├── nativeapiprovider.js
│   │   │   │   │   └── promptbasednativeapi.js
│   │   │   │   ├── exec.js
│   │   │   │   ├── platform.js
│   │   │   │   └── plugin/
│   │   │   │       └── android/
│   │   │   │           └── app.js
│   │   │   ├── cordova.js
│   │   │   ├── cordova_plugins.js
│   │   │   └── plugins/
│   │   │       ├── cordova-plugin-splashscreen/
│   │   │       │   └── www/
│   │   │       │       └── splashscreen.js
│   │   │       └── phonegap-plugin-barcodescanner/
│   │   │           └── www/
│   │   │               └── barcodescanner.js
│   │   ├── project.properties
│   │   ├── res/
│   │   │   ├── values/
│   │   │   │   └── strings.xml
│   │   │   └── xml/
│   │   │       └── config.xml
│   │   ├── settings.gradle
│   │   ├── src/
│   │   │   ├── com/
│   │   │   │   └── phonegap/
│   │   │   │       └── plugins/
│   │   │   │           └── barcodescanner/
│   │   │   │               └── BarcodeScanner.java
│   │   │   ├── friimaind/
│   │   │   │   └── piholedroid/
│   │   │   │       └── MainActivity.java
│   │   │   └── org/
│   │   │       └── apache/
│   │   │           └── cordova/
│   │   │               ├── BuildHelper.java
│   │   │               ├── PermissionHelper.java
│   │   │               ├── splashscreen/
│   │   │               │   └── SplashScreen.java
│   │   │               └── whitelist/
│   │   │                   └── WhitelistPlugin.java
│   │   └── wrapper.gradle
│   ├── browser/
│   │   ├── browser.json
│   │   ├── config.xml
│   │   ├── cordova/
│   │   │   ├── build
│   │   │   ├── build.bat
│   │   │   ├── clean
│   │   │   ├── defaults.xml
│   │   │   ├── lib/
│   │   │   │   ├── build.js
│   │   │   │   ├── check_reqs.js
│   │   │   │   └── clean.js
│   │   │   ├── run
│   │   │   ├── run.bat
│   │   │   ├── version
│   │   │   └── version.bat
│   │   ├── css/
│   │   │   └── index.css
│   │   ├── index.html
│   │   ├── js/
│   │   │   └── index.js
│   │   ├── manifest.webapp
│   │   ├── platform_www/
│   │   │   ├── confighelper.js
│   │   │   ├── cordova-js-src/
│   │   │   │   ├── confighelper.js
│   │   │   │   ├── exec.js
│   │   │   │   └── platform.js
│   │   │   ├── cordova.js
│   │   │   ├── cordova_plugins.js
│   │   │   ├── exec.js
│   │   │   ├── platform.js
│   │   │   └── plugins/
│   │   │       ├── cordova-plugin-splashscreen/
│   │   │       │   ├── src/
│   │   │       │   │   └── browser/
│   │   │       │   │       └── SplashScreenProxy.js
│   │   │       │   └── www/
│   │   │       │       └── splashscreen.js
│   │   │       └── phonegap-plugin-barcodescanner/
│   │   │           ├── src/
│   │   │           │   └── browser/
│   │   │           │       └── BarcodeScannerProxy.js
│   │   │           └── www/
│   │   │               └── barcodescanner.js
│   │   └── www/
│   │       ├── config.xml
│   │       ├── confighelper.js
│   │       ├── cordova-js-src/
│   │       │   ├── confighelper.js
│   │       │   ├── exec.js
│   │       │   └── platform.js
│   │       ├── cordova.js
│   │       ├── cordova_plugins.js
│   │       ├── css/
│   │       │   ├── responsive.css
│   │       │   └── styles.css
│   │       ├── exec.js
│   │       ├── index.html
│   │       ├── js/
│   │       │   ├── main.js
│   │       │   └── utilities.js
│   │       ├── lib/
│   │       │   └── DataTables/
│   │       │       ├── DataTables-1.10.13/
│   │       │       │   ├── css/
│   │       │       │   │   ├── dataTables.bootstrap.css
│   │       │       │   │   ├── dataTables.foundation.css
│   │       │       │   │   ├── dataTables.jqueryui.css
│   │       │       │   │   ├── dataTables.semanticui.css
│   │       │       │   │   ├── jquery.dataTables.css
│   │       │       │   │   └── jquery.dataTables_themeroller.css
│   │       │       │   └── js/
│   │       │       │       ├── dataTables.bootstrap.js
│   │       │       │       ├── dataTables.foundation.js
│   │       │       │       ├── dataTables.jqueryui.js
│   │       │       │       ├── dataTables.semanticui.js
│   │       │       │       └── jquery.dataTables.js
│   │       │       ├── datatables.css
│   │       │       └── datatables.js
│   │       ├── partial/
│   │       │   ├── about-help.html
│   │       │   ├── app-settings.html
│   │       │   ├── dashboard.html
│   │       │   └── query-log.html
│   │       ├── platform.js
│   │       └── plugins/
│   │           ├── cordova-plugin-splashscreen/
│   │           │   ├── src/
│   │           │   │   └── browser/
│   │           │   │       └── SplashScreenProxy.js
│   │           │   └── www/
│   │           │       └── splashscreen.js
│   │           └── phonegap-plugin-barcodescanner/
│   │               ├── src/
│   │               │   └── browser/
│   │               │       └── BarcodeScannerProxy.js
│   │               └── www/
│   │                   └── barcodescanner.js
│   └── platforms.json
├── plugins/
│   ├── android.json
│   ├── browser.json
│   ├── cordova-plugin-compat/
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   └── src/
│   │       ├── android/
│   │       │   ├── BuildHelper.java
│   │       │   └── PermissionHelper.java
│   │       └── cordova-plugin-compat.iml
│   ├── cordova-plugin-splashscreen/
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── doc/
│   │   │   ├── de/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── es/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── fr/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── it/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ja/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ko/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── pl/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ru/
│   │   │   │   └── index.md
│   │   │   └── zh/
│   │   │       ├── README.md
│   │   │       └── index.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   ├── src/
│   │   │   ├── android/
│   │   │   │   └── SplashScreen.java
│   │   │   ├── blackberry10/
│   │   │   │   └── index.js
│   │   │   ├── browser/
│   │   │   │   └── SplashScreenProxy.js
│   │   │   ├── cordova-plugin-splashscreen.iml
│   │   │   ├── ios/
│   │   │   │   ├── CDVSplashScreen.h
│   │   │   │   ├── CDVSplashScreen.m
│   │   │   │   ├── CDVViewController+SplashScreen.h
│   │   │   │   └── CDVViewController+SplashScreen.m
│   │   │   ├── tizen/
│   │   │   │   └── SplashScreenProxy.js
│   │   │   ├── ubuntu/
│   │   │   │   ├── splashscreen.cpp
│   │   │   │   └── splashscreen.h
│   │   │   └── wp/
│   │   │       ├── ResolutionHelper.cs
│   │   │       └── SplashScreen.cs
│   │   ├── tests/
│   │   │   ├── ios/
│   │   │   │   ├── CDVSplashScreenTest/
│   │   │   │   │   ├── .npmignore
│   │   │   │   │   ├── CDVSplashScreenLibTests/
│   │   │   │   │   │   ├── ImageNameTest.m
│   │   │   │   │   │   ├── ImageNameTestDelegates.h
│   │   │   │   │   │   ├── ImageNameTestDelegates.m
│   │   │   │   │   │   └── Info.plist
│   │   │   │   │   └── CDVSplashScreenTest.xcodeproj/
│   │   │   │   │       ├── project.pbxproj
│   │   │   │   │       ├── project.xcworkspace/
│   │   │   │   │       │   ├── contents.xcworkspacedata
│   │   │   │   │       │   └── xcshareddata/
│   │   │   │   │       │       └── CDVSplashScreenTest.xccheckout
│   │   │   │   │       └── xcshareddata/
│   │   │   │   │           └── xcschemes/
│   │   │   │   │               ├── CDVSplashScreenLib.xcscheme
│   │   │   │   │               └── CDVSplashScreenLibTests.xcscheme
│   │   │   │   ├── CDVSplashScreenTest.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── CDVSplashScreenTest.xccheckout
│   │   │   │   │       └── xcschemes/
│   │   │   │   │           └── CordovaLib.xcscheme
│   │   │   │   ├── README.md
│   │   │   │   ├── doc/
│   │   │   │   │   ├── de/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── es/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── fr/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── it/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── ja/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── ko/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── pl/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   └── zh/
│   │   │   │   │       └── README.md
│   │   │   │   └── package.json
│   │   │   ├── plugin.xml
│   │   │   └── tests.js
│   │   └── www/
│   │       ├── splashscreen.js
│   │       └── windows/
│   │           └── SplashScreenProxy.js
│   ├── cordova-plugin-whitelist/
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── doc/
│   │   │   ├── de/
│   │   │   │   └── README.md
│   │   │   ├── es/
│   │   │   │   └── README.md
│   │   │   ├── fr/
│   │   │   │   └── README.md
│   │   │   ├── it/
│   │   │   │   └── README.md
│   │   │   ├── ja/
│   │   │   │   └── README.md
│   │   │   ├── ko/
│   │   │   │   └── README.md
│   │   │   ├── pl/
│   │   │   │   └── README.md
│   │   │   └── zh/
│   │   │       └── README.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   └── src/
│   │       ├── android/
│   │       │   └── WhitelistPlugin.java
│   │       └── cordova-plugin-whitelist.iml
│   ├── fetch.json
│   └── phonegap-plugin-barcodescanner/
│       ├── CHANGELOG.md
│       ├── README.md
│       ├── hooks/
│       │   └── windows/
│       │       └── check-arch.js
│       ├── package.json
│       ├── plugin.xml
│       ├── spec/
│       │   ├── helper/
│       │   │   └── cordova.js
│       │   └── index.spec.js
│       ├── src/
│       │   ├── android/
│       │   │   ├── README.md
│       │   │   ├── barcodescanner-release-2.1.2.aar
│       │   │   ├── barcodescanner.gradle
│       │   │   └── com/
│       │   │       └── phonegap/
│       │   │           └── plugins/
│       │   │               └── barcodescanner/
│       │   │                   └── BarcodeScanner.java
│       │   ├── blackberry10/
│       │   │   ├── LICENSE
│       │   │   ├── index.js
│       │   │   ├── native/
│       │   │   │   ├── .cproject
│       │   │   │   ├── .settings/
│       │   │   │   │   └── com.qnx.tools.ide.core.prefs
│       │   │   │   ├── device/
│       │   │   │   │   └── .npmignore
│       │   │   │   ├── public/
│       │   │   │   │   ├── json/
│       │   │   │   │   │   ├── autolink.h
│       │   │   │   │   │   ├── config.h
│       │   │   │   │   │   ├── features.h
│       │   │   │   │   │   ├── forwards.h
│       │   │   │   │   │   ├── json.h
│       │   │   │   │   │   ├── reader.h
│       │   │   │   │   │   ├── value.h
│       │   │   │   │   │   └── writer.h
│       │   │   │   │   ├── json_batchallocator.h
│       │   │   │   │   ├── json_internalarray.inl
│       │   │   │   │   ├── json_internalmap.inl
│       │   │   │   │   ├── json_reader.cpp
│       │   │   │   │   ├── json_value.cpp
│       │   │   │   │   ├── json_valueiterator.inl
│       │   │   │   │   ├── json_writer.cpp
│       │   │   │   │   ├── plugin.cpp
│       │   │   │   │   ├── plugin.h
│       │   │   │   │   ├── tokenizer.cpp
│       │   │   │   │   └── tokenizer.h
│       │   │   │   ├── simulator/
│       │   │   │   │   └── .npmignore
│       │   │   │   └── src/
│       │   │   │       ├── Logger.cpp
│       │   │   │       ├── Logger.hpp
│       │   │   │       ├── barcodescanner_js.cpp
│       │   │   │       ├── barcodescanner_js.hpp
│       │   │   │       ├── barcodescanner_ndk.cpp
│       │   │   │       └── barcodescanner_ndk.hpp
│       │   │   └── qrcode.js
│       │   ├── browser/
│       │   │   └── BarcodeScannerProxy.js
│       │   ├── ios/
│       │   │   ├── CDVBarcodeScanner.bundle/
│       │   │   │   └── beep.caf
│       │   │   ├── CDVBarcodeScanner.mm
│       │   │   ├── scannerOverlay.xib
│       │   │   ├── zxing-all-in-one.cpp
│       │   │   └── zxing-all-in-one.h
│       │   ├── phonegap-plugin-barcodescanner.iml
│       │   ├── windows/
│       │   │   ├── BarcodeScannerProxy.js
│       │   │   ├── assets/
│       │   │   │   └── plugin-barcodeScanner.css
│       │   │   ├── lib/
│       │   │   │   ├── Properties/
│       │   │   │   │   └── AssemblyInfo.cs
│       │   │   │   ├── Reader.cs
│       │   │   │   ├── WinRTBarcodeReader.csproj
│       │   │   │   └── ZXing.winmd
│       │   │   └── lib.UW/
│       │   │       ├── ANY/
│       │   │       │   └── ZXing.winmd
│       │   │       ├── ARM/
│       │   │       │   └── ZXing.winmd
│       │   │       ├── x64/
│       │   │       │   └── ZXing.winmd
│       │   │       └── x86/
│       │   │           └── ZXing.winmd
│       │   └── wp8/
│       │       ├── BarcodeScanner.cs
│       │       ├── BarcodeScannerTask.cs
│       │       ├── BarcodeScannerUI.xaml
│       │       └── BarcodeScannerUI.xaml.cs
│       ├── tests/
│       │   ├── plugin.xml
│       │   └── tests.js
│       └── www/
│           └── barcodescanner.js
└── www/
    ├── css/
    │   ├── responsive.css
    │   └── styles.css
    ├── index.html
    ├── js/
    │   ├── main.js
    │   └── utilities.js
    ├── lib/
    │   └── DataTables/
    │       ├── DataTables-1.10.13/
    │       │   ├── css/
    │       │   │   ├── dataTables.bootstrap.css
    │       │   │   ├── dataTables.foundation.css
    │       │   │   ├── dataTables.jqueryui.css
    │       │   │   ├── dataTables.semanticui.css
    │       │   │   ├── jquery.dataTables.css
    │       │   │   └── jquery.dataTables_themeroller.css
    │       │   └── js/
    │       │       ├── dataTables.bootstrap.js
    │       │       ├── dataTables.foundation.js
    │       │       ├── dataTables.jqueryui.js
    │       │       ├── dataTables.semanticui.js
    │       │       └── jquery.dataTables.js
    │       ├── datatables.css
    │       └── datatables.js
    └── partial/
        ├── about-help.html
        ├── app-settings.html
        ├── dashboard.html
        └── query-log.html

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# IDE
nbproject/

# Android
platforms/android/bin/
platforms/android/gen/
platforms/android/build/

# iOS
platforms/ios/build/
platforms/ios/CordovaLib/build/
platforms/ios/www
platforms/ios/MyPace/config.xml
platforms/ios/.staging

# Browser
platforms/browser/build/

# Emulator logs
platforms/ios/cordova/console.log


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: PRIVACY.MD
================================================
# Pi-hole Droid - Privacy

### Why does Pi-hole Droid request permission to access my camera?
The app could scan the QR Code of your Pi-hole to obtain the token to connect to it. This function is available on the "App settings" page.

### Does Pi-hole Droid collect informations?
The app will **locally** store the IP and the token of your Pi-hole for the only purpose of connecting to it.


================================================
FILE: README.md
================================================
# Pi-hole Droid

![App Logo](www/assets/mipmap-hdpi/ic_launcher.png?raw=true)

Pi-hole Droid is an *unofficial* client that connects to your [Pi-hole](https://github.com/pi-hole/pi-hole) to show charts and statistics.

It requires the new *Pi-hole 3.0 FTL* (released on 2 May 2017). Please update your Pi-hole!

This is the repository of the Pi-hole Droid's opensource application available on [Google Play Store](https://play.google.com/store/apps/details?id=friimaind.piholedroid).

**What is Pi-hole?**

> Pi-hole is the multi-platform, network-wide ad blocker which blocks ads for all your devices without the need to install client-side software.

Pi-hole Droid makes use of [Pi-hole API](https://github.com/pi-hole/AdminLTE) to obtain all the data. The credentials is **locally stored** on your device through localStorage.

## Download

<a href="#/"><img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" height="60"></a>

*Please note:* Google Play Store is temporary unavailable, in the meantime you can **get the latest APK** directly from [here](https://github.com/friimaind/pi-hole-droid/releases/latest) or [F-Droid repository](https://f-droid.org/en/packages/friimaind.piholedroid/)

## Screenshots
![Homepage](screenshots/home.png?raw=true "Homepage") 
![Menu](screenshots/menu.png?raw=true "Menu") 

![Charts](screenshots/charts.png?raw=true "Charts")
![Settings](screenshots/settings.png?raw=true "Settings")

![Toggle On](screenshots/toggle_on.png?raw=true "Toggle On")
![Toggle Off](screenshots/toggle_off.png?raw=true "Toggle Off")

![Home Landscape](screenshots/home-landscape.png?raw=true "Home Landscape")

![Landscape](screenshots/landscape.png?raw=true "Landscape")

![Landscape2](screenshots/landscape-2.png?raw=true "Landscape2")

![Query Log](screenshots/query-log.png?raw=true "Query Log")

## Built With

* [Apache Cordova](https://cordova.apache.org/)
* [MDL Material Design Lite](https://getmdl.io)
* [jQuery](https://jquery.com)
* [Chartist JS](https://gionkunz.github.io/chartist-js)
* [DataTables](https://datatables.net)
* [Hammer.js](http://hammerjs.github.io)
* [BarcodeScanner](https://github.com/phonegap/phonegap-plugin-barcodescanner)

## Upcoming releases
I'm working on these tasks for the next releases:

* Improvements on UI (loading icons on table views, better UI on Query Log page primarily)
* Improvements on landscape view (better use of space)
* Query Log: highlight blocked queries
* Auto update toggle on Query Log's page
* Dark theme

Do you have a feature request? Please, [write an issue](https://github.com/friimaind/pi-hole-droid/issues).

## Oh no! I found a bug!

Please, [write an issue](https://github.com/friimaind/pi-hole-droid/issues).

## Authors

* **Massimiliano Monaro** - [blog.friimaind.it](https://blog.friimaind.it)

## Contributing

If you want to contribute to this project and make it better, your help is very welcome! :)

## App permissions

The app could scan the QR Code of your Pi-hole to retrieve the token. This function uses the camera of your smartphone so this is the reason why the app needs the **camera permission**.

## License

This project is licensed under the terms of the [GNU General Public License v2.0](LICENSE).


================================================
FILE: config.xml
================================================
<?xml version='1.0' encoding='utf-8'?>
<widget id="friimaind.piholedroid" version="1.0.5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>Pi-hole Droid</name>
    <description>
        Monitor your Pi-hole with your Android smartphone
    </description>
    <author email="massimiliano.monaro@gmail.com" href="https://blog.friimaind.it">
        Massimiliano Monaro
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <preference name="Fullscreen" value="false" />
    <preference name="SplashScreenDelay" value="2000" />
    <preference name="SplashScreen" value="screen"/>
    <preference name="SplashMaintainAspectRatio" value="true" />
    <preference name="ShowSplashScreenSpinner" value="false" />
    <platform name="android">
        <icon src="www/assets/mipmap-ldpi/ic_launcher.png" density="ldpi" />
        <icon src="www/assets/mipmap-mdpi/ic_launcher.png" density="mdpi" />
        <icon src="www/assets/mipmap-hdpi/ic_launcher.png" density="hdpi" />
        <icon src="www/assets/mipmap-xhdpi/ic_launcher.png" density="xhdpi" />
        <allow-intent href="market:*" />
    </platform>
</widget>


================================================
FILE: hooks/README.md
================================================
<!--
#
# 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.
#
-->
# Cordova Hooks

Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system  to customize cordova commands. See Hooks Guide for more details:  http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide.


================================================
FILE: platforms/android/.gitignore
================================================
# Non-project-specific build files:
build.xml
local.properties
/gradlew
/gradlew.bat
/gradle
# Ant builds
ant-build
ant-gen
# Eclipse builds
gen
out
# Gradle builds
/build


================================================
FILE: platforms/android/AndroidManifest.xml
================================================
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10005" android:versionName="1.0.5" package="friimaind.piholedroid" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden|screenSize" android:exported="false" android:name="com.google.zxing.client.android.CaptureActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" />
        <activity android:label="Share" android:name="com.google.zxing.client.android.encode.EncodeActivity" />
    </application>
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="25" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
</manifest>


================================================
FILE: platforms/android/CordovaLib/AndroidManifest.xml
================================================
<?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:versionName="1.0" android:versionCode="1">
    <uses-sdk android:minSdkVersion="14" />
</manifest>


================================================
FILE: platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java
================================================
/**
 * 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";
}


================================================
FILE: platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java
================================================
/**
 * 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";
}


================================================
FILE: platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml
================================================
<?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>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml
================================================
<?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>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/assets"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/assets/shaders/debug"/></dataSet><dataSet config="debug"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/debug/assets"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="debug"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/debug/jniLibs"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="debug"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/debug/shaders"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/assets"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/assets/shaders/release"/></dataSet><dataSet config="release"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/release/assets"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/main/jniLibs"/></dataSet><dataSet config="release"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/release/jniLibs"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/main/shaders"/></dataSet><dataSet config="release"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/release/shaders"/></dataSet></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties
================================================
#Sun Apr 23 15:43:32 CEST 2017


================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/res"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug$Generated" generated="true"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/debug/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/res"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/rs/debug"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/resValues/debug"/></dataSet><dataSet config="debug" generated-set="debug$Generated"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/debug/res"/></dataSet><mergedItems/></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties
================================================
#Sun Apr 23 15:43:32 CEST 2017


================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main$Generated" generated="true"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/res"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release$Generated" generated="true"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/release/res"/></dataSet><dataSet config="main" generated-set="main$Generated"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/res"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/rs/release"/><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/build/generated/res/resValues/release"/></dataSet><dataSet config="release" generated-set="release$Generated"><source path="/home/massimiliano/cordova/piholeApp/platforms/android/CordovaLib/src/release/res"/></dataSet><mergedItems/></merger>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt
================================================
incremental task execution

================================================
FILE: platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt
================================================
incremental task execution

================================================
FILE: platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml
================================================
<?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>

================================================
FILE: platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml
================================================
<?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>

================================================
FILE: platforms/android/CordovaLib/build.gradle
================================================
/* 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.
*/

ext {
    apply from: 'cordova.gradle'
    cdvCompileSdkVersion = privateHelpers.getProjectTarget()
    cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
}

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    }
}

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

group = 'org.apache.cordova'
version = '6.2.0'

android {
    compileSdkVersion cdvCompileSdkVersion
    buildToolsVersion cdvBuildToolsVersion
    publishNonDefault true

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
    }
}

install {
    repositories.mavenInstaller {
        pom {
            project {
                packaging 'aar'
                name 'Cordova'
                url 'https://cordova.apache.org'
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id 'stevengill'
                        name 'Steve Gill'
                    }
                }
                scm {
                    connection 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
                    developerConnection 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
                    url 'https://git-wip-us.apache.org/repos/asf?p=cordova-android'

                }
            }
        }
    }
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

artifacts {
    archives sourcesJar
}

bintray {
    user = System.getenv('BINTRAY_USER')
    key = System.getenv('BINTRAY_KEY')
    configurations = ['archives']
    pkg {
        repo = 'maven'
        name = 'cordova-android'
        userOrg = 'cordova'
        licenses = ['Apache-2.0']
        vcsUrl = 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git'
        websiteUrl = 'https://cordova.apache.org'
        issueTrackerUrl = 'https://issues.apache.org/jira/browse/CB'
        publicDownloadNumbers = true
        licenses = ['Apache-2.0']
        labels = ['android', 'cordova', 'phonegap']
        version {
            name = version
            released  = new Date()
            vcsTag = version
        }
    }
}


================================================
FILE: platforms/android/CordovaLib/cordova.gradle
================================================
/*
       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.
*/

import java.util.regex.Pattern
import groovy.swing.SwingBuilder

String doEnsureValueExists(filePath, props, key) {
    if (props.get(key) == null) {
        throw new GradleException(filePath + ': Missing key required "' + key + '"')
    }
    return props.get(key)
}

String doGetProjectTarget() {
    def props = new Properties()
    file('project.properties').withReader { reader ->
        props.load(reader)
    }
    return doEnsureValueExists('project.properties', props, 'target')
}

String[] getAvailableBuildTools() {
    def buildToolsDir = new File(getAndroidSdkDir(), "build-tools")
    buildToolsDir.list()
        .findAll { it ==~ /[0-9.]+/ }
        .sort { a, b -> compareVersions(b, a) }
}

String doFindLatestInstalledBuildTools(String minBuildToolsVersion) {
    def availableBuildToolsVersions
    try {
        availableBuildToolsVersions = getAvailableBuildTools()
    } catch (e) {
        println "An exception occurred while trying to find the Android build tools."
        throw e
    }
    if (availableBuildToolsVersions.length > 0) {
        def highestBuildToolsVersion = availableBuildToolsVersions[0]
        if (compareVersions(highestBuildToolsVersion, minBuildToolsVersion) < 0) {
            throw new RuntimeException(
                "No usable Android build tools found. Highest installed version is " +
                highestBuildToolsVersion + "; minimum version required is " +
                minBuildToolsVersion + ".")
        }
        highestBuildToolsVersion
    } else {
        throw new RuntimeException(
            "No installed build tools found. Install the Android build tools version " +
            minBuildToolsVersion + " or higher.")
    }
}

// Return the first non-zero result of subtracting version list elements
// pairwise. If they are all identical, return the difference in length of
// the two lists.
int compareVersionList(Collection aParts, Collection bParts) {
    def pairs = ([aParts, bParts]).transpose()
    pairs.findResult(aParts.size()-bParts.size()) {it[0] - it[1] != 0 ? it[0] - it[1] : null}
}

// Compare two version strings, such as "19.0.0" and "18.1.1.0". If all matched
// elements are identical, the longer version is the largest by this method.
// Examples:
//   "19.0.0" > "19"
//   "19.0.1" > "19.0.0"
//   "19.1.0" > "19.0.1"
//   "19" > "18.999.999"
int compareVersions(String a, String b) {
    def aParts = a.tokenize('.').collect {it.toInteger()}
    def bParts = b.tokenize('.').collect {it.toInteger()}
    compareVersionList(aParts, bParts)
}

String getAndroidSdkDir() {
    def rootDir = project.rootDir
    def androidSdkDir = null
    String envVar = System.getenv("ANDROID_HOME")
    def localProperties = new File(rootDir, 'local.properties')
    String systemProperty = System.getProperty("android.home")
    if (envVar != null) {
        androidSdkDir = envVar
    } else if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }
        def sdkDirProp = properties.getProperty('sdk.dir')
        if (sdkDirProp != null) {
            androidSdkDir = sdkDirProp
        } else {
            sdkDirProp = properties.getProperty('android.dir')
            if (sdkDirProp != null) {
                androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath()
            }
        }
    }
    if (androidSdkDir == null && systemProperty != null) {
        androidSdkDir = systemProperty
    }
    if (androidSdkDir == null) {
        throw new RuntimeException(
            "Unable to determine Android SDK directory.")
    }
    androidSdkDir
}

def doExtractIntFromManifest(name) {
    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
    def pattern = Pattern.compile(name + "=\"(\\d+)\"")
    def matcher = pattern.matcher(manifestFile.getText())
    matcher.find()
    return new BigInteger(matcher.group(1))
}

def doExtractStringFromManifest(name) {
    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
    def pattern = Pattern.compile(name + "=\"(\\S+)\"")
    def matcher = pattern.matcher(manifestFile.getText())
    matcher.find()
    return matcher.group(1)
}

def doPromptForPassword(msg) {
    if (System.console() == null) {
        def ret = null
        new SwingBuilder().edt {
            dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
                vbox {
                    label(text: msg)
                    def input = passwordField()
                    button(defaultButton: true, text: 'OK', actionPerformed: {
                        ret = input.password;
                        dispose();
                    })
                }
            }
        }
        if (!ret) {
            throw new GradleException('User canceled build')
        }
        return new String(ret)
    } else {
        return System.console().readPassword('\n' + msg);
    }
}

def doGetConfigXml() {
    def xml = file("res/xml/config.xml").getText()
    // Disable namespace awareness since Cordova doesn't use them properly
    return new XmlParser(false, false).parseText(xml)
}

def doGetConfigPreference(name, defaultValue) {
    name = name.toLowerCase()
    def root = doGetConfigXml()

    def ret = defaultValue
    root.preference.each { it ->
        def attrName = it.attribute("name")
        if (attrName && attrName.toLowerCase() == name) {
            ret = it.attribute("value")
        }
    }
    return ret
}

// Properties exported here are visible to all plugins.
ext {
    // These helpers are shared, but are not guaranteed to be stable / unchanged.
    privateHelpers = {}
    privateHelpers.getProjectTarget = { doGetProjectTarget() }
    privateHelpers.findLatestInstalledBuildTools = { doFindLatestInstalledBuildTools('19.1.0') }
    privateHelpers.extractIntFromManifest = { name -> doExtractIntFromManifest(name) }
    privateHelpers.extractStringFromManifest = { name -> doExtractStringFromManifest(name) }
    privateHelpers.promptForPassword = { msg -> doPromptForPassword(msg) }
    privateHelpers.ensureValueExists = { filePath, props, key -> doEnsureValueExists(filePath, props, key) }

    // These helpers can be used by plugins / projects and will not change.
    cdvHelpers = {}
    // Returns a XmlParser for the config.xml. Added in 4.1.0.
    cdvHelpers.getConfigXml = { doGetConfigXml() }
    // Returns the value for the desired <preference>. Added in 4.1.0.
    cdvHelpers.getConfigPreference = { name, defaultValue -> doGetConfigPreference(name, defaultValue) }
}



================================================
FILE: platforms/android/CordovaLib/project.properties
================================================
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "ant.properties", and override values to adapt the script to your
# project structure.

# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=android-25
apk-configurations=
renderscript.opt.level=O0
android.library=true


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java
================================================
/*
       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.
*/
package org.apache.cordova;

/**
 * The Class AuthenticationToken defines the userName and password to be used for authenticating a web resource
 */
public class AuthenticationToken {
    private String userName;
    private String password;

    /**
     * Gets the user name.
     *
     * @return the user name
     */
    public String getUserName() {
        return userName;
    }

    /**
     * Sets the user name.
     *
     * @param userName
     *            the new user name
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * Gets the password.
     *
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * Sets the password.
     *
     * @param password
     *            the new password
     */
    public void setPassword(String password) {
        this.password = password;
    }




}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java
================================================
/*
       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.
*/
package org.apache.cordova;

import org.json.JSONArray;

import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult;
import org.json.JSONObject;

public class CallbackContext {
    private static final String LOG_TAG = "CordovaPlugin";

    private String callbackId;
    private CordovaWebView webView;
    protected boolean finished;
    private int changingThreads;

    public CallbackContext(String callbackId, CordovaWebView webView) {
        this.callbackId = callbackId;
        this.webView = webView;
    }

    public boolean isFinished() {
        return finished;
    }

    public boolean isChangingThreads() {
        return changingThreads > 0;
    }

    public String getCallbackId() {
        return callbackId;
    }

    public void sendPluginResult(PluginResult pluginResult) {
        synchronized (this) {
            if (finished) {
                LOG.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());
                return;
            } else {
                finished = !pluginResult.getKeepCallback();
            }
        }
        webView.sendPluginResult(pluginResult, callbackId);
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     *
     * @param message           The message to add to the success result.
     */
    public void success(JSONObject message) {
        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     *
     * @param message           The message to add to the success result.
     */
    public void success(String message) {
        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     *
     * @param message           The message to add to the success result.
     */
    public void success(JSONArray message) {
        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     *
     * @param message           The message to add to the success result.
     */
    public void success(byte[] message) {
        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     *
     * @param message           The message to add to the success result.
     */
    public void success(int message) {
        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
    }

    /**
     * Helper for success callbacks that just returns the Status.OK by default
     */
    public void success() {
        sendPluginResult(new PluginResult(PluginResult.Status.OK));
    }

    /**
     * Helper for error callbacks that just returns the Status.ERROR by default
     *
     * @param message           The message to add to the error result.
     */
    public void error(JSONObject message) {
        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
    }

    /**
     * Helper for error callbacks that just returns the Status.ERROR by default
     *
     * @param message           The message to add to the error result.
     */
    public void error(String message) {
        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
    }

    /**
     * Helper for error callbacks that just returns the Status.ERROR by default
     *
     * @param message           The message to add to the error result.
     */
    public void error(int message) {
        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.util.Pair;
import android.util.SparseArray;

/**
 * Provides a collection that maps unique request codes to CordovaPlugins and Integers.
 * Used to ensure that when plugins make requests for runtime permissions, those requests do not
 * collide with requests from other plugins that use the same request code value.
 */
public class CallbackMap {
    private int currentCallbackId = 0;
    private SparseArray<Pair<CordovaPlugin, Integer>> callbacks;

    public CallbackMap() {
        this.callbacks = new SparseArray<Pair<CordovaPlugin, Integer>>();
    }

    /**
     * Stores a CordovaPlugin and request code and returns a new unique request code to use
     * in a permission request.
     *
     * @param receiver      The plugin that is making the request
     * @param requestCode   The original request code used by the plugin
     * @return              A unique request code that can be used to retrieve this callback
     *                      with getAndRemoveCallback()
     */
    public synchronized int registerCallback(CordovaPlugin receiver, int requestCode) {
        int mappedId = this.currentCallbackId++;
        callbacks.put(mappedId, new Pair<CordovaPlugin, Integer>(receiver, requestCode));
        return mappedId;
    }

    /**
     * Retrieves and removes a callback stored in the map using the mapped request code
     * obtained from registerCallback()
     *
     * @param mappedId      The request code obtained from registerCallback()
     * @return              The CordovaPlugin and orignal request code that correspond to the
     *                      given mappedCode
     */
    public synchronized Pair<CordovaPlugin, Integer> getAndRemoveCallback(int mappedId) {
        Pair<CordovaPlugin, Integer> callback = callbacks.get(mappedId);
        callbacks.remove(mappedId);
        return callback;
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/Config.java
================================================
/*
       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.
*/

package org.apache.cordova;

import java.util.List;

import android.app.Activity;

@Deprecated // Use Whitelist, CordovaPrefences, etc. directly.
public class Config {
    private static final String TAG = "Config";

    static ConfigXmlParser parser;

    private Config() {
    }

    public static void init(Activity action) {
        parser = new ConfigXmlParser();
        parser.parse(action);
        //TODO: Add feature to bring this back.  Some preferences should be overridden by intents, but not all
        parser.getPreferences().setPreferencesBundle(action.getIntent().getExtras());
    }

    // Intended to be used for testing only; creates an empty configuration.
    public static void init() {
        if (parser == null) {
            parser = new ConfigXmlParser();
        }
    }

    public static String getStartUrl() {
        if (parser == null) {
            return "file:///android_asset/www/index.html";
        }
        return parser.getLaunchUrl();
    }

    public static String getErrorUrl() {
        return parser.getPreferences().getString("errorurl", null);
    }

    public static List<PluginEntry> getPluginEntries() {
        return parser.getPluginEntries();
    }

    public static CordovaPreferences getPreferences() {
        return parser.getPreferences();
    }

    public static boolean isInitialized() {
        return parser != null;
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java
================================================
/*
       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.
*/

package org.apache.cordova;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.content.Context;

public class ConfigXmlParser {
    private static String TAG = "ConfigXmlParser";

    private String launchUrl = "file:///android_asset/www/index.html";
    private CordovaPreferences prefs = new CordovaPreferences();
    private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20);

    public CordovaPreferences getPreferences() {
        return prefs;
    }

    public ArrayList<PluginEntry> getPluginEntries() {
        return pluginEntries;
    }

    public String getLaunchUrl() {
        return launchUrl;
    }

    public void parse(Context action) {
        // First checking the class namespace for config.xml
        int id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName());
        if (id == 0) {
            // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml
            id = action.getResources().getIdentifier("config", "xml", action.getPackageName());
            if (id == 0) {
                LOG.e(TAG, "res/xml/config.xml is missing!");
                return;
            }
        }
        parse(action.getResources().getXml(id));
    }

    boolean insideFeature = false;
    String service = "", pluginClass = "", paramType = "";
    boolean onload = false;

    public void parse(XmlPullParser xml) {
        int eventType = -1;

        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                handleStartTag(xml);
            }
            else if (eventType == XmlPullParser.END_TAG)
            {
                handleEndTag(xml);
            }
            try {
                eventType = xml.next();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void handleStartTag(XmlPullParser xml) {
        String strNode = xml.getName();
        if (strNode.equals("feature")) {
            //Check for supported feature sets  aka. plugins (Accelerometer, Geolocation, etc)
            //Set the bit for reading params
            insideFeature = true;
            service = xml.getAttributeValue(null, "name");
        }
        else if (insideFeature && strNode.equals("param")) {
            paramType = xml.getAttributeValue(null, "name");
            if (paramType.equals("service")) // check if it is using the older service param
                service = xml.getAttributeValue(null, "value");
            else if (paramType.equals("package") || paramType.equals("android-package"))
                pluginClass = xml.getAttributeValue(null,"value");
            else if (paramType.equals("onload"))
                onload = "true".equals(xml.getAttributeValue(null, "value"));
        }
        else if (strNode.equals("preference")) {
            String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.ENGLISH);
            String value = xml.getAttributeValue(null, "value");
            prefs.set(name, value);
        }
        else if (strNode.equals("content")) {
            String src = xml.getAttributeValue(null, "src");
            if (src != null) {
                setStartUrl(src);
            }
        }
    }

    public void handleEndTag(XmlPullParser xml) {
        String strNode = xml.getName();
        if (strNode.equals("feature")) {
            pluginEntries.add(new PluginEntry(service, pluginClass, onload));

            service = "";
            pluginClass = "";
            insideFeature = false;
            onload = false;
        }
    }

    private void setStartUrl(String src) {
        Pattern schemeRegex = Pattern.compile("^[a-z-]+://");
        Matcher matcher = schemeRegex.matcher(src);
        if (matcher.find()) {
            launchUrl = src;
        } else {
            if (src.charAt(0) == '/') {
                src = src.substring(1);
            }
            launchUrl = "file:///android_asset/www/" + src;
        }
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java
================================================
/*
       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.
*/
package org.apache.cordova;

import java.util.ArrayList;
import java.util.Locale;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Color;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

/**
 * This class is the main Android activity that represents the Cordova
 * application. It should be extended by the user to load the specific
 * html file that contains the application.
 *
 * As an example:
 *
 * <pre>
 *     package org.apache.cordova.examples;
 *
 *     import android.os.Bundle;
 *     import org.apache.cordova.*;
 *
 *     public class Example extends CordovaActivity {
 *       &#64;Override
 *       public void onCreate(Bundle savedInstanceState) {
 *         super.onCreate(savedInstanceState);
 *         super.init();
 *         // Load your application
 *         loadUrl(launchUrl);
 *       }
 *     }
 * </pre>
 *
 * Cordova xml configuration: Cordova uses a configuration file at
 * res/xml/config.xml to specify its settings. See "The config.xml File"
 * guide in cordova-docs at http://cordova.apache.org/docs for the documentation
 * for the configuration. The use of the set*Property() methods is
 * deprecated in favor of the config.xml file.
 *
 */
public class CordovaActivity extends Activity {
    public static String TAG = "CordovaActivity";

    // The webview for our app
    protected CordovaWebView appView;

    private static int ACTIVITY_STARTING = 0;
    private static int ACTIVITY_RUNNING = 1;
    private static int ACTIVITY_EXITING = 2;

    // Keep app running when pause is received. (default = true)
    // If true, then the JavaScript and native code continue to run in the background
    // when another application (activity) is started.
    protected boolean keepRunning = true;

    // Flag to keep immersive mode if set to fullscreen
    protected boolean immersiveMode;

    // Read from config.xml:
    protected CordovaPreferences preferences;
    protected String launchUrl;
    protected ArrayList<PluginEntry> pluginEntries;
    protected CordovaInterfaceImpl cordovaInterface;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // need to activate preferences before super.onCreate to avoid "requestFeature() must be called before adding content" exception
        loadConfig();

        String logLevel = preferences.getString("loglevel", "ERROR");
        LOG.setLogLevel(logLevel);

        LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting");
        LOG.d(TAG, "CordovaActivity.onCreate()");

        if (!preferences.getBoolean("ShowTitle", false)) {
            getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        }

        if (preferences.getBoolean("SetFullscreen", false)) {
            LOG.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version.");
            preferences.set("Fullscreen", true);
        }
        if (preferences.getBoolean("Fullscreen", false)) {
            // NOTE: use the FullscreenNotImmersive configuration key to set the activity in a REAL full screen
            // (as was the case in previous cordova versions)
            if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) && !preferences.getBoolean("FullscreenNotImmersive", false)) {
                immersiveMode = true;
            } else {
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
        } else {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        }

        super.onCreate(savedInstanceState);

        cordovaInterface = makeCordovaInterface();
        if (savedInstanceState != null) {
            cordovaInterface.restoreInstanceState(savedInstanceState);
        }
    }

    protected void init() {
        appView = makeWebView();
        createViews();
        if (!appView.isInitialized()) {
            appView.init(cordovaInterface, pluginEntries, preferences);
        }
        cordovaInterface.onCordovaInit(appView.getPluginManager());

        // Wire the hardware volume controls to control media if desired.
        String volumePref = preferences.getString("DefaultVolumeStream", "");
        if ("media".equals(volumePref.toLowerCase(Locale.ENGLISH))) {
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
        }
    }

    @SuppressWarnings("deprecation")
    protected void loadConfig() {
        ConfigXmlParser parser = new ConfigXmlParser();
        parser.parse(this);
        preferences = parser.getPreferences();
        preferences.setPreferencesBundle(getIntent().getExtras());
        launchUrl = parser.getLaunchUrl();
        pluginEntries = parser.getPluginEntries();
        Config.parser = parser;
    }

    //Suppressing warnings in AndroidStudio
    @SuppressWarnings({"deprecation", "ResourceType"})
    protected void createViews() {
        //Why are we setting a constant as the ID? This should be investigated
        appView.getView().setId(100);
        appView.getView().setLayoutParams(new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));

        setContentView(appView.getView());

        if (preferences.contains("BackgroundColor")) {
            try {
                int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
                // Background of activity:
                appView.getView().setBackgroundColor(backgroundColor);
            }
            catch (NumberFormatException e){
                e.printStackTrace();
            }
        }

        appView.getView().requestFocusFromTouch();
    }

    /**
     * Construct the default web view object.
     * <p/>
     * Override this to customize the webview that is used.
     */
    protected CordovaWebView makeWebView() {
        return new CordovaWebViewImpl(makeWebViewEngine());
    }

    protected CordovaWebViewEngine makeWebViewEngine() {
        return CordovaWebViewImpl.createEngine(this, preferences);
    }

    protected CordovaInterfaceImpl makeCordovaInterface() {
        return new CordovaInterfaceImpl(this) {
            @Override
            public Object onMessage(String id, Object data) {
                // Plumb this to CordovaActivity.onMessage for backwards compatibility
                return CordovaActivity.this.onMessage(id, data);
            }
        };
    }

    /**
     * Load the url into the webview.
     */
    public void loadUrl(String url) {
        if (appView == null) {
            init();
        }

        // If keepRunning
        this.keepRunning = preferences.getBoolean("KeepRunning", true);

        appView.loadUrlIntoView(url, true);
    }

    /**
     * Called when the system is about to start resuming a previous activity.
     */
    @Override
    protected void onPause() {
        super.onPause();
        LOG.d(TAG, "Paused the activity.");

        if (this.appView != null) {
            // CB-9382 If there is an activity that started for result and main activity is waiting for callback
            // result, we shoudn't stop WebView Javascript timers, as activity for result might be using them
            boolean keepRunning = this.keepRunning || this.cordovaInterface.activityResultCallback != null;
            this.appView.handlePause(keepRunning);
        }
    }

    /**
     * Called when the activity receives a new intent
     */
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //Forward to plugins
        if (this.appView != null)
            this.appView.onNewIntent(intent);
    }

    /**
     * Called when the activity will start interacting with the user.
     */
    @Override
    protected void onResume() {
        super.onResume();
        LOG.d(TAG, "Resumed the activity.");

        if (this.appView == null) {
            return;
        }
        // Force window to have focus, so application always
        // receive user input. Workaround for some devices (Samsung Galaxy Note 3 at least)
        this.getWindow().getDecorView().requestFocus();

        this.appView.handleResume(this.keepRunning);
    }

    /**
     * Called when the activity is no longer visible to the user.
     */
    @Override
    protected void onStop() {
        super.onStop();
        LOG.d(TAG, "Stopped the activity.");

        if (this.appView == null) {
            return;
        }
        this.appView.handleStop();
    }

    /**
     * Called when the activity is becoming visible to the user.
     */
    @Override
    protected void onStart() {
        super.onStart();
        LOG.d(TAG, "Started the activity.");

        if (this.appView == null) {
            return;
        }
        this.appView.handleStart();
    }

    /**
     * The final call you receive before your activity is destroyed.
     */
    @Override
    public void onDestroy() {
        LOG.d(TAG, "CordovaActivity.onDestroy()");
        super.onDestroy();

        if (this.appView != null) {
            appView.handleDestroy();
        }
    }

    /**
     * Called when view focus is changed
     */
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && immersiveMode) {
            final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

            getWindow().getDecorView().setSystemUiVisibility(uiOptions);
        }
    }

    @SuppressLint("NewApi")
    @Override
    public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
        // Capture requestCode here so that it is captured in the setActivityResultCallback() case.
        cordovaInterface.setActivityResultRequestCode(requestCode);
        super.startActivityForResult(intent, requestCode, options);
    }

    /**
     * Called when an activity you launched exits, giving you the requestCode you started it with,
     * the resultCode it returned, and any additional data from it.
     *
     * @param requestCode The request code originally supplied to startActivityForResult(),
     *                    allowing you to identify who this result came from.
     * @param resultCode  The integer result code returned by the child activity through its setResult().
     * @param intent      An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        LOG.d(TAG, "Incoming Result. Request code = " + requestCode);
        super.onActivityResult(requestCode, resultCode, intent);
        cordovaInterface.onActivityResult(requestCode, resultCode, intent);
    }

    /**
     * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable).
     * The errorCode parameter corresponds to one of the ERROR_* constants.
     *
     * @param errorCode   The error code corresponding to an ERROR_* value.
     * @param description A String describing the error.
     * @param failingUrl  The url that failed to load.
     */
    public void onReceivedError(final int errorCode, final String description, final String failingUrl) {
        final CordovaActivity me = this;

        // If errorUrl specified, then load it
        final String errorUrl = preferences.getString("errorUrl", null);
        if ((errorUrl != null) && (!failingUrl.equals(errorUrl)) && (appView != null)) {
            // Load URL on UI thread
            me.runOnUiThread(new Runnable() {
                public void run() {
                    me.appView.showWebPage(errorUrl, false, true, null);
                }
            });
        }
        // If not, then display error dialog
        else {
            final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP);
            me.runOnUiThread(new Runnable() {
                public void run() {
                    if (exit) {
                        me.appView.getView().setVisibility(View.GONE);
                        me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit);
                    }
                }
            });
        }
    }

    /**
     * Display an error dialog and optionally exit application.
     */
    public void displayError(final String title, final String message, final String button, final boolean exit) {
        final CordovaActivity me = this;
        me.runOnUiThread(new Runnable() {
            public void run() {
                try {
                    AlertDialog.Builder dlg = new AlertDialog.Builder(me);
                    dlg.setMessage(message);
                    dlg.setTitle(title);
                    dlg.setCancelable(false);
                    dlg.setPositiveButton(button,
                            new AlertDialog.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                    if (exit) {
                                        finish();
                                    }
                                }
                            });
                    dlg.create();
                    dlg.show();
                } catch (Exception e) {
                    finish();
                }
            }
        });
    }

    /*
     * Hook in Cordova for menu plugins
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (appView != null) {
            appView.getPluginManager().postMessage("onCreateOptionsMenu", menu);
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        if (appView != null) {
            appView.getPluginManager().postMessage("onPrepareOptionsMenu", menu);
        }
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (appView != null) {
            appView.getPluginManager().postMessage("onOptionsItemSelected", item);
        }
        return true;
    }

    /**
     * Called when a message is sent to plugin.
     *
     * @param id   The message id
     * @param data The message data
     * @return Object or null
     */
    public Object onMessage(String id, Object data) {
        if ("onReceivedError".equals(id)) {
            JSONObject d = (JSONObject) data;
            try {
                this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else if ("exit".equals(id)) {
            finish();
        }
        return null;
    }

    protected void onSaveInstanceState(Bundle outState) {
        cordovaInterface.onSaveInstanceState(outState);
        super.onSaveInstanceState(outState);
    }

    /**
     * Called by the system when the device configuration changes while your activity is running.
     *
     * @param newConfig The new device configuration
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if (this.appView == null) {
            return;
        }
        PluginManager pm = this.appView.getPluginManager();
        if (pm != null) {
            pm.onConfigurationChanged(newConfig);
        }
    }

    /**
     * Called by the system when the user grants permissions
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[],
                                           int[] grantResults) {
        try
        {
            cordovaInterface.onRequestPermissionResult(requestCode, permissions, grantResults);
        }
        catch (JSONException e)
        {
            LOG.d(TAG, "JSONException: Parameters fed into the method are not valid");
            e.printStackTrace();
        }

    }

}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java
================================================
/*
       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.
*/
package org.apache.cordova;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Base64;

public class CordovaArgs {
    private JSONArray baseArgs;

    public CordovaArgs(JSONArray args) {
        this.baseArgs = args;
    }


    // Pass through the basics to the base args.
    public Object get(int index) throws JSONException {
        return baseArgs.get(index);
    }

    public boolean getBoolean(int index) throws JSONException {
        return baseArgs.getBoolean(index);
    }

    public double getDouble(int index) throws JSONException {
        return baseArgs.getDouble(index);
    }

    public int getInt(int index) throws JSONException {
        return baseArgs.getInt(index);
    }

    public JSONArray getJSONArray(int index) throws JSONException {
        return baseArgs.getJSONArray(index);
    }

    public JSONObject getJSONObject(int index) throws JSONException {
        return baseArgs.getJSONObject(index);
    }

    public long getLong(int index) throws JSONException {
        return baseArgs.getLong(index);
    }

    public String getString(int index) throws JSONException {
        return baseArgs.getString(index);
    }


    public Object opt(int index) {
        return baseArgs.opt(index);
    }

    public boolean optBoolean(int index) {
        return baseArgs.optBoolean(index);
    }

    public double optDouble(int index) {
        return baseArgs.optDouble(index);
    }

    public int optInt(int index) {
        return baseArgs.optInt(index);
    }

    public JSONArray optJSONArray(int index) {
        return baseArgs.optJSONArray(index);
    }

    public JSONObject optJSONObject(int index) {
        return baseArgs.optJSONObject(index);
    }

    public long optLong(int index) {
        return baseArgs.optLong(index);
    }

    public String optString(int index) {
        return baseArgs.optString(index);
    }

    public boolean isNull(int index) {
        return baseArgs.isNull(index);
    }


    // The interesting custom helpers.
    public byte[] getArrayBuffer(int index) throws JSONException {
        String encoded = baseArgs.getString(index);
        return Base64.decode(encoded, Base64.DEFAULT);
    }
}




================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java
================================================
/*
       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.
*/
package org.apache.cordova;

import java.security.SecureRandom;

import org.json.JSONArray;
import org.json.JSONException;

/**
 * Contains APIs that the JS can call. All functions in here should also have
 * an equivalent entry in CordovaChromeClient.java, and be added to
 * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
 */
public class CordovaBridge {
    private static final String LOG_TAG = "CordovaBridge";
    private PluginManager pluginManager;
    private NativeToJsMessageQueue jsMessageQueue;
    private volatile int expectedBridgeSecret = -1; // written by UI thread, read by JS thread.

    public CordovaBridge(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) {
        this.pluginManager = pluginManager;
        this.jsMessageQueue = jsMessageQueue;
    }

    public String jsExec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException {
        if (!verifySecret("exec()", bridgeSecret)) {
            return null;
        }
        // If the arguments weren't received, send a message back to JS.  It will switch bridge modes and try again.  See CB-2666.
        // We send a message meant specifically for this case.  It starts with "@" so no other message can be encoded into the same string.
        if (arguments == null) {
            return "@Null arguments.";
        }

        jsMessageQueue.setPaused(true);
        try {
            // Tell the resourceApi what thread the JS is running on.
            CordovaResourceApi.jsThread = Thread.currentThread();

            pluginManager.exec(service, action, callbackId, arguments);
            String ret = null;
            if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
                ret = jsMessageQueue.popAndEncode(false);
            }
            return ret;
        } catch (Throwable e) {
            e.printStackTrace();
            return "";
        } finally {
            jsMessageQueue.setPaused(false);
        }
    }

    public void jsSetNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException {
        if (!verifySecret("setNativeToJsBridgeMode()", bridgeSecret)) {
            return;
        }
        jsMessageQueue.setBridgeMode(value);
    }

    public String jsRetrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException {
        if (!verifySecret("retrieveJsMessages()", bridgeSecret)) {
            return null;
        }
        return jsMessageQueue.popAndEncode(fromOnlineEvent);
    }

    private boolean verifySecret(String action, int bridgeSecret) throws IllegalAccessException {
        if (!jsMessageQueue.isBridgeEnabled()) {
            if (bridgeSecret == -1) {
                LOG.d(LOG_TAG, action + " call made before bridge was enabled.");
            } else {
                LOG.d(LOG_TAG, "Ignoring " + action + " from previous page load.");
            }
            return false;
        }
        // Bridge secret wrong and bridge not due to it being from the previous page.
        if (expectedBridgeSecret < 0 || bridgeSecret != expectedBridgeSecret) {
            LOG.e(LOG_TAG, "Bridge access attempt with wrong secret token, possibly from malicious code. Disabling exec() bridge!");
            clearBridgeSecret();
            throw new IllegalAccessException();
        }
        return true;
    }

    /** Called on page transitions */
    void clearBridgeSecret() {
        expectedBridgeSecret = -1;
    }

    public boolean isSecretEstablished() {
        return expectedBridgeSecret != -1;
    }

    /** Called by cordova.js to initialize the bridge. */
    int generateBridgeSecret() {
        SecureRandom randGen = new SecureRandom();
        expectedBridgeSecret = randGen.nextInt(Integer.MAX_VALUE);
        return expectedBridgeSecret;
    }

    public void reset() {
        jsMessageQueue.reset();
        clearBridgeSecret();
    }

    public String promptOnJsPrompt(String origin, String message, String defaultValue) {
        if (defaultValue != null && defaultValue.length() > 3 && defaultValue.startsWith("gap:")) {
            JSONArray array;
            try {
                array = new JSONArray(defaultValue.substring(4));
                int bridgeSecret = array.getInt(0);
                String service = array.getString(1);
                String action = array.getString(2);
                String callbackId = array.getString(3);
                String r = jsExec(bridgeSecret, service, action, callbackId, message);
                return r == null ? "" : r;
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return "";
        }
        // Sets the native->JS bridge mode.
        else if (defaultValue != null && defaultValue.startsWith("gap_bridge_mode:")) {
            try {
                int bridgeSecret = Integer.parseInt(defaultValue.substring(16));
                jsSetNativeToJsBridgeMode(bridgeSecret, Integer.parseInt(message));
            } catch (NumberFormatException e){
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return "";
        }
        // Polling for JavaScript messages
        else if (defaultValue != null && defaultValue.startsWith("gap_poll:")) {
            int bridgeSecret = Integer.parseInt(defaultValue.substring(9));
            try {
                String r = jsRetrieveJsMessages(bridgeSecret, "1".equals(message));
                return r == null ? "" : r;
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return "";
        }
        else if (defaultValue != null && defaultValue.startsWith("gap_init:")) {
            // Protect against random iframes being able to talk through the bridge.
            // Trust only pages which the app would have been allowed to navigate to anyway.
            if (pluginManager.shouldAllowBridgeAccess(origin)) {
                // Enable the bridge
                int bridgeMode = Integer.parseInt(defaultValue.substring(9));
                jsMessageQueue.setBridgeMode(bridgeMode);
                // Tell JS the bridge secret.
                int secret = generateBridgeSecret();
                return ""+secret;
            } else {
                LOG.e(LOG_TAG, "gap_init called from restricted origin: " + origin);
            }
            return "";
        }
        return null;
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java
================================================
/*
       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.
*/
package org.apache.cordova;

import java.security.Principal;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;

import android.webkit.ClientCertRequest;

/**
 * Implementation of the ICordovaClientCertRequest for Android WebView.
 */
public class CordovaClientCertRequest implements ICordovaClientCertRequest {

    private final ClientCertRequest request;

    public CordovaClientCertRequest(ClientCertRequest request) {
        this.request = request;
    }
    
    /**
     * Cancel this request
     */
    public void cancel()
    {
        request.cancel();
    }
    
    /*
     * Returns the host name of the server requesting the certificate.
     */
    public String getHost()
    {
        return request.getHost();
    }
    
    /*
     * Returns the acceptable types of asymmetric keys (can be null).
     */
    public String[] getKeyTypes()
    {
        return request.getKeyTypes();
    }
    
    /*
     * Returns the port number of the server requesting the certificate.
     */
    public int getPort()
    {
        return request.getPort();
    }
    
    /*
     * Returns the acceptable certificate issuers for the certificate matching the private key (can be null).
     */
    public Principal[] getPrincipals()
    {
        return request.getPrincipals();
    }
    
    /*
     * Ignore the request for now. Do not remember user's choice.
     */
    public void ignore()
    {
        request.ignore();
    }
    
    /*
     * Proceed with the specified private key and client certificate chain. Remember the user's positive choice and use it for future requests.
     * 
     * @param privateKey The privateKey
     * @param chain The certificate chain 
     */
    public void proceed(PrivateKey privateKey, X509Certificate[] chain)
    {
        request.proceed(privateKey, chain);
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.KeyEvent;
import android.widget.EditText;

/**
 * Helper class for WebViews to implement prompt(), alert(), confirm() dialogs.
 */
public class CordovaDialogsHelper {
    private final Context context;
    private AlertDialog lastHandledDialog;

    public CordovaDialogsHelper(Context context) {
        this.context = context;
    }

    public void showAlert(String message, final Result result) {
        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
        dlg.setMessage(message);
        dlg.setTitle("Alert");
        //Don't let alerts break the back button
        dlg.setCancelable(true);
        dlg.setPositiveButton(android.R.string.ok,
                new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.gotResult(true, null);
                    }
                });
        dlg.setOnCancelListener(
                new DialogInterface.OnCancelListener() {
                    public void onCancel(DialogInterface dialog) {
                        result.gotResult(false, null);
                    }
                });
        dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
            //DO NOTHING
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK)
                {
                    result.gotResult(true, null);
                    return false;
                }
                else
                    return true;
            }
        });
        lastHandledDialog = dlg.show();
    }

    public void showConfirm(String message, final Result result) {
        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
        dlg.setMessage(message);
        dlg.setTitle("Confirm");
        dlg.setCancelable(true);
        dlg.setPositiveButton(android.R.string.ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.gotResult(true, null);
                    }
                });
        dlg.setNegativeButton(android.R.string.cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.gotResult(false, null);
                    }
                });
        dlg.setOnCancelListener(
                new DialogInterface.OnCancelListener() {
                    public void onCancel(DialogInterface dialog) {
                        result.gotResult(false, null);
                    }
                });
        dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
            //DO NOTHING
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK)
                {
                    result.gotResult(false, null);
                    return false;
                }
                else
                    return true;
            }
        });
        lastHandledDialog = dlg.show();
    }

    /**
     * Tell the client to display a prompt dialog to the user.
     * If the client returns true, WebView will assume that the client will
     * handle the prompt dialog and call the appropriate JsPromptResult method.
     *
     * Since we are hacking prompts for our own purposes, we should not be using them for
     * this purpose, perhaps we should hack console.log to do this instead!
     */
    public void showPrompt(String message, String defaultValue, final Result result) {
        // Returning false would also show a dialog, but the default one shows the origin (ugly).
        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
        dlg.setMessage(message);
        final EditText input = new EditText(context);
        if (defaultValue != null) {
            input.setText(defaultValue);
        }
        dlg.setView(input);
        dlg.setCancelable(false);
        dlg.setPositiveButton(android.R.string.ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        String userText = input.getText().toString();
                        result.gotResult(true, userText);
                    }
                });
        dlg.setNegativeButton(android.R.string.cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.gotResult(false, null);
                    }
                });
        lastHandledDialog = dlg.show();
    }

    public void destroyLastDialog(){
        if (lastHandledDialog != null){
            lastHandledDialog.cancel();
        }
    }

    public interface Result {
        public void gotResult(boolean success, String value);
    }
}

================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.webkit.HttpAuthHandler;

/**
 * Specifies interface for HTTP auth handler object which is used to handle auth requests and
 * specifying user credentials.
 */
public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler {

    private final HttpAuthHandler handler;

    public CordovaHttpAuthHandler(HttpAuthHandler handler) {
        this.handler = handler;
    }
    
    /**
     * Instructs the WebView to cancel the authentication request.
     */
    public void cancel () {
        this.handler.cancel();
    }
    
    /**
     * Instructs the WebView to proceed with the authentication with the given credentials.
     * 
     * @param username
     * @param password
     */
    public void proceed (String username, String password) {
        this.handler.proceed(username, password);
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.app.Activity;
import android.content.Intent;

import org.apache.cordova.CordovaPlugin;

import java.util.concurrent.ExecutorService;

/**
 * The Activity interface that is implemented by CordovaActivity.
 * It is used to isolate plugin development, and remove dependency on entire Cordova library.
 */
public interface CordovaInterface {

    /**
     * Launch an activity for which you would like a result when it finished. When this activity exits,
     * your onActivityResult() method will be called.
     *
     * @param command     The command object
     * @param intent      The intent to start
     * @param requestCode   The request code that is passed to callback to identify the activity
     */
    abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);

    /**
     * Set the plugin to be called when a sub-activity exits.
     *
     * @param plugin      The plugin on which onActivityResult is to be called
     */
    abstract public void setActivityResultCallback(CordovaPlugin plugin);

    /**
     * Get the Android activity.
     *
     * @return the Activity
     */
    public abstract Activity getActivity();
    

    /**
     * Called when a message is sent to plugin.
     *
     * @param id            The message id
     * @param data          The message data
     * @return              Object or null
     */
    public Object onMessage(String id, Object data);
    
    /**
     * Returns a shared thread pool that can be used for background tasks.
     */
    public ExecutorService getThreadPool();

    /**
     * Sends a permission request to the activity for one permission.
     */
    public void requestPermission(CordovaPlugin plugin, int requestCode, String permission);

    /**
     * Sends a permission request to the activity for a group of permissions
     */
    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions);

    /**
     * Check for a permission.  Returns true if the permission is granted, false otherwise.
     */
    public boolean hasPermission(String permission);

}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java
================================================
/*
       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.
*/

package org.apache.cordova;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Pair;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Default implementation of CordovaInterface.
 */
public class CordovaInterfaceImpl implements CordovaInterface {
    private static final String TAG = "CordovaInterfaceImpl";
    protected Activity activity;
    protected ExecutorService threadPool;
    protected PluginManager pluginManager;

    protected ActivityResultHolder savedResult;
    protected CallbackMap permissionResultCallbacks;
    protected CordovaPlugin activityResultCallback;
    protected String initCallbackService;
    protected int activityResultRequestCode;
    protected boolean activityWasDestroyed = false;
    protected Bundle savedPluginState;

    public CordovaInterfaceImpl(Activity activity) {
        this(activity, Executors.newCachedThreadPool());
    }

    public CordovaInterfaceImpl(Activity activity, ExecutorService threadPool) {
        this.activity = activity;
        this.threadPool = threadPool;
        this.permissionResultCallbacks = new CallbackMap();
    }

    @Override
    public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
        setActivityResultCallback(command);
        try {
            activity.startActivityForResult(intent, requestCode);
        } catch (RuntimeException e) { // E.g.: ActivityNotFoundException
            activityResultCallback = null;
            throw e;
        }
    }

    @Override
    public void setActivityResultCallback(CordovaPlugin plugin) {
        // Cancel any previously pending activity.
        if (activityResultCallback != null) {
            activityResultCallback.onActivityResult(activityResultRequestCode, Activity.RESULT_CANCELED, null);
        }
        activityResultCallback = plugin;
    }

    @Override
    public Activity getActivity() {
        return activity;
    }

    @Override
    public Object onMessage(String id, Object data) {
        if ("exit".equals(id)) {
            activity.finish();
        }
        return null;
    }

    @Override
    public ExecutorService getThreadPool() {
        return threadPool;
    }

    /**
     * Dispatches any pending onActivityResult callbacks and sends the resume event if the
     * Activity was destroyed by the OS.
     */
    public void onCordovaInit(PluginManager pluginManager) {
        this.pluginManager = pluginManager;
        if (savedResult != null) {
            onActivityResult(savedResult.requestCode, savedResult.resultCode, savedResult.intent);
        } else if(activityWasDestroyed) {
            // If there was no Activity result, we still need to send out the resume event if the
            // Activity was destroyed by the OS
            activityWasDestroyed = false;
            if(pluginManager != null)
            {
                CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
                if(appPlugin != null) {
                    JSONObject obj = new JSONObject();
                    try {
                        obj.put("action", "resume");
                    } catch (JSONException e) {
                        LOG.e(TAG, "Failed to create event message", e);
                    }
                    appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, obj));
                }
            }

        }
    }

    /**
     * Routes the result to the awaiting plugin. Returns false if no plugin was waiting.
     */
    public boolean onActivityResult(int requestCode, int resultCode, Intent intent) {
        CordovaPlugin callback = activityResultCallback;
        if(callback == null && initCallbackService != null) {
            // The application was restarted, but had defined an initial callback
            // before being shut down.
            savedResult = new ActivityResultHolder(requestCode, resultCode, intent);
            if (pluginManager != null) {
                callback = pluginManager.getPlugin(initCallbackService);
                if(callback != null) {
                    callback.onRestoreStateForActivityResult(savedPluginState.getBundle(callback.getServiceName()),
                            new ResumeCallback(callback.getServiceName(), pluginManager));
                }
            }
        }
        activityResultCallback = null;

        if (callback != null) {
            LOG.d(TAG, "Sending activity result to plugin");
            initCallbackService = null;
            savedResult = null;
            callback.onActivityResult(requestCode, resultCode, intent);
            return true;
        }
        LOG.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!" : "."));
        return false;
    }

    /**
     * Call this from your startActivityForResult() overload. This is required to catch the case
     * where plugins use Activity.startActivityForResult() + CordovaInterface.setActivityResultCallback()
     * rather than CordovaInterface.startActivityForResult().
     */
    public void setActivityResultRequestCode(int requestCode) {
        activityResultRequestCode = requestCode;
    }

    /**
     * Saves parameters for startActivityForResult().
     */
    public void onSaveInstanceState(Bundle outState) {
        if (activityResultCallback != null) {
            String serviceName = activityResultCallback.getServiceName();
            outState.putString("callbackService", serviceName);
        }
        if(pluginManager != null){
            outState.putBundle("plugin", pluginManager.onSaveInstanceState());
        }

    }

    /**
     * Call this from onCreate() so that any saved startActivityForResult parameters will be restored.
     */
    public void restoreInstanceState(Bundle savedInstanceState) {
        initCallbackService = savedInstanceState.getString("callbackService");
        savedPluginState = savedInstanceState.getBundle("plugin");
        activityWasDestroyed = true;
    }

    private static class ActivityResultHolder {
        private int requestCode;
        private int resultCode;
        private Intent intent;

        public ActivityResultHolder(int requestCode, int resultCode, Intent intent) {
            this.requestCode = requestCode;
            this.resultCode = resultCode;
            this.intent = intent;
        }
    }

    /**
     * Called by the system when the user grants permissions
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    public void onRequestPermissionResult(int requestCode, String[] permissions,
                                          int[] grantResults) throws JSONException {
        Pair<CordovaPlugin, Integer> callback = permissionResultCallbacks.getAndRemoveCallback(requestCode);
        if(callback != null) {
            callback.first.onRequestPermissionResult(callback.second, permissions, grantResults);
        }
    }

    public void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
        String[] permissions = new String [1];
        permissions[0] = permission;
        requestPermissions(plugin, requestCode, permissions);
    }

    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions) {
        int mappedRequestCode = permissionResultCallbacks.registerCallback(plugin, requestCode);
        getActivity().requestPermissions(permissions, mappedRequestCode);
    }

    public boolean hasPermission(String permission)
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        {
            int result = activity.checkSelfPermission(permission);
            return PackageManager.PERMISSION_GRANTED == result;
        }
        else
        {
            return true;
        }
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java
================================================
/*
       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.
*/
package org.apache.cordova;

import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;

import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * Plugins must extend this class and override one of the execute methods.
 */
public class CordovaPlugin {
    public CordovaWebView webView;
    public CordovaInterface cordova;
    protected CordovaPreferences preferences;
    private String serviceName;

    /**
     * Call this after constructing to initialize the plugin.
     * Final because we want to be able to change args without breaking plugins.
     */
    public final void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences) {
        assert this.cordova == null;
        this.serviceName = serviceName;
        this.cordova = cordova;
        this.webView = webView;
        this.preferences = preferences;
        initialize(cordova, webView);
        pluginInitialize();
    }

    /**
     * Called after plugin construction and fields have been initialized.
     * Prefer to use pluginInitialize instead since there is no value in
     * having parameters on the initialize() function.
     */
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    }

    /**
     * Called after plugin construction and fields have been initialized.
     */
    protected void pluginInitialize() {
    }

    /**
     * Returns the plugin's service name (what you'd use when calling pluginManger.getPlugin())
     */
    public String getServiceName() {
        return serviceName;
    }

    /**
     * Executes the request.
     *
     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
     *     cordova.getThreadPool().execute(runnable);
     *
     * To run on the UI thread, use:
     *     cordova.getActivity().runOnUiThread(runnable);
     *
     * @param action          The action to execute.
     * @param rawArgs         The exec() arguments in JSON form.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return                Whether the action was valid.
     */
    public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
        JSONArray args = new JSONArray(rawArgs);
        return execute(action, args, callbackContext);
    }

    /**
     * Executes the request.
     *
     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
     *     cordova.getThreadPool().execute(runnable);
     *
     * To run on the UI thread, use:
     *     cordova.getActivity().runOnUiThread(runnable);
     *
     * @param action          The action to execute.
     * @param args            The exec() arguments.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return                Whether the action was valid.
     */
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        CordovaArgs cordovaArgs = new CordovaArgs(args);
        return execute(action, cordovaArgs, callbackContext);
    }

    /**
     * Executes the request.
     *
     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
     *     cordova.getThreadPool().execute(runnable);
     *
     * To run on the UI thread, use:
     *     cordova.getActivity().runOnUiThread(runnable);
     *
     * @param action          The action to execute.
     * @param args            The exec() arguments, wrapped with some Cordova helpers.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return                Whether the action was valid.
     */
    public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
        return false;
    }

    /**
     * Called when the system is about to start resuming a previous activity.
     *
     * @param multitasking		Flag indicating if multitasking is turned on for app
     */
    public void onPause(boolean multitasking) {
    }

    /**
     * Called when the activity will start interacting with the user.
     *
     * @param multitasking		Flag indicating if multitasking is turned on for app
     */
    public void onResume(boolean multitasking) {
    }

    /**
     * Called when the activity is becoming visible to the user.
     */
    public void onStart() {
    }

    /**
     * Called when the activity is no longer visible to the user.
     */
    public void onStop() {
    }

    /**
     * Called when the activity receives a new intent.
     */
    public void onNewIntent(Intent intent) {
    }

    /**
     * The final call you receive before your activity is destroyed.
     */
    public void onDestroy() {
    }

    /**
     * Called when the Activity is being destroyed (e.g. if a plugin calls out to an external
     * Activity and the OS kills the CordovaActivity in the background). The plugin should save its
     * state in this method only if it is awaiting the result of an external Activity and needs
     * to preserve some information so as to handle that result; onRestoreStateForActivityResult()
     * will only be called if the plugin is the recipient of an Activity result
     *
     * @return  Bundle containing the state of the plugin or null if state does not need to be saved
     */
    public Bundle onSaveInstanceState() {
        return null;
    }

    /**
     * Called when a plugin is the recipient of an Activity result after the CordovaActivity has
     * been destroyed. The Bundle will be the same as the one the plugin returned in
     * onSaveInstanceState()
     *
     * @param state             Bundle containing the state of the plugin
     * @param callbackContext   Replacement Context to return the plugin result to
     */
    public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {}

    /**
     * Called when a message is sent to plugin.
     *
     * @param id            The message id
     * @param data          The message data
     * @return              Object to stop propagation or null
     */
    public Object onMessage(String id, Object data) {
        return null;
    }

    /**
     * Called when an activity you launched exits, giving you the requestCode you started it with,
     * the resultCode it returned, and any additional data from it.
     *
     * @param requestCode   The request code originally supplied to startActivityForResult(),
     *                      allowing you to identify who this result came from.
     * @param resultCode    The integer result code returned by the child activity through its setResult().
     * @param intent        An Intent, which can return result data to the caller (various data can be
     *                      attached to Intent "extras").
     */
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    }

    /**
     * Hook for blocking the loading of external resources.
     *
     * This will be called when the WebView's shouldInterceptRequest wants to
     * know whether to open a connection to an external resource. Return false
     * to block the request: if any plugin returns false, Cordova will block
     * the request. If all plugins return null, the default policy will be
     * enforced. If at least one plugin returns true, and no plugins return
     * false, then the request will proceed.
     *
     * Note that this only affects resource requests which are routed through
     * WebViewClient.shouldInterceptRequest, such as XMLHttpRequest requests and
     * img tag loads. WebSockets and media requests (such as <video> and <audio>
     * tags) are not affected by this method. Use CSP headers to control access
     * to such resources.
     */
    public Boolean shouldAllowRequest(String url) {
        return null;
    }

    /**
     * Hook for blocking navigation by the Cordova WebView. This applies both to top-level and
     * iframe navigations.
     *
     * This will be called when the WebView's needs to know whether to navigate
     * to a new page. Return false to block the navigation: if any plugin
     * returns false, Cordova will block the navigation. If all plugins return
     * null, the default policy will be enforced. It at least one plugin returns
     * true, and no plugins return false, then the navigation will proceed.
     */
    public Boolean shouldAllowNavigation(String url) {
        return null;
    }

    /**
     * Hook for allowing page to call exec(). By default, this returns the result of
     * shouldAllowNavigation(). It's generally unsafe to allow untrusted content to be loaded
     * into a CordovaWebView, even within an iframe, so it's best not to touch this.
     */
    public Boolean shouldAllowBridgeAccess(String url) {
        return shouldAllowNavigation(url);
    }

    /**
     * Hook for blocking the launching of Intents by the Cordova application.
     *
     * This will be called when the WebView will not navigate to a page, but
     * could launch an intent to handle the URL. Return false to block this: if
     * any plugin returns false, Cordova will block the navigation. If all
     * plugins return null, the default policy will be enforced. If at least one
     * plugin returns true, and no plugins return false, then the URL will be
     * opened.
     */
    public Boolean shouldOpenExternalUrl(String url) {
        return null;
    }

    /**
     * Allows plugins to handle a link being clicked. Return true here to cancel the navigation.
     *
     * @param url           The URL that is trying to be loaded in the Cordova webview.
     * @return              Return true to prevent the URL from loading. Default is false.
     */
    public boolean onOverrideUrlLoading(String url) {
        return false;
    }

    /**
     * Hook for redirecting requests. Applies to WebView requests as well as requests made by plugins.
     * To handle the request directly, return a URI in the form:
     *
     *    cdvplugin://pluginId/...
     *
     * And implement handleOpenForRead().
     * To make this easier, use the toPluginUri() and fromPluginUri() helpers:
     *
     *     public Uri remapUri(Uri uri) { return toPluginUri(uri); }
     *
     *     public CordovaResourceApi.OpenForReadResult handleOpenForRead(Uri uri) throws IOException {
     *         Uri origUri = fromPluginUri(uri);
     *         ...
     *     }
     */
    public Uri remapUri(Uri uri) {
        return null;
    }

    /**
     * Called to handle CordovaResourceApi.openForRead() calls for a cdvplugin://pluginId/ URL.
     * Should never return null.
     * Added in cordova-android@4.0.0
     */
    public CordovaResourceApi.OpenForReadResult handleOpenForRead(Uri uri) throws IOException {
        throw new FileNotFoundException("Plugin can't handle uri: " + uri);
    }

    /**
     * Refer to remapUri()
     * Added in cordova-android@4.0.0
     */
    protected Uri toPluginUri(Uri origUri) {
        return new Uri.Builder()
            .scheme(CordovaResourceApi.PLUGIN_URI_SCHEME)
            .authority(serviceName)
            .appendQueryParameter("origUri", origUri.toString())
            .build();
    }

    /**
     * Refer to remapUri()
     * Added in cordova-android@4.0.0
     */
    protected Uri fromPluginUri(Uri pluginUri) {
        return Uri.parse(pluginUri.getQueryParameter("origUri"));
    }

    /**
     * Called when the WebView does a top-level navigation or refreshes.
     *
     * Plugins should stop any long-running processes and clean up internal state.
     *
     * Does nothing by default.
     */
    public void onReset() {
    }

    /**
     * Called when the system received an HTTP authentication request. Plugin can use
     * the supplied HttpAuthHandler to process this auth challenge.
     *
     * @param view              The WebView that is initiating the callback
     * @param handler           The HttpAuthHandler used to set the WebView's response
     * @param host              The host requiring authentication
     * @param realm             The realm for which authentication is required
     *
     * @return                  Returns True if plugin will resolve this auth challenge, otherwise False
     *
     */
    public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) {
        return false;
    }

    /**
     * Called when he system received an SSL client certificate request.  Plugin can use
     * the supplied ClientCertRequest to process this certificate challenge.
     *
     * @param view              The WebView that is initiating the callback
     * @param request           The client certificate request
     *
     * @return                  Returns True if plugin will resolve this auth challenge, otherwise False
     *
     */
    public boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCertRequest request) {
        return false;
    }

    /**
     * Called by the system when the device configuration changes while your activity is running.
     *
     * @param newConfig		The new device configuration
     */
    public void onConfigurationChanged(Configuration newConfig) {
    }

    /**
     * Called by the Plugin Manager when we need to actually request permissions
     *
     * @param requestCode   Passed to the activity to track the request
     *
     * @return              Returns the permission that was stored in the plugin
     */

    public void requestPermissions(int requestCode) {
    }

    /*
     * Called by the WebView implementation to check for geolocation permissions, can be used
     * by other Java methods in the event that a plugin is using this as a dependency.
     *
     * @return          Returns true if the plugin has all the permissions it needs to operate.
     */

    public boolean hasPermisssion() {
        return true;
    }

    /**
     * Called by the system when the user grants permissions
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    public void onRequestPermissionResult(int requestCode, String[] permissions,
                                          int[] grantResults) throws JSONException {

    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java
================================================
/*
       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.
*/

package org.apache.cordova;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import org.apache.cordova.LOG;

import android.app.Activity;
import android.os.Bundle;

public class CordovaPreferences {
    private HashMap<String, String> prefs = new HashMap<String, String>(20);
    private Bundle preferencesBundleExtras;

    public void setPreferencesBundle(Bundle extras) {
        preferencesBundleExtras = extras;
    }

    public void set(String name, String value) {
        prefs.put(name.toLowerCase(Locale.ENGLISH), value);
    }

    public void set(String name, boolean value) {
        set(name, "" + value);
    }

    public void set(String name, int value) {
        set(name, "" + value);
    }
    
    public void set(String name, double value) {
        set(name, "" + value);
    }
    
    public Map<String, String> getAll() {
        return prefs;
    }

    public boolean getBoolean(String name, boolean defaultValue) {
        name = name.toLowerCase(Locale.ENGLISH);
        String value = prefs.get(name);
        if (value != null) {
            return Boolean.parseBoolean(value);
        }
        return defaultValue;
    }

    // Added in 4.0.0
    public boolean contains(String name) {
        return getString(name, null) != null;
    }

    public int getInteger(String name, int defaultValue) {
        name = name.toLowerCase(Locale.ENGLISH);
        String value = prefs.get(name);
        if (value != null) {
            // Use Integer.decode() can't handle it if the highest bit is set.
            return (int)(long)Long.decode(value);
        }
        return defaultValue;
    }

    public double getDouble(String name, double defaultValue) {
        name = name.toLowerCase(Locale.ENGLISH);
        String value = prefs.get(name);
        if (value != null) {
            return Double.valueOf(value);
        }
        return defaultValue;
    }

    public String getString(String name, String defaultValue) {
        name = name.toLowerCase(Locale.ENGLISH);
        String value = prefs.get(name);
        if (value != null) {
            return value;
        }
        return defaultValue;
    }

}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java
================================================
/*
       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.
 */
package org.apache.cordova;

import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Looper;
import android.util.Base64;
import android.webkit.MimeTypeMap;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.channels.FileChannel;
import java.util.Locale;

/**
 * What this class provides:
 * 1. Helpers for reading & writing to URLs.
 *   - E.g. handles assets, resources, content providers, files, data URIs, http[s]
 *   - E.g. Can be used to query for mime-type & content length.
 *
 * 2. To allow plugins to redirect URLs (via remapUrl).
 *   - All plugins should call remapUrl() on URLs they receive from JS *before*
 *     passing the URL onto other utility functions in this class.
 *   - For an example usage of this, refer to the org.apache.cordova.file plugin.
 *
 * Future Work:
 *   - Consider using a Cursor to query content URLs for their size (like the file plugin does).
 *   - Allow plugins to remapUri to "cdv-plugin://plugin-name/foo", which CordovaResourceApi
 *     would then delegate to pluginManager.getPlugin(plugin-name).openForRead(url)
 *     - Currently, plugins *can* do this by remapping to a data: URL, but it's inefficient
 *       for large payloads.
 */
public class CordovaResourceApi {
    @SuppressWarnings("unused")
    private static final String LOG_TAG = "CordovaResourceApi";

    public static final int URI_TYPE_FILE = 0;
    public static final int URI_TYPE_ASSET = 1;
    public static final int URI_TYPE_CONTENT = 2;
    public static final int URI_TYPE_RESOURCE = 3;
    public static final int URI_TYPE_DATA = 4;
    public static final int URI_TYPE_HTTP = 5;
    public static final int URI_TYPE_HTTPS = 6;
    public static final int URI_TYPE_PLUGIN = 7;
    public static final int URI_TYPE_UNKNOWN = -1;

    public static final String PLUGIN_URI_SCHEME = "cdvplugin";

    private static final String[] LOCAL_FILE_PROJECTION = { "_data" };
    
    public static Thread jsThread;

    private final AssetManager assetManager;
    private final ContentResolver contentResolver;
    private final PluginManager pluginManager;
    private boolean threadCheckingEnabled = true;


    public CordovaResourceApi(Context context, PluginManager pluginManager) {
        this.contentResolver = context.getContentResolver();
        this.assetManager = context.getAssets();
        this.pluginManager = pluginManager;
    }
    
    public void setThreadCheckingEnabled(boolean value) {
        threadCheckingEnabled = value;
    }

    public boolean isThreadCheckingEnabled() {
        return threadCheckingEnabled;
    }
    
    
    public static int getUriType(Uri uri) {
        assertNonRelative(uri);
        String scheme = uri.getScheme();
        if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(scheme)) {
            return URI_TYPE_CONTENT;
        }
        if (ContentResolver.SCHEME_ANDROID_RESOURCE.equalsIgnoreCase(scheme)) {
            return URI_TYPE_RESOURCE;
        }
        if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(scheme)) {
            if (uri.getPath().startsWith("/android_asset/")) {
                return URI_TYPE_ASSET;
            }
            return URI_TYPE_FILE;
        }
        if ("data".equalsIgnoreCase(scheme)) {
            return URI_TYPE_DATA;
        }
        if ("http".equalsIgnoreCase(scheme)) {
            return URI_TYPE_HTTP;
        }
        if ("https".equalsIgnoreCase(scheme)) {
            return URI_TYPE_HTTPS;
        }
        if (PLUGIN_URI_SCHEME.equalsIgnoreCase(scheme)) {
            return URI_TYPE_PLUGIN;
        }
        return URI_TYPE_UNKNOWN;
    }
    
    public Uri remapUri(Uri uri) {
        assertNonRelative(uri);
        Uri pluginUri = pluginManager.remapUri(uri);
        return pluginUri != null ? pluginUri : uri;
    }

    public String remapPath(String path) {
        return remapUri(Uri.fromFile(new File(path))).getPath();
    }
    
    /**
     * Returns a File that points to the resource, or null if the resource
     * is not on the local filesystem.
     */
    public File mapUriToFile(Uri uri) {
        assertBackgroundThread();
        switch (getUriType(uri)) {
            case URI_TYPE_FILE:
                return new File(uri.getPath());
            case URI_TYPE_CONTENT: {
                Cursor cursor = contentResolver.query(uri, LOCAL_FILE_PROJECTION, null, null, null);
                if (cursor != null) {
                    try {
                        int columnIndex = cursor.getColumnIndex(LOCAL_FILE_PROJECTION[0]);
                        if (columnIndex != -1 && cursor.getCount() > 0) {
                            cursor.moveToFirst();
                            String realPath = cursor.getString(columnIndex);
                            if (realPath != null) {
                                return new File(realPath);
                            }
                        }
                    } finally {
                        cursor.close();
                    }
                }
            }
        }
        return null;
    }
    
    public String getMimeType(Uri uri) {
        switch (getUriType(uri)) {
            case URI_TYPE_FILE:
            case URI_TYPE_ASSET:
                return getMimeTypeFromPath(uri.getPath());
            case URI_TYPE_CONTENT:
            case URI_TYPE_RESOURCE:
                return contentResolver.getType(uri);
            case URI_TYPE_DATA: {
                return getDataUriMimeType(uri);
            }
            case URI_TYPE_HTTP:
            case URI_TYPE_HTTPS: {
                try {
                    HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection();
                    conn.setDoInput(false);
                    conn.setRequestMethod("HEAD");
                    String mimeType = conn.getHeaderField("Content-Type");
                    if (mimeType != null) {
                        mimeType = mimeType.split(";")[0];
                    }
                    return mimeType;
                } catch (IOException e) {
                }
            }
        }
        
        return null;
    }
    
    
    //This already exists
    private String getMimeTypeFromPath(String path) {
        String extension = path;
        int lastDot = extension.lastIndexOf('.');
        if (lastDot != -1) {
            extension = extension.substring(lastDot + 1);
        }
        // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
        extension = extension.toLowerCase(Locale.getDefault());
        if (extension.equals("3ga")) {
            return "audio/3gpp";
        } else if (extension.equals("js")) {
            // Missing from the map :(.
            return "text/javascript";
        }
        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
    
    /**
     * Opens a stream to the given URI, also providing the MIME type & length.
     * @return Never returns null.
     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
     *     resolved before being passed into this function.
     * @throws Throws an IOException if the URI cannot be opened.
     * @throws Throws an IllegalStateException if called on a foreground thread.
     */
    public OpenForReadResult openForRead(Uri uri) throws IOException {
        return openForRead(uri, false);
    }

    /**
     * Opens a stream to the given URI, also providing the MIME type & length.
     * @return Never returns null.
     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
     *     resolved before being passed into this function.
     * @throws Throws an IOException if the URI cannot be opened.
     * @throws Throws an IllegalStateException if called on a foreground thread and skipThreadCheck is false.
     */
    public OpenForReadResult openForRead(Uri uri, boolean skipThreadCheck) throws IOException {
        if (!skipThreadCheck) {
            assertBackgroundThread();
        }
        switch (getUriType(uri)) {
            case URI_TYPE_FILE: {
                FileInputStream inputStream = new FileInputStream(uri.getPath());
                String mimeType = getMimeTypeFromPath(uri.getPath());
                long length = inputStream.getChannel().size();
                return new OpenForReadResult(uri, inputStream, mimeType, length, null);
            }
            case URI_TYPE_ASSET: {
                String assetPath = uri.getPath().substring(15);
                AssetFileDescriptor assetFd = null;
                InputStream inputStream;
                long length = -1;
                try {
                    assetFd = assetManager.openFd(assetPath);
                    inputStream = assetFd.createInputStream();
                    length = assetFd.getLength();
                } catch (FileNotFoundException e) {
                    // Will occur if the file is compressed.
                    inputStream = assetManager.open(assetPath);
                }
                String mimeType = getMimeTypeFromPath(assetPath);
                return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd);
            }
            case URI_TYPE_CONTENT:
            case URI_TYPE_RESOURCE: {
                String mimeType = contentResolver.getType(uri);
                AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, "r");
                InputStream inputStream = assetFd.createInputStream();
                long length = assetFd.getLength();
                return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd);
            }
            case URI_TYPE_DATA: {
                OpenForReadResult ret = readDataUri(uri);
                if (ret == null) {
                    break;
                }
                return ret;
            }
            case URI_TYPE_HTTP:
            case URI_TYPE_HTTPS: {
                HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection();
                conn.setDoInput(true);
                String mimeType = conn.getHeaderField("Content-Type");
                if (mimeType != null) {
                    mimeType = mimeType.split(";")[0];
                }
                int length = conn.getContentLength();
                InputStream inputStream = conn.getInputStream();
                return new OpenForReadResult(uri, inputStream, mimeType, length, null);
            }
            case URI_TYPE_PLUGIN: {
                String pluginId = uri.getHost();
                CordovaPlugin plugin = pluginManager.getPlugin(pluginId);
                if (plugin == null) {
                    throw new FileNotFoundException("Invalid plugin ID in URI: " + uri);
                }
                return plugin.handleOpenForRead(uri);
            }
        }
        throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri);
    }

    public OutputStream openOutputStream(Uri uri) throws IOException {
        return openOutputStream(uri, false);
    }

    /**
     * Opens a stream to the given URI.
     * @return Never returns null.
     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
     *     resolved before being passed into this function.
     * @throws Throws an IOException if the URI cannot be opened.
     */
    public OutputStream openOutputStream(Uri uri, boolean append) throws IOException {
        assertBackgroundThread();
        switch (getUriType(uri)) {
            case URI_TYPE_FILE: {
                File localFile = new File(uri.getPath());
                File parent = localFile.getParentFile();
                if (parent != null) {
                    parent.mkdirs();
                }
                return new FileOutputStream(localFile, append);
            }
            case URI_TYPE_CONTENT:
            case URI_TYPE_RESOURCE: {
                AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, append ? "wa" : "w");
                return assetFd.createOutputStream();
            }
        }
        throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri);
    }

    public HttpURLConnection createHttpConnection(Uri uri) throws IOException {
        assertBackgroundThread();
        return (HttpURLConnection)new URL(uri.toString()).openConnection();
    }
    
    // Copies the input to the output in the most efficient manner possible.
    // Closes both streams.
    public void copyResource(OpenForReadResult input, OutputStream outputStream) throws IOException {
        assertBackgroundThread();
        try {
            InputStream inputStream = input.inputStream;
            if (inputStream instanceof FileInputStream && outputStream instanceof FileOutputStream) {
                FileChannel inChannel = ((FileInputStream)input.inputStream).getChannel();
                FileChannel outChannel = ((FileOutputStream)outputStream).getChannel();
                long offset = 0;
                long length = input.length;
                if (input.assetFd != null) {
                    offset = input.assetFd.getStartOffset();
                }
                // transferFrom()'s 2nd arg is a relative position. Need to set the absolute
                // position first.
                inChannel.position(offset);
                outChannel.transferFrom(inChannel, 0, length);
            } else {
                final int BUFFER_SIZE = 8192;
                byte[] buffer = new byte[BUFFER_SIZE];
                
                for (;;) {
                    int bytesRead = inputStream.read(buffer, 0, BUFFER_SIZE);
                    
                    if (bytesRead <= 0) {
                        break;
                    }
                    outputStream.write(buffer, 0, bytesRead);
                }
            }            
        } finally {
            input.inputStream.close();
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }

    public void copyResource(Uri sourceUri, OutputStream outputStream) throws IOException {
        copyResource(openForRead(sourceUri), outputStream);
    }

    // Added in 3.5.0.
    public void copyResource(Uri sourceUri, Uri dstUri) throws IOException {
        copyResource(openForRead(sourceUri), openOutputStream(dstUri));
    }
    
    private void assertBackgroundThread() {
        if (threadCheckingEnabled) {
            Thread curThread = Thread.currentThread();
            if (curThread == Looper.getMainLooper().getThread()) {
                throw new IllegalStateException("Do not perform IO operations on the UI thread. Use CordovaInterface.getThreadPool() instead.");
            }
            if (curThread == jsThread) {
                throw new IllegalStateException("Tried to perform an IO operation on the WebCore thread. Use CordovaInterface.getThreadPool() instead.");
            }
        }
    }
    
    private String getDataUriMimeType(Uri uri) {
        String uriAsString = uri.getSchemeSpecificPart();
        int commaPos = uriAsString.indexOf(',');
        if (commaPos == -1) {
            return null;
        }
        String[] mimeParts = uriAsString.substring(0, commaPos).split(";");
        if (mimeParts.length > 0) {
            return mimeParts[0];
        }
        return null;
    }

    private OpenForReadResult readDataUri(Uri uri) {
        String uriAsString = uri.getSchemeSpecificPart();
        int commaPos = uriAsString.indexOf(',');
        if (commaPos == -1) {
            return null;
        }
        String[] mimeParts = uriAsString.substring(0, commaPos).split(";");
        String contentType = null;
        boolean base64 = false;
        if (mimeParts.length > 0) {
            contentType = mimeParts[0];
        }
        for (int i = 1; i < mimeParts.length; ++i) {
            if ("base64".equalsIgnoreCase(mimeParts[i])) {
                base64 = true;
            }
        }
        String dataPartAsString = uriAsString.substring(commaPos + 1);
        byte[] data;
        if (base64) {
            data = Base64.decode(dataPartAsString, Base64.DEFAULT);
        } else {
            try {
                data = dataPartAsString.getBytes("UTF-8");
            } catch (UnsupportedEncodingException e) {
                data = dataPartAsString.getBytes();
            }
        }
        InputStream inputStream = new ByteArrayInputStream(data);
        return new OpenForReadResult(uri, inputStream, contentType, data.length, null);
    }
    
    private static void assertNonRelative(Uri uri) {
        if (!uri.isAbsolute()) {
            throw new IllegalArgumentException("Relative URIs are not supported.");
        }
    }
    
    public static final class OpenForReadResult {
        public final Uri uri;
        public final InputStream inputStream;
        public final String mimeType;
        public final long length;
        public final AssetFileDescriptor assetFd;
        
        public OpenForReadResult(Uri uri, InputStream inputStream, String mimeType, long length, AssetFileDescriptor assetFd) {
            this.uri = uri;
            this.inputStream = inputStream;
            this.mimeType = mimeType;
            this.length = length;
            this.assetFd = assetFd;
        }
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java
================================================
/*
       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.
*/
package org.apache.cordova;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.webkit.WebChromeClient.CustomViewCallback;

/**
 * Main interface for interacting with a Cordova webview - implemented by CordovaWebViewImpl.
 * This is an interface so that it can be easily mocked in tests.
 * Methods may be added to this interface without a major version bump, as plugins & embedders
 * are not expected to implement it.
 */
public interface CordovaWebView {
    public static final String CORDOVA_VERSION = "6.2.1";

    void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences);

    boolean isInitialized();

    View getView();

    void loadUrlIntoView(String url, boolean recreatePlugins);

    void stopLoading();

    boolean canGoBack();

    void clearCache();

    /** Use parameter-less overload */
    @Deprecated
    void clearCache(boolean b);

    void clearHistory();

    boolean backHistory();

    void handlePause(boolean keepRunning);

    void onNewIntent(Intent intent);

    void handleResume(boolean keepRunning);

    void handleStart();

    void handleStop();

    void handleDestroy();

    /**
     * Send JavaScript statement back to JavaScript.
     *
     * Deprecated (https://issues.apache.org/jira/browse/CB-6851)
     * Instead of executing snippets of JS, you should use the exec bridge
     * to create a Java->JS communication channel.
     * To do this:
     * 1. Within plugin.xml (to have your JS run before deviceready):
     *    <js-module><runs/></js-module>
     * 2. Within your .js (call exec on start-up):
     *    require('cordova/channel').onCordovaReady.subscribe(function() {
     *      require('cordova/exec')(win, null, 'Plugin', 'method', []);
     *      function win(message) {
     *        ... process message from java here ...
     *      }
     *    });
     * 3. Within your .java:
     *    PluginResult dataResult = new PluginResult(PluginResult.Status.OK, CODE);
     *    dataResult.setKeepCallback(true);
     *    savedCallbackContext.sendPluginResult(dataResult);
     */
    @Deprecated
    void sendJavascript(String statememt);

    /**
     * Load the specified URL in the Cordova webview or a new browser instance.
     *
     * NOTE: If openExternal is false, only whitelisted URLs can be loaded.
     *
     * @param url           The url to load.
     * @param openExternal  Load url in browser instead of Cordova webview.
     * @param clearHistory  Clear the history stack, so new page becomes top of history
     * @param params        Parameters for new app
     */
    void showWebPage(String url, boolean openExternal, boolean clearHistory, Map<String, Object> params);

    /**
     * Deprecated in 4.0.0. Use your own View-toggling logic.
     */
    @Deprecated
    boolean isCustomViewShowing();

    /**
     * Deprecated in 4.0.0. Use your own View-toggling logic.
     */
    @Deprecated
    void showCustomView(View view, CustomViewCallback callback);

    /**
     * Deprecated in 4.0.0. Use your own View-toggling logic.
     */
    @Deprecated
    void hideCustomView();

    CordovaResourceApi getResourceApi();

    void setButtonPlumbedToJs(int keyCode, boolean override);
    boolean isButtonPlumbedToJs(int keyCode);

    void sendPluginResult(PluginResult cr, String callbackId);

    PluginManager getPluginManager();
    CordovaWebViewEngine getEngine();
    CordovaPreferences getPreferences();
    ICordovaCookieManager getCookieManager();

    String getUrl();

    // TODO: Work on deleting these by removing refs from plugins.
    Context getContext();
    void loadUrl(String url);
    Object postMessage(String id, Object data);
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.view.KeyEvent;
import android.view.View;
import android.webkit.ValueCallback;

/**
 * Interface for all Cordova engines.
 * No methods will be added to this class (in order to be compatible with existing engines).
 * Instead, we will create a new interface: e.g. CordovaWebViewEngineV2
 */
public interface CordovaWebViewEngine {
    void init(CordovaWebView parentWebView, CordovaInterface cordova, Client client,
              CordovaResourceApi resourceApi, PluginManager pluginManager,
              NativeToJsMessageQueue nativeToJsMessageQueue);

    CordovaWebView getCordovaWebView();
    ICordovaCookieManager getCookieManager();
    View getView();

    void loadUrl(String url, boolean clearNavigationStack);

    void stopLoading();

    /** Return the currently loaded URL */
    String getUrl();

    void clearCache();

    /** After calling clearHistory(), canGoBack() should be false. */
    void clearHistory();

    boolean canGoBack();

    /** Returns whether a navigation occurred */
    boolean goBack();

    /** Pauses / resumes the WebView's event loop. */
    void setPaused(boolean value);

    /** Clean up all resources associated with the WebView. */
    void destroy();

    /** Add the evaulate Javascript method **/
    void evaluateJavascript(String js, ValueCallback<String> callback);

    /**
     * Used to retrieve the associated CordovaWebView given a View without knowing the type of Engine.
     * E.g. ((CordovaWebView.EngineView)activity.findViewById(android.R.id.webView)).getCordovaWebView();
     */
    public interface EngineView {
        CordovaWebView getCordovaWebView();
    }

    /**
     * Contains methods that an engine uses to communicate with the parent CordovaWebView.
     * Methods may be added in future cordova versions, but never removed.
     */
    public interface Client {
        Boolean onDispatchKeyEvent(KeyEvent event);
        void clearLoadTimeoutTimer();
        void onPageStarted(String newUrl);
        void onReceivedError(int errorCode, String description, String failingUrl);
        void onPageFinishedLoading(String url);
        boolean onNavigationAttempt(String url);
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java
================================================
/*
       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.
*/
package org.apache.cordova;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.widget.FrameLayout;

import org.apache.cordova.engine.SystemWebViewEngine;
import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Main class for interacting with a Cordova webview. Manages plugins, events, and a CordovaWebViewEngine.
 * Class uses two-phase initialization. You must call init() before calling any other methods.
 */
public class CordovaWebViewImpl implements CordovaWebView {

    public static final String TAG = "CordovaWebViewImpl";

    private PluginManager pluginManager;

    protected final CordovaWebViewEngine engine;
    private CordovaInterface cordova;

    // Flag to track that a loadUrl timeout occurred
    private int loadUrlTimeout = 0;

    private CordovaResourceApi resourceApi;
    private CordovaPreferences preferences;
    private CoreAndroid appPlugin;
    private NativeToJsMessageQueue nativeToJsMessageQueue;
    private EngineClient engineClient = new EngineClient();
    private boolean hasPausedEver;

    // The URL passed to loadUrl(), not necessarily the URL of the current page.
    String loadedUrl;

    /** custom view created by the browser (a video player for example) */
    private View mCustomView;
    private WebChromeClient.CustomViewCallback mCustomViewCallback;

    private Set<Integer> boundKeyCodes = new HashSet<Integer>();

    public static CordovaWebViewEngine createEngine(Context context, CordovaPreferences preferences) {
        String className = preferences.getString("webview", SystemWebViewEngine.class.getCanonicalName());
        try {
            Class<?> webViewClass = Class.forName(className);
            Constructor<?> constructor = webViewClass.getConstructor(Context.class, CordovaPreferences.class);
            return (CordovaWebViewEngine) constructor.newInstance(context, preferences);
        } catch (Exception e) {
            throw new RuntimeException("Failed to create webview. ", e);
        }
    }

    public CordovaWebViewImpl(CordovaWebViewEngine cordovaWebViewEngine) {
        this.engine = cordovaWebViewEngine;
    }

    // Convenience method for when creating programmatically (not from Config.xml).
    public void init(CordovaInterface cordova) {
        init(cordova, new ArrayList<PluginEntry>(), new CordovaPreferences());
    }

    @Override
    public void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences) {
        if (this.cordova != null) {
            throw new IllegalStateException();
        }
        this.cordova = cordova;
        this.preferences = preferences;
        pluginManager = new PluginManager(this, this.cordova, pluginEntries);
        resourceApi = new CordovaResourceApi(engine.getView().getContext(), pluginManager);
        nativeToJsMessageQueue = new NativeToJsMessageQueue();
        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.NoOpBridgeMode());
        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.LoadUrlBridgeMode(engine, cordova));

        if (preferences.getBoolean("DisallowOverscroll", false)) {
            engine.getView().setOverScrollMode(View.OVER_SCROLL_NEVER);
        }
        engine.init(this, cordova, engineClient, resourceApi, pluginManager, nativeToJsMessageQueue);
        // This isn't enforced by the compiler, so assert here.
        assert engine.getView() instanceof CordovaWebViewEngine.EngineView;

        pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid");
        pluginManager.init();

    }

    @Override
    public boolean isInitialized() {
        return cordova != null;
    }

    @Override
    public void loadUrlIntoView(final String url, boolean recreatePlugins) {
        LOG.d(TAG, ">>> loadUrl(" + url + ")");
        if (url.equals("about:blank") || url.startsWith("javascript:")) {
            engine.loadUrl(url, false);
            return;
        }

        recreatePlugins = recreatePlugins || (loadedUrl == null);

        if (recreatePlugins) {
            // Don't re-initialize on first load.
            if (loadedUrl != null) {
                appPlugin = null;
                pluginManager.init();
            }
            loadedUrl = url;
        }

        // Create a timeout timer for loadUrl
        final int currentLoadUrlTimeout = loadUrlTimeout;
        final int loadUrlTimeoutValue = preferences.getInteger("LoadUrlTimeoutValue", 20000);

        // Timeout error method
        final Runnable loadError = new Runnable() {
            public void run() {
                stopLoading();
                LOG.e(TAG, "CordovaWebView: TIMEOUT ERROR!");

                // Handle other errors by passing them to the webview in JS
                JSONObject data = new JSONObject();
                try {
                    data.put("errorCode", -6);
                    data.put("description", "The connection to the server was unsuccessful.");
                    data.put("url", url);
                } catch (JSONException e) {
                    // Will never happen.
                }
                pluginManager.postMessage("onReceivedError", data);
            }
        };

        // Timeout timer method
        final Runnable timeoutCheck = new Runnable() {
            public void run() {
                try {
                    synchronized (this) {
                        wait(loadUrlTimeoutValue);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // If timeout, then stop loading and handle error
                if (loadUrlTimeout == currentLoadUrlTimeout) {
                    cordova.getActivity().runOnUiThread(loadError);
                }
            }
        };

        final boolean _recreatePlugins = recreatePlugins;
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                if (loadUrlTimeoutValue > 0) {
                    cordova.getThreadPool().execute(timeoutCheck);
                }
                engine.loadUrl(url, _recreatePlugins);
            }
        });
    }


    @Override
    public void loadUrl(String url) {
        loadUrlIntoView(url, true);
    }

    @Override
    public void showWebPage(String url, boolean openExternal, boolean clearHistory, Map<String, Object> params) {
        LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap)", url, openExternal, clearHistory);

        // If clearing history
        if (clearHistory) {
            engine.clearHistory();
        }

        // If loading into our webview
        if (!openExternal) {
            // Make sure url is in whitelist
            if (pluginManager.shouldAllowNavigation(url)) {
                // TODO: What about params?
                // Load new URL
                loadUrlIntoView(url, true);
            } else {
                LOG.w(TAG, "showWebPage: Refusing to load URL into webview since it is not in the <allow-navigation> whitelist. URL=" + url);
            }
        }
        if (!pluginManager.shouldOpenExternalUrl(url)) {
            LOG.w(TAG, "showWebPage: Refusing to send intent for URL since it is not in the <allow-intent> whitelist. URL=" + url);
            return;
        }
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            // To send an intent without CATEGORY_BROWSER, a custom plugin should be used.
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            Uri uri = Uri.parse(url);
            // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
            // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
            if ("file".equals(uri.getScheme())) {
                intent.setDataAndType(uri, resourceApi.getMimeType(uri));
            } else {
                intent.setData(uri);
            }
            cordova.getActivity().startActivity(intent);
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }

    @Override
    @Deprecated
    public void showCustomView(View view, WebChromeClient.CustomViewCallback callback) {
        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
        LOG.d(TAG, "showing Custom View");
        // if a view already exists then immediately terminate the new one
        if (mCustomView != null) {
            callback.onCustomViewHidden();
            return;
        }

        // Store the view and its callback for later (to kill it properly)
        mCustomView = view;
        mCustomViewCallback = callback;

        // Add the custom view to its container.
        ViewGroup parent = (ViewGroup) engine.getView().getParent();
        parent.addView(view, new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT,
                Gravity.CENTER));

        // Hide the content view.
        engine.getView().setVisibility(View.GONE);

        // Finally show the custom view container.
        parent.setVisibility(View.VISIBLE);
        parent.bringToFront();
    }

    @Override
    @Deprecated
    public void hideCustomView() {
        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
        if (mCustomView == null) return;
        LOG.d(TAG, "Hiding Custom View");

        // Hide the custom view.
        mCustomView.setVisibility(View.GONE);

        // Remove the custom view from its container.
        ViewGroup parent = (ViewGroup) engine.getView().getParent();
        parent.removeView(mCustomView);
        mCustomView = null;
        mCustomViewCallback.onCustomViewHidden();

        // Show the content view.
        engine.getView().setVisibility(View.VISIBLE);
    }

    @Override
    @Deprecated
    public boolean isCustomViewShowing() {
        return mCustomView != null;
    }

    @Override
    @Deprecated
    public void sendJavascript(String statement) {
        nativeToJsMessageQueue.addJavaScript(statement);
    }

    @Override
    public void sendPluginResult(PluginResult cr, String callbackId) {
        nativeToJsMessageQueue.addPluginResult(cr, callbackId);
    }

    @Override
    public PluginManager getPluginManager() {
        return pluginManager;
    }
    @Override
    public CordovaPreferences getPreferences() {
        return preferences;
    }
    @Override
    public ICordovaCookieManager getCookieManager() {
        return engine.getCookieManager();
    }
    @Override
    public CordovaResourceApi getResourceApi() {
        return resourceApi;
    }
    @Override
    public CordovaWebViewEngine getEngine() {
        return engine;
    }
    @Override
    public View getView() {
        return engine.getView();
    }
    @Override
    public Context getContext() {
        return engine.getView().getContext();
    }

    private void sendJavascriptEvent(String event) {
        if (appPlugin == null) {
            appPlugin = (CoreAndroid)pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
        }

        if (appPlugin == null) {
            LOG.w(TAG, "Unable to fire event without existing plugin");
            return;
        }
        appPlugin.fireJavascriptEvent(event);
    }

    @Override
    public void setButtonPlumbedToJs(int keyCode, boolean override) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_DOWN:
            case KeyEvent.KEYCODE_VOLUME_UP:
            case KeyEvent.KEYCODE_BACK:
            case KeyEvent.KEYCODE_MENU:
                // TODO: Why are search and menu buttons handled separately?
                if (override) {
                    boundKeyCodes.add(keyCode);
                } else {
                    boundKeyCodes.remove(keyCode);
                }
                return;
            default:
                throw new IllegalArgumentException("Unsupported keycode: " + keyCode);
        }
    }

    @Override
    public boolean isButtonPlumbedToJs(int keyCode) {
        return boundKeyCodes.contains(keyCode);
    }

    @Override
    public Object postMessage(String id, Object data) {
        return pluginManager.postMessage(id, data);
    }

    // Engine method proxies:
    @Override
    public String getUrl() {
        return engine.getUrl();
    }

    @Override
    public void stopLoading() {
        // Clear timeout flag
        loadUrlTimeout++;
    }

    @Override
    public boolean canGoBack() {
        return engine.canGoBack();
    }

    @Override
    public void clearCache() {
        engine.clearCache();
    }

    @Override
    @Deprecated
    public void clearCache(boolean b) {
        engine.clearCache();
    }

    @Override
    public void clearHistory() {
        engine.clearHistory();
    }

    @Override
    public boolean backHistory() {
        return engine.goBack();
    }

    /////// LifeCycle methods ///////
    @Override
    public void onNewIntent(Intent intent) {
        if (this.pluginManager != null) {
            this.pluginManager.onNewIntent(intent);
        }
    }
    @Override
    public void handlePause(boolean keepRunning) {
        if (!isInitialized()) {
            return;
        }
        hasPausedEver = true;
        pluginManager.onPause(keepRunning);
        sendJavascriptEvent("pause");

        // If app doesn't want to run in background
        if (!keepRunning) {
            // Pause JavaScript timers. This affects all webviews within the app!
            engine.setPaused(true);
        }
    }
    @Override
    public void handleResume(boolean keepRunning) {
        if (!isInitialized()) {
            return;
        }

        // Resume JavaScript timers. This affects all webviews within the app!
        engine.setPaused(false);
        this.pluginManager.onResume(keepRunning);

        // In order to match the behavior of the other platforms, we only send onResume after an
        // onPause has occurred. The resume event might still be sent if the Activity was killed
        // while waiting for the result of an external Activity once the result is obtained
        if (hasPausedEver) {
            sendJavascriptEvent("resume");
        }
    }
    @Override
    public void handleStart() {
        if (!isInitialized()) {
            return;
        }
        pluginManager.onStart();
    }
    @Override
    public void handleStop() {
        if (!isInitialized()) {
            return;
        }
        pluginManager.onStop();
    }
    @Override
    public void handleDestroy() {
        if (!isInitialized()) {
            return;
        }
        // Cancel pending timeout timer.
        loadUrlTimeout++;

        // Forward to plugins
        this.pluginManager.onDestroy();

        // TODO: about:blank is a bit special (and the default URL for new frames)
        // We should use a blank data: url instead so it's more obvious
        this.loadUrl("about:blank");

        // TODO: Should not destroy webview until after about:blank is done loading.
        engine.destroy();
        hideCustomView();
    }

    protected class EngineClient implements CordovaWebViewEngine.Client {
        @Override
        public void clearLoadTimeoutTimer() {
            loadUrlTimeout++;
        }

        @Override
        public void onPageStarted(String newUrl) {
            LOG.d(TAG, "onPageDidNavigate(" + newUrl + ")");
            boundKeyCodes.clear();
            pluginManager.onReset();
            pluginManager.postMessage("onPageStarted", newUrl);
        }

        @Override
        public void onReceivedError(int errorCode, String description, String failingUrl) {
            clearLoadTimeoutTimer();
            JSONObject data = new JSONObject();
            try {
                data.put("errorCode", errorCode);
                data.put("description", description);
                data.put("url", failingUrl);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            pluginManager.postMessage("onReceivedError", data);
        }

        @Override
        public void onPageFinishedLoading(String url) {
            LOG.d(TAG, "onPageFinished(" + url + ")");

            clearLoadTimeoutTimer();

            // Broadcast message that page has loaded
            pluginManager.postMessage("onPageFinished", url);

            // Make app visible after 2 sec in case there was a JS error and Cordova JS never initialized correctly
            if (engine.getView().getVisibility() != View.VISIBLE) {
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            cordova.getActivity().runOnUiThread(new Runnable() {
                                public void run() {
                                    pluginManager.postMessage("spinner", "stop");
                                }
                            });
                        } catch (InterruptedException e) {
                        }
                    }
                });
                t.start();
            }

            // Shutdown if blank loaded
            if (url.equals("about:blank")) {
                pluginManager.postMessage("exit", null);
            }
        }

        @Override
        public Boolean onDispatchKeyEvent(KeyEvent event) {
            int keyCode = event.getKeyCode();
            boolean isBackButton = keyCode == KeyEvent.KEYCODE_BACK;
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (isBackButton && mCustomView != null) {
                    return true;
                } else if (boundKeyCodes.contains(keyCode)) {
                    return true;
                } else if (isBackButton) {
                    return engine.canGoBack();
                }
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                if (isBackButton && mCustomView != null) {
                    hideCustomView();
                    return true;
                } else if (boundKeyCodes.contains(keyCode)) {
                    String eventName = null;
                    switch (keyCode) {
                        case KeyEvent.KEYCODE_VOLUME_DOWN:
                            eventName = "volumedownbutton";
                            break;
                        case KeyEvent.KEYCODE_VOLUME_UP:
                            eventName = "volumeupbutton";
                            break;
                        case KeyEvent.KEYCODE_SEARCH:
                            eventName = "searchbutton";
                            break;
                        case KeyEvent.KEYCODE_MENU:
                            eventName = "menubutton";
                            break;
                        case KeyEvent.KEYCODE_BACK:
                            eventName = "backbutton";
                            break;
                    }
                    if (eventName != null) {
                        sendJavascriptEvent(eventName);
                        return true;
                    }
                } else if (isBackButton) {
                    return engine.goBack();
                }
            }
            return null;
        }

        @Override
        public boolean onNavigationAttempt(String url) {
            // Give plugins the chance to handle the url
            if (pluginManager.onOverrideUrlLoading(url)) {
                return true;
            } else if (pluginManager.shouldAllowNavigation(url)) {
                return false;
            } else if (pluginManager.shouldOpenExternalUrl(url)) {
                showWebPage(url, true, false, null);
                return true;
            }
            LOG.w(TAG, "Blocked (possibly sub-frame) navigation to non-allowed URL: " + url);
            return true;
        }
    }
}


================================================
FILE: platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java
================================================
/*
       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.
*/

package org.apache.cordova;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;

import java.lang.reflect.Field;
import java.util.HashMap;

/**
 * This class exposes methods in Cordova that can be called from JavaScript.
 */
public class CoreAndroid extends CordovaPlugin {

    public static final String PLUGIN_NAME = "CoreAndroid";
    protected static final String TAG = "CordovaApp";
    private BroadcastReceiver telephonyReceiver;
    private CallbackContext messageChannel;
    private PluginResult pendingResume;
    private final Object messageChannelLock = new Object();

    /**
     * Send an event to be fired on the Javascript side.
     *
     * @param action The name of the event to be fired
     */
    public void fireJavascriptEvent(String action) {
        sendEventMessage(action);
    }

    /**
     * Sets the context of the Command. This can then be used to do things like
     * get file paths associated with the Activity.
     */
    @Override
    public void pluginInitialize() {
        this.initTelephonyReceiver();
    }

    /**
     * Executes the request and returns PluginResult.
     *
     * @param action            The action to execute.
     * @param args              JSONArry of arguments for the plugin.
     * @param callbackContext   The callback context from which we were invoked.
     * @return                  A PluginResult object with a status and message.
     */
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        PluginResult.Status status = PluginResult.Status.OK;
        String result = "";

        try {
            if (action.equals("clearCache")) {
                this.clearCache();
            }
            else if (action.equals("show")) {
                // This gets called from JavaScript onCordovaReady to show the webview.
                // I recommend we change the name of the Message as spinner/stop is not
                // indicative of what this actually does (shows the webview).
                cordova.getActivity().runOnUiThread(new Runnable() {
                    public void run() {
                        webView.getPluginManager().postMessage("spinner", "stop");
                    }
                });
            }
            else if (action.equals("loadUrl")) {
                this.loadUrl(args.getString(0), args.optJSONObject(1));
            }
            else if (action.equals("cancelLoadUrl")) {
                //this.cancelLoadUrl();
            }
            else if (action.equals("clearHistory")) {
                this.clearHistory();
            }
            else if (action.equals("backHistory")) {
                this.backHistory();
            }
            else if (action.equals("overrideButton")) {
                this.overrideButton(args.getString(0), args.getBoolean(1));
            }
            else if (action.equals("overrideBackbutton")) {
                this.overrideBackbutton(args.getBoolean(0));
            }
            else if (action.equals("exitApp")) {
                this.exitApp();
            }
			else if (action.equals("messageChannel")) {
                synchronized(messageChannelLock) {
                    messageChannel = callbackContext;
                    if (pendingResume != null) {
                        sendEventMessage(pendingResume);
                        pendingResume = null;
                    }
                }
                return true;
            }

            callbackContext.sendPluginResult(new PluginResult(status, result));
            return true;
        } catch (JSONException e) {
            callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
            return false;
        }
    }

    //--------------------------------------------------------------------------
    // LOCAL METHODS
    //--------------------------------------------------------------------------

    /**
     * Clear the resource cache.
     */
    public void clearCache() {
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                webView.clearCache(true);
            }
        });
    }

    /**
     * Load the url into the webview.
     *
     * @param url
     * @param props			Properties that can be passed in to the Cordova activity (i.e. loadingDialog, wait, ...)
     * @throws JSONException
     */
    public void loadUrl(String url, JSONObject props) throws JSONException {
        LOG.d("App", "App.loadUrl("+url+","+props+")");
        int wait = 0;
        boolean openExternal = false;
        boolean clearHistory = false;

        // If there are properties, then set them on the Activity
        HashMap<String, Object> params = new HashMap<String, Object>();
        if (props != null) {
            JSONArray keys = props.names();
            for (int i = 0; i < keys.length(); i++) {
                String key = keys.getString(i);
                if (key.equals("wait")) {
                    wait = props.getInt(key);
                }
                else if (key.equalsIgnoreCase("openexternal")) {
                    openExternal = props.getBoolean(key);
                }
                else if (key.equalsIgnoreCase("clearhistory")) {
                    clearHistory = props.getBoolean(key);
                }
                else {
                    Object value = props.get(key);
                    if (value == null) {

                    }
                    else if (value.getClass().equals(String.class)) {
                        params.put(key, (String)value);
                    }
                    else if (value.getClass().equals(Boolean.class)) {
                        params.put(key, (Boolean)value);
                    }
                    else if (value.getClass().equals(Integer.class)) {
                        params.put(key, (Integer)value);
                    }
                }
            }
        }

        // If wait property, then delay loading

        if (wait > 0) {
            try {
                synchronized(this) {
                    this.wait(wait);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.webView.showWebPage(url, openExternal, clearHistory, params);
    }

    /**
     * Clear page history for the app.
     */
    public void clearHistory() {
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                webView.clearHistory();
            }
        });
    }

    /**
     * Go to previous page displayed.
     * This is the same as pressing the backbutton on Android device.
     */
    public void backHistory() {
        cordova.getActivity().runOnUiThread(new Runnable() {
            public void run() {
                webView.backHistory();
            }
        });
    }

    /**
     * Override the default behavior of the Android back button.
     * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
     *
     * @param override		T=override, F=cancel override
     */
    public void overrideBackbutton(boolean override) {
        LOG.i("App", "WARNING: Back Button Default Behavior will be overridden.  The backbutton event will be fired!");
        webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override);
    }

    /**
     * Override the default behavior of the Android volume buttons.
     * If overridden, when the volume button is pressed, the "volume[up|down]button" JavaScript event will be fired.
     *
     * @param button        volumeup, volumedown
     * @param override      T=override, F=cancel override
     */
    public void overrideButton(String button, boolean override) {
        LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden.  The volume event will be fired!");
        if (button.equals("volumeup")) {
            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override);
        }
        else if (button.equals("volumedown")) {
            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override);
        }
        else if (button.equals("menubutton")) {
            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_MENU, override);
        }
    }

    /**
     * Return whether the Android back button is overridden by the user.
     *
     * @return boolean
     */
    public boolean isBackbuttonOverridden() {
        return webView.isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK);
    }

    /**
     * Exit the Android application.
     */
    public void exitApp() {
        this.webView.getPluginManager().postMessage("exit", null);
    }


    /**
     * Listen for telephony events: RINGING, OFFHOOK and IDLE
     * Send these events to all plugins using
     *      CordovaActivity.onMessage("telephone", "ringing" | "offhook" | "idle")
     */
    private void initTelephonyReceiver() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
        //final CordovaInterface mycordova = this.cordova;
        this.telephonyReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {

                // If state has changed
                if ((intent != null) && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
                    if (intent.hasExtra(TelephonyManager.EXTRA_STATE)) {
                        String extraData = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
                        if (extraData.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                            LOG.i(TAG, "Telephone RINGING");
                            webView.getPluginManager().postMessage("telephone", "ringing");
                        }
                        else if (extraData.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                            LOG.i(TAG, "Telephone OFFHOOK");
                            webView.getPluginManager().postMessage("telephone", "offhook");
                        }
                        else if (extraData.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                            LOG.i(TAG, "Telephone IDLE");
                            webView.getPluginManager().postMessage("telephone", "idle");
                        }
                    }
                }
            }
        };

        // Register the receiver
        webView.getContext().registerReceiver(this.telephonyReceiver, intentFilter);
    }

    private void sendEventMessage(String action) {
        JSONObject obj = new JSONObject();
        try {
            obj.put("action", action);
        } catch (JSONException e) {
            LOG.e(TAG, "Failed to create event message", e);
        }
        sendEventMessage(new PluginResult(PluginResult.Status.OK, obj));
    }

    private void sendEventMessage(PluginResult payload) {
        payload.setKeepCallback(true);
        if (messageChannel != null) {
            messageChannel.sendPluginResult(payload);
        }
    }

    /*
     * Unregister the receiver
     *
     */
    public void onDestroy()
    {
        webView.getContext().unregisterReceiver(this.telephonyReceiver);
    }

    /**
     * Used to send the resume event in the case that the Activity is destroyed by the OS
     *
     * @param resumeEvent PluginResult containing the payload for the resume event to be fired
     */
    public void sendResumeEvent(PluginResult resumeEvent) {
        // This operation must be synchronized because plugin results that trigger resume
        // events can be processed asynchronously
        synchronized(messageChannelLock) {
            if (messageChannel != null) {
                sendEventMessage(resumeEvent);
            } else {
                // Might get called before the page loads, so we need to store it until the
                // messageChannel gets created
                this.pendingResume = resumeEvent;
            }
        }
    }

      /*
     * This needs to be implemented if you wish to use the Camera Plugin or other plugins
     * that read the Build Configuration.
     *
     * Thanks to Phil@Medtronic and Graham Borland for finding the answer and posting it to
     * StackOverflow.  This is annoying as hell!
     *
     */

    public static Object getBuildConfigValue(Context ctx, String key)
    {
        try
        {
            Class<?> clazz = Class.forName
Download .txt
gitextract_97sv444t/

├── .gitignore
├── LICENSE
├── PRIVACY.MD
├── README.md
├── config.xml
├── hooks/
│   └── README.md
├── platforms/
│   ├── android/
│   │   ├── .gitignore
│   │   ├── AndroidManifest.xml
│   │   ├── CordovaLib/
│   │   │   ├── AndroidManifest.xml
│   │   │   ├── build/
│   │   │   │   ├── generated/
│   │   │   │   │   └── source/
│   │   │   │   │       └── buildConfig/
│   │   │   │   │           ├── debug/
│   │   │   │   │           │   └── org/
│   │   │   │   │           │       └── apache/
│   │   │   │   │           │           └── cordova/
│   │   │   │   │           │               └── BuildConfig.java
│   │   │   │   │           └── release/
│   │   │   │   │               └── org/
│   │   │   │   │                   └── apache/
│   │   │   │   │                       └── cordova/
│   │   │   │   │                           └── BuildConfig.java
│   │   │   │   ├── intermediates/
│   │   │   │   │   ├── bundles/
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   ├── AndroidManifest.xml
│   │   │   │   │   │   │   └── classes.jar
│   │   │   │   │   │   └── release/
│   │   │   │   │   │       ├── AndroidManifest.xml
│   │   │   │   │   │       └── classes.jar
│   │   │   │   │   ├── incremental/
│   │   │   │   │   │   ├── compileDebugAidl/
│   │   │   │   │   │   │   └── dependency.store
│   │   │   │   │   │   ├── compileReleaseAidl/
│   │   │   │   │   │   │   └── dependency.store
│   │   │   │   │   │   ├── mergeDebugAssets/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeDebugJniLibFolders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeDebugShaders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseAssets/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseJniLibFolders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── mergeReleaseShaders/
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   ├── packageDebugResources/
│   │   │   │   │   │   │   ├── compile-file-map.properties
│   │   │   │   │   │   │   └── merger.xml
│   │   │   │   │   │   └── packageReleaseResources/
│   │   │   │   │   │       ├── compile-file-map.properties
│   │   │   │   │   │       └── merger.xml
│   │   │   │   │   ├── incremental-safeguard/
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   └── tag.txt
│   │   │   │   │   │   └── release/
│   │   │   │   │   │       └── tag.txt
│   │   │   │   │   └── manifests/
│   │   │   │   │       └── aapt/
│   │   │   │   │           ├── debug/
│   │   │   │   │           │   └── AndroidManifest.xml
│   │   │   │   │           └── release/
│   │   │   │   │               └── AndroidManifest.xml
│   │   │   │   └── outputs/
│   │   │   │       └── aar/
│   │   │   │           ├── CordovaLib-debug.aar
│   │   │   │           └── CordovaLib-release.aar
│   │   │   ├── build.gradle
│   │   │   ├── cordova.gradle
│   │   │   ├── project.properties
│   │   │   └── src/
│   │   │       └── org/
│   │   │           └── apache/
│   │   │               └── cordova/
│   │   │                   ├── AuthenticationToken.java
│   │   │                   ├── CallbackContext.java
│   │   │                   ├── CallbackMap.java
│   │   │                   ├── Config.java
│   │   │                   ├── ConfigXmlParser.java
│   │   │                   ├── CordovaActivity.java
│   │   │                   ├── CordovaArgs.java
│   │   │                   ├── CordovaBridge.java
│   │   │                   ├── CordovaClientCertRequest.java
│   │   │                   ├── CordovaDialogsHelper.java
│   │   │                   ├── CordovaHttpAuthHandler.java
│   │   │                   ├── CordovaInterface.java
│   │   │                   ├── CordovaInterfaceImpl.java
│   │   │                   ├── CordovaPlugin.java
│   │   │                   ├── CordovaPreferences.java
│   │   │                   ├── CordovaResourceApi.java
│   │   │                   ├── CordovaWebView.java
│   │   │                   ├── CordovaWebViewEngine.java
│   │   │                   ├── CordovaWebViewImpl.java
│   │   │                   ├── CoreAndroid.java
│   │   │                   ├── ExposedJsApi.java
│   │   │                   ├── ICordovaClientCertRequest.java
│   │   │                   ├── ICordovaCookieManager.java
│   │   │                   ├── ICordovaHttpAuthHandler.java
│   │   │                   ├── LOG.java
│   │   │                   ├── NativeToJsMessageQueue.java
│   │   │                   ├── PluginEntry.java
│   │   │                   ├── PluginManager.java
│   │   │                   ├── PluginResult.java
│   │   │                   ├── ResumeCallback.java
│   │   │                   ├── Whitelist.java
│   │   │                   └── engine/
│   │   │                       ├── SystemCookieManager.java
│   │   │                       ├── SystemExposedJsApi.java
│   │   │                       ├── SystemWebChromeClient.java
│   │   │                       ├── SystemWebView.java
│   │   │                       ├── SystemWebViewClient.java
│   │   │                       └── SystemWebViewEngine.java
│   │   ├── android.json
│   │   ├── assets/
│   │   │   └── www/
│   │   │       ├── cordova-js-src/
│   │   │       │   ├── android/
│   │   │       │   │   ├── nativeapiprovider.js
│   │   │       │   │   └── promptbasednativeapi.js
│   │   │       │   ├── exec.js
│   │   │       │   ├── platform.js
│   │   │       │   └── plugin/
│   │   │       │       └── android/
│   │   │       │           └── app.js
│   │   │       ├── cordova.js
│   │   │       ├── cordova_plugins.js
│   │   │       ├── css/
│   │   │       │   ├── responsive.css
│   │   │       │   └── styles.css
│   │   │       ├── index.html
│   │   │       ├── js/
│   │   │       │   ├── main.js
│   │   │       │   └── utilities.js
│   │   │       ├── lib/
│   │   │       │   └── DataTables/
│   │   │       │       ├── DataTables-1.10.13/
│   │   │       │       │   ├── css/
│   │   │       │       │   │   ├── dataTables.bootstrap.css
│   │   │       │       │   │   ├── dataTables.foundation.css
│   │   │       │       │   │   ├── dataTables.jqueryui.css
│   │   │       │       │   │   ├── dataTables.semanticui.css
│   │   │       │       │   │   ├── jquery.dataTables.css
│   │   │       │       │   │   └── jquery.dataTables_themeroller.css
│   │   │       │       │   └── js/
│   │   │       │       │       ├── dataTables.bootstrap.js
│   │   │       │       │       ├── dataTables.foundation.js
│   │   │       │       │       ├── dataTables.jqueryui.js
│   │   │       │       │       ├── dataTables.semanticui.js
│   │   │       │       │       └── jquery.dataTables.js
│   │   │       │       ├── datatables.css
│   │   │       │       └── datatables.js
│   │   │       ├── partial/
│   │   │       │   ├── about-help.html
│   │   │       │   ├── app-settings.html
│   │   │       │   ├── dashboard.html
│   │   │       │   └── query-log.html
│   │   │       └── plugins/
│   │   │           ├── cordova-plugin-splashscreen/
│   │   │           │   └── www/
│   │   │           │       └── splashscreen.js
│   │   │           └── phonegap-plugin-barcodescanner/
│   │   │               └── www/
│   │   │                   └── barcodescanner.js
│   │   ├── build.gradle
│   │   ├── cordova/
│   │   │   ├── .jshintrc
│   │   │   ├── Api.js
│   │   │   ├── android_sdk_version
│   │   │   ├── android_sdk_version.bat
│   │   │   ├── build
│   │   │   ├── build.bat
│   │   │   ├── check_reqs
│   │   │   ├── check_reqs.bat
│   │   │   ├── clean
│   │   │   ├── clean.bat
│   │   │   ├── defaults.xml
│   │   │   ├── lib/
│   │   │   │   ├── Adb.js
│   │   │   │   ├── AndroidManifest.js
│   │   │   │   ├── AndroidProject.js
│   │   │   │   ├── AndroidStudio.js
│   │   │   │   ├── android_sdk.js
│   │   │   │   ├── build.js
│   │   │   │   ├── builders/
│   │   │   │   │   ├── AntBuilder.js
│   │   │   │   │   ├── GenericBuilder.js
│   │   │   │   │   ├── GradleBuilder.js
│   │   │   │   │   └── builders.js
│   │   │   │   ├── check_reqs.js
│   │   │   │   ├── device.js
│   │   │   │   ├── emulator.js
│   │   │   │   ├── install-device
│   │   │   │   ├── install-device.bat
│   │   │   │   ├── install-emulator
│   │   │   │   ├── install-emulator.bat
│   │   │   │   ├── list-devices
│   │   │   │   ├── list-devices.bat
│   │   │   │   ├── list-emulator-images
│   │   │   │   ├── list-emulator-images.bat
│   │   │   │   ├── list-started-emulators
│   │   │   │   ├── list-started-emulators.bat
│   │   │   │   ├── log.js
│   │   │   │   ├── plugin-build.gradle
│   │   │   │   ├── pluginHandlers.js
│   │   │   │   ├── prepare.js
│   │   │   │   ├── retry.js
│   │   │   │   ├── run.js
│   │   │   │   ├── start-emulator
│   │   │   │   └── start-emulator.bat
│   │   │   ├── log
│   │   │   ├── log.bat
│   │   │   ├── loggingHelper.js
│   │   │   ├── run
│   │   │   ├── run.bat
│   │   │   ├── version
│   │   │   └── version.bat
│   │   ├── libs/
│   │   │   └── barcodescanner.aar
│   │   ├── phonegap-plugin-barcodescanner/
│   │   │   └── piholedroid-barcodescanner.gradle
│   │   ├── platform_www/
│   │   │   ├── cordova-js-src/
│   │   │   │   ├── android/
│   │   │   │   │   ├── nativeapiprovider.js
│   │   │   │   │   └── promptbasednativeapi.js
│   │   │   │   ├── exec.js
│   │   │   │   ├── platform.js
│   │   │   │   └── plugin/
│   │   │   │       └── android/
│   │   │   │           └── app.js
│   │   │   ├── cordova.js
│   │   │   ├── cordova_plugins.js
│   │   │   └── plugins/
│   │   │       ├── cordova-plugin-splashscreen/
│   │   │       │   └── www/
│   │   │       │       └── splashscreen.js
│   │   │       └── phonegap-plugin-barcodescanner/
│   │   │           └── www/
│   │   │               └── barcodescanner.js
│   │   ├── project.properties
│   │   ├── res/
│   │   │   ├── values/
│   │   │   │   └── strings.xml
│   │   │   └── xml/
│   │   │       └── config.xml
│   │   ├── settings.gradle
│   │   ├── src/
│   │   │   ├── com/
│   │   │   │   └── phonegap/
│   │   │   │       └── plugins/
│   │   │   │           └── barcodescanner/
│   │   │   │               └── BarcodeScanner.java
│   │   │   ├── friimaind/
│   │   │   │   └── piholedroid/
│   │   │   │       └── MainActivity.java
│   │   │   └── org/
│   │   │       └── apache/
│   │   │           └── cordova/
│   │   │               ├── BuildHelper.java
│   │   │               ├── PermissionHelper.java
│   │   │               ├── splashscreen/
│   │   │               │   └── SplashScreen.java
│   │   │               └── whitelist/
│   │   │                   └── WhitelistPlugin.java
│   │   └── wrapper.gradle
│   ├── browser/
│   │   ├── browser.json
│   │   ├── config.xml
│   │   ├── cordova/
│   │   │   ├── build
│   │   │   ├── build.bat
│   │   │   ├── clean
│   │   │   ├── defaults.xml
│   │   │   ├── lib/
│   │   │   │   ├── build.js
│   │   │   │   ├── check_reqs.js
│   │   │   │   └── clean.js
│   │   │   ├── run
│   │   │   ├── run.bat
│   │   │   ├── version
│   │   │   └── version.bat
│   │   ├── css/
│   │   │   └── index.css
│   │   ├── index.html
│   │   ├── js/
│   │   │   └── index.js
│   │   ├── manifest.webapp
│   │   ├── platform_www/
│   │   │   ├── confighelper.js
│   │   │   ├── cordova-js-src/
│   │   │   │   ├── confighelper.js
│   │   │   │   ├── exec.js
│   │   │   │   └── platform.js
│   │   │   ├── cordova.js
│   │   │   ├── cordova_plugins.js
│   │   │   ├── exec.js
│   │   │   ├── platform.js
│   │   │   └── plugins/
│   │   │       ├── cordova-plugin-splashscreen/
│   │   │       │   ├── src/
│   │   │       │   │   └── browser/
│   │   │       │   │       └── SplashScreenProxy.js
│   │   │       │   └── www/
│   │   │       │       └── splashscreen.js
│   │   │       └── phonegap-plugin-barcodescanner/
│   │   │           ├── src/
│   │   │           │   └── browser/
│   │   │           │       └── BarcodeScannerProxy.js
│   │   │           └── www/
│   │   │               └── barcodescanner.js
│   │   └── www/
│   │       ├── config.xml
│   │       ├── confighelper.js
│   │       ├── cordova-js-src/
│   │       │   ├── confighelper.js
│   │       │   ├── exec.js
│   │       │   └── platform.js
│   │       ├── cordova.js
│   │       ├── cordova_plugins.js
│   │       ├── css/
│   │       │   ├── responsive.css
│   │       │   └── styles.css
│   │       ├── exec.js
│   │       ├── index.html
│   │       ├── js/
│   │       │   ├── main.js
│   │       │   └── utilities.js
│   │       ├── lib/
│   │       │   └── DataTables/
│   │       │       ├── DataTables-1.10.13/
│   │       │       │   ├── css/
│   │       │       │   │   ├── dataTables.bootstrap.css
│   │       │       │   │   ├── dataTables.foundation.css
│   │       │       │   │   ├── dataTables.jqueryui.css
│   │       │       │   │   ├── dataTables.semanticui.css
│   │       │       │   │   ├── jquery.dataTables.css
│   │       │       │   │   └── jquery.dataTables_themeroller.css
│   │       │       │   └── js/
│   │       │       │       ├── dataTables.bootstrap.js
│   │       │       │       ├── dataTables.foundation.js
│   │       │       │       ├── dataTables.jqueryui.js
│   │       │       │       ├── dataTables.semanticui.js
│   │       │       │       └── jquery.dataTables.js
│   │       │       ├── datatables.css
│   │       │       └── datatables.js
│   │       ├── partial/
│   │       │   ├── about-help.html
│   │       │   ├── app-settings.html
│   │       │   ├── dashboard.html
│   │       │   └── query-log.html
│   │       ├── platform.js
│   │       └── plugins/
│   │           ├── cordova-plugin-splashscreen/
│   │           │   ├── src/
│   │           │   │   └── browser/
│   │           │   │       └── SplashScreenProxy.js
│   │           │   └── www/
│   │           │       └── splashscreen.js
│   │           └── phonegap-plugin-barcodescanner/
│   │               ├── src/
│   │               │   └── browser/
│   │               │       └── BarcodeScannerProxy.js
│   │               └── www/
│   │                   └── barcodescanner.js
│   └── platforms.json
├── plugins/
│   ├── android.json
│   ├── browser.json
│   ├── cordova-plugin-compat/
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   └── src/
│   │       ├── android/
│   │       │   ├── BuildHelper.java
│   │       │   └── PermissionHelper.java
│   │       └── cordova-plugin-compat.iml
│   ├── cordova-plugin-splashscreen/
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── doc/
│   │   │   ├── de/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── es/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── fr/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── it/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ja/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ko/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── pl/
│   │   │   │   ├── README.md
│   │   │   │   └── index.md
│   │   │   ├── ru/
│   │   │   │   └── index.md
│   │   │   └── zh/
│   │   │       ├── README.md
│   │   │       └── index.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   ├── src/
│   │   │   ├── android/
│   │   │   │   └── SplashScreen.java
│   │   │   ├── blackberry10/
│   │   │   │   └── index.js
│   │   │   ├── browser/
│   │   │   │   └── SplashScreenProxy.js
│   │   │   ├── cordova-plugin-splashscreen.iml
│   │   │   ├── ios/
│   │   │   │   ├── CDVSplashScreen.h
│   │   │   │   ├── CDVSplashScreen.m
│   │   │   │   ├── CDVViewController+SplashScreen.h
│   │   │   │   └── CDVViewController+SplashScreen.m
│   │   │   ├── tizen/
│   │   │   │   └── SplashScreenProxy.js
│   │   │   ├── ubuntu/
│   │   │   │   ├── splashscreen.cpp
│   │   │   │   └── splashscreen.h
│   │   │   └── wp/
│   │   │       ├── ResolutionHelper.cs
│   │   │       └── SplashScreen.cs
│   │   ├── tests/
│   │   │   ├── ios/
│   │   │   │   ├── CDVSplashScreenTest/
│   │   │   │   │   ├── .npmignore
│   │   │   │   │   ├── CDVSplashScreenLibTests/
│   │   │   │   │   │   ├── ImageNameTest.m
│   │   │   │   │   │   ├── ImageNameTestDelegates.h
│   │   │   │   │   │   ├── ImageNameTestDelegates.m
│   │   │   │   │   │   └── Info.plist
│   │   │   │   │   └── CDVSplashScreenTest.xcodeproj/
│   │   │   │   │       ├── project.pbxproj
│   │   │   │   │       ├── project.xcworkspace/
│   │   │   │   │       │   ├── contents.xcworkspacedata
│   │   │   │   │       │   └── xcshareddata/
│   │   │   │   │       │       └── CDVSplashScreenTest.xccheckout
│   │   │   │   │       └── xcshareddata/
│   │   │   │   │           └── xcschemes/
│   │   │   │   │               ├── CDVSplashScreenLib.xcscheme
│   │   │   │   │               └── CDVSplashScreenLibTests.xcscheme
│   │   │   │   ├── CDVSplashScreenTest.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── CDVSplashScreenTest.xccheckout
│   │   │   │   │       └── xcschemes/
│   │   │   │   │           └── CordovaLib.xcscheme
│   │   │   │   ├── README.md
│   │   │   │   ├── doc/
│   │   │   │   │   ├── de/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── es/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── fr/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── it/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── ja/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── ko/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   ├── pl/
│   │   │   │   │   │   └── README.md
│   │   │   │   │   └── zh/
│   │   │   │   │       └── README.md
│   │   │   │   └── package.json
│   │   │   ├── plugin.xml
│   │   │   └── tests.js
│   │   └── www/
│   │       ├── splashscreen.js
│   │       └── windows/
│   │           └── SplashScreenProxy.js
│   ├── cordova-plugin-whitelist/
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── NOTICE
│   │   ├── README.md
│   │   ├── RELEASENOTES.md
│   │   ├── doc/
│   │   │   ├── de/
│   │   │   │   └── README.md
│   │   │   ├── es/
│   │   │   │   └── README.md
│   │   │   ├── fr/
│   │   │   │   └── README.md
│   │   │   ├── it/
│   │   │   │   └── README.md
│   │   │   ├── ja/
│   │   │   │   └── README.md
│   │   │   ├── ko/
│   │   │   │   └── README.md
│   │   │   ├── pl/
│   │   │   │   └── README.md
│   │   │   └── zh/
│   │   │       └── README.md
│   │   ├── package.json
│   │   ├── plugin.xml
│   │   └── src/
│   │       ├── android/
│   │       │   └── WhitelistPlugin.java
│   │       └── cordova-plugin-whitelist.iml
│   ├── fetch.json
│   └── phonegap-plugin-barcodescanner/
│       ├── CHANGELOG.md
│       ├── README.md
│       ├── hooks/
│       │   └── windows/
│       │       └── check-arch.js
│       ├── package.json
│       ├── plugin.xml
│       ├── spec/
│       │   ├── helper/
│       │   │   └── cordova.js
│       │   └── index.spec.js
│       ├── src/
│       │   ├── android/
│       │   │   ├── README.md
│       │   │   ├── barcodescanner-release-2.1.2.aar
│       │   │   ├── barcodescanner.gradle
│       │   │   └── com/
│       │   │       └── phonegap/
│       │   │           └── plugins/
│       │   │               └── barcodescanner/
│       │   │                   └── BarcodeScanner.java
│       │   ├── blackberry10/
│       │   │   ├── LICENSE
│       │   │   ├── index.js
│       │   │   ├── native/
│       │   │   │   ├── .cproject
│       │   │   │   ├── .settings/
│       │   │   │   │   └── com.qnx.tools.ide.core.prefs
│       │   │   │   ├── device/
│       │   │   │   │   └── .npmignore
│       │   │   │   ├── public/
│       │   │   │   │   ├── json/
│       │   │   │   │   │   ├── autolink.h
│       │   │   │   │   │   ├── config.h
│       │   │   │   │   │   ├── features.h
│       │   │   │   │   │   ├── forwards.h
│       │   │   │   │   │   ├── json.h
│       │   │   │   │   │   ├── reader.h
│       │   │   │   │   │   ├── value.h
│       │   │   │   │   │   └── writer.h
│       │   │   │   │   ├── json_batchallocator.h
│       │   │   │   │   ├── json_internalarray.inl
│       │   │   │   │   ├── json_internalmap.inl
│       │   │   │   │   ├── json_reader.cpp
│       │   │   │   │   ├── json_value.cpp
│       │   │   │   │   ├── json_valueiterator.inl
│       │   │   │   │   ├── json_writer.cpp
│       │   │   │   │   ├── plugin.cpp
│       │   │   │   │   ├── plugin.h
│       │   │   │   │   ├── tokenizer.cpp
│       │   │   │   │   └── tokenizer.h
│       │   │   │   ├── simulator/
│       │   │   │   │   └── .npmignore
│       │   │   │   └── src/
│       │   │   │       ├── Logger.cpp
│       │   │   │       ├── Logger.hpp
│       │   │   │       ├── barcodescanner_js.cpp
│       │   │   │       ├── barcodescanner_js.hpp
│       │   │   │       ├── barcodescanner_ndk.cpp
│       │   │   │       └── barcodescanner_ndk.hpp
│       │   │   └── qrcode.js
│       │   ├── browser/
│       │   │   └── BarcodeScannerProxy.js
│       │   ├── ios/
│       │   │   ├── CDVBarcodeScanner.bundle/
│       │   │   │   └── beep.caf
│       │   │   ├── CDVBarcodeScanner.mm
│       │   │   ├── scannerOverlay.xib
│       │   │   ├── zxing-all-in-one.cpp
│       │   │   └── zxing-all-in-one.h
│       │   ├── phonegap-plugin-barcodescanner.iml
│       │   ├── windows/
│       │   │   ├── BarcodeScannerProxy.js
│       │   │   ├── assets/
│       │   │   │   └── plugin-barcodeScanner.css
│       │   │   ├── lib/
│       │   │   │   ├── Properties/
│       │   │   │   │   └── AssemblyInfo.cs
│       │   │   │   ├── Reader.cs
│       │   │   │   ├── WinRTBarcodeReader.csproj
│       │   │   │   └── ZXing.winmd
│       │   │   └── lib.UW/
│       │   │       ├── ANY/
│       │   │       │   └── ZXing.winmd
│       │   │       ├── ARM/
│       │   │       │   └── ZXing.winmd
│       │   │       ├── x64/
│       │   │       │   └── ZXing.winmd
│       │   │       └── x86/
│       │   │           └── ZXing.winmd
│       │   └── wp8/
│       │       ├── BarcodeScanner.cs
│       │       ├── BarcodeScannerTask.cs
│       │       ├── BarcodeScannerUI.xaml
│       │       └── BarcodeScannerUI.xaml.cs
│       ├── tests/
│       │   ├── plugin.xml
│       │   └── tests.js
│       └── www/
│           └── barcodescanner.js
└── www/
    ├── css/
    │   ├── responsive.css
    │   └── styles.css
    ├── index.html
    ├── js/
    │   ├── main.js
    │   └── utilities.js
    ├── lib/
    │   └── DataTables/
    │       ├── DataTables-1.10.13/
    │       │   ├── css/
    │       │   │   ├── dataTables.bootstrap.css
    │       │   │   ├── dataTables.foundation.css
    │       │   │   ├── dataTables.jqueryui.css
    │       │   │   ├── dataTables.semanticui.css
    │       │   │   ├── jquery.dataTables.css
    │       │   │   └── jquery.dataTables_themeroller.css
    │       │   └── js/
    │       │       ├── dataTables.bootstrap.js
    │       │       ├── dataTables.foundation.js
    │       │       ├── dataTables.jqueryui.js
    │       │       ├── dataTables.semanticui.js
    │       │       └── jquery.dataTables.js
    │       ├── datatables.css
    │       └── datatables.js
    └── partial/
        ├── about-help.html
        ├── app-settings.html
        ├── dashboard.html
        └── query-log.html
Download .txt
Showing preview only (4,454K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (1968 symbols across 132 files)

FILE: platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java
  class BuildConfig (line 6) | public final class BuildConfig {

FILE: platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java
  class BuildConfig (line 6) | public final class BuildConfig {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java
  class AuthenticationToken (line 24) | public class AuthenticationToken {
    method getUserName (line 33) | public String getUserName() {
    method setUserName (line 43) | public void setUserName(String userName) {
    method getPassword (line 52) | public String getPassword() {
    method setPassword (line 62) | public void setPassword(String password) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java
  class CallbackContext (line 27) | public class CallbackContext {
    method CallbackContext (line 35) | public CallbackContext(String callbackId, CordovaWebView webView) {
    method isFinished (line 40) | public boolean isFinished() {
    method isChangingThreads (line 44) | public boolean isChangingThreads() {
    method getCallbackId (line 48) | public String getCallbackId() {
    method sendPluginResult (line 52) | public void sendPluginResult(PluginResult pluginResult) {
    method success (line 69) | public void success(JSONObject message) {
    method success (line 78) | public void success(String message) {
    method success (line 87) | public void success(JSONArray message) {
    method success (line 96) | public void success(byte[] message) {
    method success (line 105) | public void success(int message) {
    method success (line 112) | public void success() {
    method error (line 121) | public void error(JSONObject message) {
    method error (line 130) | public void error(String message) {
    method error (line 139) | public void error(int message) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java
  class CallbackMap (line 29) | public class CallbackMap {
    method CallbackMap (line 33) | public CallbackMap() {
    method registerCallback (line 46) | public synchronized int registerCallback(CordovaPlugin receiver, int r...
    method getAndRemoveCallback (line 60) | public synchronized Pair<CordovaPlugin, Integer> getAndRemoveCallback(...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/Config.java
  class Config (line 26) | @Deprecated // Use Whitelist, CordovaPrefences, etc. directly.
    method Config (line 32) | private Config() {
    method init (line 35) | public static void init(Activity action) {
    method init (line 43) | public static void init() {
    method getStartUrl (line 49) | public static String getStartUrl() {
    method getErrorUrl (line 56) | public static String getErrorUrl() {
    method getPluginEntries (line 60) | public static List<PluginEntry> getPluginEntries() {
    method getPreferences (line 64) | public static CordovaPreferences getPreferences() {
    method isInitialized (line 68) | public static boolean isInitialized() {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java
  class ConfigXmlParser (line 33) | public class ConfigXmlParser {
    method getPreferences (line 40) | public CordovaPreferences getPreferences() {
    method getPluginEntries (line 44) | public ArrayList<PluginEntry> getPluginEntries() {
    method getLaunchUrl (line 48) | public String getLaunchUrl() {
    method parse (line 52) | public void parse(Context action) {
    method parse (line 70) | public void parse(XmlPullParser xml) {
    method handleStartTag (line 91) | public void handleStartTag(XmlPullParser xml) {
    method handleEndTag (line 121) | public void handleEndTag(XmlPullParser xml) {
    method setStartUrl (line 133) | private void setStartUrl(String src) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java
  class CordovaActivity (line 77) | public class CordovaActivity extends Activity {
    method onCreate (line 104) | @Override
    method init (line 145) | protected void init() {
    method loadConfig (line 160) | @SuppressWarnings("deprecation")
    method createViews (line 172) | @SuppressWarnings({"deprecation", "ResourceType"})
    method makeWebView (line 201) | protected CordovaWebView makeWebView() {
    method makeWebViewEngine (line 205) | protected CordovaWebViewEngine makeWebViewEngine() {
    method makeCordovaInterface (line 209) | protected CordovaInterfaceImpl makeCordovaInterface() {
    method loadUrl (line 222) | public void loadUrl(String url) {
    method onPause (line 236) | @Override
    method onNewIntent (line 252) | @Override
    method onResume (line 263) | @Override
    method onStop (line 281) | @Override
    method onStart (line 295) | @Override
    method onDestroy (line 309) | @Override
    method onWindowFocusChanged (line 322) | @Override
    method startActivityForResult (line 337) | @SuppressLint("NewApi")
    method onActivityResult (line 354) | @Override
    method onReceivedError (line 369) | public void onReceivedError(final int errorCode, final String descript...
    method displayError (line 399) | public void displayError(final String title, final String message, fin...
    method onCreateOptionsMenu (line 429) | @Override
    method onPrepareOptionsMenu (line 437) | @Override
    method onOptionsItemSelected (line 445) | @Override
    method onMessage (line 460) | public Object onMessage(String id, Object data) {
    method onSaveInstanceState (line 474) | protected void onSaveInstanceState(Bundle outState) {
    method onConfigurationChanged (line 484) | @Override
    method onRequestPermissionsResult (line 503) | @Override

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java
  class CordovaArgs (line 27) | public class CordovaArgs {
    method CordovaArgs (line 30) | public CordovaArgs(JSONArray args) {
    method get (line 36) | public Object get(int index) throws JSONException {
    method getBoolean (line 40) | public boolean getBoolean(int index) throws JSONException {
    method getDouble (line 44) | public double getDouble(int index) throws JSONException {
    method getInt (line 48) | public int getInt(int index) throws JSONException {
    method getJSONArray (line 52) | public JSONArray getJSONArray(int index) throws JSONException {
    method getJSONObject (line 56) | public JSONObject getJSONObject(int index) throws JSONException {
    method getLong (line 60) | public long getLong(int index) throws JSONException {
    method getString (line 64) | public String getString(int index) throws JSONException {
    method opt (line 69) | public Object opt(int index) {
    method optBoolean (line 73) | public boolean optBoolean(int index) {
    method optDouble (line 77) | public double optDouble(int index) {
    method optInt (line 81) | public int optInt(int index) {
    method optJSONArray (line 85) | public JSONArray optJSONArray(int index) {
    method optJSONObject (line 89) | public JSONObject optJSONObject(int index) {
    method optLong (line 93) | public long optLong(int index) {
    method optString (line 97) | public String optString(int index) {
    method isNull (line 101) | public boolean isNull(int index) {
    method getArrayBuffer (line 107) | public byte[] getArrayBuffer(int index) throws JSONException {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java
  class CordovaBridge (line 31) | public class CordovaBridge {
    method CordovaBridge (line 37) | public CordovaBridge(PluginManager pluginManager, NativeToJsMessageQue...
    method jsExec (line 42) | public String jsExec(int bridgeSecret, String service, String action, ...
    method jsSetNativeToJsBridgeMode (line 71) | public void jsSetNativeToJsBridgeMode(int bridgeSecret, int value) thr...
    method jsRetrieveJsMessages (line 78) | public String jsRetrieveJsMessages(int bridgeSecret, boolean fromOnlin...
    method verifySecret (line 85) | private boolean verifySecret(String action, int bridgeSecret) throws I...
    method clearBridgeSecret (line 104) | void clearBridgeSecret() {
    method isSecretEstablished (line 108) | public boolean isSecretEstablished() {
    method generateBridgeSecret (line 113) | int generateBridgeSecret() {
    method reset (line 119) | public void reset() {
    method promptOnJsPrompt (line 124) | public String promptOnJsPrompt(String origin, String message, String d...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java
  class CordovaClientCertRequest (line 30) | public class CordovaClientCertRequest implements ICordovaClientCertReque...
    method CordovaClientCertRequest (line 34) | public CordovaClientCertRequest(ClientCertRequest request) {
    method cancel (line 41) | public void cancel()
    method getHost (line 49) | public String getHost()
    method getKeyTypes (line 57) | public String[] getKeyTypes()
    method getPort (line 65) | public int getPort()
    method getPrincipals (line 73) | public Principal[] getPrincipals()
    method ignore (line 81) | public void ignore()
    method proceed (line 92) | public void proceed(PrivateKey privateKey, X509Certificate[] chain)

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java
  class CordovaDialogsHelper (line 30) | public class CordovaDialogsHelper {
    method CordovaDialogsHelper (line 34) | public CordovaDialogsHelper(Context context) {
    method showAlert (line 38) | public void showAlert(String message, final Result result) {
    method showConfirm (line 71) | public void showConfirm(String message, final Result result) {
    method showPrompt (line 117) | public void showPrompt(String message, String defaultValue, final Resu...
    method destroyLastDialog (line 143) | public void destroyLastDialog(){
    type Result (line 149) | public interface Result {
      method gotResult (line 150) | public void gotResult(boolean success, String value);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java
  class CordovaHttpAuthHandler (line 27) | public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler {
    method CordovaHttpAuthHandler (line 31) | public CordovaHttpAuthHandler(HttpAuthHandler handler) {
    method cancel (line 38) | public void cancel () {
    method proceed (line 48) | public void proceed (String username, String password) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java
  type CordovaInterface (line 32) | public interface CordovaInterface {
    method startActivityForResult (line 42) | abstract public void startActivityForResult(CordovaPlugin command, Int...
    method setActivityResultCallback (line 49) | abstract public void setActivityResultCallback(CordovaPlugin plugin);
    method getActivity (line 56) | public abstract Activity getActivity();
    method onMessage (line 66) | public Object onMessage(String id, Object data);
    method getThreadPool (line 71) | public ExecutorService getThreadPool();
    method requestPermission (line 76) | public void requestPermission(CordovaPlugin plugin, int requestCode, S...
    method requestPermissions (line 81) | public void requestPermissions(CordovaPlugin plugin, int requestCode, ...
    method hasPermission (line 86) | public boolean hasPermission(String permission);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java
  class CordovaInterfaceImpl (line 38) | public class CordovaInterfaceImpl implements CordovaInterface {
    method CordovaInterfaceImpl (line 52) | public CordovaInterfaceImpl(Activity activity) {
    method CordovaInterfaceImpl (line 56) | public CordovaInterfaceImpl(Activity activity, ExecutorService threadP...
    method startActivityForResult (line 62) | @Override
    method setActivityResultCallback (line 73) | @Override
    method getActivity (line 82) | @Override
    method onMessage (line 87) | @Override
    method getThreadPool (line 95) | @Override
    method onCordovaInit (line 104) | public void onCordovaInit(PluginManager pluginManager) {
    method onActivityResult (line 132) | public boolean onActivityResult(int requestCode, int resultCode, Inten...
    method setActivityResultRequestCode (line 164) | public void setActivityResultRequestCode(int requestCode) {
    method onSaveInstanceState (line 171) | public void onSaveInstanceState(Bundle outState) {
    method restoreInstanceState (line 185) | public void restoreInstanceState(Bundle savedInstanceState) {
    class ActivityResultHolder (line 191) | private static class ActivityResultHolder {
      method ActivityResultHolder (line 196) | public ActivityResultHolder(int requestCode, int resultCode, Intent ...
    method onRequestPermissionResult (line 210) | public void onRequestPermissionResult(int requestCode, String[] permis...
    method requestPermission (line 218) | public void requestPermission(CordovaPlugin plugin, int requestCode, S...
    method requestPermissions (line 224) | public void requestPermissions(CordovaPlugin plugin, int requestCode, ...
    method hasPermission (line 229) | public boolean hasPermission(String permission)

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java
  class CordovaPlugin (line 41) | public class CordovaPlugin {
    method privateInitialize (line 51) | public final void privateInitialize(String serviceName, CordovaInterfa...
    method initialize (line 66) | public void initialize(CordovaInterface cordova, CordovaWebView webVie...
    method pluginInitialize (line 72) | protected void pluginInitialize() {
    method getServiceName (line 78) | public String getServiceName() {
    method execute (line 96) | public boolean execute(String action, String rawArgs, CallbackContext ...
    method execute (line 115) | public boolean execute(String action, JSONArray args, CallbackContext ...
    method execute (line 134) | public boolean execute(String action, CordovaArgs args, CallbackContex...
    method onPause (line 143) | public void onPause(boolean multitasking) {
    method onResume (line 151) | public void onResume(boolean multitasking) {
    method onStart (line 157) | public void onStart() {
    method onStop (line 163) | public void onStop() {
    method onNewIntent (line 169) | public void onNewIntent(Intent intent) {
    method onDestroy (line 175) | public void onDestroy() {
    method onSaveInstanceState (line 187) | public Bundle onSaveInstanceState() {
    method onRestoreStateForActivityResult (line 199) | public void onRestoreStateForActivityResult(Bundle state, CallbackCont...
    method onMessage (line 208) | public Object onMessage(String id, Object data) {
    method onActivityResult (line 222) | public void onActivityResult(int requestCode, int resultCode, Intent i...
    method shouldAllowRequest (line 241) | public Boolean shouldAllowRequest(String url) {
    method shouldAllowNavigation (line 255) | public Boolean shouldAllowNavigation(String url) {
    method shouldAllowBridgeAccess (line 264) | public Boolean shouldAllowBridgeAccess(String url) {
    method shouldOpenExternalUrl (line 278) | public Boolean shouldOpenExternalUrl(String url) {
    method onOverrideUrlLoading (line 288) | public boolean onOverrideUrlLoading(String url) {
    method remapUri (line 308) | public Uri remapUri(Uri uri) {
    method handleOpenForRead (line 317) | public CordovaResourceApi.OpenForReadResult handleOpenForRead(Uri uri)...
    method toPluginUri (line 325) | protected Uri toPluginUri(Uri origUri) {
    method fromPluginUri (line 337) | protected Uri fromPluginUri(Uri pluginUri) {
    method onReset (line 348) | public void onReset() {
    method onReceivedHttpAuthRequest (line 363) | public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordova...
    method onReceivedClientCertRequest (line 377) | public boolean onReceivedClientCertRequest(CordovaWebView view, ICordo...
    method onConfigurationChanged (line 386) | public void onConfigurationChanged(Configuration newConfig) {
    method requestPermissions (line 397) | public void requestPermissions(int requestCode) {
    method hasPermisssion (line 407) | public boolean hasPermisssion() {
    method onRequestPermissionResult (line 418) | public void onRequestPermissionResult(int requestCode, String[] permis...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java
  class CordovaPreferences (line 31) | public class CordovaPreferences {
    method setPreferencesBundle (line 35) | public void setPreferencesBundle(Bundle extras) {
    method set (line 39) | public void set(String name, String value) {
    method set (line 43) | public void set(String name, boolean value) {
    method set (line 47) | public void set(String name, int value) {
    method set (line 51) | public void set(String name, double value) {
    method getAll (line 55) | public Map<String, String> getAll() {
    method getBoolean (line 59) | public boolean getBoolean(String name, boolean defaultValue) {
    method contains (line 69) | public boolean contains(String name) {
    method getInteger (line 73) | public int getInteger(String name, int defaultValue) {
    method getDouble (line 83) | public double getDouble(String name, double defaultValue) {
    method getString (line 92) | public String getString(String name, String defaultValue) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java
  class CordovaResourceApi (line 63) | public class CordovaResourceApi {
    method CordovaResourceApi (line 89) | public CordovaResourceApi(Context context, PluginManager pluginManager) {
    method setThreadCheckingEnabled (line 95) | public void setThreadCheckingEnabled(boolean value) {
    method isThreadCheckingEnabled (line 99) | public boolean isThreadCheckingEnabled() {
    method getUriType (line 104) | public static int getUriType(Uri uri) {
    method remapUri (line 134) | public Uri remapUri(Uri uri) {
    method remapPath (line 140) | public String remapPath(String path) {
    method mapUriToFile (line 148) | public File mapUriToFile(Uri uri) {
    method getMimeType (line 174) | public String getMimeType(Uri uri) {
    method getMimeTypeFromPath (line 206) | private String getMimeTypeFromPath(String path) {
    method openForRead (line 231) | public OpenForReadResult openForRead(Uri uri) throws IOException {
    method openForRead (line 243) | public OpenForReadResult openForRead(Uri uri, boolean skipThreadCheck)...
    method openOutputStream (line 309) | public OutputStream openOutputStream(Uri uri) throws IOException {
    method openOutputStream (line 320) | public OutputStream openOutputStream(Uri uri, boolean append) throws I...
    method createHttpConnection (line 340) | public HttpURLConnection createHttpConnection(Uri uri) throws IOExcept...
    method copyResource (line 347) | public void copyResource(OpenForReadResult input, OutputStream outputS...
    method copyResource (line 384) | public void copyResource(Uri sourceUri, OutputStream outputStream) thr...
    method copyResource (line 389) | public void copyResource(Uri sourceUri, Uri dstUri) throws IOException {
    method assertBackgroundThread (line 393) | private void assertBackgroundThread() {
    method getDataUriMimeType (line 405) | private String getDataUriMimeType(Uri uri) {
    method readDataUri (line 418) | private OpenForReadResult readDataUri(Uri uri) {
    method assertNonRelative (line 450) | private static void assertNonRelative(Uri uri) {
    class OpenForReadResult (line 456) | public static final class OpenForReadResult {
      method OpenForReadResult (line 463) | public OpenForReadResult(Uri uri, InputStream inputStream, String mi...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java
  type CordovaWebView (line 33) | public interface CordovaWebView {
    method init (line 36) | void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, C...
    method isInitialized (line 38) | boolean isInitialized();
    method getView (line 40) | View getView();
    method loadUrlIntoView (line 42) | void loadUrlIntoView(String url, boolean recreatePlugins);
    method stopLoading (line 44) | void stopLoading();
    method canGoBack (line 46) | boolean canGoBack();
    method clearCache (line 48) | void clearCache();
    method clearCache (line 51) | @Deprecated
    method clearHistory (line 54) | void clearHistory();
    method backHistory (line 56) | boolean backHistory();
    method handlePause (line 58) | void handlePause(boolean keepRunning);
    method onNewIntent (line 60) | void onNewIntent(Intent intent);
    method handleResume (line 62) | void handleResume(boolean keepRunning);
    method handleStart (line 64) | void handleStart();
    method handleStop (line 66) | void handleStop();
    method handleDestroy (line 68) | void handleDestroy();
    method sendJavascript (line 91) | @Deprecated
    method showWebPage (line 104) | void showWebPage(String url, boolean openExternal, boolean clearHistor...
    method isCustomViewShowing (line 109) | @Deprecated
    method showCustomView (line 115) | @Deprecated
    method hideCustomView (line 121) | @Deprecated
    method getResourceApi (line 124) | CordovaResourceApi getResourceApi();
    method setButtonPlumbedToJs (line 126) | void setButtonPlumbedToJs(int keyCode, boolean override);
    method isButtonPlumbedToJs (line 127) | boolean isButtonPlumbedToJs(int keyCode);
    method sendPluginResult (line 129) | void sendPluginResult(PluginResult cr, String callbackId);
    method getPluginManager (line 131) | PluginManager getPluginManager();
    method getEngine (line 132) | CordovaWebViewEngine getEngine();
    method getPreferences (line 133) | CordovaPreferences getPreferences();
    method getCookieManager (line 134) | ICordovaCookieManager getCookieManager();
    method getUrl (line 136) | String getUrl();
    method getContext (line 139) | Context getContext();
    method loadUrl (line 140) | void loadUrl(String url);
    method postMessage (line 141) | Object postMessage(String id, Object data);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java
  type CordovaWebViewEngine (line 30) | public interface CordovaWebViewEngine {
    method init (line 31) | void init(CordovaWebView parentWebView, CordovaInterface cordova, Clie...
    method getCordovaWebView (line 35) | CordovaWebView getCordovaWebView();
    method getCookieManager (line 36) | ICordovaCookieManager getCookieManager();
    method getView (line 37) | View getView();
    method loadUrl (line 39) | void loadUrl(String url, boolean clearNavigationStack);
    method stopLoading (line 41) | void stopLoading();
    method getUrl (line 44) | String getUrl();
    method clearCache (line 46) | void clearCache();
    method clearHistory (line 49) | void clearHistory();
    method canGoBack (line 51) | boolean canGoBack();
    method goBack (line 54) | boolean goBack();
    method setPaused (line 57) | void setPaused(boolean value);
    method destroy (line 60) | void destroy();
    method evaluateJavascript (line 63) | void evaluateJavascript(String js, ValueCallback<String> callback);
    type EngineView (line 69) | public interface EngineView {
      method getCordovaWebView (line 70) | CordovaWebView getCordovaWebView();
    type Client (line 77) | public interface Client {
      method onDispatchKeyEvent (line 78) | Boolean onDispatchKeyEvent(KeyEvent event);
      method clearLoadTimeoutTimer (line 79) | void clearLoadTimeoutTimer();
      method onPageStarted (line 80) | void onPageStarted(String newUrl);
      method onReceivedError (line 81) | void onReceivedError(int errorCode, String description, String faili...
      method onPageFinishedLoading (line 82) | void onPageFinishedLoading(String url);
      method onNavigationAttempt (line 83) | boolean onNavigationAttempt(String url);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java
  class CordovaWebViewImpl (line 46) | public class CordovaWebViewImpl implements CordovaWebView {
    method createEngine (line 74) | public static CordovaWebViewEngine createEngine(Context context, Cordo...
    method CordovaWebViewImpl (line 85) | public CordovaWebViewImpl(CordovaWebViewEngine cordovaWebViewEngine) {
    method init (line 90) | public void init(CordovaInterface cordova) {
    method init (line 94) | @Override
    method isInitialized (line 119) | @Override
    method loadUrlIntoView (line 124) | @Override
    method loadUrl (line 196) | @Override
    method showWebPage (line 201) | @Override
    method showCustomView (line 243) | @Override
    method hideCustomView (line 273) | @Override
    method isCustomViewShowing (line 293) | @Override
    method sendJavascript (line 299) | @Override
    method sendPluginResult (line 305) | @Override
    method getPluginManager (line 310) | @Override
    method getPreferences (line 314) | @Override
    method getCookieManager (line 318) | @Override
    method getResourceApi (line 322) | @Override
    method getEngine (line 326) | @Override
    method getView (line 330) | @Override
    method getContext (line 334) | @Override
    method sendJavascriptEvent (line 339) | private void sendJavascriptEvent(String event) {
    method setButtonPlumbedToJs (line 351) | @Override
    method isButtonPlumbedToJs (line 370) | @Override
    method postMessage (line 375) | @Override
    method getUrl (line 381) | @Override
    method stopLoading (line 386) | @Override
    method canGoBack (line 392) | @Override
    method clearCache (line 397) | @Override
    method clearCache (line 402) | @Override
    method clearHistory (line 408) | @Override
    method backHistory (line 413) | @Override
    method onNewIntent (line 419) | @Override
    method handlePause (line 425) | @Override
    method handleResume (line 440) | @Override
    method handleStart (line 457) | @Override
    method handleStop (line 464) | @Override
    method handleDestroy (line 471) | @Override
    class EngineClient (line 491) | protected class EngineClient implements CordovaWebViewEngine.Client {
      method clearLoadTimeoutTimer (line 492) | @Override
      method onPageStarted (line 497) | @Override
      method onReceivedError (line 505) | @Override
      method onPageFinishedLoading (line 519) | @Override
      method onDispatchKeyEvent (line 552) | @Override
      method onNavigationAttempt (line 598) | @Override

FILE: platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java
  class CoreAndroid (line 39) | public class CoreAndroid extends CordovaPlugin {
    method fireJavascriptEvent (line 53) | public void fireJavascriptEvent(String action) {
    method pluginInitialize (line 61) | @Override
    method execute (line 74) | public boolean execute(String action, JSONArray args, CallbackContext ...
    method clearCache (line 139) | public void clearCache() {
    method loadUrl (line 154) | public void loadUrl(String url, JSONObject props) throws JSONException {
    method clearHistory (line 210) | public void clearHistory() {
    method backHistory (line 222) | public void backHistory() {
    method overrideBackbutton (line 236) | public void overrideBackbutton(boolean override) {
    method overrideButton (line 248) | public void overrideButton(String button, boolean override) {
    method isBackbuttonOverridden (line 266) | public boolean isBackbuttonOverridden() {
    method exitApp (line 273) | public void exitApp() {
    method initTelephonyReceiver (line 283) | private void initTelephonyReceiver() {
    method sendEventMessage (line 317) | private void sendEventMessage(String action) {
    method sendEventMessage (line 327) | private void sendEventMessage(PluginResult payload) {
    method onDestroy (line 338) | public void onDestroy()
    method sendResumeEvent (line 348) | public void sendResumeEvent(PluginResult resumeEvent) {
    method getBuildConfigValue (line 371) | public static Object getBuildConfigValue(Context ctx, String key)

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java
  type ExposedJsApi (line 27) | public interface ExposedJsApi {
    method exec (line 28) | public String exec(int bridgeSecret, String service, String action, St...
    method setNativeToJsBridgeMode (line 29) | public void setNativeToJsBridgeMode(int bridgeSecret, int value) throw...
    method retrieveJsMessages (line 30) | public String retrieveJsMessages(int bridgeSecret, boolean fromOnlineE...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java
  type ICordovaClientCertRequest (line 28) | public interface ICordovaClientCertRequest {
    method cancel (line 32) | public void cancel();
    method getHost (line 37) | public String getHost();
    method getKeyTypes (line 42) | public String[] getKeyTypes();
    method getPort (line 47) | public int getPort();
    method getPrincipals (line 52) | public Principal[] getPrincipals();
    method ignore (line 57) | public void ignore();
    method proceed (line 65) | public void proceed(PrivateKey privateKey, X509Certificate[] chain);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java
  type ICordovaCookieManager (line 22) | public interface ICordovaCookieManager {
    method setCookiesEnabled (line 24) | public void setCookiesEnabled(boolean accept);
    method setCookie (line 26) | public void setCookie(final String url, final String value);
    method getCookie (line 28) | public String getCookie(final String url);
    method clearCookies (line 30) | public void clearCookies();
    method flush (line 32) | public void flush();

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java
  type ICordovaHttpAuthHandler (line 25) | public interface ICordovaHttpAuthHandler {
    method cancel (line 29) | public void cancel ();
    method proceed (line 37) | public void proceed (String username, String password);

FILE: platforms/android/CordovaLib/src/org/apache/cordova/LOG.java
  class LOG (line 29) | public class LOG {
    method setLogLevel (line 45) | public static void setLogLevel(int logLevel) {
    method setLogLevel (line 55) | public static void setLogLevel(String logLevel) {
    method isLoggable (line 70) | public static boolean isLoggable(int logLevel) {
    method v (line 80) | public static void v(String tag, String s) {
    method d (line 90) | public static void d(String tag, String s) {
    method i (line 100) | public static void i(String tag, String s) {
    method w (line 110) | public static void w(String tag, String s) {
    method e (line 120) | public static void e(String tag, String s) {
    method v (line 131) | public static void v(String tag, String s, Throwable e) {
    method d (line 142) | public static void d(String tag, String s, Throwable e) {
    method i (line 153) | public static void i(String tag, String s, Throwable e) {
    method w (line 163) | public static void w(String tag, Throwable e) {
    method w (line 174) | public static void w(String tag, String s, Throwable e) {
    method e (line 185) | public static void e(String tag, String s, Throwable e) {
    method v (line 196) | public static void v(String tag, String s, Object... args) {
    method d (line 207) | public static void d(String tag, String s, Object... args) {
    method i (line 218) | public static void i(String tag, String s, Object... args) {
    method w (line 229) | public static void w(String tag, String s, Object... args) {
    method e (line 240) | public static void e(String tag, String s, Object... args) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java
  class NativeToJsMessageQueue (line 27) | public class NativeToJsMessageQueue {
    method addBridgeMode (line 67) | public void addBridgeMode(BridgeMode bridgeMode) {
    method isBridgeEnabled (line 71) | public boolean isBridgeEnabled() {
    method isEmpty (line 75) | public boolean isEmpty() {
    method setBridgeMode (line 82) | public void setBridgeMode(int value) {
    method reset (line 105) | public void reset() {
    method calculatePackedMessageLength (line 112) | private int calculatePackedMessageLength(JsMessage message) {
    method packMessage (line 118) | private void packMessage(JsMessage message, StringBuilder sb) {
    method popAndEncode (line 130) | public String popAndEncode(boolean fromOnlineEvent) {
    method popAndEncodeAsJs (line 168) | public String popAndEncodeAsJs() {
    method addJavaScript (line 212) | public void addJavaScript(String statement) {
    method addPluginResult (line 219) | public void addPluginResult(PluginResult result, String callbackId) {
    method enqueueMessage (line 241) | private void enqueueMessage(JsMessage message) {
    method setPaused (line 254) | public void setPaused(boolean value) {
    class BridgeMode (line 270) | public static abstract class BridgeMode {
      method onNativeToJsMessageAvailable (line 271) | public abstract void onNativeToJsMessageAvailable(NativeToJsMessageQ...
      method notifyOfFlush (line 272) | public void notifyOfFlush(NativeToJsMessageQueue queue, boolean from...
      method reset (line 273) | public void reset() {}
    class NoOpBridgeMode (line 277) | public static class NoOpBridgeMode extends BridgeMode {
      method onNativeToJsMessageAvailable (line 278) | @Override public void onNativeToJsMessageAvailable(NativeToJsMessage...
    class LoadUrlBridgeMode (line 283) | public static class LoadUrlBridgeMode extends BridgeMode {
      method LoadUrlBridgeMode (line 287) | public LoadUrlBridgeMode(CordovaWebViewEngine engine, CordovaInterfa...
      method onNativeToJsMessageAvailable (line 292) | @Override
    class OnlineEventsBridgeMode (line 306) | public static class OnlineEventsBridgeMode extends BridgeMode {
      type OnlineEventsBridgeModeDelegate (line 311) | public interface OnlineEventsBridgeModeDelegate {
        method setNetworkAvailable (line 312) | void setNetworkAvailable(boolean value);
        method runOnUiThread (line 313) | void runOnUiThread(Runnable r);
      method OnlineEventsBridgeMode (line 316) | public OnlineEventsBridgeMode(OnlineEventsBridgeModeDelegate delegat...
      method reset (line 320) | @Override
      method onNativeToJsMessageAvailable (line 332) | @Override
      method notifyOfFlush (line 344) | @Override
    class EvalBridgeMode (line 353) | public static class EvalBridgeMode extends BridgeMode {
      method EvalBridgeMode (line 357) | public EvalBridgeMode(CordovaWebViewEngine engine, CordovaInterface ...
      method onNativeToJsMessageAvailable (line 362) | @Override
    class JsMessage (line 377) | private static class JsMessage {
      method JsMessage (line 380) | JsMessage(String js) {
      method JsMessage (line 387) | JsMessage(PluginResult pluginResult, String callbackId) {
      method calculateEncodedLengthHelper (line 395) | static int calculateEncodedLengthHelper(PluginResult pluginResult) {
      method calculateEncodedLength (line 422) | int calculateEncodedLength() {
      method encodeAsMessageHelper (line 431) | static void encodeAsMessageHelper(StringBuilder sb, PluginResult plu...
      method encodeAsMessage (line 470) | void encodeAsMessage(StringBuilder sb) {
      method buildJsMessage (line 491) | void buildJsMessage(StringBuilder sb) {
      method encodeAsJsMessage (line 519) | void encodeAsJsMessage(StringBuilder sb) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java
  class PluginEntry (line 26) | public final class PluginEntry {
    method PluginEntry (line 51) | public PluginEntry(String service, CordovaPlugin plugin) {
    method PluginEntry (line 60) | public PluginEntry(String service, String pluginClass, boolean onload) {
    method PluginEntry (line 64) | private PluginEntry(String service, String pluginClass, boolean onload...

FILE: platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java
  class PluginManager (line 38) | public class PluginManager {
    method PluginManager (line 52) | public PluginManager(CordovaWebView cordovaWebView, CordovaInterface c...
    method getPluginEntries (line 58) | public Collection<PluginEntry> getPluginEntries() {
    method setPluginEntries (line 62) | public void setPluginEntries(Collection<PluginEntry> pluginEntries) {
    method init (line 80) | public void init() {
    method startupPlugins (line 92) | private void startupPlugins() {
    method exec (line 121) | public void exec(final String service, final String action, final Stri...
    method getPlugin (line 159) | public CordovaPlugin getPlugin(String service) {
    method addService (line 184) | public void addService(String service, String className) {
    method addService (line 195) | public void addService(PluginEntry entry) {
    method onPause (line 208) | public void onPause(boolean multitasking) {
    method onReceivedHttpAuthRequest (line 228) | public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordova...
    method onReceivedClientCertRequest (line 247) | public boolean onReceivedClientCertRequest(CordovaWebView view, ICordo...
    method onResume (line 261) | public void onResume(boolean multitasking) {
    method onStart (line 272) | public void onStart() {
    method onStop (line 283) | public void onStop() {
    method onDestroy (line 294) | public void onDestroy() {
    method postMessage (line 309) | public Object postMessage(String id, Object data) {
    method onNewIntent (line 324) | public void onNewIntent(Intent intent) {
    method shouldAllowRequest (line 343) | public boolean shouldAllowRequest(String url) {
    method shouldAllowNavigation (line 381) | public boolean shouldAllowNavigation(String url) {
    method shouldAllowBridgeAccess (line 400) | public boolean shouldAllowBridgeAccess(String url) {
    method shouldOpenExternalUrl (line 427) | public Boolean shouldOpenExternalUrl(String url) {
    method onOverrideUrlLoading (line 448) | public boolean onOverrideUrlLoading(String url) {
    method onReset (line 461) | public void onReset() {
    method remapUri (line 469) | Uri remapUri(Uri uri) {
    method instantiatePlugin (line 484) | private CordovaPlugin instantiatePlugin(String className) {
    method onConfigurationChanged (line 506) | public void onConfigurationChanged(Configuration newConfig) {
    method onSaveInstanceState (line 514) | public Bundle onSaveInstanceState() {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java
  class PluginResult (line 28) | public class PluginResult {
    method PluginResult (line 36) | public PluginResult(Status status) {
    method PluginResult (line 40) | public PluginResult(Status status, String message) {
    method PluginResult (line 46) | public PluginResult(Status status, JSONArray message) {
    method PluginResult (line 52) | public PluginResult(Status status, JSONObject message) {
    method PluginResult (line 58) | public PluginResult(Status status, int i) {
    method PluginResult (line 64) | public PluginResult(Status status, float f) {
    method PluginResult (line 70) | public PluginResult(Status status, boolean b) {
    method PluginResult (line 76) | public PluginResult(Status status, byte[] data) {
    method PluginResult (line 80) | public PluginResult(Status status, byte[] data, boolean binaryString) {
    method PluginResult (line 87) | public PluginResult(Status status, List<PluginResult> multipartMessage...
    method setKeepCallback (line 93) | public void setKeepCallback(boolean b) {
    method getStatus (line 97) | public int getStatus() {
    method getMessageType (line 101) | public int getMessageType() {
    method getMessage (line 105) | public String getMessage() {
    method getMultipartMessagesSize (line 112) | public int getMultipartMessagesSize() {
    method getMultipartMessage (line 116) | public PluginResult getMultipartMessage(int index) {
    method getStrMessage (line 124) | public String getStrMessage() {
    method getKeepCallback (line 128) | public boolean getKeepCallback() {
    method getJSONString (line 132) | @Deprecated // Use sendPluginResult instead of sendJavascript.
    method toCallbackString (line 137) | @Deprecated // Use sendPluginResult instead of sendJavascript.
    method toSuccessCallbackString (line 152) | @Deprecated // Use sendPluginResult instead of sendJavascript.
    method toErrorCallbackString (line 157) | @Deprecated // Use sendPluginResult instead of sendJavascript.
    type Status (line 186) | public enum Status {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java
  class ResumeCallback (line 28) | public class ResumeCallback extends CallbackContext {
    method ResumeCallback (line 33) | public ResumeCallback(String serviceName, PluginManager pluginManager) {
    method sendPluginResult (line 39) | @Override

FILE: platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java
  class Whitelist (line 31) | public class Whitelist {
    class URLPattern (line 32) | private static class URLPattern {
      method regexFromPattern (line 38) | private String regexFromPattern(String pattern, boolean allowWildcar...
      method URLPattern (line 53) | public URLPattern(String scheme, String host, String port, String pa...
      method matches (line 82) | public boolean matches(Uri uri) {
    method Whitelist (line 99) | public Whitelist() {
    method addWhiteListEntry (line 114) | public void addWhiteListEntry(String origin, boolean subdomains) {
    method isUrlWhiteListed (line 154) | public boolean isUrlWhiteListed(String uri) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java
  class SystemCookieManager (line 29) | class SystemCookieManager implements ICordovaCookieManager {
    method SystemCookieManager (line 35) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method setCookiesEnabled (line 48) | public void setCookiesEnabled(boolean accept) {
    method setCookie (line 52) | public void setCookie(final String url, final String value) {
    method getCookie (line 56) | public String getCookie(final String url) {
    method clearCookies (line 60) | public void clearCookies() {
    method flush (line 64) | public void flush() {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java
  class SystemExposedJsApi (line 32) | class SystemExposedJsApi implements ExposedJsApi {
    method SystemExposedJsApi (line 35) | SystemExposedJsApi(CordovaBridge bridge) {
    method exec (line 39) | @JavascriptInterface
    method setNativeToJsBridgeMode (line 44) | @JavascriptInterface
    method retrieveJsMessages (line 49) | @JavascriptInterface

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java
  class SystemWebChromeClient (line 55) | public class SystemWebChromeClient extends WebChromeClient {
    method SystemWebChromeClient (line 71) | public SystemWebChromeClient(SystemWebViewEngine parentEngine) {
    method onJsAlert (line 80) | @Override
    method onJsConfirm (line 97) | @Override
    method onJsPrompt (line 120) | @Override
    method onExceededDatabaseQuota (line 144) | @Override
    method onConsoleMessage (line 154) | @SuppressWarnings("deprecation")
    method onConsoleMessage (line 166) | @TargetApi(8)
    method onGeolocationPermissionsShowPrompt (line 175) | @Override
    method onShowCustomView (line 197) | @Override
    method onHideCustomView (line 202) | @Override
    method getVideoLoadingProgressView (line 207) | @Override
    method openFileChooser (line 239) | public void openFileChooser(ValueCallback<Uri> uploadMsg) {
    method openFileChooser (line 243) | public void openFileChooser( ValueCallback<Uri> uploadMsg, String acce...
    method openFileChooser (line 247) | public void openFileChooser(final ValueCallback<Uri> uploadMsg, String...
    method onShowFileChooser (line 262) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method onPermissionRequest (line 282) | @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    method destroyLastDialog (line 289) | public void destroyLastDialog(){

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java
  class SystemWebView (line 36) | public class SystemWebView extends WebView implements CordovaWebViewEngi...
    method SystemWebView (line 42) | public SystemWebView(Context context) {
    method SystemWebView (line 46) | public SystemWebView(Context context, AttributeSet attrs) {
    method init (line 51) | void init(SystemWebViewEngine parentEngine, CordovaInterface cordova) {
    method getCordovaWebView (line 63) | @Override
    method setWebViewClient (line 68) | @Override
    method setWebChromeClient (line 74) | @Override
    method dispatchKeyEvent (line 80) | @Override

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java
  class SystemWebViewClient (line 55) | public class SystemWebViewClient extends WebViewClient {
    method SystemWebViewClient (line 65) | public SystemWebViewClient(SystemWebViewEngine parentEngine) {
    method shouldOverrideUrlLoading (line 77) | @Override
    method onReceivedHttpAuthRequest (line 86) | @Override
    method onReceivedClientCertRequest (line 114) | @Override
    method onPageStarted (line 139) | @Override
    method onPageFinished (line 156) | @Override
    method onReceivedError (line 188) | @Override
    method onReceivedSslError (line 222) | @TargetApi(8)
    method setAuthenticationToken (line 254) | public void setAuthenticationToken(AuthenticationToken authenticationT...
    method removeAuthenticationToken (line 272) | public AuthenticationToken removeAuthenticationToken(String host, Stri...
    method getAuthenticationToken (line 290) | public AuthenticationToken getAuthenticationToken(String host, String ...
    method clearAuthenticationTokens (line 315) | public void clearAuthenticationTokens() {
    method shouldInterceptRequest (line 319) | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    method needsKitKatContentUrlFix (line 351) | private static boolean needsKitKatContentUrlFix(Uri uri) {
    method needsSpecialsInAssetUrlFix (line 355) | private static boolean needsSpecialsInAssetUrlFix(Uri uri) {

FILE: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java
  class SystemWebViewEngine (line 59) | public class SystemWebViewEngine implements CordovaWebViewEngine {
    method SystemWebViewEngine (line 75) | public SystemWebViewEngine(Context context, CordovaPreferences prefere...
    method SystemWebViewEngine (line 79) | public SystemWebViewEngine(SystemWebView webView) {
    method SystemWebViewEngine (line 83) | public SystemWebViewEngine(SystemWebView webView, CordovaPreferences p...
    method init (line 89) | @Override
    method getCordovaWebView (line 126) | @Override
    method getCookieManager (line 131) | @Override
    method getView (line 136) | @Override
    method initWebViewSettings (line 141) | @SuppressLint({"NewApi", "SetJavaScriptEnabled"})
    method enableRemoteDebugging (line 243) | @TargetApi(Build.VERSION_CODES.KITKAT)
    method exposeJsInterface (line 253) | private static void exposeJsInterface(WebView webView, CordovaBridge b...
    method loadUrl (line 269) | @Override
    method getUrl (line 274) | @Override
    method stopLoading (line 279) | @Override
    method clearCache (line 284) | @Override
    method clearHistory (line 289) | @Override
    method canGoBack (line 294) | @Override
    method goBack (line 304) | @Override
    method setPaused (line 315) | @Override
    method destroy (line 326) | @Override
    method evaluateJavascript (line 340) | @Override

FILE: platforms/android/assets/www/cordova-js-src/exec.js
  function androidExec (line 67) | function androidExec(success, fail, service, action, args) {
  function pollOnceFromOnlineEvent (line 127) | function pollOnceFromOnlineEvent() {
  function pollOnce (line 131) | function pollOnce(opt_fromOnlineEvent) {
  function pollingTimerFunc (line 145) | function pollingTimerFunc() {
  function hookOnlineApis (line 152) | function hookOnlineApis() {
  function buildPayload (line 202) | function buildPayload(payload, message) {
  function processMessage (line 234) | function processMessage(message) {
  function processMessages (line 255) | function processMessages() {
  function popMessageFromQueue (line 281) | function popMessageFromQueue() {

FILE: platforms/android/assets/www/cordova-js-src/platform.js
  function bindButtonChannel (line 53) | function bindButtonChannel(buttonName) {
  function onMessageFromNative (line 86) | function onMessageFromNative(msg) {

FILE: platforms/android/assets/www/cordova.js
  function build (line 41) | function build(module) {
  function createEvent (line 168) | function createEvent(type, data) {
  function extractParamName (line 394) | function extractParamName(callee, argIndex) {
  function checkArgs (line 398) | function checkArgs(spec, functionName, args, opt_callee) {
  function getValue (line 432) | function getValue(value, defaultValue) {
  function uint8ToBase64 (line 484) | function uint8ToBase64(rawData) {
  function each (line 514) | function each(objects, func, context) {
  function clobber (line 522) | function clobber(obj, key, value) {
  function assignOrWrapInDeprecateGetter (line 538) | function assignOrWrapInDeprecateGetter(obj, key, value, message) {
  function include (line 551) | function include(parent, objects, clobber, merge) {
  function recursiveMerge (line 595) | function recursiveMerge(target, src) {
  function checkSubscriptionArgument (line 745) | function checkSubscriptionArgument(argument) {
  function androidExec (line 937) | function androidExec(success, fail, service, action, args) {
  function pollOnceFromOnlineEvent (line 997) | function pollOnceFromOnlineEvent() {
  function pollOnce (line 1001) | function pollOnce(opt_fromOnlineEvent) {
  function pollingTimerFunc (line 1015) | function pollingTimerFunc() {
  function hookOnlineApis (line 1022) | function hookOnlineApis() {
  function buildPayload (line 1072) | function buildPayload(payload, message) {
  function processMessage (line 1104) | function processMessage(message) {
  function processMessages (line 1125) | function processMessages() {
  function popMessageFromQueue (line 1151) | function popMessageFromQueue() {
  function logUnfiredChannels (line 1213) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1231) | function replaceNavigator(origNavigator) {
  function logUnfiredChannels (line 1344) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1362) | function replaceNavigator(origNavigator) {
  function addEntry (line 1467) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1494) | function prepareNamespace(symbolPath, context) {
  function addEntry (line 1567) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1591) | function prepareNamespace(symbolPath, context) {
  function bindButtonChannel (line 1686) | function bindButtonChannel(buttonName) {
  function onMessageFromNative (line 1719) | function onMessageFromNative(msg) {
  function injectIfNecessary (line 1873) | function injectIfNecessary(id, url, onload, onerror) {
  function onScriptLoadingComplete (line 1888) | function onScriptLoadingComplete(moduleList, finishPluginLoading) {
  function handlePluginsObject (line 1916) | function handlePluginsObject(path, moduleList, finishPluginLoading) {
  function findCordovaPath (line 1935) | function findCordovaPath() {
  function handlePluginsObject (line 1974) | function handlePluginsObject(moduleList) {
  function UUIDcreatePart (line 2145) | function UUIDcreatePart(length) {

FILE: platforms/android/assets/www/js/main.js
  function init (line 17) | function init() {
  function pageAppSettings (line 98) | function pageAppSettings() {
  function showErrorSettings (line 195) | function showErrorSettings() {
  function pageDashboard (line 213) | function pageDashboard() {
  function pageQueryLog (line 366) | function pageQueryLog() {
  function pageAboutHelp (line 416) | function pageAboutHelp() {
  function _updateToggleButton (line 432) | function _updateToggleButton() {

FILE: platforms/android/assets/www/js/utilities.js
  function mdl_upgradeDom (line 5) | function mdl_upgradeDom() {
  function mdl_toggleDrawer (line 13) | function mdl_toggleDrawer() {
  function _localStorage (line 22) | function _localStorage(action, key, value) {
  function userIsLoggedIn (line 44) | function userIsLoggedIn() {
  function userIsGuest (line 63) | function userIsGuest() {
  function getPiholeHost (line 73) | function getPiholeHost() {
  function getPiholeToken (line 81) | function getPiholeToken() {
  function getPiholeSuccess (line 89) | function getPiholeSuccess() {
  function updateFloatLabel (line 97) | function updateFloatLabel() {
  function updateAppTitle (line 109) | function updateAppTitle(title) {
  function _manageVisibilityToggle (line 117) | function _manageVisibilityToggle(action) {

FILE: platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/jquery.dataTables.js
  function _fnHungarianMap (line 1646) | function _fnHungarianMap ( o )
  function _fnCamelToHungarian (line 1684) | function _fnCamelToHungarian ( src, user, force )
  function _fnLanguageCompat (line 1723) | function _fnLanguageCompat( lang )
  function _fnCompatOpts (line 1775) | function _fnCompatOpts ( init )
  function _fnCompatCols (line 1816) | function _fnCompatCols ( init )
  function _fnBrowserDetect (line 1836) | function _fnBrowserDetect( settings )
  function _fnReduce (line 1916) | function _fnReduce ( that, fn, init, start, end, inc )
  function _fnAddColumn (line 1950) | function _fnAddColumn( oSettings, nTh )
  function _fnColumnOptions (line 1982) | function _fnColumnOptions( oSettings, iCol, oOptions )
  function _fnAdjustColumnSizing (line 2110) | function _fnAdjustColumnSizing ( settings )
  function _fnVisibleToColumnIndex (line 2142) | function _fnVisibleToColumnIndex( oSettings, iMatch )
  function _fnColumnIndexToVisible (line 2160) | function _fnColumnIndexToVisible( oSettings, iMatch )
  function _fnVisbleColumns (line 2175) | function _fnVisbleColumns( oSettings )
  function _fnGetColumns (line 2198) | function _fnGetColumns( oSettings, sParam )
  function _fnColumnTypes (line 2217) | function _fnColumnTypes ( settings )
  function _fnApplyColumnDefs (line 2288) | function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
  function _fnAddData (line 2368) | function _fnAddData ( oSettings, aDataIn, nTr, anTds )
  function _fnAddTr (line 2418) | function _fnAddTr( settings, trs )
  function _fnNodeToDataIndex (line 2441) | function _fnNodeToDataIndex( oSettings, n )
  function _fnNodeToColumnIndex (line 2455) | function _fnNodeToColumnIndex( oSettings, iRow, n )
  function _fnGetCellData (line 2470) | function _fnGetCellData( settings, rowIdx, colIdx, type )
  function _fnSetCellData (line 2518) | function _fnSetCellData( settings, rowIdx, colIdx, val )
  function _fnSplitObjNotation (line 2540) | function _fnSplitObjNotation( str )
  function _fnGetObjectDataFn (line 2555) | function _fnGetObjectDataFn( mSource )
  function _fnSetObjectDataFn (line 2680) | function _fnSetObjectDataFn( mSource )
  function _fnGetDataMaster (line 2799) | function _fnGetDataMaster ( settings )
  function _fnClearTable (line 2810) | function _fnClearTable( settings )
  function _fnDeleteIndex (line 2826) | function _fnDeleteIndex( a, iTarget, splice )
  function _fnInvalidate (line 2865) | function _fnInvalidate( settings, rowIdx, src, colIdx )
  function _fnGetRowElements (line 2943) | function _fnGetRowElements( settings, row, colIdx, d )
  function _fnCreateTr (line 3052) | function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
  function _fnRowAttributes (line 3136) | function _fnRowAttributes( settings, row )
  function _fnBuildHead (line 3176) | function _fnBuildHead( oSettings )
  function _fnDrawHead (line 3262) | function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
  function _fnDraw (line 3360) | function _fnDraw( oSettings )
  function _fnReDraw (line 3501) | function _fnReDraw( settings, holdPosition )
  function _fnAddOptionsHtml (line 3539) | function _fnAddOptionsHtml ( oSettings )
  function _fnDetectHeader (line 3695) | function _fnDetectHeader ( aLayout, nThead )
  function _fnGetUniqueThs (line 3770) | function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
  function _fnBuildAjax (line 3807) | function _fnBuildAjax( oSettings, data, fn )
  function _fnAjaxUpdate (line 3940) | function _fnAjaxUpdate( settings )
  function _fnAjaxParameters (line 3971) | function _fnAjaxParameters( settings )
  function _fnAjaxUpdateDraw (line 4079) | function _fnAjaxUpdateDraw ( settings, json )
  function _fnAjaxDataSrc (line 4129) | function _fnAjaxDataSrc ( oSettings, json )
  function _fnFeatureHtmlFilter (line 4152) | function _fnFeatureHtmlFilter ( settings )
  function _fnFilterComplete (line 4240) | function _fnFilterComplete ( oSettings, oInput, iForce )
  function _fnFilterCustom (line 4293) | function _fnFilterCustom( settings )
  function _fnFilterColumn (line 4330) | function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, ca...
  function _fnFilter (line 4363) | function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
  function _fnFilterCreateSearch (line 4418) | function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
  function _fnFilterData (line 4460) | function _fnFilterData ( settings )
  function _fnSearchToCamel (line 4533) | function _fnSearchToCamel ( obj )
  function _fnSearchToHung (line 4552) | function _fnSearchToHung ( obj )
  function _fnFeatureHtmlInfo (line 4568) | function _fnFeatureHtmlInfo ( settings )
  function _fnUpdateInfo (line 4602) | function _fnUpdateInfo ( settings )
  function _fnInfoMacros (line 4640) | function _fnInfoMacros ( settings, str )
  function _fnInitialise (line 4667) | function _fnInitialise ( settings )
  function _fnInitComplete (line 4751) | function _fnInitComplete ( settings, json )
  function _fnLengthChange (line 4766) | function _fnLengthChange ( settings, val )
  function _fnFeatureHtmlLength (line 4784) | function _fnFeatureHtmlLength ( settings )
  function _fnFeatureHtmlPaginate (line 4845) | function _fnFeatureHtmlPaginate ( settings )
  function _fnPageChange (line 4906) | function _fnPageChange ( settings, action, redraw )
  function _fnFeatureHtmlProcessing (line 4979) | function _fnFeatureHtmlProcessing ( settings )
  function _fnProcessingDisplay (line 4996) | function _fnProcessingDisplay ( settings, show )
  function _fnFeatureHtmlTable (line 5011) | function _fnFeatureHtmlTable ( settings )
  function _fnScrollDraw (line 5169) | function _fnScrollDraw ( settings )
  function _fnApplyToChildren (line 5448) | function _fnApplyToChildren( fn, an1, an2 )
  function _fnCalculateColumnWidths (line 5487) | function _fnCalculateColumnWidths ( oSettings )
  function _fnConvertToWidth (line 5725) | function _fnConvertToWidth ( width, parent )
  function _fnGetWidestNode (line 5749) | function _fnGetWidestNode( settings, colIdx )
  function _fnGetMaxLenString (line 5770) | function _fnGetMaxLenString( settings, colIdx )
  function _fnStringToCss (line 5795) | function _fnStringToCss( s )
  function _fnSortFlatten (line 5815) | function _fnSortFlatten ( settings )
  function _fnSort (line 5887) | function _fnSort ( oSettings )
  function _fnSortAria (line 6013) | function _fnSortAria ( settings )
  function _fnSortListener (line 6068) | function _fnSortListener ( settings, colIdx, append, callback )
  function _fnSortAttachListener (line 6152) | function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
  function _fnSortingClasses (line 6190) | function _fnSortingClasses( settings )
  function _fnSortData (line 6223) | function _fnSortData( settings, idx )
  function _fnSaveState (line 6266) | function _fnSaveState ( settings )
  function _fnLoadState (line 6302) | function _fnLoadState ( settings, oInit, callback )
  function _fnSettingsFromNode (line 6404) | function _fnSettingsFromNode ( table )
  function _fnLog (line 6423) | function _fnLog( settings, level, msg, tn )
  function _fnMap (line 6466) | function _fnMap( ret, src, name, mappedName )
  function _fnExtend (line 6508) | function _fnExtend( out, extender, breakRefs )
  function _fnBindAction (line 6544) | function _fnBindAction( n, oData, fn )
  function _fnCallbackReg (line 6573) | function _fnCallbackReg( oSettings, sStore, fn, sName )
  function _fnCallbackFire (line 6599) | function _fnCallbackFire( settings, callbackArr, eventName, args )
  function _fnLengthOverflow (line 6621) | function _fnLengthOverflow ( settings )
  function _fnRenderer (line 6646) | function _fnRenderer( settings, type )
  function _fnDataSource (line 6675) | function _fnDataSource ( settings )
  function _numbers (line 14468) | function _numbers ( page, pages ) {
  function _addNumericSort (line 14759) | function _addNumericSort ( decimalPlace ) {
  function _fnExternApiFunc (line 15008) | function _fnExternApiFunc (fn)

FILE: platforms/android/assets/www/lib/DataTables/datatables.js
  function _fnHungarianMap (line 1658) | function _fnHungarianMap ( o )
  function _fnCamelToHungarian (line 1696) | function _fnCamelToHungarian ( src, user, force )
  function _fnLanguageCompat (line 1735) | function _fnLanguageCompat( lang )
  function _fnCompatOpts (line 1787) | function _fnCompatOpts ( init )
  function _fnCompatCols (line 1828) | function _fnCompatCols ( init )
  function _fnBrowserDetect (line 1848) | function _fnBrowserDetect( settings )
  function _fnReduce (line 1928) | function _fnReduce ( that, fn, init, start, end, inc )
  function _fnAddColumn (line 1962) | function _fnAddColumn( oSettings, nTh )
  function _fnColumnOptions (line 1994) | function _fnColumnOptions( oSettings, iCol, oOptions )
  function _fnAdjustColumnSizing (line 2122) | function _fnAdjustColumnSizing ( settings )
  function _fnVisibleToColumnIndex (line 2154) | function _fnVisibleToColumnIndex( oSettings, iMatch )
  function _fnColumnIndexToVisible (line 2172) | function _fnColumnIndexToVisible( oSettings, iMatch )
  function _fnVisbleColumns (line 2187) | function _fnVisbleColumns( oSettings )
  function _fnGetColumns (line 2210) | function _fnGetColumns( oSettings, sParam )
  function _fnColumnTypes (line 2229) | function _fnColumnTypes ( settings )
  function _fnApplyColumnDefs (line 2300) | function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
  function _fnAddData (line 2380) | function _fnAddData ( oSettings, aDataIn, nTr, anTds )
  function _fnAddTr (line 2430) | function _fnAddTr( settings, trs )
  function _fnNodeToDataIndex (line 2453) | function _fnNodeToDataIndex( oSettings, n )
  function _fnNodeToColumnIndex (line 2467) | function _fnNodeToColumnIndex( oSettings, iRow, n )
  function _fnGetCellData (line 2482) | function _fnGetCellData( settings, rowIdx, colIdx, type )
  function _fnSetCellData (line 2530) | function _fnSetCellData( settings, rowIdx, colIdx, val )
  function _fnSplitObjNotation (line 2552) | function _fnSplitObjNotation( str )
  function _fnGetObjectDataFn (line 2567) | function _fnGetObjectDataFn( mSource )
  function _fnSetObjectDataFn (line 2692) | function _fnSetObjectDataFn( mSource )
  function _fnGetDataMaster (line 2811) | function _fnGetDataMaster ( settings )
  function _fnClearTable (line 2822) | function _fnClearTable( settings )
  function _fnDeleteIndex (line 2838) | function _fnDeleteIndex( a, iTarget, splice )
  function _fnInvalidate (line 2877) | function _fnInvalidate( settings, rowIdx, src, colIdx )
  function _fnGetRowElements (line 2955) | function _fnGetRowElements( settings, row, colIdx, d )
  function _fnCreateTr (line 3064) | function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
  function _fnRowAttributes (line 3148) | function _fnRowAttributes( settings, row )
  function _fnBuildHead (line 3188) | function _fnBuildHead( oSettings )
  function _fnDrawHead (line 3274) | function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
  function _fnDraw (line 3372) | function _fnDraw( oSettings )
  function _fnReDraw (line 3513) | function _fnReDraw( settings, holdPosition )
  function _fnAddOptionsHtml (line 3551) | function _fnAddOptionsHtml ( oSettings )
  function _fnDetectHeader (line 3707) | function _fnDetectHeader ( aLayout, nThead )
  function _fnGetUniqueThs (line 3782) | function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
  function _fnBuildAjax (line 3819) | function _fnBuildAjax( oSettings, data, fn )
  function _fnAjaxUpdate (line 3952) | function _fnAjaxUpdate( settings )
  function _fnAjaxParameters (line 3983) | function _fnAjaxParameters( settings )
  function _fnAjaxUpdateDraw (line 4091) | function _fnAjaxUpdateDraw ( settings, json )
  function _fnAjaxDataSrc (line 4141) | function _fnAjaxDataSrc ( oSettings, json )
  function _fnFeatureHtmlFilter (line 4164) | function _fnFeatureHtmlFilter ( settings )
  function _fnFilterComplete (line 4252) | function _fnFilterComplete ( oSettings, oInput, iForce )
  function _fnFilterCustom (line 4305) | function _fnFilterCustom( settings )
  function _fnFilterColumn (line 4342) | function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, ca...
  function _fnFilter (line 4375) | function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
  function _fnFilterCreateSearch (line 4430) | function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
  function _fnFilterData (line 4472) | function _fnFilterData ( settings )
  function _fnSearchToCamel (line 4545) | function _fnSearchToCamel ( obj )
  function _fnSearchToHung (line 4564) | function _fnSearchToHung ( obj )
  function _fnFeatureHtmlInfo (line 4580) | function _fnFeatureHtmlInfo ( settings )
  function _fnUpdateInfo (line 4614) | function _fnUpdateInfo ( settings )
  function _fnInfoMacros (line 4652) | function _fnInfoMacros ( settings, str )
  function _fnInitialise (line 4679) | function _fnInitialise ( settings )
  function _fnInitComplete (line 4763) | function _fnInitComplete ( settings, json )
  function _fnLengthChange (line 4778) | function _fnLengthChange ( settings, val )
  function _fnFeatureHtmlLength (line 4796) | function _fnFeatureHtmlLength ( settings )
  function _fnFeatureHtmlPaginate (line 4857) | function _fnFeatureHtmlPaginate ( settings )
  function _fnPageChange (line 4918) | function _fnPageChange ( settings, action, redraw )
  function _fnFeatureHtmlProcessing (line 4991) | function _fnFeatureHtmlProcessing ( settings )
  function _fnProcessingDisplay (line 5008) | function _fnProcessingDisplay ( settings, show )
  function _fnFeatureHtmlTable (line 5023) | function _fnFeatureHtmlTable ( settings )
  function _fnScrollDraw (line 5181) | function _fnScrollDraw ( settings )
  function _fnApplyToChildren (line 5460) | function _fnApplyToChildren( fn, an1, an2 )
  function _fnCalculateColumnWidths (line 5499) | function _fnCalculateColumnWidths ( oSettings )
  function _fnConvertToWidth (line 5737) | function _fnConvertToWidth ( width, parent )
  function _fnGetWidestNode (line 5761) | function _fnGetWidestNode( settings, colIdx )
  function _fnGetMaxLenString (line 5782) | function _fnGetMaxLenString( settings, colIdx )
  function _fnStringToCss (line 5807) | function _fnStringToCss( s )
  function _fnSortFlatten (line 5827) | function _fnSortFlatten ( settings )
  function _fnSort (line 5899) | function _fnSort ( oSettings )
  function _fnSortAria (line 6025) | function _fnSortAria ( settings )
  function _fnSortListener (line 6080) | function _fnSortListener ( settings, colIdx, append, callback )
  function _fnSortAttachListener (line 6164) | function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
  function _fnSortingClasses (line 6202) | function _fnSortingClasses( settings )
  function _fnSortData (line 6235) | function _fnSortData( settings, idx )
  function _fnSaveState (line 6278) | function _fnSaveState ( settings )
  function _fnLoadState (line 6314) | function _fnLoadState ( settings, oInit, callback )
  function _fnSettingsFromNode (line 6416) | function _fnSettingsFromNode ( table )
  function _fnLog (line 6435) | function _fnLog( settings, level, msg, tn )
  function _fnMap (line 6478) | function _fnMap( ret, src, name, mappedName )
  function _fnExtend (line 6520) | function _fnExtend( out, extender, breakRefs )
  function _fnBindAction (line 6556) | function _fnBindAction( n, oData, fn )
  function _fnCallbackReg (line 6585) | function _fnCallbackReg( oSettings, sStore, fn, sName )
  function _fnCallbackFire (line 6611) | function _fnCallbackFire( settings, callbackArr, eventName, args )
  function _fnLengthOverflow (line 6633) | function _fnLengthOverflow ( settings )
  function _fnRenderer (line 6658) | function _fnRenderer( settings, type )
  function _fnDataSource (line 6687) | function _fnDataSource ( settings )
  function _numbers (line 14480) | function _numbers ( page, pages ) {
  function _addNumericSort (line 14771) | function _addNumericSort ( decimalPlace ) {
  function _fnExternApiFunc (line 15020) | function _fnExternApiFunc (fn)

FILE: platforms/android/assets/www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js
  function BarcodeScanner (line 20) | function BarcodeScanner() {

FILE: platforms/android/cordova/Api.js
  function setupEvents (line 33) | function setupEvents(externalEventEmitter) {
  function Api (line 58) | function Api(platform, platformRootDir, events) {

FILE: platforms/android/cordova/lib/Adb.js
  function isDevice (line 28) | function isDevice(line) {
  function isEmulator (line 32) | function isEmulator(line) {

FILE: platforms/android/cordova/lib/AndroidManifest.js
  function AndroidManifest (line 27) | function AndroidManifest(path) {
  function capitalize (line 159) | function capitalize (str) {

FILE: platforms/android/cordova/lib/AndroidProject.js
  function addToPropertyList (line 29) | function addToPropertyList(projectProperties, key, value) {
  function removeFromPropertyList (line 38) | function removeFromPropertyList(projectProperties, key, value) {
  function getRelativeLibraryPath (line 55) | function getRelativeLibraryPath (parentDir, subDir) {
  function AndroidProject (line 60) | function AndroidProject(projectDir) {

FILE: platforms/android/cordova/lib/android_sdk.js
  function sort_by_largest_numerical_suffix (line 34) | function sort_by_largest_numerical_suffix(a, b) {

FILE: platforms/android/cordova/lib/build.js
  function parseOpts (line 34) | function parseOpts(options, resolvedTarget, projectRoot) {
  function helper (line 176) | function helper() {
  function PackageInfo (line 238) | function PackageInfo(keystore, alias, storePassword, password, keystoreT...

FILE: platforms/android/cordova/lib/builders/AntBuilder.js
  function AntBuilder (line 37) | function AntBuilder (projectRoot) {
  function writeBuildXml (line 68) | function writeBuildXml(projectPath) {
  function hasCustomRules (line 150) | function hasCustomRules(projectRoot) {
  function isAutoGenerated (line 154) | function isAutoGenerated(file) {

FILE: platforms/android/cordova/lib/builders/GenericBuilder.js
  function GenericBuilder (line 27) | function GenericBuilder (projectDir) {
  function hasCustomRules (line 35) | function hasCustomRules(projectRoot) {
  function findAllUniq (line 63) | function findAllUniq(data, r) {
  function apkSorter (line 95) | function apkSorter(fileA, fileB) {
  function findOutputApksHelper (line 108) | function findOutputApksHelper(dir, build_type, arch) {

FILE: platforms/android/cordova/lib/builders/GradleBuilder.js
  function GradleBuilder (line 37) | function GradleBuilder (projectRoot) {
  function isAutoGenerated (line 277) | function isAutoGenerated(file) {

FILE: platforms/android/cordova/lib/check_reqs.js
  function forgivingWhichSync (line 36) | function forgivingWhichSync(cmd) {
  function tryCommand (line 44) | function tryCommand(cmd, errMsg, catchStderr) {
  function extractFromFile (line 66) | function extractFromFile(filePath) {
  function maybeSetAndroidHome (line 228) | function maybeSetAndroidHome(value) {

FILE: platforms/android/cordova/lib/emulator.js
  function forgivingWhichSync (line 49) | function forgivingWhichSync(cmd) {
  function adbInstallWithOptions (line 480) | function adbInstallWithOptions(target, apk, opts) {
  function installPromise (line 504) | function installPromise () {

FILE: platforms/android/cordova/lib/pluginHandlers.js
  function copyFile (line 217) | function copyFile (plugin_dir, src, project_dir, dest, link) {
  function copyNewFile (line 245) | function copyNewFile (plugin_dir, src, project_dir, dest, link) {
  function symlinkFileOrDirTree (line 253) | function symlinkFileOrDirTree(src, dest) {
  function removeFile (line 270) | function removeFile (project_dir, src) {
  function removeFileF (line 276) | function removeFileF (file) {
  function deleteJava (line 281) | function deleteJava (project_dir, destFile) {
  function removeFileAndParents (line 285) | function removeFileAndParents (baseDir, destFile, stopper) {
  function generateAttributeError (line 306) | function generateAttributeError(attribute, element, id) {

FILE: platforms/android/cordova/lib/prepare.js
  function updateConfigFilesFrom (line 94) | function updateConfigFilesFrom(sourceConfig, configMunger, locations) {
  function logFileOp (line 118) | function logFileOp(message) {
  function updateWww (line 131) | function updateWww(cordovaProject, destinations) {
  function cleanWww (line 154) | function cleanWww(projectRoot, locations) {
  function updateProjectAccordingTo (line 170) | function updateProjectAccordingTo(platformConfig, locations) {
  function default_versionCode (line 232) | function default_versionCode(version) {
  function getImageResourcePath (line 249) | function getImageResourcePath(resourcesDir, type, density, name, sourceN...
  function updateSplashes (line 257) | function updateSplashes(cordovaProject, platformResourcesDir) {
  function cleanSplashes (line 293) | function cleanSplashes(projectRoot, projectConfig, platformResourcesDir) {
  function updateIcons (line 305) | function updateIcons(cordovaProject, platformResourcesDir) {
  function cleanIcons (line 381) | function cleanIcons(projectRoot, projectConfig, platformResourcesDir) {
  function mapImageResources (line 396) | function mapImageResources(rootDir, subDir, type, resourceName) {
  function updateFileResources (line 407) | function updateFileResources(cordovaProject, platformDir) {
  function cleanFileResources (line 428) | function cleanFileResources(projectRoot, projectConfig, platformDir) {
  function findAndroidLaunchModePreference (line 455) | function findAndroidLaunchModePreference(platformConfig) {

FILE: platforms/android/cordova/lib/run.js
  function getInstallTarget (line 31) | function getInstallTarget(runOptions) {

FILE: platforms/android/platform_www/cordova-js-src/exec.js
  function androidExec (line 67) | function androidExec(success, fail, service, action, args) {
  function pollOnceFromOnlineEvent (line 127) | function pollOnceFromOnlineEvent() {
  function pollOnce (line 131) | function pollOnce(opt_fromOnlineEvent) {
  function pollingTimerFunc (line 145) | function pollingTimerFunc() {
  function hookOnlineApis (line 152) | function hookOnlineApis() {
  function buildPayload (line 202) | function buildPayload(payload, message) {
  function processMessage (line 234) | function processMessage(message) {
  function processMessages (line 255) | function processMessages() {
  function popMessageFromQueue (line 281) | function popMessageFromQueue() {

FILE: platforms/android/platform_www/cordova-js-src/platform.js
  function bindButtonChannel (line 53) | function bindButtonChannel(buttonName) {
  function onMessageFromNative (line 86) | function onMessageFromNative(msg) {

FILE: platforms/android/platform_www/cordova.js
  function build (line 41) | function build(module) {
  function createEvent (line 168) | function createEvent(type, data) {
  function extractParamName (line 394) | function extractParamName(callee, argIndex) {
  function checkArgs (line 398) | function checkArgs(spec, functionName, args, opt_callee) {
  function getValue (line 432) | function getValue(value, defaultValue) {
  function uint8ToBase64 (line 484) | function uint8ToBase64(rawData) {
  function each (line 514) | function each(objects, func, context) {
  function clobber (line 522) | function clobber(obj, key, value) {
  function assignOrWrapInDeprecateGetter (line 538) | function assignOrWrapInDeprecateGetter(obj, key, value, message) {
  function include (line 551) | function include(parent, objects, clobber, merge) {
  function recursiveMerge (line 595) | function recursiveMerge(target, src) {
  function checkSubscriptionArgument (line 745) | function checkSubscriptionArgument(argument) {
  function androidExec (line 937) | function androidExec(success, fail, service, action, args) {
  function pollOnceFromOnlineEvent (line 997) | function pollOnceFromOnlineEvent() {
  function pollOnce (line 1001) | function pollOnce(opt_fromOnlineEvent) {
  function pollingTimerFunc (line 1015) | function pollingTimerFunc() {
  function hookOnlineApis (line 1022) | function hookOnlineApis() {
  function buildPayload (line 1072) | function buildPayload(payload, message) {
  function processMessage (line 1104) | function processMessage(message) {
  function processMessages (line 1125) | function processMessages() {
  function popMessageFromQueue (line 1151) | function popMessageFromQueue() {
  function logUnfiredChannels (line 1213) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1231) | function replaceNavigator(origNavigator) {
  function logUnfiredChannels (line 1344) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1362) | function replaceNavigator(origNavigator) {
  function addEntry (line 1467) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1494) | function prepareNamespace(symbolPath, context) {
  function addEntry (line 1567) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1591) | function prepareNamespace(symbolPath, context) {
  function bindButtonChannel (line 1686) | function bindButtonChannel(buttonName) {
  function onMessageFromNative (line 1719) | function onMessageFromNative(msg) {
  function injectIfNecessary (line 1873) | function injectIfNecessary(id, url, onload, onerror) {
  function onScriptLoadingComplete (line 1888) | function onScriptLoadingComplete(moduleList, finishPluginLoading) {
  function handlePluginsObject (line 1916) | function handlePluginsObject(path, moduleList, finishPluginLoading) {
  function findCordovaPath (line 1935) | function findCordovaPath() {
  function handlePluginsObject (line 1974) | function handlePluginsObject(moduleList) {
  function UUIDcreatePart (line 2145) | function UUIDcreatePart(length) {

FILE: platforms/android/platform_www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js
  function BarcodeScanner (line 20) | function BarcodeScanner() {

FILE: platforms/android/src/com/phonegap/plugins/barcodescanner/BarcodeScanner.java
  class BarcodeScanner (line 36) | public class BarcodeScanner extends CordovaPlugin {
    method BarcodeScanner (line 69) | public BarcodeScanner() {
    method execute (line 88) | @Override
    method scan (line 131) | public void scan(final JSONArray args) {
    method onActivityResult (line 212) | @Override
    method encode (line 250) | public void encode(String type, String data) {
    method hasPermisssion (line 264) | public boolean hasPermisssion() {
    method requestPermissions (line 281) | public void requestPermissions(int requestCode)
    method onRequestPermissionResult (line 293) | public void onRequestPermissionResult(int requestCode, String[] permis...
    method onRestoreStateForActivityResult (line 319) | public void onRestoreStateForActivityResult(Bundle state, CallbackCont...

FILE: platforms/android/src/friimaind/piholedroid/MainActivity.java
  class MainActivity (line 25) | public class MainActivity extends CordovaActivity
    method onCreate (line 27) | @Override

FILE: platforms/android/src/org/apache/cordova/BuildHelper.java
  class BuildHelper (line 35) | public class BuildHelper {
    method getBuildConfigValue (line 50) | public static Object getBuildConfigValue(Context ctx, String key)

FILE: platforms/android/src/org/apache/cordova/PermissionHelper.java
  class PermissionHelper (line 35) | public class PermissionHelper {
    method requestPermission (line 48) | public static void requestPermission(CordovaPlugin plugin, int request...
    method requestPermissions (line 62) | public static void requestPermissions(CordovaPlugin plugin, int reques...
    method hasPermission (line 94) | public static boolean hasPermission(CordovaPlugin plugin, String permi...
    method deliverPermissionResult (line 114) | private static void deliverPermissionResult(CordovaPlugin plugin, int ...

FILE: platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java
  class SplashScreen (line 49) | public class SplashScreen extends CordovaPlugin {
    method getView (line 72) | private View getView() {
    method pluginInitialize (line 80) | @Override
    method isMaintainAspectRatio (line 121) | private boolean isMaintainAspectRatio () {
    method getFadeDuration (line 125) | private int getFadeDuration () {
    method onPause (line 138) | @Override
    method onDestroy (line 147) | @Override
    method execute (line 158) | @Override
    method onMessage (line 180) | @Override
    method onConfigurationChanged (line 202) | public void onConfigurationChanged(Configuration newConfig) {
    method removeSplashScreen (line 216) | private void removeSplashScreen(final boolean forceHideImmediately) {
    method showSplashScreen (line 263) | @SuppressWarnings("deprecation")
    method spinnerStart (line 340) | private void spinnerStart() {
    method spinnerStop (line 375) | private void spinnerStop() {

FILE: platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java
  class WhitelistPlugin (line 30) | public class WhitelistPlugin extends CordovaPlugin {
    method WhitelistPlugin (line 37) | public WhitelistPlugin() {
    method WhitelistPlugin (line 40) | public WhitelistPlugin(Context context) {
    method WhitelistPlugin (line 44) | public WhitelistPlugin(XmlPullParser xmlParser) {
    method WhitelistPlugin (line 48) | public WhitelistPlugin(Whitelist allowedNavigations, Whitelist allowed...
    method pluginInitialize (line 58) | @Override
    class CustomConfigXmlParser (line 68) | private class CustomConfigXmlParser extends ConfigXmlParser {
      method handleStartTag (line 69) | @Override
      method handleEndTag (line 106) | @Override
    method shouldAllowNavigation (line 111) | @Override
    method shouldAllowRequest (line 119) | @Override
    method shouldOpenExternalUrl (line 130) | @Override
    method getAllowedNavigations (line 138) | public Whitelist getAllowedNavigations() {
    method setAllowedNavigations (line 142) | public void setAllowedNavigations(Whitelist allowedNavigations) {
    method getAllowedIntents (line 146) | public Whitelist getAllowedIntents() {
    method setAllowedIntents (line 150) | public void setAllowedIntents(Whitelist allowedIntents) {
    method getAllowedRequests (line 154) | public Whitelist getAllowedRequests() {
    method setAllowedRequests (line 158) | public void setAllowedRequests(Whitelist allowedRequests) {

FILE: platforms/browser/platform_www/confighelper.js
  function Config (line 24) | function Config(xhr) {
  function readConfig (line 37) | function readConfig(success, error) {

FILE: platforms/browser/platform_www/cordova-js-src/confighelper.js
  function Config (line 24) | function Config(xhr) {
  function readConfig (line 37) | function readConfig(success, error) {

FILE: platforms/browser/platform_www/cordova.js
  function build (line 41) | function build(module) {
  function createEvent (line 168) | function createEvent(type, data) {
  function extractParamName (line 349) | function extractParamName(callee, argIndex) {
  function checkArgs (line 353) | function checkArgs(spec, functionName, args, opt_callee) {
  function getValue (line 387) | function getValue(value, defaultValue) {
  function uint8ToBase64 (line 439) | function uint8ToBase64(rawData) {
  function each (line 469) | function each(objects, func, context) {
  function clobber (line 477) | function clobber(obj, key, value) {
  function assignOrWrapInDeprecateGetter (line 493) | function assignOrWrapInDeprecateGetter(obj, key, value, message) {
  function include (line 506) | function include(parent, objects, clobber, merge) {
  function recursiveMerge (line 550) | function recursiveMerge(target, src) {
  function forceFunction (line 700) | function forceFunction(f) {
  function Config (line 825) | function Config(xhr) {
  function readConfig (line 838) | function readConfig(success, error) {
  function logUnfiredChannels (line 1041) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1059) | function replaceNavigator(origNavigator) {
  function logUnfiredChannels (line 1172) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1190) | function replaceNavigator(origNavigator) {
  function addEntry (line 1295) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1322) | function prepareNamespace(symbolPath, context) {
  function addEntry (line 1395) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1419) | function prepareNamespace(symbolPath, context) {
  function injectIfNecessary (line 1531) | function injectIfNecessary(id, url, onload, onerror) {
  function onScriptLoadingComplete (line 1546) | function onScriptLoadingComplete(moduleList, finishPluginLoading) {
  function handlePluginsObject (line 1574) | function handlePluginsObject(path, moduleList, finishPluginLoading) {
  function findCordovaPath (line 1593) | function findCordovaPath() {
  function handlePluginsObject (line 1632) | function handlePluginsObject(moduleList) {
  function UUIDcreatePart (line 1800) | function UUIDcreatePart(length) {

FILE: platforms/browser/platform_www/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
  function updateImageLocation (line 35) | function updateImageLocation() {
  function onResize (line 52) | function onResize() {
  function readPreferencesFromCfg (line 92) | function readPreferencesFromCfg(cfg) {
  function showAndHide (line 113) | function showAndHide() {

FILE: platforms/browser/platform_www/plugins/phonegap-plugin-barcodescanner/src/browser/BarcodeScannerProxy.js
  function scan (line 1) | function scan(success, error) {
  function encode (line 15) | function encode(type, data, success, errorCallback) {

FILE: platforms/browser/platform_www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js
  function BarcodeScanner (line 19) | function BarcodeScanner() {

FILE: platforms/browser/www/confighelper.js
  function Config (line 24) | function Config(xhr) {
  function readConfig (line 37) | function readConfig(success, error) {

FILE: platforms/browser/www/cordova-js-src/confighelper.js
  function Config (line 24) | function Config(xhr) {
  function readConfig (line 37) | function readConfig(success, error) {

FILE: platforms/browser/www/cordova.js
  function build (line 41) | function build(module) {
  function createEvent (line 168) | function createEvent(type, data) {
  function extractParamName (line 349) | function extractParamName(callee, argIndex) {
  function checkArgs (line 353) | function checkArgs(spec, functionName, args, opt_callee) {
  function getValue (line 387) | function getValue(value, defaultValue) {
  function uint8ToBase64 (line 439) | function uint8ToBase64(rawData) {
  function each (line 469) | function each(objects, func, context) {
  function clobber (line 477) | function clobber(obj, key, value) {
  function assignOrWrapInDeprecateGetter (line 493) | function assignOrWrapInDeprecateGetter(obj, key, value, message) {
  function include (line 506) | function include(parent, objects, clobber, merge) {
  function recursiveMerge (line 550) | function recursiveMerge(target, src) {
  function forceFunction (line 700) | function forceFunction(f) {
  function Config (line 825) | function Config(xhr) {
  function readConfig (line 838) | function readConfig(success, error) {
  function logUnfiredChannels (line 1041) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1059) | function replaceNavigator(origNavigator) {
  function logUnfiredChannels (line 1172) | function logUnfiredChannels(arr) {
  function replaceNavigator (line 1190) | function replaceNavigator(origNavigator) {
  function addEntry (line 1295) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1322) | function prepareNamespace(symbolPath, context) {
  function addEntry (line 1395) | function addEntry(strategy, moduleName, symbolPath, opt_deprecationMessa...
  function prepareNamespace (line 1419) | function prepareNamespace(symbolPath, context) {
  function injectIfNecessary (line 1531) | function injectIfNecessary(id, url, onload, onerror) {
  function onScriptLoadingComplete (line 1546) | function onScriptLoadingComplete(moduleList, finishPluginLoading) {
  function handlePluginsObject (line 1574) | function handlePluginsObject(path, moduleList, finishPluginLoading) {
  function findCordovaPath (line 1593) | function findCordovaPath() {
  function handlePluginsObject (line 1632) | function handlePluginsObject(moduleList) {
  function UUIDcreatePart (line 1800) | function UUIDcreatePart(length) {

FILE: platforms/browser/www/js/main.js
  function init (line 17) | function init() {
  function pageAppSettings (line 95) | function pageAppSettings() {
  function showErrorSettings (line 192) | function showErrorSettings() {
  function pageDashboard (line 210) | function pageDashboard() {
  function pageQueryLog (line 363) | function pageQueryLog() {
  function pageAboutHelp (line 413) | function pageAboutHelp() {
  function _updateToggleButton (line 429) | function _updateToggleButton() {

FILE: platforms/browser/www/js/utilities.js
  function mdl_upgradeDom (line 5) | function mdl_upgradeDom() {
  function mdl_toggleDrawer (line 13) | function mdl_toggleDrawer() {
  function _localStorage (line 22) | function _localStorage(action, key, value) {
  function userIsLoggedIn (line 44) | function userIsLoggedIn() {
  function userIsGuest (line 63) | function userIsGuest() {
  function getPiholeHost (line 73) | function getPiholeHost() {
  function getPiholeToken (line 81) | function getPiholeToken() {
  function getPiholeSuccess (line 89) | function getPiholeSuccess() {
  function updateFloatLabel (line 97) | function updateFloatLabel() {
  function updateAppTitle (line 109) | function updateAppTitle(title) {
  function _manageVisibilityToggle (line 117) | function _manageVisibilityToggle(action) {

FILE: platforms/browser/www/lib/DataTables/DataTables-1.10.13/js/jquery.dataTables.js
  function _fnHungarianMap (line 1646) | function _fnHungarianMap ( o )
  function _fnCamelToHungarian (line 1684) | function _fnCamelToHungarian ( src, user, force )
  function _fnLanguageCompat (line 1723) | function _fnLanguageCompat( lang )
  function _fnCompatOpts (line 1775) | function _fnCompatOpts ( init )
  function _fnCompatCols (line 1816) | function _fnCompatCols ( init )
  function _fnBrowserDetect (line 1836) | function _fnBrowserDetect( settings )
  function _fnReduce (line 1916) | function _fnReduce ( that, fn, init, start, end, inc )
  function _fnAddColumn (line 1950) | function _fnAddColumn( oSettings, nTh )
  function _fnColumnOptions (line 1982) | function _fnColumnOptions( oSettings, iCol, oOptions )
  function _fnAdjustColumnSizing (line 2110) | function _fnAdjustColumnSizing ( settings )
  function _fnVisibleToColumnIndex (line 2142) | function _fnVisibleToColumnIndex( oSettings, iMatch )
  function _fnColumnIndexToVisible (line 2160) | function _fnColumnIndexToVisible( oSettings, iMatch )
  function _fnVisbleColumns (line 2175) | function _fnVisbleColumns( oSettings )
  function _fnGetColumns (line 2198) | function _fnGetColumns( oSettings, sParam )
  function _fnColumnTypes (line 2217) | function _fnColumnTypes ( settings )
  function _fnApplyColumnDefs (line 2288) | function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
  function _fnAddData (line 2368) | function _fnAddData ( oSettings, aDataIn, nTr, anTds )
  function _fnAddTr (line 2418) | function _fnAddTr( settings, trs )
  function _fnNodeToDataIndex (line 2441) | function _fnNodeToDataIndex( oSettings, n )
  function _fnNodeToColumnIndex (line 2455) | function _fnNodeToColumnIndex( oSettings, iRow, n )
  function _fnGetCellData (line 2470) | function _fnGetCellData( settings, rowIdx, colIdx, type )
  function _fnSetCellData (line 2518) | function _fnSetCellData( settings, rowIdx, colIdx, val )
  function _fnSplitObjNotation (line 2540) | function _fnSplitObjNotation( str )
  function _fnGetObjectDataFn (line 2555) | function _fnGetObjectDataFn( mSource )
  function _fnSetObjectDataFn (line 2680) | function _fnSetObjectDataFn( mSource )
  function _fnGetDataMaster (line 2799) | function _fnGetDataMaster ( settings )
  function _fnClearTable (line 2810) | function _fnClearTable( settings )
  function _fnDeleteIndex (line 2826) | function _fnDeleteIndex( a, iTarget, splice )
  function _fnInvalidate (line 2865) | function _fnInvalidate( settings, rowIdx, src, colIdx )
  function _fnGetRowElements (line 2943) | function _fnGetRowElements( settings, row, colIdx, d )
  function _fnCreateTr (line 3052) | function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
  function _fnRowAttributes (line 3136) | function _fnRowAttributes( settings, row )
  function _fnBuildHead (line 3176) | function _fnBuildHead( oSettings )
  function _fnDrawHead (line 3262) | function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
  function _fnDraw (line 3360) | function _fnDraw( oSettings )
  function _fnReDraw (line 3501) | function _fnReDraw( settings, holdPosition )
  function _fnAddOptionsHtml (line 3539) | function _fnAddOptionsHtml ( oSettings )
  function _fnDetectHeader (line 3695) | function _fnDetectHeader ( aLayout, nThead )
  function _fnGetUniqueThs (line 3770) | function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
  function _fnBuildAjax (line 3807) | function _fnBuildAjax( oSettings, data, fn )
  function _fnAjaxUpdate (line 3940) | function _fnAjaxUpdate( settings )
  function _fnAjaxParameters (line 3971) | function _fnAjaxParameters( settings )
  function _fnAjaxUpdateDraw (line 4079) | function _fnAjaxUpdateDraw ( settings, json )
  function _fnAjaxDataSrc (line 4129) | function _fnAjaxDataSrc ( oSettings, json )
  function _fnFeatureHtmlFilter (line 4152) | function _fnFeatureHtmlFilter ( settings )
  function _fnFilterComplete (line 4240) | function _fnFilterComplete ( oSettings, oInput, iForce )
  function _fnFilterCustom (line 4293) | function _fnFilterCustom( settings )
  function _fnFilterColumn (line 4330) | function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, ca...
  function _fnFilter (line 4363) | function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
  function _fnFilterCreateSearch (line 4418) | function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
  function _fnFilterData (line 4460) | function _fnFilterData ( settings )
  function _fnSearchToCamel (line 4533) | function _fnSearchToCamel ( obj )
  function _fnSearchToHung (line 4552) | function _fnSearchToHung ( obj )
  function _fnFeatureHtmlInfo (line 4568) | function _fnFeatureHtmlInfo ( settings )
  function _fnUpdateInfo (line 4602) | function _fnUpdateInfo ( settings )
  function _fnInfoMacros (line 4640) | function _fnInfoMacros ( settings, str )
  function _fnInitialise (line 4667) | function _fnInitialise ( settings )
  function _fnInitComplete (line 4751) | function _fnInitComplete ( settings, json )
  function _fnLengthChange (line 4766) | function _fnLengthChange ( settings, val )
  function _fnFeatureHtmlLength (line 4784) | function _fnFeatureHtmlLength ( settings )
  function _fnFeatureHtmlPaginate (line 4845) | function _fnFeatureHtmlPaginate ( settings )
  function _fnPageChange (line 4906) | function _fnPageChange ( settings, action, redraw )
  function _fnFeatureHtmlProcessing (line 4979) | function _fnFeatureHtmlProcessing ( settings )
  function _fnProcessingDisplay (line 4996) | function _fnProcessingDisplay ( settings, show )
  function _fnFeatureHtmlTable (line 5011) | function _fnFeatureHtmlTable ( settings )
  function _fnScrollDraw (line 5169) | function _fnScrollDraw ( settings )
  function _fnApplyToChildren (line 5448) | function _fnApplyToChildren( fn, an1, an2 )
  function _fnCalculateColumnWidths (line 5487) | function _fnCalculateColumnWidths ( oSettings )
  function _fnConvertToWidth (line 5725) | function _fnConvertToWidth ( width, parent )
  function _fnGetWidestNode (line 5749) | function _fnGetWidestNode( settings, colIdx )
  function _fnGetMaxLenString (line 5770) | function _fnGetMaxLenString( settings, colIdx )
  function _fnStringToCss (line 5795) | function _fnStringToCss( s )
  function _fnSortFlatten (line 5815) | function _fnSortFlatten ( settings )
  function _fnSort (line 5887) | function _fnSort ( oSettings )
  function _fnSortAria (line 6013) | function _fnSortAria ( settings )
  function _fnSortListener (line 6068) | function _fnSortListener ( settings, colIdx, append, callback )
  function _fnSortAttachListener (line 6152) | function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
  function _fnSortingClasses (line 6190) | function _fnSortingClasses( settings )
  function _fnSortData (line 6223) | function _fnSortData( settings, idx )
  function _fnSaveState (line 6266) | function _fnSaveState ( settings )
  function _fnLoadState (line 6302) | function _fnLoadState ( settings, oInit, callback )
  function _fnSettingsFromNode (line 6404) | function _fnSettingsFromNode ( table )
  function _fnLog (line 6423) | function _fnLog( settings, level, msg, tn )
  function _fnMap (line 6466) | function _fnMap( ret, src, name, mappedName )
  function _fnExtend (line 6508) | function _fnExtend( out, extender, breakRefs )
  function _fnBindAction (line 6544) | function _fnBindAction( n, oData, fn )
  function _fnCallbackReg (line 6573) | function _fnCallbackReg( oSettings, sStore, fn, sName )
  function _fnCallbackFire (line 6599) | function _fnCallbackFire( settings, callbackArr, eventName, args )
  function _fnLengthOverflow (line 6621) | function _fnLengthOverflow ( settings )
  function _fnRenderer (line 6646) | function _fnRenderer( settings, type )
  function _fnDataSource (line 6675) | function _fnDataSource ( settings )
  function _numbers (line 14468) | function _numbers ( page, pages ) {
  function _addNumericSort (line 14759) | function _addNumericSort ( decimalPlace ) {
  function _fnExternApiFunc (line 15008) | function _fnExternApiFunc (fn)

FILE: platforms/browser/www/lib/DataTables/datatables.js
  function _fnHungarianMap (line 1658) | function _fnHungarianMap ( o )
  function _fnCamelToHungarian (line 1696) | function _fnCamelToHungarian ( src, user, force )
  function _fnLanguageCompat (line 1735) | function _fnLanguageCompat( lang )
  function _fnCompatOpts (line 1787) | function _fnCompatOpts ( init )
  function _fnCompatCols (line 1828) | function _fnCompatCols ( init )
  function _fnBrowserDetect (line 1848) | function _fnBrowserDetect( settings )
  function _fnReduce (line 1928) | function _fnReduce ( that, fn, init, start, end, inc )
  function _fnAddColumn (line 1962) | function _fnAddColumn( oSettings, nTh )
  function _fnColumnOptions (line 1994) | function _fnColumnOptions( oSettings, iCol, oOptions )
  function _fnAdjustColumnSizing (line 2122) | function _fnAdjustColumnSizing ( settings )
  function _fnVisibleToColumnIndex (line 2154) | function _fnVisibleToColumnIndex( oSettings, iMatch )
  function _fnColumnIndexToVisible (line 2172) | function _fnColumnIndexToVisible( oSettings, iMatch )
  function _fnVisbleColumns (line 2187) | function _fnVisbleColumns( oSettings )
  function _fnGetColumns (line 2210) | function _fnGetColumns( oSettings, sParam )
  function _fnColumnTypes (line 2229) | function _fnColumnTypes ( settings )
  function _fnApplyColumnDefs (line 2300) | function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )
  function _fnAddData (line 2380) | function _fnAddData ( oSettings, aDataIn, nTr, anTds )
  function _fnAddTr (line 2430) | function _fnAddTr( settings, trs )
  function _fnNodeToDataIndex (line 2453) | function _fnNodeToDataIndex( oSettings, n )
  function _fnNodeToColumnIndex (line 2467) | function _fnNodeToColumnIndex( oSettings, iRow, n )
  function _fnGetCellData (line 2482) | function _fnGetCellData( settings, rowIdx, colIdx, type )
  function _fnSetCellData (line 2530) | function _fnSetCellData( settings, rowIdx, colIdx, val )
  function _fnSplitObjNotation (line 2552) | function _fnSplitObjNotation( str )
  function _fnGetObjectDataFn (line 2567) | function _fnGetObjectDataFn( mSource )
  function _fnSetObjectDataFn (line 2692) | function _fnSetObjectDataFn( mSource )
  function _fnGetDataMaster (line 2811) | function _fnGetDataMaster ( settings )
  function _fnClearTable (line 2822) | function _fnClearTable( settings )
  function _fnDeleteIndex (line 2838) | function _fnDeleteIndex( a, iTarget, splice )
  function _fnInvalidate (line 2877) | function _fnInvalidate( settings, rowIdx, src, colIdx )
  function _fnGetRowElements (line 2955) | function _fnGetRowElements( settings, row, colIdx, d )
  function _fnCreateTr (line 3064) | function _fnCreateTr ( oSettings, iRow, nTrIn, anTds )
  function _fnRowAttributes (line 3148) | function _fnRowAttributes( settings, row )
  function _fnBuildHead (line 3188) | function _fnBuildHead( oSettings )
  function _fnDrawHead (line 3274) | function _fnDrawHead( oSettings, aoSource, bIncludeHidden )
  function _fnDraw (line 3372) | function _fnDraw( oSettings )
  function _fnReDraw (line 3513) | function _fnReDraw( settings, holdPosition )
  function _fnAddOptionsHtml (line 3551) | function _fnAddOptionsHtml ( oSettings )
  function _fnDetectHeader (line 3707) | function _fnDetectHeader ( aLayout, nThead )
  function _fnGetUniqueThs (line 3782) | function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
  function _fnBuildAjax (line 3819) | function _fnBuildAjax( oSettings, data, fn )
  function _fnAjaxUpdate (line 3952) | function _fnAjaxUpdate( settings )
  function _fnAjaxParameters (line 3983) | function _fnAjaxParameters( settings )
  function _fnAjaxUpdateDraw (line 4091) | function _fnAjaxUpdateDraw ( settings, json )
  function _fnAjaxDataSrc (line 4141) | function _fnAjaxDataSrc ( oSettings, json )
  function _fnFeatureHtmlFilter (line 4164) | function _fnFeatureHtmlFilter ( settings )
  function _fnFilterComplete (line 4252) | function _fnFilterComplete ( oSettings, oInput, iForce )
  function _fnFilterCustom (line 4305) | function _fnFilterCustom( settings )
  function _fnFilterColumn (line 4342) | function _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, ca...
  function _fnFilter (line 4375) | function _fnFilter( settings, input, force, regex, smart, caseInsensitive )
  function _fnFilterCreateSearch (line 4430) | function _fnFilterCreateSearch( search, regex, smart, caseInsensitive )
  function _fnFilterData (line 4472) | function _fnFilterData ( settings )
  function _fnSearchToCamel (line 4545) | function _fnSearchToCamel ( obj )
  function _fnSearchToHung (line 4564) | function _fnSearchToHung ( obj )
  function _fnFeatureHtmlInfo (line 4580) | function _fnFeatureHtmlInfo ( settings )
  function _fnUpdateInfo (line 4614) | function _fnUpdateInfo ( settings )
  function _fnInfoMacros (line 4652) | function _fnInfoMacros ( settings, str )
  function _fnInitialise (line 4679) | function _fnInitialise ( settings )
  function _fnInitComplete (line 4763) | function _fnInitComplete ( settings, json )
  function _fnLengthChange (line 4778) | function _fnLengthChange ( settings, val )
  function _fnFeatureHtmlLength (line 4796) | function _fnFeatureHtmlLength ( settings )
  function _fnFeatureHtmlPaginate (line 4857) | function _fnFeatureHtmlPaginate ( settings )
  function _fnPageChange (line 4918) | function _fnPageChange ( settings, action, redraw )
  function _fnFeatureHtmlProcessing (line 4991) | function _fnFeatureHtmlProcessing ( settings )
  function _fnProcessingDisplay (line 5008) | function _fnProcessingDisplay ( settings, show )
  function _fnFeatureHtmlTable (line 5023) | function _fnFeatureHtmlTable ( settings )
  function _fnScrollDraw (line 5181) | function _fnScrollDraw ( settings )
  function _fnApplyToChildren (line 5460) | function _fnApplyToChildren( fn, an1, an2 )
  function _fnCalculateColumnWidths (line 5499) | function _fnCalculateColumnWidths ( oSettings )
  function _fnConvertToWidth (line 5737) | function _fnConvertToWidth ( width, parent )
  function _fnGetWidestNode (line 5761) | function _fnGetWidestNode( settings, colIdx )
  function _fnGetMaxLenString (line 5782) | function _fnGetMaxLenString( settings, colIdx )
  function _fnStringToCss (line 5807) | function _fnStringToCss( s )
  function _fnSortFlatten (line 5827) | function _fnSortFlatten ( settings )
  function _fnSort (line 5899) | function _fnSort ( oSettings )
  function _fnSortAria (line 6025) | function _fnSortAria ( settings )
  function _fnSortListener (line 6080) | function _fnSortListener ( settings, colIdx, append, callback )
  function _fnSortAttachListener (line 6164) | function _fnSortAttachListener ( settings, attachTo, colIdx, callback )
  function _fnSortingClasses (line 6202) | function _fnSortingClasses( settings )
  function _fnSortData (line 6235) | function _fnSortData( settings, idx )
  function _fnSaveState (line 6278) | function _fnSaveState ( settings )
  function _fnLoadState (line 6314) | function _fnLoadState ( settings, oInit, callback )
  function _fnSettingsFromNode (line 6416) | function _fnSettingsFromNode ( table )
  function _fnLog (line 6435) | function _fnLog( settings, level, msg, tn )
  function _fnMap (line 6478) | function _fnMap( ret, src, name, mappedName )
  function _fnExtend (line 6520) | function _fnExtend( out, extender, breakRefs )
  function _fnBindAction (line 6556) | function _fnBindAction( n, oData, fn )
  function _fnCallbackReg (line 6585) | function _fnCallbackReg( oSettings, sStore, fn, sName )
  function _fnCallbackFire (line 6611) | function _fnCallbackFire( settings, callbackArr, eventName, args )
  function _fnLengthOverflow (line 6633) | function _fnLengthOverflow ( settings )
  function _fnRenderer (line 6658) | function _fnRenderer( settings, type )
  function _fnDataSource (line 6687) | function _fnDataSource ( settings )
  function _numbers (line 14480) | function _numbers ( page, pages ) {
  function _addNumericSort (line 14771) | function _addNumericSort ( decimalPlace ) {
  function _fnExternApiFunc (line 15020) | function _fnExternApiFunc (fn)

FILE: platforms/browser/www/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
  function updateImageLocation (line 35) | function updateImageLocation() {
  function onResize (line 52) | function onResize() {
  function readPreferencesFromCfg (line 92) | function readPreferencesFromCfg(cfg) {
  function showAndHide (line 113) | function showAndHide() {

FILE: platforms/browser/www/plugins/phonegap-plugin-barcodescanner/src/browser/BarcodeScannerProxy.js
  function scan (line 1) | function scan(success, error) {
  function encode (line 15) | function encode(type, data, success, errorCallback) {

FILE: platforms/browser/www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js
  function BarcodeScanner (line 19) | function BarcodeScanner() {

FILE: plugins/cordova-plugin-compat/src/android/BuildHelper.java
  class BuildHelper (line 35) | public class BuildHelper {
    method getBuildConfigValue (line 50) | public static Object getBuildConfigValue(Context ctx, String key)

FILE: plugins/cordova-plugin-compat/src/android/PermissionHelper.java
  class PermissionHelper (line 35) | public class PermissionHelper {
    method requestPermission (line 48) | public static void requestPermission(CordovaPlugin plugin, int request...
    method requestPermissions (line 62) | public static void requestPermissions(CordovaPlugin plugin, int reques...
    method hasPermission (line 94) | public static boolean hasPermission(CordovaPlugin plugin, String permi...
    method deliverPermissionResult (line 114) | private static void deliverPermissionResult(CordovaPlugin plugin, int ...

FILE: plugins/cordova-plugin-splashscreen/src/android/SplashScreen.java
  class SplashScreen (line 49) | public class SplashScreen extends CordovaPlugin {
    method getView (line 72) | private View getView() {
    method pluginInitialize (line 80) | @Override
    method isMaintainAspectRatio (line 121) | private boolean isMaintainAspectRatio () {
    method getFadeDuration (line 125) | private int getFadeDuration () {
    method onPause (line 138) | @Override
    method onDestroy (line 147) | @Override
    method execute (line 158) | @Override
    method onMessage (line 180) | @Override
    method onConfigurationChanged (line 202) | public void onConfigurationChanged(Configuration newConfig) {
    method removeSplashScreen (line 216) | private void removeSplashScreen(final boolean forceHideImmediately) {
    method showSplashScreen (line 263) | @SuppressWarnings("deprecation")
    method spinnerStart (line 340) | private void spinnerStart() {
    method spinnerStop (line 375) | private void spinnerStop() {

FILE: plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js
  function updateImageLocation (line 35) | function updateImageLocation() {
  function onResize (line 52) | function onResize() {
  function readPreferencesFromCfg (line 92) | function readPreferencesFromCfg(cfg) {
  function showAndHide (line 113) | function showAndHide() {

FILE: plugins/cordova-plugin-splashscreen/src/ios/CDVSplashScreen.h
  type CDV_iOSDevice (line 23) | typedef struct {
  function interface (line 34) | interface CDVSplashScreen : CDVPlugin {

FILE: plugins/cordova-plugin-splashscreen/src/ubuntu/splashscreen.h
  function class (line 30) | class Splashscreen: public CPlugin {

FILE: plugins/cordova-plugin-splashscreen/src/wp/ResolutionHelper.cs
  type Resolutions (line 21) | public enum Resolutions { WVGA, WXGA, HD };
  class ResolutionHelper (line 23) | public static class ResolutionHelper

FILE: plugins/cordova-plugin-splashscreen/src/wp/SplashScreen.cs
  class SplashScreen (line 41) | public class SplashScreen : BaseCommand
    method SplashScreen (line 58) | public SplashScreen()
    method OnInit (line 86) | public override void OnInit()
    method LoadConfigPrefs (line 97) | private void LoadConfigPrefs()
    method GetSplashScreenImageResource (line 138) | private StreamResourceInfo GetSplashScreenImageResource()
    method show (line 184) | public void show(string options = null)
    method hide (line 216) | public void hide(string options = null)
    method StartAutoHideTimer (line 244) | private void StartAutoHideTimer()

FILE: plugins/cordova-plugin-splashscreen/tests/tests.js
  function showFor (line 43) | function showFor(duration) {

FILE: plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java
  class WhitelistPlugin (line 30) | public class WhitelistPlugin extends CordovaPlugin {
    method WhitelistPlugin (line 37) | public WhitelistPlugin() {
    method WhitelistPlugin (line 40) | public WhitelistPlugin(Context context) {
    method WhitelistPlugin (line 44) | public WhitelistPlugin(XmlPullParser xmlParser) {
    method WhitelistPlugin (line 48) | public WhitelistPlugin(Whitelist allowedNavigations, Whitelist allowed...
    method pluginInitialize (line 58) | @Override
    class CustomConfigXmlParser (line 68) | private class CustomConfigXmlParser extends ConfigXmlParser {
      method handleStartTag (line 69) | @Override
      method handleEndTag (line 106) | @Override
    method shouldAllowNavigation (line 111) | @Override
    method shouldAllowRequest (line 119) | @Override
    method shouldOpenExternalUrl (line 130) | @Override
    method getAllowedNavigations (line 138) | public Whitelist getAllowedNavigations() {
    method setAllowedNavigations (line 142) | public void setAllowedNavigations(Whitelist allowedNavigations) {
    method getAllowedIntents (line 146) | public Whitelist getAllowedIntents() {
    method setAllowedIntents (line 150) | public void setAllowedIntents(Whitelist allowedIntents) {
    method getAllowedRequests (line 154) | public Whitelist getAllowedRequests() {
    method setAllowedRequests (line 158) | public void setAllowedRequests(Whitelist allowedRequests) {

FILE: plugins/phonegap-plugin-barcodescanner/spec/helper/cordova.js
  function ModuleMap (line 77) | function ModuleMap(moduleId) {

FILE: plugins/phonegap-plugin-barcodescanner/src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java
  class BarcodeScanner (line 36) | public class BarcodeScanner extends CordovaPlugin {
    method BarcodeScanner (line 69) | public BarcodeScanner() {
    method execute (line 88) | @Override
    method scan (line 131) | public void scan(final JSONArray args) {
    method onActivityResult (line 212) | @Override
    method encode (line 250) | public void encode(String type, String data) {
    method hasPermisssion (line 264) | public boolean hasPermisssion() {
    method requestPermissions (line 281) | public void requestPermissions(int requestCode)
    method onRequestPermissionResult (line 293) | public void onRequestPermissionResult(int requestCode, String[] permis...
    method onRestoreStateForActivityResult (line 319) | public void onRestoreStateForActivityResult(Bundle state, CallbackCont...

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/index.js
  constant SMS_URI_ONE (line 22) | const SMS_URI_ONE = "smsto:",
  constant SMS_URI_TWO (line 22) | const SMS_URI_ONE = "smsto:",
  constant EMAIL_URI (line 22) | const SMS_URI_ONE = "smsto:",
  constant PHONE_URI (line 22) | const SMS_URI_ONE = "smsto:",
  constant SMS_TYPE (line 22) | const SMS_URI_ONE = "smsto:",
  constant PHONE_TYPE (line 22) | const SMS_URI_ONE = "smsto:",
  constant EMAIL_TYPE (line 22) | const SMS_URI_ONE = "smsto:",
  constant TEXT_TYPE (line 22) | const SMS_URI_ONE = "smsto:",

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json/features.h
  function namespace (line 6) | namespace Json {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json/forwards.h
  function namespace (line 6) | namespace Json {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json/reader.h
  function namespace (line 11) | namespace Json {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json/value.h
  function namespace (line 19) | namespace Json {
  function class (line 451) | class PathArgument
  function class (line 484) | class Path
  function class (line 523) | class ValueAllocator
  function class (line 582) | class JSON_API ValueMapAllocator
  function class (line 598) | class JSON_API ValueInternalLink
  function class (line 630) | class JSON_API ValueInternalMap
  function reference (line 1059) | reference operator *() const

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json/writer.h
  function namespace (line 9) | namespace Json {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json_batchallocator.h
  function namespace (line 9) | namespace Json {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json_reader.cpp
  type Json (line 14) | namespace Json {
    function Features (line 33) | Features
    function Features (line 40) | Features
    function in (line 53) | static inline bool
    function in (line 59) | static inline bool
    function containsNewLine (line 66) | static bool
    function codePointToUTF8 (line 76) | static std::string codePointToUTF8(unsigned int cp)
    function Value (line 807) | Value &

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json_value.cpp
  type Json (line 20) | namespace Json {
    class DefaultValueAllocator (line 67) | class DefaultValueAllocator : public ValueAllocator
      method releaseMemberName (line 79) | virtual void releaseMemberName( char *memberName )
      method releaseStringValue (line 99) | virtual void releaseStringValue( char *value )
    function ValueAllocator (line 106) | static ValueAllocator *&valueAllocator()
    type DummyValueAllocatorInitializer (line 113) | struct DummyValueAllocatorInitializer {
      method DummyValueAllocatorInitializer (line 114) | DummyValueAllocatorInitializer()
    function Value (line 515) | Value &
    function ValueType (line 535) | ValueType
    function Value (line 982) | Value &
    function Value (line 1003) | const Value &
    function Value (line 1022) | Value &
    function Value (line 1029) | Value &
    function Value (line 1053) | Value
    function Value (line 1070) | const Value &
    function Value (line 1089) | Value &
    function Value (line 1096) | const Value &
    function Value (line 1102) | Value &
    function Value (line 1110) | Value &
    function Value (line 1117) | const Value &
    function Value (line 1125) | Value &
    function Value (line 1132) | Value
    function Value (line 1141) | Value
    function Value (line 1148) | Value
    function Value (line 1174) | Value
    function Value (line 1181) | Value
    function Value (line 1639) | const Value &
    function Value (line 1671) | Value
    function Value (line 1698) | Value &

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/json_writer.cpp
  type Json (line 14) | namespace Json {
    function isControlCharacter (line 16) | static bool isControlCharacter(char ch)
    function containsControlCharacter (line 21) | static bool containsControlCharacter( const char* str )
    function uintToString (line 30) | static void uintToString( unsigned int value,
    function valueToString (line 42) | std::string valueToString( Int value )
    function valueToString (line 57) | std::string valueToString( UInt value )
    function valueToString (line 66) | std::string valueToString( double value )
    function valueToString (line 106) | std::string valueToString( bool value )
    function valueToQuotedString (line 111) | std::string valueToQuotedString( const char *value )

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/plugin.cpp
  function BOOL (line 6) | BOOL APIENTRY DllMain( HANDLE hModule,
  function string (line 21) | string g_GetSysErrMsg( void )
  function g_sleep (line 53) | void g_sleep( unsigned int mseconds )
  function string (line 62) | string& g_trim( string& str )
  function g_tokenize (line 82) | void g_tokenize( const string& str, const string& delimiters, vector<str...
  class GlobalSharedModule (line 110) | class GlobalSharedModule
    method GlobalSharedModule (line 114) | GlobalSharedModule( void )
  function g_unregisterObject (line 171) | bool g_unregisterObject( const string& strObjId, void* pContext )

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/plugin.h
  function class (line 53) | class JSExt

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/public/tokenizer.cpp
  function tokenize (line 43) | void tokenize ( const string& str, vector<string>& result,

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/Logger.cpp
  type webworks (line 21) | namespace webworks {
    function _Uint8t (line 92) | _Uint8t Logger::getVerbosity() {
    function slog2_buffer_t (line 96) | slog2_buffer_t Logger::hiPriorityBuffer() {
    function slog2_buffer_t (line 100) | slog2_buffer_t Logger::lowPriorityBuffer() {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/Logger.hpp
  class BarcodeScannerJS (line 23) | class BarcodeScannerJS
  type webworks (line 25) | namespace webworks {
    class Logger (line 27) | class Logger {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/barcodescanner_js.cpp
  function JSExt (line 59) | JSExt* onCreateObject(const string& className, const string& id) {
  function string (line 80) | string BarcodeScannerJS::InvokeMethod(const std::string& command) {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/barcodescanner_js.hpp
  class BarcodeScannerJS (line 25) | class BarcodeScannerJS: public JSExt {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/barcodescanner_ndk.cpp
  type webworks (line 40) | namespace webworks {
    function viewfinder_callback (line 106) | void viewfinder_callback(camera_handle_t handle,camera_buffer_t* buf,v...
    function convertIntToString (line 170) | std::string convertIntToString(int i) {
    function interrogateWindowCV (line 195) | void interrogateWindowCV(screen_window_t window, Logger* log, string d...
    function interrogateWindowIV (line 207) | void interrogateWindowIV(screen_window_t window, Logger* log, string d...
    function interrogateWindow (line 219) | void interrogateWindow(screen_window_t window, Logger* log) {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/native/src/barcodescanner_ndk.hpp
  class BarcodeScannerJS (line 25) | class BarcodeScannerJS
  type webworks (line 27) | namespace webworks {
    class BarcodeScannerNDK (line 29) | class BarcodeScannerNDK {

FILE: plugins/phonegap-plugin-barcodescanner/src/blackberry10/qrcode.js
  function QR8bitByte (line 30) | function QR8bitByte(data) {
  function QRCodeModel (line 79) | function QRCodeModel(typeNumber, errorCorrectLevel) {
  function QRPolynomial (line 140) | function QRPolynomial(num,shift){if(num.length==undefined){throw new Err...
  function QRRSBlock (line 147) | function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this...
  function QRBitBuffer (line 150) | function QRBitBuffer(){this.buffer=[];this.length=0;}
  function _isSupportCanvas (line 155) | function _isSupportCanvas() {
  function _getAndroid (line 160) | function _getAndroid() {
  function makeSVG (line 192) | function makeSVG(tag, attrs) {
  function _onMakeImage (line 277) | function _onMakeImage() {
  function _safeSetDataURI (line 311) | function _safeSetDataURI(fSuccess, fFail) {
  function _getTypeNumber (line 470) | function _getTypeNumber(sText, nCorrectLevel) {
  function _getUTF8Length (line 506) | function _getUTF8Length(sText) {

FILE: plugins/phonegap-plugin-barcodescanner/src/browser/BarcodeScannerProxy.js
  function scan (line 1) | function scan(success, error) {
  function encode (line 15) | function encode(type, data, success, errorCallback) {

FILE: plugins/phonegap-plugin-barcodescanner/src/ios/zxing-all-in-one.cpp
  type zxing (line 26) | namespace zxing {
    function BarcodeFormat (line 692) | BarcodeFormat Result::getBarcodeFormat() const {
    function ostream (line 696) | ostream& operator<<(ostream &out, Result& result) {
    function ostream (line 1137) | ostream& operator<<(ostream &out, const BitMatrix &bm) {
    function ostream (line 1353) | ostream& operator<<(ostream &out, Ref<T>& ref) {
    type EdgeDetector (line 1527) | namespace EdgeDetector {
      function findEdgePoints (line 1529) | void findEdgePoints(std::vector<Point>& points, const BitMatrix& ima...
      function Line (line 1605) | Line findLine(const BitMatrix& image, Line estimate, bool invert, in...
      function Point (line 1671) | Point intersection(Line a, Line b) {
    function GridSampler (line 2165) | GridSampler &GridSampler::getInstance() {
    function ostream (line 2515) | ostream& operator<<(ostream& out, const PerspectiveTransform &pt) {
    function ostream (line 2558) | ostream &operator<<(ostream &out, const String &s) {
    function makeArray (line 3268) | static inline ArrayRef<int> makeArray(int value) {
    function refPoly (line 3273) | static inline Ref<GF256Poly> refPoly(GF256 &field, int value) {
    function ostream (line 3357) | ostream& operator<<(ostream& out, const GF256& field) {
    function ostream (line 3560) | ostream& operator<<(ostream& out, const GF256Poly& p) {
    type datamatrix (line 3837) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 3923) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4126) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4488) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4606) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5029) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5121) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5175) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5593) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5634) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type multi (line 5804) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 5879) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6008) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6044) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6102) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6154) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type oned (line 6389) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 6881) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7228) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7325) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7403) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7777) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7848) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7935) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8140) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8172) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8241) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8552) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type qrcode (line 8702) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8768) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8892) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8981) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 9539) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 9727) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 9849) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 10421) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 10609) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 10668) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 10885) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 11176) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 11256) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 11793) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 11839) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
  type zxing (line 69) | namespace zxing {
    function BarcodeFormat (line 692) | BarcodeFormat Result::getBarcodeFormat() const {
    function ostream (line 696) | ostream& operator<<(ostream &out, Result& result) {
    function ostream (line 1137) | ostream& operator<<(ostream &out, const BitMatrix &bm) {
    function ostream (line 1353) | ostream& operator<<(ostream &out, Ref<T>& ref) {
    type EdgeDetector (line 1527) | namespace EdgeDetector {
      function findEdgePoints (line 1529) | void findEdgePoints(std::vector<Point>& points, const BitMatrix& ima...
      function Line (line 1605) | Line findLine(const BitMatrix& image, Line estimate, bool invert, in...
      function Point (line 1671) | Point intersection(Line a, Line b) {
    function GridSampler (line 2165) | GridSampler &GridSampler::getInstance() {
    function ostream (line 2515) | ostream& operator<<(ostream& out, const PerspectiveTransform &pt) {
    function ostream (line 2558) | ostream &operator<<(ostream &out, const String &s) {
    function makeArray (line 3268) | static inline ArrayRef<int> makeArray(int value) {
    function refPoly (line 3273) | static inline Ref<GF256Poly> refPoly(GF256 &field, int value) {
    function ostream (line 3357) | ostream& operator<<(ostream& out, const GF256& field) {
    function ostream (line 3560) | ostream& operator<<(ostream& out, const GF256Poly& p) {
    type datamatrix (line 3837) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 3923) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4126) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4488) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 4606) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5029) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5121) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5175) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5593) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type datamatrix (line 5634) | namespace datamatrix {
      function ECBlocks (line 4008) | ECBlocks* Version::getECBlocks() {
    type multi (line 5804) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 5879) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6008) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6044) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6102) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type multi (line 6154) | namespace multi {
      function compareModuleSize (line 6162) | bool compareModuleSize(Ref<FinderPattern> a, Ref<FinderPattern> b){
    type oned (line 6389) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 6881) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7228) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7325) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7403) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7777) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7848) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 7935) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8140) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8172) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8241) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type oned (line 8552) | namespace oned {
      function BarcodeFormat (line 7296) | BarcodeFormat EAN13Reader::getBarcodeFormat(){
      function BarcodeFormat (line 7371) | BarcodeFormat EAN8Reader::getBarcodeFormat(){
      function BarcodeFormat (line 8209) | BarcodeFormat UPCAReader::getBarcodeFormat(){
      function BarcodeFormat (line 8668) | BarcodeFormat UPCEReader::getBarcodeFormat() {
    type qrcode (line 8702) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8768) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8892) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      function DataMask (line 9862) | DataMask &DataMask::forReference(int reference) {
      class DataMask000 (line 9883) | class DataMask000 : public DataMask {
        method isMasked (line 9885) | bool isMasked(size_t x, size_t y) {
      class DataMask001 (line 9894) | class DataMask001 : public DataMask {
        method isMasked (line 9896) | bool isMasked(size_t x, size_t) {
      class DataMask010 (line 9905) | class DataMask010 : public DataMask {
        method isMasked (line 9907) | bool isMasked(size_t, size_t y) {
      class DataMask011 (line 9915) | class DataMask011 : public DataMask {
        method isMasked (line 9917) | bool isMasked(size_t x, size_t y) {
      class DataMask100 (line 9925) | class DataMask100 : public DataMask {
        method isMasked (line 9927) | bool isMasked(size_t x, size_t y) {
      class DataMask101 (line 9936) | class DataMask101 : public DataMask {
        method isMasked (line 9938) | bool isMasked(size_t x, size_t y) {
      class DataMask110 (line 9949) | class DataMask110 : public DataMask {
        method isMasked (line 9951) | bool isMasked(size_t x, size_t y) {
      class DataMask111 (line 9961) | class DataMask111 : public DataMask {
        method isMasked (line 9963) | bool isMasked(size_t x, size_t y) {
      class FurthestFromAverageComparator (line 11260) | class FurthestFromAverageComparator {
        method FurthestFromAverageComparator (line 11264) | FurthestFromAverageComparator(float averageModuleSize) :
      class CenterComparator (line 11274) | class CenterComparator {
        method CenterComparator (line 11277) | CenterComparator(float averageModuleSize) :
      function Point (line 11850) | static Point guessLastPattern(Point topLeft, Point topRight, Point b...
      function Point (line 11854) | static Point rp(Ref<ResultPoint> rp) {
      function Point (line 11874) | Point QREdgeDetector::findCorner(const BitMatrix& image, Point topLe...
      function Line (line 11890) | Line QREdgeDetector::findPatternEdge(const BitMatrix& image, Point p...
      function Point (line 11923) | Point QREdgeDetector::endOfReverseBlackWhiteBlackRun(const BitMatrix...
    type qrcode (line 8981) | namespace qrcode {
      function string (line 8717) | string const& ErrorCorrectionLevel::name() const {
      function ErrorCorrectionLevel (line 8725) | ErrorCorrectionLevel& ErrorCorrectionLevel::forBits(int bits) {
      function ErrorCorrectionLevel (line 8789) | ErrorCorrectionLevel& FormatInformation::getErrorCorrectionLevel() {
      function ostream (line 8854) | ostream& operator<<(ostream& out, const FormatInformation& fi) {
      function Decoder (line 8946) | Decoder& QRCodeReader::getDecoder() {
      function ECBlocks (line 9044) | ECBlocks& Version::getECBlocksForLevel(ErrorCorrectionLevel &ecLevel) {
      function Version (line 9048) | Version *Version::getProvisionalVersionForDimension(int dimension) {
      function Version (line 9055) | Version *Version::getVersionForNumber(int versionNumber) {
      function Version (line 9088) | Version *Version::decodeVersionInformation(unsigned int versionBits) {
      function Version (line 9590) | Version *BitMatrixParser::readVersion() {
      f
Condensed preview — 422 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,054K chars).
[
  {
    "path": ".gitignore",
    "chars": 319,
    "preview": "# IDE\nnbproject/\n\n# Android\nplatforms/android/bin/\nplatforms/android/gen/\nplatforms/android/build/\n\n# iOS\nplatforms/ios/"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "PRIVACY.MD",
    "chars": 390,
    "preview": "# Pi-hole Droid - Privacy\n\n### Why does Pi-hole Droid request permission to access my camera?\nThe app could scan the QR "
  },
  {
    "path": "README.md",
    "chars": 3250,
    "preview": "# Pi-hole Droid\n\n![App Logo](www/assets/mipmap-hdpi/ic_launcher.png?raw=true)\n\nPi-hole Droid is an *unofficial* client t"
  },
  {
    "path": "config.xml",
    "chars": 1455,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<widget id=\"friimaind.piholedroid\" version=\"1.0.5\" xmlns=\"http://www.w3.org/ns/wi"
  },
  {
    "path": "hooks/README.md",
    "chars": 1099,
    "preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the N"
  },
  {
    "path": "platforms/android/.gitignore",
    "chars": 172,
    "preview": "# Non-project-specific build files:\nbuild.xml\nlocal.properties\n/gradlew\n/gradlew.bat\n/gradle\n# Ant builds\nant-build\nant-"
  },
  {
    "path": "platforms/android/AndroidManifest.xml",
    "chars": 1938,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<manifest android:hardwareAccelerated=\"true\" android:versionCode=\"10005\" android:"
  },
  {
    "path": "platforms/android/CordovaLib/AndroidManifest.xml",
    "chars": 1112,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/android/CordovaLib/build/generated/source/buildConfig/debug/org/apache/cordova/BuildConfig.java",
    "chars": 443,
    "preview": "/**\n * Automatically generated file. DO NOT MODIFY\n */\npackage org.apache.cordova;\n\npublic final class BuildConfig {\n  p"
  },
  {
    "path": "platforms/android/CordovaLib/build/generated/source/buildConfig/release/org/apache/cordova/BuildConfig.java",
    "chars": 422,
    "preview": "/**\n * Automatically generated file. DO NOT MODIFY\n */\npackage org.apache.cordova;\n\npublic final class BuildConfig {\n  p"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/bundles/debug/AndroidManifest.xml",
    "chars": 1120,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/bundles/release/AndroidManifest.xml",
    "chars": 1120,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugAssets/merger.xml",
    "chars": 442,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml",
    "chars": 334,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeDebugShaders/merger.xml",
    "chars": 334,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseAssets/merger.xml",
    "chars": 448,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseJniLibFolders/merger.xml",
    "chars": 338,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/mergeReleaseShaders/merger.xml",
    "chars": 338,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main\"><source path=\"/home/massimiliano/cordo"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/compile-file-map.properties",
    "chars": 31,
    "preview": "#Sun Apr 23 15:43:32 CEST 2017\n"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/packageDebugResources/merger.xml",
    "chars": 1155,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main$Generated\" generated=\"true\"><source pat"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/compile-file-map.properties",
    "chars": 31,
    "preview": "#Sun Apr 23 15:43:32 CEST 2017\n"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental/packageReleaseResources/merger.xml",
    "chars": 1173,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merger version=\"3\"><dataSet config=\"main$Generated\" generated=\"true\"><source pat"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental-safeguard/debug/tag.txt",
    "chars": 26,
    "preview": "incremental task execution"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/incremental-safeguard/release/tag.txt",
    "chars": 26,
    "preview": "incremental task execution"
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/manifests/aapt/debug/AndroidManifest.xml",
    "chars": 1120,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/android/CordovaLib/build/intermediates/manifests/aapt/release/AndroidManifest.xml",
    "chars": 1120,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/android/CordovaLib/build.gradle",
    "chars": 4047,
    "preview": "/* Licensed to the Apache Software Foundation (ASF) under one\n   or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/CordovaLib/cordova.gradle",
    "chars": 7540,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/project.properties",
    "chars": 513,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java",
    "chars": 1787,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java",
    "chars": 4696,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java",
    "chars": 2757,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/Config.java",
    "chars": 2257,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java",
    "chars": 5208,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java",
    "chars": 18097,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java",
    "chars": 3104,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java",
    "chars": 7505,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java",
    "chars": 2715,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java",
    "chars": 5989,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java",
    "chars": 1718,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java",
    "chars": 3021,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java",
    "chars": 8924,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java",
    "chars": 15690,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java",
    "chars": 3039,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java",
    "chars": 18757,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java",
    "chars": 4645,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java",
    "chars": 3070,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java",
    "chars": 21313,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java",
    "chars": 14300,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java",
    "chars": 1393,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java",
    "chars": 2152,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java",
    "chars": 1158,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java",
    "chars": 1431,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/LOG.java",
    "chars": 6076,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java",
    "chars": 21018,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java",
    "chars": 2308,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java",
    "chars": 18790,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java",
    "chars": 6580,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java",
    "chars": 3002,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java",
    "chars": 6777,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java",
    "chars": 2284,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java",
    "chars": 2135,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java",
    "chars": 11714,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java",
    "chars": 3016,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java",
    "chars": 14399,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java",
    "chars": 13265,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/android.json",
    "chars": 3995,
    "preview": "{\n    \"prepare_queue\": {\n        \"installed\": [],\n        \"uninstalled\": []\n    },\n    \"config_munge\": {\n        \"files\""
  },
  {
    "path": "platforms/android/assets/www/cordova-js-src/android/nativeapiprovider.js",
    "chars": 1322,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/android/assets/www/cordova-js-src/android/promptbasednativeapi.js",
    "chars": 1441,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/android/assets/www/cordova-js-src/exec.js",
    "chars": 11143,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/assets/www/cordova-js-src/platform.js",
    "chars": 4924,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/assets/www/cordova-js-src/plugin/android/app.js",
    "chars": 4005,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/assets/www/cordova.js",
    "chars": 72751,
    "preview": "// Platform: android\n// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20\n/*\n Licensed to the Apache Software Foundation (ASF) un"
  },
  {
    "path": "platforms/android/assets/www/cordova_plugins.js",
    "chars": 894,
    "preview": "cordova.define('cordova/plugin_list', function(require, exports, module) {\nmodule.exports = [\n    {\n        \"id\": \"cordo"
  },
  {
    "path": "platforms/android/assets/www/css/responsive.css",
    "chars": 858,
    "preview": "/* TABLES */\n@media all and (max-width:500px) {\n    .force-landscape {\n        display: none;\n    }\n}\n@media all and (mi"
  },
  {
    "path": "platforms/android/assets/www/css/styles.css",
    "chars": 5348,
    "preview": "/* GENERAL */\nhtml, body {\n    font-family: 'Roboto', 'Helvetica', sans-serif;\n}\n\n.centered-element {\n    align-items: c"
  },
  {
    "path": "platforms/android/assets/www/index.html",
    "chars": 5195,
    "preview": "<!DOCTYPE html>\n<html>\n    <head>\n        <title>Pi-hole App</title>\n        <meta http-equiv=\"Content-Security-Policy\" "
  },
  {
    "path": "platforms/android/assets/www/js/main.js",
    "chars": 16361,
    "preview": "/*\n * Check if is a cordova app or browser\n */\n\nvar isCordovaApp = (typeof window.cordova !== \"undefined\");\n\nif (isCordo"
  },
  {
    "path": "platforms/android/assets/www/js/utilities.js",
    "chars": 2393,
    "preview": "/*\n * Refresh the DOM for MDL dynamic content\n */\n\nfunction mdl_upgradeDom() {\n    componentHandler.upgradeDom();\n}\n\n/*\n"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/dataTables.bootstrap.css",
    "chars": 4791,
    "preview": "table.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !impor"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/dataTables.foundation.css",
    "chars": 2924,
    "preview": "table.dataTable {\n  clear: both;\n  margin: 0.5em 0 !important;\n  max-width: none !important;\n  width: 100%;\n}\ntable.data"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/dataTables.jqueryui.css",
    "chars": 16019,
    "preview": "/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  "
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/dataTables.semanticui.css",
    "chars": 2937,
    "preview": "/*\n * Styling for DataTables with Semantic UI\n */\ntable.dataTable.table {\n  margin: 0;\n}\ntable.dataTable.table thead th,"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/jquery.dataTables.css",
    "chars": 15423,
    "preview": "/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  "
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/css/jquery.dataTables_themeroller.css",
    "chars": 14229,
    "preview": "/*\n * Table styles\n */\ntable.dataTable {\n  width: 100%;\n  margin: 0 auto;\n  clear: both;\n  border-collapse: separate;\n  "
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/dataTables.bootstrap.js",
    "chars": 4558,
    "preview": "/*! DataTables Bootstrap 3 integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integ"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/dataTables.foundation.js",
    "chars": 4338,
    "preview": "/*! DataTables Foundation integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integr"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/dataTables.jqueryui.js",
    "chars": 4485,
    "preview": "/*! DataTables jQuery UI integration\n * ©2011-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integra"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/dataTables.semanticui.js",
    "chars": 5070,
    "preview": "/*! DataTables Bootstrap 3 integration\n * ©2011-2015 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * DataTables integ"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/DataTables-1.10.13/js/jquery.dataTables.js",
    "chars": 448542,
    "preview": "/*! DataTables 1.10.13\n * ©2008-2016 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @desc"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/datatables.css",
    "chars": 15828,
    "preview": "/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To"
  },
  {
    "path": "platforms/android/assets/www/lib/DataTables/datatables.js",
    "chars": 448869,
    "preview": "/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To"
  },
  {
    "path": "platforms/android/assets/www/partial/about-help.html",
    "chars": 4245,
    "preview": "<div class=\"mdl-cell mdl-cell--12-col mdl-card mdl-shadow--4dp\">\n    <div class=\"mdl-card__title\">\n        <h2 class=\"md"
  },
  {
    "path": "platforms/android/assets/www/partial/app-settings.html",
    "chars": 2080,
    "preview": "<div class=\"mdl-cell mdl-cell--12-col mdl-card mdl-shadow--4dp\">\n    <div class=\"mdl-card__title\">\n        <h2 class=\"md"
  },
  {
    "path": "platforms/android/assets/www/partial/dashboard.html",
    "chars": 7010,
    "preview": "<div class=\"centered-element\">\n    <div id=\"ads_blocked_today\" class=\"pihole-card pihole-card-floating mdl-card mdl-shad"
  },
  {
    "path": "platforms/android/assets/www/partial/query-log.html",
    "chars": 854,
    "preview": "<p class=\"please-rotate mdl-typography--text-center\">\n    <span class=\"mdl-chip mdl-chip--contact\">\n        <span class="
  },
  {
    "path": "platforms/android/assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js",
    "chars": 1173,
    "preview": "cordova.define(\"cordova-plugin-splashscreen.SplashScreen\", function(require, exports, module) {\n/*\n *\n * Licensed to the"
  },
  {
    "path": "platforms/android/assets/www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js",
    "chars": 4586,
    "preview": "cordova.define(\"phonegap-plugin-barcodescanner.BarcodeScanner\", function(require, exports, module) {\n/**\n * cordova is a"
  },
  {
    "path": "platforms/android/build.gradle",
    "chars": 11082,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/cordova/.jshintrc",
    "chars": 162,
    "preview": "{\n    \"node\": true\n  , \"bitwise\": true\n  , \"undef\": true\n  , \"trailing\": true\n  , \"quotmark\": true\n  , \"indent\": 4\n  , \""
  },
  {
    "path": "platforms/android/cordova/Api.js",
    "chars": 16594,
    "preview": "/**\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/cordova/android_sdk_version",
    "chars": 1056,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/android_sdk_version.bat",
    "chars": 1039,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/build",
    "chars": 1646,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/build.bat",
    "chars": 1010,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/check_reqs",
    "chars": 1160,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/check_reqs.bat",
    "chars": 1021,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/clean",
    "chars": 1705,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/clean.bat",
    "chars": 1010,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/defaults.xml",
    "chars": 1038,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n Licensed to the Apache Software Foundation (ASF) under one\n or more contrib"
  },
  {
    "path": "platforms/android/cordova/lib/Adb.js",
    "chars": 4355,
    "preview": "/**\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/cordova/lib/AndroidManifest.js",
    "chars": 5406,
    "preview": "/**\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/cordova/lib/AndroidProject.js",
    "chars": 7887,
    "preview": "/**\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/cordova/lib/AndroidStudio.js",
    "chars": 1350,
    "preview": "/*\n *  This is a simple routine that checks if project is an Android Studio Project\n *\n *  @param {String} root Root fol"
  },
  {
    "path": "platforms/android/cordova/lib/android_sdk.js",
    "chars": 4992,
    "preview": "\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  S"
  },
  {
    "path": "platforms/android/cordova/lib/build.js",
    "chars": 11767,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/builders/AntBuilder.js",
    "chars": 5832,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/cordova/lib/builders/GenericBuilder.js",
    "chars": 4895,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/cordova/lib/builders/GradleBuilder.js",
    "chars": 11601,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/cordova/lib/builders/builders.js",
    "chars": 1767,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/cordova/lib/check_reqs.js",
    "chars": 19812,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/device.js",
    "chars": 4810,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/emulator.js",
    "chars": 22338,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/install-device",
    "chars": 1510,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/install-device.bat",
    "chars": 1036,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/install-emulator",
    "chars": 1353,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/install-emulator.bat",
    "chars": 1040,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/list-devices",
    "chars": 1265,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/list-devices.bat",
    "chars": 1032,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/list-emulator-images",
    "chars": 1289,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/list-emulator-images.bat",
    "chars": 1050,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/list-started-emulators",
    "chars": 1285,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/list-started-emulators.bat",
    "chars": 1052,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/log.js",
    "chars": 1938,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/plugin-build.gradle",
    "chars": 2244,
    "preview": "/* Licensed to the Apache Software Foundation (ASF) under one\n   or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/lib/pluginHandlers.js",
    "chars": 12548,
    "preview": "/*\n *\n * Copyright 2013 Anis Kadri\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
  },
  {
    "path": "platforms/android/cordova/lib/prepare.js",
    "chars": 19278,
    "preview": "/**\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/cordova/lib/retry.js",
    "chars": 2470,
    "preview": "#!/usr/bin/env node\n\n/*\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license a"
  },
  {
    "path": "platforms/android/cordova/lib/run.js",
    "chars": 5819,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/start-emulator",
    "chars": 1352,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/lib/start-emulator.bat",
    "chars": 1036,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/log",
    "chars": 1225,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/log.bat",
    "chars": 1006,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/loggingHelper.js",
    "chars": 479,
    "preview": "var CordovaLogger = require('cordova-common').CordovaLogger;\n\nmodule.exports = {\n    adjustLoggerLevel: function (opts) "
  },
  {
    "path": "platforms/android/cordova/run",
    "chars": 1699,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/run.bat",
    "chars": 1006,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/cordova/version",
    "chars": 1017,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/android/cordova/version.bat",
    "chars": 1015,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/android/phonegap-plugin-barcodescanner/piholedroid-barcodescanner.gradle",
    "chars": 559,
    "preview": "def DEFAULT_MIN_SDK_VERSION = 15\ndef minSdk = Math.max(DEFAULT_MIN_SDK_VERSION, cdvHelpers.getConfigPreference('android-"
  },
  {
    "path": "platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js",
    "chars": 1322,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js",
    "chars": 1441,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/android/platform_www/cordova-js-src/exec.js",
    "chars": 11143,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/platform_www/cordova-js-src/platform.js",
    "chars": 4924,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/platform_www/cordova-js-src/plugin/android/app.js",
    "chars": 4005,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/android/platform_www/cordova.js",
    "chars": 72751,
    "preview": "// Platform: android\n// 7c5fcc5a5adfbf3fb8ceaf36fbdd4bd970bd9c20\n/*\n Licensed to the Apache Software Foundation (ASF) un"
  },
  {
    "path": "platforms/android/platform_www/cordova_plugins.js",
    "chars": 894,
    "preview": "cordova.define('cordova/plugin_list', function(require, exports, module) {\nmodule.exports = [\n    {\n        \"id\": \"cordo"
  },
  {
    "path": "platforms/android/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js",
    "chars": 1173,
    "preview": "cordova.define(\"cordova-plugin-splashscreen.SplashScreen\", function(require, exports, module) {\n/*\n *\n * Licensed to the"
  },
  {
    "path": "platforms/android/platform_www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js",
    "chars": 4586,
    "preview": "cordova.define(\"phonegap-plugin-barcodescanner.BarcodeScanner\", function(require, exports, module) {\n/**\n * cordova is a"
  },
  {
    "path": "platforms/android/project.properties",
    "chars": 690,
    "preview": "# This file is automatically generated by Android Tools.\n# Do not modify this file -- YOUR CHANGES WILL BE ERASED!\n#\n# T"
  },
  {
    "path": "platforms/android/res/values/strings.xml",
    "chars": 238,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<resources>\n    <string name=\"app_name\">Pi-hole Droid</string>\n    <string name=\""
  },
  {
    "path": "platforms/android/res/xml/config.xml",
    "chars": 1907,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<widget id=\"friimaind.piholedroid\" version=\"1.0.4\" xmlns=\"http://www.w3.org/ns/wi"
  },
  {
    "path": "platforms/android/settings.gradle",
    "chars": 66,
    "preview": "// GENERATED FILE - DO NOT EDIT\ninclude \":\"\ninclude \":CordovaLib\"\n"
  },
  {
    "path": "platforms/android/src/com/phonegap/plugins/barcodescanner/BarcodeScanner.java",
    "chars": 12567,
    "preview": "/**\n * PhoneGap is available under *either* the terms of the modified BSD license *or* the\n * MIT License (2008). See ht"
  },
  {
    "path": "platforms/android/src/friimaind/piholedroid/MainActivity.java",
    "chars": 1454,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/src/org/apache/cordova/BuildHelper.java",
    "chars": 2476,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/src/org/apache/cordova/PermissionHelper.java",
    "chars": 7542,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/src/org/apache/cordova/splashscreen/SplashScreen.java",
    "chars": 15827,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/src/org/apache/cordova/whitelist/WhitelistPlugin.java",
    "chars": 6317,
    "preview": "/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor license agreements.  See"
  },
  {
    "path": "platforms/android/wrapper.gradle",
    "chars": 44,
    "preview": "//This file is intentionally just a comment\n"
  },
  {
    "path": "platforms/browser/browser.json",
    "chars": 2236,
    "preview": "{\n    \"prepare_queue\": {\n        \"installed\": [],\n        \"uninstalled\": []\n    },\n    \"config_munge\": {\n        \"files\""
  },
  {
    "path": "platforms/browser/config.xml",
    "chars": 1118,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<widget id=\"friimaind.piholedroid\" version=\"1.0.4\" xmlns=\"http://www.w3.org/ns/wi"
  },
  {
    "path": "platforms/browser/cordova/build",
    "chars": 1199,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/browser/cordova/build.bat",
    "chars": 1011,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/browser/cordova/clean",
    "chars": 1368,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/browser/cordova/defaults.xml",
    "chars": 1048,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<!--\n       Licensed to the Apache Software Foundation (ASF) under one\n       or "
  },
  {
    "path": "platforms/browser/cordova/lib/build.js",
    "chars": 2154,
    "preview": "#!/usr/bin/env node\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agr"
  },
  {
    "path": "platforms/browser/cordova/lib/check_reqs.js",
    "chars": 918,
    "preview": "#!/usr/bin/env node\n\n/*\nLicensed to the Apache Software Foundation (ASF) under one\nor more contributor license agreement"
  },
  {
    "path": "platforms/browser/cordova/lib/clean.js",
    "chars": 1559,
    "preview": "#!/usr/bin/env node\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agr"
  },
  {
    "path": "platforms/browser/cordova/run",
    "chars": 2690,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/browser/cordova/run.bat",
    "chars": 1007,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/browser/cordova/version",
    "chars": 954,
    "preview": "#!/usr/bin/env node\n\n/*\n       Licensed to the Apache Software Foundation (ASF) under one\n       or more contributor lic"
  },
  {
    "path": "platforms/browser/cordova/version.bat",
    "chars": 1015,
    "preview": ":: Licensed to the Apache Software Foundation (ASF) under one\n:: or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "platforms/browser/css/index.css",
    "chars": 3719,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/browser/index.html",
    "chars": 1932,
    "preview": "<!DOCTYPE html>\n<!--\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agre"
  },
  {
    "path": "platforms/browser/js/index.js",
    "chars": 1914,
    "preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOT"
  },
  {
    "path": "platforms/browser/manifest.webapp",
    "chars": 193,
    "preview": "{\n  \"name\": \"My App\",\n  \"description\": \"Description of your app\",\n  \"launch_path\": \"/index.html\",\n  \"icons\": {\n    \"128\""
  },
  {
    "path": "platforms/browser/platform_www/confighelper.js",
    "chars": 3049,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/cordova-js-src/confighelper.js",
    "chars": 3049,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/cordova-js-src/exec.js",
    "chars": 4789,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/cordova-js-src/platform.js",
    "chars": 1602,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/cordova.js",
    "chars": 59083,
    "preview": "// Platform: browser\n// c517ca811b4948b630e0b74dbae6c9637939da24\n/*\n Licensed to the Apache Software Foundation (ASF) un"
  },
  {
    "path": "platforms/browser/platform_www/cordova_plugins.js",
    "chars": 1340,
    "preview": "cordova.define('cordova/plugin_list', function(require, exports, module) {\nmodule.exports = [\n    {\n        \"file\": \"plu"
  },
  {
    "path": "platforms/browser/platform_www/exec.js",
    "chars": 4789,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/platform.js",
    "chars": 1602,
    "preview": "/*\n *\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the "
  },
  {
    "path": "platforms/browser/platform_www/plugins/cordova-plugin-splashscreen/src/browser/SplashScreenProxy.js",
    "chars": 4878,
    "preview": "cordova.define(\"cordova-plugin-splashscreen.SplashScreenProxy\", function(require, exports, module) { /*\n *\n * Licensed t"
  },
  {
    "path": "platforms/browser/platform_www/plugins/cordova-plugin-splashscreen/www/splashscreen.js",
    "chars": 1173,
    "preview": "cordova.define(\"cordova-plugin-splashscreen.SplashScreen\", function(require, exports, module) { /*\n *\n * Licensed to the"
  },
  {
    "path": "platforms/browser/platform_www/plugins/phonegap-plugin-barcodescanner/src/browser/BarcodeScannerProxy.js",
    "chars": 639,
    "preview": "cordova.define(\"phonegap-plugin-barcodescanner.BarcodeScannerProxy\", function(require, exports, module) { function scan("
  },
  {
    "path": "platforms/browser/platform_www/plugins/phonegap-plugin-barcodescanner/www/barcodescanner.js",
    "chars": 4586,
    "preview": "cordova.define(\"phonegap-plugin-barcodescanner.BarcodeScanner\", function(require, exports, module) { /**\n * cordova is a"
  },
  {
    "path": "platforms/browser/www/config.xml",
    "chars": 1118,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<widget id=\"friimaind.piholedroid\" version=\"1.0.4\" xmlns=\"http://www.w3.org/ns/wi"
  }
]

// ... and 222 more files (download for full content)

About this extraction

This page contains the full source code of the friimaind/pi-hole-droid GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 422 files (5.3 MB), approximately 1.4M tokens, and a symbol index with 1968 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!