diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 000000000..674b8feb8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,28 @@
+**I'm submitting a ...** (check one with "x")
+[ ] bug report
+[ ] feature request
+[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or https://ionicworldwide.herokuapp.com/
+
+**Current behavior:**
+
+
+**Expected behavior:**
+
+
+**Steps to reproduce:**
+
+
+**Related code:**
+
+```
+insert any relevant code here
+```
+
+**Other information:**
+
+
+**package.json info:**
+
+```json
+insert the content here
+```
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3888cd5be..65006e5d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,86 @@
+
+## [3.8.1](https://github.com/driftyco/ionic-native/compare/v3.8.0...v3.8.1) (2017-05-16)
+
+
+### Bug Fixes
+
+* **document-viewer:** fix params and docs for canViewDocument (#1568) ([b35417a](https://github.com/driftyco/ionic-native/commit/b35417a)), closes [#1568](https://github.com/driftyco/ionic-native/issues/1568)
+* **file:** add toInternalURL (#1561) ([7c79712](https://github.com/driftyco/ionic-native/commit/7c79712)), closes [#1560](https://github.com/driftyco/ionic-native/issues/1560)
+* **file:** fix repo link (#1566) ([adf9c5a](https://github.com/driftyco/ionic-native/commit/adf9c5a)), closes [#1566](https://github.com/driftyco/ionic-native/issues/1566)
+* **file:** various fixes ([d0dec7a](https://github.com/driftyco/ionic-native/commit/d0dec7a)), closes [#1564](https://github.com/driftyco/ionic-native/issues/1564)
+* **sqlite:** fix implementation and improve typings ([fec19b7](https://github.com/driftyco/ionic-native/commit/fec19b7))
+
+
+### Features
+
+* **mix-panel:** add timeEvent (#1536) ([965a90c](https://github.com/driftyco/ionic-native/commit/965a90c))
+
+
+
+
+# [3.8.0](https://github.com/driftyco/ionic-native/compare/v3.7.0...v3.8.0) (2017-05-14)
+
+
+### Bug Fixes
+
+* **app-minimize:** fix pluginRef ([10d61c2](https://github.com/driftyco/ionic-native/commit/10d61c2))
+* **diagnostic:** fix Cordova decorator in camera API (#1527) ([45108c4](https://github.com/driftyco/ionic-native/commit/45108c4)), closes [#1527](https://github.com/driftyco/ionic-native/issues/1527)
+* **fcm:** fix method name (#1531) ([ad514bb](https://github.com/driftyco/ionic-native/commit/ad514bb)), closes [#1531](https://github.com/driftyco/ionic-native/issues/1531)
+* **file:** fix file reader (#1537) ([efae1be](https://github.com/driftyco/ionic-native/commit/efae1be)), closes [#1537](https://github.com/driftyco/ionic-native/issues/1537) [#1530](https://github.com/driftyco/ionic-native/issues/1530)
+* **file:** various fixes (#1553) ([f98f90a](https://github.com/driftyco/ionic-native/commit/f98f90a)), closes [#1553](https://github.com/driftyco/ionic-native/issues/1553)
+
+
+### Features
+
+* **video-capture-plus:** add Video Capture Plus plugin (#1538) ([385da01](https://github.com/driftyco/ionic-native/commit/385da01)), closes [#709](https://github.com/driftyco/ionic-native/issues/709)
+
+
+
+
+# [3.7.0](https://github.com/driftyco/ionic-native/compare/v3.6.1...v3.7.0) (2017-05-09)
+
+
+### Bug Fixes
+
+* **app-preferences:** value can be any type (#1498) ([c7111a3](https://github.com/driftyco/ionic-native/commit/c7111a3)), closes [#1334](https://github.com/driftyco/ionic-native/issues/1334)
+* **background-mode:** add missing method (#1486) ([e6a647b](https://github.com/driftyco/ionic-native/commit/e6a647b)), closes [#1393](https://github.com/driftyco/ionic-native/issues/1393)
+* **build:** fix build errors (#1472) ([8a445e9](https://github.com/driftyco/ionic-native/commit/8a445e9)), closes [#1472](https://github.com/driftyco/ionic-native/issues/1472)
+* **document-viewer:** fix params ([1379f63](https://github.com/driftyco/ionic-native/commit/1379f63))
+* **flurry-analytics:** fix plugin wrapper ([14959c1](https://github.com/driftyco/ionic-native/commit/14959c1))
+* **flurry-analytics:** fix pluginRef (#1485) ([ce72be7](https://github.com/driftyco/ionic-native/commit/ce72be7)), closes [#1485](https://github.com/driftyco/ionic-native/issues/1485) [#1399](https://github.com/driftyco/ionic-native/issues/1399)
+* **globalization:** getDatePattern return types (#1451) ([6e2fdf9](https://github.com/driftyco/ionic-native/commit/6e2fdf9))
+* **google-maps:** add args to panBy (#1507) ([ec85792](https://github.com/driftyco/ionic-native/commit/ec85792))
+* **google-maps:** fix fromPointToLatLng params (#1514) ([9583802](https://github.com/driftyco/ionic-native/commit/9583802)), closes [#1514](https://github.com/driftyco/ionic-native/issues/1514)
+* **native-storage:** add missing keys method (#1495) ([8311aaf](https://github.com/driftyco/ionic-native/commit/8311aaf)), closes [#1415](https://github.com/driftyco/ionic-native/issues/1415)
+* **web-intent:** updated source (#1519) ([252c3e4](https://github.com/driftyco/ionic-native/commit/252c3e4)), closes [#1517](https://github.com/driftyco/ionic-native/issues/1517)
+
+
+### Features
+
+* **android-fingerprint-auth:** add ERRORS constant (#1470) ([ed6044d](https://github.com/driftyco/ionic-native/commit/ed6044d))
+* **android-premissions:** add Android Permissions plugin (#1508) ([5ee79b4](https://github.com/driftyco/ionic-native/commit/5ee79b4)), closes [#929](https://github.com/driftyco/ionic-native/issues/929)
+* **app-minimize:** add AppMinimize plugin (#1501) ([d25b2f1](https://github.com/driftyco/ionic-native/commit/d25b2f1))
+* **camera-preview:** add new focus methods & getFlashMode() (#1442) ([748c6bd](https://github.com/driftyco/ionic-native/commit/748c6bd))
+* **camera-preview:** add tapToFocus method (#1494) ([8330c92](https://github.com/driftyco/ionic-native/commit/8330c92))
+* **diagnostic:** update to support latest signatures (#1458) ([a4151ab](https://github.com/driftyco/ionic-native/commit/a4151ab))
+* **facebook:** add EVENTS constant (#1510) ([aa9826f](https://github.com/driftyco/ionic-native/commit/aa9826f))
+* **fcm:** support Firebase Cloud Messaging plugin (#1449) ([6cc6393](https://github.com/driftyco/ionic-native/commit/6cc6393))
+* **firebase:** add support for firebase ErrorLog (#1440) ([11dbe42](https://github.com/driftyco/ionic-native/commit/11dbe42))
+* **health-kit:** add HealthKit plugin (#1499) ([14f38a0](https://github.com/driftyco/ionic-native/commit/14f38a0))
+* **intercom:** add Intercom plugin (#1504) ([ce2cc1b](https://github.com/driftyco/ionic-native/commit/ce2cc1b))
+* **mobile-accessibility:** add Mobile Accessibility plugin (#1505) ([4e9b2d9](https://github.com/driftyco/ionic-native/commit/4e9b2d9)), closes [#1304](https://github.com/driftyco/ionic-native/issues/1304)
+* **native-page-transitions:** add pendingTransition methods (#1344) ([f699c6d](https://github.com/driftyco/ionic-native/commit/f699c6d))
+* **native-ringtones:** add Native Ringtones plugin (#1488) ([21c9cd2](https://github.com/driftyco/ionic-native/commit/21c9cd2))
+* **phonegap-local-notifications:** add Phonegap local notifications plugin (#1474) ([3d747d3](https://github.com/driftyco/ionic-native/commit/3d747d3))
+* **plugin:** add Document Viewer plugin (#1520) ([6855fe8](https://github.com/driftyco/ionic-native/commit/6855fe8))
+* **plugin:** add File encryption plugin (#1509) ([46b4e25](https://github.com/driftyco/ionic-native/commit/46b4e25)), closes [#618](https://github.com/driftyco/ionic-native/issues/618)
+* **safari-view-controller:** add missing options (#1490) ([a5b2e98](https://github.com/driftyco/ionic-native/commit/a5b2e98)), closes [#1489](https://github.com/driftyco/ionic-native/issues/1489)
+* **social-sharing:** add setIPadPopupCoordinates method (#1497) ([65a8095](https://github.com/driftyco/ionic-native/commit/65a8095)), closes [#1288](https://github.com/driftyco/ionic-native/issues/1288)
+* **touch-id:** add didFingerprintDatabaseChange (#1475) ([d9cc959](https://github.com/driftyco/ionic-native/commit/d9cc959)), closes [#1466](https://github.com/driftyco/ionic-native/issues/1466)
+* **wheel-selector:** add Native wheel Selector plugin (#1522) ([8fe4eec](https://github.com/driftyco/ionic-native/commit/8fe4eec))
+
+
+
## [3.6.1](https://github.com/driftyco/ionic-native/compare/v3.6.0...v3.6.1) (2017-04-27)
diff --git a/README.md b/README.md
index 4f4aebbad..ff2b92835 100644
--- a/README.md
+++ b/README.md
@@ -3,22 +3,22 @@
# Ionic Native
-Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic 2](http://ionicframework.com/) mobile app easy.
+Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your [Ionic](https://ionicframework.com/) mobile app easy.
Ionic Native wraps plugin callbacks in a Promise or Observable, providing a common interface for all plugins and making it easy to use plugins with Angular change detection.
## Installation
Run following command to install Ionic Native in your project.
-```
+```bash
npm install @ionic-native/core --save
```
-You also need to install the Ionic Native package for each plugin you want to add. Please see the [Ionic Native documentation](http://ionicframework.com/docs/native/) for complete instructions on how to add and use the plugins.
+You also need to install the Ionic Native package for each plugin you want to add. Please see the [Ionic Native documentation](https://ionicframework.com/docs/native/) for complete instructions on how to add and use the plugins.
## Documentation
-For the full Ionic Native documentation, please visit [http://ionicframework.com/docs/native/](http://ionicframework.com/docs/native/).
+For the full Ionic Native documentation, please visit [https://ionicframework.com/docs/native/](https://ionicframework.com/docs/native/).
### Basic Usage
@@ -95,13 +95,13 @@ To do this, you need to provide a mock implementation of the plugins you wish to
First import the `Camera` class in your `src/app/app.module.ts` file:
-```ts
+```typescript
import { Camera } from '@ionic-native/camera';
```
Then create a new class that extends the `Camera` class with a mock implementation:
-```ts
+```typescript
class CameraMock extends Camera {
getPicture(options) {
return new Promise((resolve, reject) => {
@@ -113,7 +113,7 @@ class CameraMock extends Camera {
Finally, override the previous `Camera` class in your `providers` for this module:
-```ts
+```typescript
providers: [
{ provide: Camera, useClass: CameraMock }
]
@@ -121,8 +121,9 @@ providers: [
Here's the full example:
-```ts
+```typescript
import { NgModule, ErrorHandler } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
@@ -143,6 +144,7 @@ class CameraMock extends Camera {
HomePage
],
imports: [
+ BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
@@ -163,24 +165,24 @@ export class AppModule {}
Spent way too long diagnosing an issue only to realize a plugin wasn't firing or installed? Ionic Native lets you know what the issue is and how you can resolve it.
-
+
## Plugin Missing?
Let us know or submit a PR! Take a look at [the Developer Guide](https://github.com/driftyco/ionic-native/blob/master/DEVELOPER.md) for more on how to contribute. :heart:
-## Ionic 1/Angular 1 support
+## Ionic V1/Angular 1 support
-Ionic Native 3.x supports Ionic 2.x and above. For Ionic/Angular 1 support, please use version 2 of Ionic Native. See the [2.x README](https://github.com/driftyco/ionic-native/blob/8cd648db5cddd7bdbe2bd78839b19c620cc8c04c/README.md) for usage information.
+For Ionic V1/Angular 1 support, please use version 2 of Ionic Native. See the [2.x README](https://github.com/driftyco/ionic-native/blob/8cd648db5cddd7bdbe2bd78839b19c620cc8c04c/README.md) for usage information.
# Credits
-Ibby Hadeed - [@ihadeed](http://github.com/ihadeed)
+Ibby Hadeed - [@ihadeed](https://github.com/ihadeed)
-Tim Lancina - [@timlancina](http://twitter.com/timlancina)
+Tim Lancina - [@timlancina](https://twitter.com/timlancina)
Mike Hartington - [@mhartington](https://twitter.com/mhartington)
-Max Lynch - [@maxlynch](http://twitter.com/maxlynch)
+Max Lynch - [@maxlynch](https://twitter.com/maxlynch)
Rob Wormald - [@robwormald](https://twitter.com/robwormald)
diff --git a/circle.yml b/circle.yml
index 9c84bee8d..bbeb054a2 100644
--- a/circle.yml
+++ b/circle.yml
@@ -7,12 +7,15 @@ jobs:
steps:
- checkout
- restore_cache:
- key: ionic-site
+ key: ionic-site-{{ .Branch }}
- run:
name: Prepare ionic-site repo
- command: ./scripts/docs/prepare.sh
+ command: |
+ if [ "${CIRCLE_BRANCH}" == "master" ]; then
+ ./scripts/docs/prepare.sh
+ fi
- save_cache:
- key: ionic-site
+ key: ionic-site-{{ .Branch }}
paths:
- ~/ionic-site/
- restore_cache:
@@ -27,6 +30,12 @@ jobs:
- run:
name: Run tslint
command: npm run lint
+ - run:
+ name: Build changed plugins
+ command: node scripts/ci-tests.js
+ - run:
+ name: Run tests
+ command: npm test
- add_ssh_keys
- deploy:
name: Update docs
diff --git a/gulpfile.js b/gulpfile.js
index c2e6c1168..1bf2f98a2 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -34,14 +34,16 @@ gulp.task('plugin:create', () => {
const src = flags.m ? './scripts/templates/wrap-min.tmpl':'./scripts/templates/wrap.tmpl',
pluginName = flags.n,
- pluginNameSpaced = pluginName.replace(/(?!^)([A-Z])/g, ' $1');
+ spaced = pluginName.replace(/(?!^)([A-Z])/g, ' $1'),
+ kebabCase = _.kebabCase(pluginName);
return gulp.src(src)
- .pipe(replace('$PluginName', pluginName))
- .pipe(replace('$Plugin_Name', pluginNameSpaced))
- .pipe(replace('$pluginName', _.lowerFirst(pluginName)))
+ .pipe(replace('{{ PluginName }}', pluginName))
+ .pipe(replace('{{ Plugin_Name }}', spaced))
+ .pipe(replace('{{ pluginName }}', _.lowerFirst(pluginName)))
+ .pipe(replace('{{ plugin-name }}', kebabCase))
.pipe(rename('index.ts'))
- .pipe(gulp.dest('./src/@ionic-native/plugins/' + _.kebabCase(pluginName)));
+ .pipe(gulp.dest('./src/@ionic-native/plugins/' + kebabCase));
} else {
console.log("Usage is: gulp plugin:create -n PluginName");
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 000000000..eb10d4d9c
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,55 @@
+"use strict";
+
+module.exports = config => {
+
+ const conf = {
+ frameworks: [
+ 'jasmine',
+ 'karma-typescript'
+ ],
+
+ plugins: [
+ 'karma-typescript',
+ 'karma-jasmine',
+ 'karma-phantomjs-launcher'
+ ],
+
+ preprocessors: {
+ 'src/**/*.ts': ['karma-typescript']
+ },
+
+ karmaTypescriptConfig: {
+ bundlerOptions: {
+ entrypoints: /\.spec\.ts$/,
+ transforms: [
+ require("karma-typescript-es6-transform")()
+ ]
+ },
+ compilerOptions: {
+ lib: ['es2015', 'dom'],
+ paths: {
+ "@ionic-native/core": ["./src/@ionic-native/core"]
+ },
+ baseUrl: '.'
+ }
+ },
+
+ files: [
+ { pattern: 'src/**/*.ts', included: true, watched: true }
+ ],
+
+ reporters: ['progress'],
+
+ port: 9876,
+ colors: true,
+ logLevel: config.INFO,
+ autoWatch: true,
+ browsers: [
+ 'PhantomJS'
+ ],
+ singleRun: false
+ };
+
+ config.set(conf);
+
+};
diff --git a/package.json b/package.json
index 15f9a1edd..76e2b528e 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,15 @@
{
"name": "ionic-native",
- "version": "3.6.1",
+ "version": "3.8.1",
"description": "Native plugin wrappers for Cordova and Ionic with TypeScript, ES6+, Promise and Observable support",
"license": "MIT",
"devDependencies": {
- "@angular/compiler": "4.0.0",
- "@angular/compiler-cli": "4.0.0",
- "@angular/core": "4.0.0",
+ "@angular/compiler": "4.1.2",
+ "@angular/compiler-cli": "4.1.2",
+ "@angular/core": "4.1.2",
+ "@types/cordova": "0.0.34",
+ "@types/jasmine": "^2.5.47",
+ "@types/node": "^7.0.18",
"canonical-path": "0.0.2",
"child-process-promise": "2.2.0",
"conventional-changelog-cli": "1.2.0",
@@ -21,6 +24,13 @@
"gulp-rename": "1.2.2",
"gulp-replace": "0.5.4",
"gulp-tslint": "6.1.2",
+ "jasmine-core": "^2.6.1",
+ "karma": "^1.7.0",
+ "karma-cli": "^1.0.1",
+ "karma-jasmine": "^1.1.0",
+ "karma-phantomjs-launcher": "^1.0.4",
+ "karma-typescript": "^3.0.1",
+ "karma-typescript-es6-transform": "^1.0.0",
"lodash": "4.17.4",
"minimist": "1.1.3",
"node-html-encoder": "0.0.2",
@@ -30,9 +40,9 @@
"rxjs": "5.1.1",
"semver": "5.3.0",
"tslint": "3.15.1",
- "tslint-ionic-rules": "0.0.7",
- "typescript": "2.2.1",
- "zone.js": "^0.8.4"
+ "tslint-ionic-rules": "0.0.8",
+ "typescript": "2.3.2",
+ "zone.js": "^0.8.10"
},
"scripts": {
"start": "npm run test:watch",
@@ -44,7 +54,9 @@
"shipit": "npm run build && gulp readmes && npm run npmpub",
"npmpub": "node scripts/build/publish.js",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
- "postchangelog": "git commit -am \"chore(): update changelog\""
+ "postchangelog": "git commit -am \"chore(): update changelog\"",
+ "test": "karma start karma.conf.js --single-run",
+ "test:watch": "karma start karma.conf.js"
},
"config": {
"commitizen": {
diff --git a/scripts/build/build.js b/scripts/build/build.js
index a54ca9174..dd8353427 100644
--- a/scripts/build/build.js
+++ b/scripts/build/build.js
@@ -52,6 +52,16 @@ const PLUGINS = fs.readdirSync(PLUGINS_PATH);
// Build specific list of plugins to build from arguments, if any
let pluginsToBuild = process.argv.slice(2);
+let ignoreErrors = false;
+let errors = [];
+
+const index = pluginsToBuild.indexOf('ignore-errors');
+if (index > -1) {
+ ignoreErrors = true;
+ pluginsToBuild.splice(index, 1);
+ console.log('Build will continue even if errors were thrown. Errors will be printed when build finishes.');
+}
+
if (!pluginsToBuild.length) {
pluginsToBuild = PLUGINS;
}
@@ -102,10 +112,16 @@ const addPluginToQueue = pluginName => {
exec(`${ROOT}/node_modules/.bin/ngc -p ${tsConfigPath}`, (err, stdout, stderr) => {
if (err) {
- // oops! something went wrong.
- callback(`\n\nBuilding ${pluginName} failed.`);
- console.log(err);
- return;
+
+ if (!ignoreErrors) {
+ // oops! something went wrong.
+ console.log(err);
+ callback(`\n\nBuilding ${pluginName} failed.`);
+ return;
+ } else {
+ errors.push(err);
+ }
+
}
// we're done with this plugin!
@@ -125,7 +141,17 @@ pluginsToBuild.forEach(addPluginToQueue);
QUEUE.start((err) => {
if (err) {
- console.log('Error building plugins. ', err);
+ console.log('Error building plugins.');
+ console.log(err);
+ process.stderr.write(err);
+ process.exit(1);
+ } else if (errors.length) {
+ errors.forEach(e => {
+ console.log(e.message) && console.log('\n');
+ process.stderr.write(err);
+ });
+ console.log('Build complete with errors');
+ process.exit(1);
} else {
console.log('Done processing plugins!');
}
diff --git a/scripts/build/tsconfig-core.json b/scripts/build/tsconfig-core.json
index 44b50a3db..88250a7b8 100644
--- a/scripts/build/tsconfig-core.json
+++ b/scripts/build/tsconfig-core.json
@@ -13,7 +13,8 @@
"skipLibCheck": true,
"lib": ["es2015", "dom"],
"sourceMap": true,
- "inlineSources": true
+ "inlineSources": true,
+ "noImplicitAny": true
},
"files": [
"../../src/@ionic-native/core/index.ts"
diff --git a/scripts/build/tsconfig-plugin.json b/scripts/build/tsconfig-plugin.json
index 3cfd5dca3..3e4a6d6f8 100644
--- a/scripts/build/tsconfig-plugin.json
+++ b/scripts/build/tsconfig-plugin.json
@@ -16,7 +16,8 @@
"skipLibCheck": true,
"lib": ["es2015", "dom"],
"sourceMap": true,
- "inlineSources": true
+ "inlineSources": true,
+ "noImplicitAny": true
},
"files": []
}
diff --git a/scripts/ci-tests.js b/scripts/ci-tests.js
new file mode 100644
index 000000000..d4ff8eea9
--- /dev/null
+++ b/scripts/ci-tests.js
@@ -0,0 +1,65 @@
+const exec = require('child-process-promise').exec;
+let diff;
+exec(`git branch | grep \\* | cut -d ' ' -f2`)
+ .then(output => {
+ if (output.stderr) {
+ return Promise.reject(output.stderr);
+ }
+
+ const branch = output.stdout.trim();
+
+ if (branch !== 'master') {
+
+ console.log('Merging master branch in ...');
+ // not on master branch
+ // let's test the changes that were made
+ return exec(`git merge origin master`);
+ }
+ })
+ .then((output) => {
+ if (output && output.stderr) {
+ return Promise.reject(output.stderr);
+ }
+ console.log('Checking for differences ...');
+ return exec(`git diff --name-status origin master`)
+ })
+ .then((output) => {
+ if (output && output.stderr) {
+ return Promise.reject(output.stderr);
+ }
+
+ diff = output.stdout;
+ diff = diff.replace(/A\s+/g, '');
+ diff = diff.match(/src\/@ionic-native\/plugins\/([a-zA-Z0-9\-]+)\/index\.ts/g);
+
+ if (!diff) process.exit();
+
+ console.log(`${ diff.length } plugins were modified. We will now build them to verify they still work.`);
+
+ return exec('npm run build:core --silent');
+ })
+ .then((output) => {
+
+ if (output && output.stderr) {
+ return Promise.reject(output.stderr);
+ }
+
+ console.log('Built core library successfully ...');
+ console.log('Building plugins ...');
+
+ diff = diff.map(text => text.replace('src/@ionic-native/plugins/', '').replace('/index.ts', ''));
+
+ return exec(`npm run build:modules ${diff.join(' ')} --silent`);
+ })
+ .then((output) => {
+ if (output && output.stderr) {
+ console.log(output.stderr);
+ process.exit(1);
+ }
+ console.log(output.stdout);
+ process.exit();
+ })
+ .catch(e => {
+ console.log(e.message || e);
+ process.exit(1);
+ });
diff --git a/scripts/docs/templates/readme.template.md b/scripts/docs/templates/readme.template.md
index 69fd10d5e..be66fad9c 100644
--- a/scripts/docs/templates/readme.template.md
+++ b/scripts/docs/templates/readme.template.md
@@ -16,7 +16,7 @@
<@ for prop in doc.decorators[0].argumentInfo @>
```
-$ <@ if prop.install @><$ prop.install $><@ else @>ionic plugin add <$ prop.plugin $><@ endif @>
+$ <@ if prop.install @><$ prop.install $><@ else @>ionic cordova plugin add <$ prop.plugin $><@ endif @>
$ npm install --save @ionic-native/<$ doc.npmId $>
```
diff --git a/scripts/templates/wrap-min.tmpl b/scripts/templates/wrap-min.tmpl
index 83aa48ff2..68a6bba1d 100644
--- a/scripts/templates/wrap-min.tmpl
+++ b/scripts/templates/wrap-min.tmpl
@@ -2,15 +2,15 @@ import { Plugin, IonicNativePlugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
/**
- * @name $Plugin_Name
+ * @name {{ Plugin_Name }}
* @description
*
* @usage
* ```
- * import { $PluginName } from 'ionic-native';
+ * import { {{ PluginName }} } from '@ionic-native/{{ plugin-name }}';
*
*
- * constructor(private $pluginName: $PluginName) { }
+ * constructor(private {{ pluginName }}: {{ PluginName }}) { }
*
* ...
*
@@ -18,13 +18,13 @@ import { Injectable } from '@angular/core';
* ```
*/
@Plugin({
- pluginName: '$PluginName',
+ pluginName: '{{ PluginName }}',
plugin: '',
pluginRef: '',
repo: '',
platforms: []
})
@Injectable()
-export class $PluginName extends IonicNativePlugin {
+export class {{ PluginName }} extends IonicNativePlugin {
}
diff --git a/scripts/templates/wrap.tmpl b/scripts/templates/wrap.tmpl
index 596d3442f..8f5228e1a 100644
--- a/scripts/templates/wrap.tmpl
+++ b/scripts/templates/wrap.tmpl
@@ -10,33 +10,33 @@
* - Remove this note
*
*/
-import { Plugin, Cordova, CordovaProperty, CordovaInstance, InstanceProperty, IonicNativePlugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
+import { Plugin, Cordova, CordovaProperty, CordovaInstance, InstanceProperty, IonicNativePlugin } from '@ionic-native/core';
import { Observable } from 'rxjs/Observable';
/**
- * @name $Plugin_Name
+ * @name {{ Plugin_Name }}
* @description
* This plugin does something
*
* @usage
* ```
- * import { $PluginName } from 'ionic-native';
+ * import { {{ PluginName }} } from '@ionic-native/{{ plugin-name }}';
*
*
- * constructor(private $pluginName: $PluginName) { }
+ * constructor(private {{ pluginName }}: {{ PluginName }}) { }
*
* ...
*
*
- * this.$pluginName.functionName('Hello', 123)
+ * this.{{ pluginName }}.functionName('Hello', 123)
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
- pluginName: '$PluginName',
+ pluginName: '{{ PluginName }}',
plugin: '', // npm package name, example: cordova-plugin-camera
pluginRef: '', // the variable reference to call the plugin, example: navigator.geolocation
repo: '', // the github repository URL for the plugin
@@ -44,7 +44,7 @@ import { Observable } from 'rxjs/Observable';
install: '', // OPTIONAL install command, in case the plugin requires variables
})
@Injectable()
-export class $PluginName extends IonicNativePlugin {
+export class {{ PluginName }} extends IonicNativePlugin {
/**
* This function does something
diff --git a/src/@ionic-native/core/bootstrap.ts b/src/@ionic-native/core/bootstrap.ts
index a8557a182..09ac37f15 100644
--- a/src/@ionic-native/core/bootstrap.ts
+++ b/src/@ionic-native/core/bootstrap.ts
@@ -1,5 +1,3 @@
-declare var window;
-
export function checkReady() {
const DEVICE_READY_TIMEOUT = 5000;
@@ -16,7 +14,7 @@ export function checkReady() {
});
setTimeout(() => {
- if (!didFireReady && window.cordova) {
+ if (!didFireReady && !!window.cordova) {
console.warn(`Ionic Native: deviceready did not fire within ${DEVICE_READY_TIMEOUT}ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.`);
}
}, DEVICE_READY_TIMEOUT);
diff --git a/src/@ionic-native/core/decorators.spec.ts b/src/@ionic-native/core/decorators.spec.ts
new file mode 100644
index 000000000..6f47476f8
--- /dev/null
+++ b/src/@ionic-native/core/decorators.spec.ts
@@ -0,0 +1,234 @@
+import 'core-js';
+import { Plugin, Cordova, CordovaProperty, CordovaCheck, CordovaInstance, InstanceProperty } from './decorators';
+import { IonicNativePlugin } from './ionic-native-plugin';
+import { ERR_CORDOVA_NOT_AVAILABLE, ERR_PLUGIN_NOT_INSTALLED } from './plugin';
+
+declare const window: any;
+
+class TestObject {
+
+ constructor(public _objectInstance: any) {}
+
+ @InstanceProperty
+ name: string;
+
+ @CordovaInstance({ sync: true })
+ pingSync(): string { return; }
+
+ @CordovaInstance()
+ ping(): Promise { return; }
+
+}
+
+@Plugin({
+ pluginName: 'TestPlugin',
+ pluginRef: 'testPlugin',
+ repo: '',
+ plugin: 'cordova-plugin-my-plugin'
+})
+class TestPlugin extends IonicNativePlugin {
+
+ @CordovaProperty
+ name: string;
+
+ @Cordova({ sync: true })
+ pingSync(): string { return; }
+
+ @Cordova()
+ ping(): Promise { return; }
+
+ @CordovaCheck()
+ customPing(): Promise {
+ return Promise.resolve('pong');
+ }
+
+ create(): TestObject {
+ return new TestObject(TestPlugin.getPlugin().create());
+ }
+
+}
+
+function definePlugin() {
+ (window as any).testPlugin = {
+ name: 'John Smith',
+ ping: (success: Function, error: Function) => success('pong'),
+ pingSync: () => 'pong',
+ create: function TestObject() {
+ this.pingSync = () => 'pong';
+ this.ping = (success: Function, error: Function) => success('pong');
+ this.name = 'John Smith';
+ return this;
+ }
+ };
+}
+
+describe('Regular Decorators', () => {
+
+ let plugin: TestPlugin;
+
+ beforeEach(() => {
+ plugin = new TestPlugin();
+ definePlugin();
+ });
+
+ describe('Plugin', () => {
+
+ it('should set pluginName', () => {
+ expect(TestPlugin.getPluginName()).toEqual('TestPlugin');
+ });
+
+ it('should set pluginRef', () => {
+ expect(TestPlugin.getPluginRef()).toEqual('testPlugin');
+ });
+
+ it('should return original plugin object', () => {
+ expect(TestPlugin.getPlugin()).toEqual(window.testPlugin);
+ });
+
+ });
+
+ describe('Cordova', () => {
+
+ it('should do a sync function', () => {
+ expect(plugin.pingSync()).toEqual('pong');
+ });
+
+ it('should do an async function', (done: Function) => {
+ plugin.ping()
+ .then(res => {
+ expect(res).toEqual('pong');
+ done();
+ })
+ .catch(e => {
+ expect(e).toBeUndefined();
+ done('Method should have resolved');
+ });
+ });
+
+ it('should throw plugin_not_installed error', (done: Function) => {
+
+ delete window.testPlugin;
+ window.cordova = true;
+
+ expect(plugin.pingSync()).toEqual(ERR_PLUGIN_NOT_INSTALLED);
+
+ plugin.ping()
+ .catch(e => {
+ expect(e).toEqual(ERR_PLUGIN_NOT_INSTALLED.error);
+ delete window.cordova;
+ done();
+ });
+
+ });
+
+ it('should throw cordova_not_available error', (done: Function) => {
+
+ delete window.testPlugin;
+
+ expect(plugin.pingSync()).toEqual(ERR_CORDOVA_NOT_AVAILABLE);
+
+ plugin.ping()
+ .catch(e => {
+ expect(e).toEqual(ERR_CORDOVA_NOT_AVAILABLE.error);
+ done();
+ });
+
+ });
+
+ });
+
+ describe('CordovaProperty', () => {
+
+ it('should return property value', () => {
+ expect(plugin.name).toEqual('John Smith');
+ });
+
+ it('should set property value', () => {
+ plugin.name = 'value2';
+ expect(plugin.name).toEqual('value2');
+ });
+
+ });
+
+ describe('CordovaCheck', () => {
+
+ it('should run the method when plugin exists', (done) => {
+ plugin.customPing()
+ .then(res => {
+ expect(res).toEqual('pong');
+ done();
+ });
+ });
+
+ it('shouldnt run the method when plugin doesnt exist', (done) => {
+ delete window.testPlugin;
+ window.cordova = true;
+ plugin.customPing()
+ .catch(e => {
+ expect(e).toEqual(ERR_PLUGIN_NOT_INSTALLED.error);
+ done();
+ });
+ });
+
+ });
+
+});
+
+describe('Instance Decorators', () => {
+
+ let instance: TestObject,
+ plugin: TestPlugin;
+
+ beforeEach(() => {
+ definePlugin();
+ plugin = new TestPlugin();
+ instance = plugin.create();
+ });
+
+ describe('Instance plugin', () => {
+
+
+
+ });
+
+ describe('CordovaInstance', () => {
+
+ it('should call instance async method', (done) => {
+ instance.ping()
+ .then(r => {
+ expect(r).toEqual('pong');
+ done();
+ });
+ });
+
+ it('should call instance sync method', () => {
+ expect(instance.pingSync()).toEqual('pong');
+ });
+
+ it('shouldnt call instance method when _objectInstance is undefined', () => {
+
+ delete instance._objectInstance;
+ instance.ping()
+ .then(r => {
+ expect(r).toBeUndefined();
+ })
+ .catch(e => {
+ expect(e).toBeUndefined();
+ });
+
+ });
+
+ });
+
+ describe('InstanceProperty', () => {
+ it('should return property value', () => {
+ expect(instance.name).toEqual('John Smith');
+ });
+
+ it('should set property value', () => {
+ instance.name = 'John Cena';
+ expect(instance.name).toEqual('John Cena');
+ });
+ });
+
+});
diff --git a/src/@ionic-native/core/decorators.ts b/src/@ionic-native/core/decorators.ts
index 00d665eb3..3429c74c0 100644
--- a/src/@ionic-native/core/decorators.ts
+++ b/src/@ionic-native/core/decorators.ts
@@ -32,6 +32,8 @@ export interface PluginConfig {
* Supported platforms
*/
platforms?: string[];
+
+ [key: string]: any;
}
export interface CordovaOptions {
@@ -127,10 +129,10 @@ export function InstanceCheck(opts: CordovaCheckOptions = {}) {
if (opts.sync) {
return;
} else if (opts.observable) {
- return new Observable(() => {});
+ return new Observable(() => { });
}
- return getPromise(() => {});
+ return getPromise(() => { });
}
}
@@ -182,12 +184,12 @@ export function CordovaCheck(opts: CordovaCheckOptions = {}) {
* }
* ```
*/
-export function Plugin(config: PluginConfig) {
- return function(cls) {
+export function Plugin(config: PluginConfig): ClassDecorator {
+ return function(cls: any) {
// Add these fields to the class
- for (let k in config) {
- cls[k] = config[k];
+ for (let prop in config) {
+ cls[prop] = config[prop];
}
cls['installed'] = function(printWarning?: boolean) {
@@ -290,10 +292,10 @@ export function CordovaProperty(target: any, key: string) {
export function InstanceProperty(target: any, key: string) {
Object.defineProperty(target, key, {
enumerable: true,
- get: function(){
+ get: function() {
return this._objectInstance[key];
},
- set: function(value){
+ set: function(value) {
this._objectInstance[key] = value;
}
});
diff --git a/src/@ionic-native/core/ionic-native-plugin.ts b/src/@ionic-native/core/ionic-native-plugin.ts
index 2fdedc5a9..dc5c30025 100644
--- a/src/@ionic-native/core/ionic-native-plugin.ts
+++ b/src/@ionic-native/core/ionic-native-plugin.ts
@@ -21,7 +21,7 @@ export class IonicNativePlugin {
/**
* Returns the original plugin object
*/
- static getPlugin(): any {}
+ static getPlugin(): any { }
/**
* Returns the plugin's name
diff --git a/src/@ionic-native/core/plugin.ts b/src/@ionic-native/core/plugin.ts
index f92f55141..90d8876b0 100644
--- a/src/@ionic-native/core/plugin.ts
+++ b/src/@ionic-native/core/plugin.ts
@@ -7,8 +7,11 @@ import 'rxjs/add/observable/fromEvent';
checkReady();
-declare var window;
-declare var Promise;
+// declare const window;
+// declare var Promise;
+
+export const ERR_CORDOVA_NOT_AVAILABLE = { error: 'cordova_not_available' };
+export const ERR_PLUGIN_NOT_INSTALLED = { error: 'plugin_not_installed' };
/**
@@ -16,8 +19,8 @@ declare var Promise;
* @return {boolean | { error: string } }
* @private
*/
-export function checkAvailability(pluginRef: string, methodName?: string, pluginName?: string);
-export function checkAvailability(pluginObj: any, methodName?: string, pluginName?: string);
+export function checkAvailability(pluginRef: string, methodName?: string, pluginName?: string): boolean | { error: string };
+export function checkAvailability(pluginObj: any, methodName?: string, pluginName?: string): boolean | { error: string };
export function checkAvailability(plugin: any, methodName?: string, pluginName?: string): boolean | { error: string } {
let pluginRef, pluginInstance, pluginPackage;
@@ -35,15 +38,11 @@ export function checkAvailability(plugin: any, methodName?: string, pluginName?:
if (!pluginInstance || (!!methodName && typeof pluginInstance[methodName] === 'undefined')) {
if (!window.cordova) {
cordovaWarn(pluginName, methodName);
- return {
- error: 'cordova_not_available'
- };
+ return ERR_CORDOVA_NOT_AVAILABLE;
}
pluginWarn(pluginName, pluginPackage, methodName);
- return {
- error: 'plugin_not_installed'
- };
+ return ERR_PLUGIN_NOT_INSTALLED;
}
return true;
@@ -69,7 +68,7 @@ function setIndex(args: any[], opts: any = {}, resolve?: Function, reject?: Func
args.unshift(reject);
args.unshift(resolve);
} else if (opts.callbackStyle === 'node') {
- args.push((err, result) => {
+ args.push((err: any, result: any) => {
if (err) {
reject(err);
} else {
@@ -135,8 +134,8 @@ function callCordovaPlugin(pluginObj: any, methodName: string, args: any[], opts
}
function wrapPromise(pluginObj: any, methodName: string, args: any[], opts: any = {}) {
- let pluginResult, rej;
- const p = getPromise((resolve, reject) => {
+ let pluginResult: any, rej: Function;
+ const p = getPromise((resolve: Function, reject: Function) => {
pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, resolve, reject);
rej = reject;
});
@@ -145,13 +144,13 @@ function wrapPromise(pluginObj: any, methodName: string, args: any[], opts: any
// to error
if (pluginResult && pluginResult.error) {
p.catch(() => { });
- rej(pluginResult.error);
+ typeof rej === 'function' && rej(pluginResult.error);
}
return p;
}
-function wrapOtherPromise(pluginObj: any, methodName: string, args: any[], opts: any= {}) {
- return getPromise((resolve, reject) => {
+function wrapOtherPromise(pluginObj: any, methodName: string, args: any[], opts: any = {}) {
+ return getPromise((resolve: Function, reject: Function) => {
const pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts);
if (pluginResult) {
if (pluginResult.error) {
@@ -225,7 +224,7 @@ export function overrideFunction(pluginObj: any, methodName: string, args: any[]
if (availabilityCheck === true) {
const pluginInstance = getPlugin(pluginObj.constructor.getPluginRef());
pluginInstance[methodName] = observer.next.bind(observer);
- return () => pluginInstance[methodName] = () => {};
+ return () => pluginInstance[methodName] = () => { };
} else {
observer.error(availabilityCheck);
observer.complete();
@@ -239,7 +238,7 @@ export function overrideFunction(pluginObj: any, methodName: string, args: any[]
* @private
*/
export const wrap = function(pluginObj: any, methodName: string, opts: CordovaOptions = {}) {
- return (...args) => {
+ return (...args: any[]) => {
if (opts.sync) {
// Sync doesn't wrap the plugin with a promise or observable, it returns the result as-is
return callCordovaPlugin(pluginObj, methodName, args, opts);
@@ -259,7 +258,7 @@ export const wrap = function(pluginObj: any, methodName: string, opts: CordovaOp
* @private
*/
export function wrapInstance(pluginObj: any, methodName: string, opts: any = {}) {
- return (...args) => {
+ return (...args: any[]) => {
if (opts.sync) {
return callInstance(pluginObj, methodName, args, opts);
@@ -289,7 +288,7 @@ export function wrapInstance(pluginObj: any, methodName: string, opts: any = {})
} else if (opts.otherPromise) {
- return getPromise((resolve, reject) => {
+ return getPromise((resolve: Function, reject: Function) => {
let result = callInstance(pluginObj, methodName, args, opts, resolve, reject);
if (result && !result.error) {
result.then(resolve, reject);
@@ -298,14 +297,14 @@ export function wrapInstance(pluginObj: any, methodName: string, opts: any = {})
} else {
- let pluginResult, rej;
- const p = getPromise((resolve, reject) => {
+ let pluginResult: any, rej: Function;
+ const p = getPromise((resolve: Function, reject: Function) => {
pluginResult = callInstance(pluginObj, methodName, args, opts, resolve, reject);
rej = reject;
});
if (pluginResult && pluginResult.error) {
p.catch(() => { });
- rej(pluginResult.error);
+ typeof rej === 'function' && rej(pluginResult.error);
}
return p;
diff --git a/src/@ionic-native/core/util.ts b/src/@ionic-native/core/util.ts
index cfc43e5f1..31d0a4533 100644
--- a/src/@ionic-native/core/util.ts
+++ b/src/@ionic-native/core/util.ts
@@ -1,27 +1,28 @@
-declare var window: any;
+declare const window: any;
/**
* @private
*/
-export function get(obj, path) {
- path = path.split('.');
- for (let i = 0; i < path.length; i++) {
+export const get = (element: Element | Window, path: string): any => {
+ const paths: string[] = path.split('.');
+ let obj: any = element;
+ for (let i: number = 0; i < paths.length; i++) {
if (!obj) { return null; }
- obj = obj[path[i]];
+ obj = obj[paths[i]];
}
return obj;
-}
+};
/**
* @private
*/
-export function getPromise(cb) {
+export const getPromise = (callback: Function): Promise => {
const tryNativePromise = () => {
if (window.Promise) {
return new Promise((resolve, reject) => {
- cb(resolve, reject);
+ callback(resolve, reject);
});
} else {
console.error('No Promise support or polyfill found. To enable Ionic Native support, please add the es6-promise polyfill before this script, or run with a library like Angular 2 or on a recent browser.');
@@ -29,21 +30,21 @@ export function getPromise(cb) {
};
return tryNativePromise();
-}
+};
/**
* @private
* @param pluginRef
* @returns {null|*}
*/
-export function getPlugin(pluginRef: string): any {
+export const getPlugin = (pluginRef: string): any => {
return get(window, pluginRef);
};
/**
* @private
*/
-export const pluginWarn = function(pluginName: string, plugin?: string, method?: string) {
+export const pluginWarn = (pluginName: string, plugin?: string, method?: string): void => {
if (method) {
console.warn('Native: tried calling ' + pluginName + '.' + method + ', but the ' + pluginName + ' plugin is not installed.');
} else {
@@ -59,7 +60,7 @@ export const pluginWarn = function(pluginName: string, plugin?: string, method?:
* @param pluginName
* @param method
*/
-export const cordovaWarn = function(pluginName: string, method?: string) {
+export const cordovaWarn = (pluginName: string, method?: string): void => {
if (method) {
console.warn('Native: tried calling ' + pluginName + '.' + method + ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator');
} else {
diff --git a/src/@ionic-native/plugins/admob-free/index.ts b/src/@ionic-native/plugins/admob-free/index.ts
index f70dc65f1..a83166473 100644
--- a/src/@ionic-native/plugins/admob-free/index.ts
+++ b/src/@ionic-native/plugins/admob-free/index.ts
@@ -69,7 +69,7 @@ export interface AdMobFreeRewardVideoConfig {
* @description
*
* @usage
- * ```
+ * ```typescript
* import { AdMobFree, AdMobFreeBannerConfig } from '@ionic-native/admob-free';
*
*
diff --git a/src/@ionic-native/plugins/admob/index.ts b/src/@ionic-native/plugins/admob/index.ts
index 428e199ba..531a48314 100644
--- a/src/@ionic-native/plugins/admob/index.ts
+++ b/src/@ionic-native/plugins/admob/index.ts
@@ -95,9 +95,10 @@ export interface AdExtras {
* Plugin for Google Ads, including AdMob / DFP (doubleclick for publisher) and mediations to other Ad networks.
* @usage
* ```typescript
- * import { AdMob, AdMobOptions, AdSize, AdExtras } from '@ionic-native/admob';
+ * import { AdMob } from '@ionic-native/admob';
+ * import { Platform } from 'ionic-angular';
*
- * constructor(private admob: AdMob){}
+ * constructor(private admob: AdMob, private platform: Platform ) { }
*
* ionViewDidLoad() {
* this.admob.onAdDismiss()
@@ -105,7 +106,13 @@ export interface AdExtras {
* }
*
* onClick() {
- * this.admob.prepareInterstitial('YOUR_ADID')
+ * let adId;
+ * if(this.platform.is('android')) {
+ * adId = 'YOUR_ADID_ANDROID';
+ * } else if (this.platform.is('ios')) {
+ * adId = 'YOUR_ADID_IOS';
+ * }
+ * this.admob.prepareInterstitial({adId: adId})
* .then(() => { this.admob.showInterstitial(); });
* }
*
diff --git a/src/@ionic-native/plugins/alipay/index.ts b/src/@ionic-native/plugins/alipay/index.ts
index f2eb5ffe4..51cc6337e 100644
--- a/src/@ionic-native/plugins/alipay/index.ts
+++ b/src/@ionic-native/plugins/alipay/index.ts
@@ -1,6 +1,8 @@
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
+
+
export interface AlipayOrder {
/**
* appId assigned by Alipay
@@ -67,7 +69,7 @@ export interface AlipayOrder {
* Requires Cordova plugin: `cordova-alipay-base`. For more info, please see the [Alipay plugin docs](https://github.com/xueron/cordova-alipay-base).
*
* @usage
- * ```
+ * ```typescript
* import { Alipay, AlipayOrder } from '@ionic-native/alipay';
*
* constructor(private alipay: Alipay) {
@@ -112,4 +114,3 @@ export class Alipay extends IonicNativePlugin {
@Cordova()
pay(order: AlipayOrder): Promise { return; }
}
-
diff --git a/src/@ionic-native/plugins/android-fingerprint-auth/index.ts b/src/@ionic-native/plugins/android-fingerprint-auth/index.ts
index b48b19ae0..2d14f6bcc 100644
--- a/src/@ionic-native/plugins/android-fingerprint-auth/index.ts
+++ b/src/@ionic-native/plugins/android-fingerprint-auth/index.ts
@@ -102,7 +102,7 @@ export interface AFAEncryptResponse {
* This plugin will open a native dialog fragment prompting the user to authenticate using their fingerprint. If the device has a secure lockscreen (pattern, PIN, or password), the user may opt to authenticate using that method as a backup.
* @usage
* ```typescript
- * import { AndroidFingerprintAuth, AFAAuthOptions } from '@ionic-native/android-fingerprint-auth';
+ * import { AndroidFingerprintAuth } from '@ionic-native/android-fingerprint-auth';
*
* constructor(private androidFingerprintAuth: AndroidFingerprintAuth) { }
*
@@ -114,18 +114,18 @@ export interface AFAEncryptResponse {
* if(result.isAvailable){
* // it is available
*
- * this.androidFingerprintAuth.encrypt({ clientId: "myAppName", username: "myUsername", password: "myPassword" })
+ * this.androidFingerprintAuth.encrypt({ clientId: 'myAppName', username: 'myUsername', password: 'myPassword' })
* .then(result => {
* if (result.withFingerprint) {
- * console.log("Successfully encrypted credentials.");
- * console.log("Encrypted credentials: " + result.token);
+ * console.log('Successfully encrypted credentials.');
+ * console.log('Encrypted credentials: ' + result.token);
* } else if (result.withBackup) {
* console.log('Successfully authenticated with backup password!');
* } else console.log('Didn\'t authenticate!');
* })
* .catch(error => {
- * if (error === "Cancelled") {
- * console.log("Fingerprint authentication cancelled");
+ * if (error === this.androidFingerprintAuth.ERRORS.FINGERPRINT_CANCELLED) {
+ * console.log('Fingerprint authentication cancelled');
* } else console.error(error)
* });
*
@@ -150,13 +150,26 @@ export interface AFAEncryptResponse {
@Injectable()
export class AndroidFingerprintAuth extends IonicNativePlugin {
- /**
- * Opens a native dialog fragment to use the device hardware fingerprint scanner to authenticate against fingerprints registered for the device.
- * @param options {AFAAuthOptions} Options
- * @returns {Promise}
- */
- @Cordova()
- encrypt(options: AFAAuthOptions): Promise {return; }
+ ERRORS: {
+ BAD_PADDING_EXCEPTION: 'BAD_PADDING_EXCEPTION',
+ CERTIFICATE_EXCEPTION: 'CERTIFICATE_EXCEPTION',
+ FINGERPRINT_CANCELLED: 'FINGERPRINT_CANCELLED',
+ FINGERPRINT_DATA_NOT_DELETED: 'FINGERPRINT_DATA_NOT_DELETED',
+ FINGERPRINT_ERROR: 'FINGERPRINT_ERROR',
+ FINGERPRINT_NOT_AVAILABLE: 'FINGERPRINT_NOT_AVAILABLE',
+ FINGERPRINT_PERMISSION_DENIED: 'FINGERPRINT_PERMISSION_DENIED',
+ FINGERPRINT_PERMISSION_DENIED_SHOW_REQUEST: 'FINGERPRINT_PERMISSION_DENIED_SHOW_REQUEST',
+ ILLEGAL_BLOCK_SIZE_EXCEPTION: 'ILLEGAL_BLOCK_SIZE_EXCEPTION',
+ INIT_CIPHER_FAILED: 'INIT_CIPHER_FAILED',
+ INVALID_ALGORITHM_PARAMETER_EXCEPTION: 'INVALID_ALGORITHM_PARAMETER_EXCEPTION',
+ IO_EXCEPTION: 'IO_EXCEPTION',
+ JSON_EXCEPTION: 'JSON_EXCEPTION',
+ MINIMUM_SDK: 'MINIMUM_SDK',
+ MISSING_ACTION_PARAMETERS: 'MISSING_ACTION_PARAMETERS',
+ MISSING_PARAMETERS: 'MISSING_PARAMETERS',
+ NO_SUCH_ALGORITHM_EXCEPTION: 'NO_SUCH_ALGORITHM_EXCEPTION',
+ SECURITY_EXCEPTION: 'SECURITY_EXCEPTION'
+ };
/**
* Opens a native dialog fragment to use the device hardware fingerprint scanner to authenticate against fingerprints registered for the device.
@@ -164,19 +177,27 @@ export class AndroidFingerprintAuth extends IonicNativePlugin {
* @returns {Promise}
*/
@Cordova()
- decrypt(options: AFAAuthOptions): Promise {return; }
+ encrypt(options: AFAAuthOptions): Promise { return; }
+
+ /**
+ * Opens a native dialog fragment to use the device hardware fingerprint scanner to authenticate against fingerprints registered for the device.
+ * @param options {AFAAuthOptions} Options
+ * @returns {Promise}
+ */
+ @Cordova()
+ decrypt(options: AFAAuthOptions): Promise { return; }
/**
* Check if service is available
* @returns {Promise} Returns a Promise that resolves if fingerprint auth is available on the device
*/
@Cordova()
- isAvailable(): Promise<{isAvailable: boolean}> { return; }
+ isAvailable(): Promise<{ isAvailable: boolean }> { return; }
/**
* Delete the cipher used for encryption and decryption by username
* @returns {Promise} Returns a Promise that resolves if the cipher was successfully deleted
*/
@Cordova()
- delete(options: {clientId: string; username: string; }): Promise<{deleted: boolean}> { return; }
+ delete(options: { clientId: string; username: string; }): Promise<{ deleted: boolean }> { return; }
}
diff --git a/src/@ionic-native/plugins/android-permissions/index.ts b/src/@ionic-native/plugins/android-permissions/index.ts
new file mode 100644
index 000000000..589ed504c
--- /dev/null
+++ b/src/@ionic-native/plugins/android-permissions/index.ts
@@ -0,0 +1,226 @@
+import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+
+/**
+ * @name Android Permissions
+ * @description
+ * This plugin is designed to support Android new permissions checking mechanism.
+ *
+ * You can find all permissions here: https://developer.android.com/reference/android/Manifest.permission.html
+ *
+ * @usage
+ * ```
+ * import { AndroidPermissions } from '@ionic-native/android-permissions';
+ *
+ *
+ * constructor(private androidPermissions: AndroidPermissions) { }
+ *
+ * ...
+ *
+ * this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.CAMERA).then(
+ * success => console.log('Permission granted'),
+ * err => this.androidPermissions.requestPermissions(this.androidPermissions.PERMISSION.CAMERA)
+ * );
+ *
+ * this.androidPermissions.requestPermissions([this.androidPermissions.PERMISSION.CAMERA, this.androidPermissions.PERMISSION.GET_ACCOUNTS]);
+ *
+ * ```
+ */
+@Plugin({
+ pluginName: 'AndroidPermissions',
+ plugin: 'cordova-plugin-android-permissions',
+ pluginRef: 'cordova.plugins.permissions',
+ repo: 'https://github.com/NeoLSN/cordova-plugin-android-permissions',
+ platforms: ['Android']
+})
+@Injectable()
+export class AndroidPermissions extends IonicNativePlugin {
+
+ PERMISSION: any = {
+ ACCESS_CHECKIN_PROPERTIES: 'android.permission.ACCESS_CHECKIN_PROPERTIES',
+ ACCESS_COARSE_LOCATION: 'android.permission.ACCESS_COARSE_LOCATION',
+ ACCESS_FINE_LOCATION: 'android.permission.ACCESS_FINE_LOCATION',
+ ACCESS_LOCATION_EXTRA_COMMANDS: 'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS',
+ ACCESS_MOCK_LOCATION: 'android.permission.ACCESS_MOCK_LOCATION',
+ ACCESS_NETWORK_STATE: 'android.permission.ACCESS_NETWORK_STATE',
+ ACCESS_SURFACE_FLINGER: 'android.permission.ACCESS_SURFACE_FLINGER',
+ ACCESS_WIFI_STATE: 'android.permission.ACCESS_WIFI_STATE',
+ ACCOUNT_MANAGER: 'android.permission.ACCOUNT_MANAGER',
+ ADD_VOICEMAIL: 'com.android.voicemail.permission.ADD_VOICEMAIL',
+ AUTHENTICATE_ACCOUNTS: 'android.permission.AUTHENTICATE_ACCOUNTS',
+ BATTERY_STATS: 'android.permission.BATTERY_STATS',
+ BIND_ACCESSIBILITY_SERVICE: 'android.permission.BIND_ACCESSIBILITY_SERVICE',
+ BIND_APPWIDGET: 'android.permission.BIND_APPWIDGET',
+ BIND_CARRIER_MESSAGING_SERVICE: 'android.permission.BIND_CARRIER_MESSAGING_SERVICE',
+ BIND_DEVICE_ADMIN: 'android.permission.BIND_DEVICE_ADMIN',
+ BIND_DREAM_SERVICE: 'android.permission.BIND_DREAM_SERVICE',
+ BIND_INPUT_METHOD: 'android.permission.BIND_INPUT_METHOD',
+ BIND_NFC_SERVICE: 'android.permission.BIND_NFC_SERVICE',
+ BIND_NOTIFICATION_LISTENER_SERVICE: 'android.permission.BIND_NOTIFICATION_LISTENER_SERVICE',
+ BIND_PRINT_SERVICE: 'android.permission.BIND_PRINT_SERVICE',
+ BIND_REMOTEVIEWS: 'android.permission.BIND_REMOTEVIEWS',
+ BIND_TEXT_SERVICE: 'android.permission.BIND_TEXT_SERVICE',
+ BIND_TV_INPUT: 'android.permission.BIND_TV_INPUT',
+ BIND_VOICE_INTERACTION: 'android.permission.BIND_VOICE_INTERACTION',
+ BIND_VPN_SERVICE: 'android.permission.BIND_VPN_SERVICE',
+ BIND_WALLPAPER: 'android.permission.BIND_WALLPAPER',
+ BLUETOOTH: 'android.permission.BLUETOOTH',
+ BLUETOOTH_ADMIN: 'android.permission.BLUETOOTH_ADMIN',
+ BLUETOOTH_PRIVILEGED: 'android.permission.BLUETOOTH_PRIVILEGED',
+ BODY_SENSORS: 'android.permission.BODY_SENSORS',
+ BRICK: 'android.permission.BRICK',
+ BROADCAST_PACKAGE_REMOVED: 'android.permission.BROADCAST_PACKAGE_REMOVED',
+ BROADCAST_SMS: 'android.permission.BROADCAST_SMS',
+ BROADCAST_STICKY: 'android.permission.BROADCAST_STICKY',
+ BROADCAST_WAP_PUSH: 'android.permission.BROADCAST_WAP_PUSH',
+ CALL_PHONE: 'android.permission.CALL_PHONE',
+ CALL_PRIVILEGED: 'android.permission.CALL_PRIVILEGED',
+ CAMERA: 'android.permission.CAMERA',
+ CAPTURE_AUDIO_OUTPUT: 'android.permission.CAPTURE_AUDIO_OUTPUT',
+ CAPTURE_SECURE_VIDEO_OUTPUT: 'android.permission.CAPTURE_SECURE_VIDEO_OUTPUT',
+ CAPTURE_VIDEO_OUTPUT: 'android.permission.CAPTURE_VIDEO_OUTPUT',
+ CHANGE_COMPONENT_ENABLED_STATE: 'android.permission.CHANGE_COMPONENT_ENABLED_STATE',
+ CHANGE_CONFIGURATION: 'android.permission.CHANGE_CONFIGURATION',
+ CHANGE_NETWORK_STATE: 'android.permission.CHANGE_NETWORK_STATE',
+ CHANGE_WIFI_MULTICAST_STATE: 'android.permission.CHANGE_WIFI_MULTICAST_STATE',
+ CHANGE_WIFI_STATE: 'android.permission.CHANGE_WIFI_STATE',
+ CLEAR_APP_CACHE: 'android.permission.CLEAR_APP_CACHE',
+ CLEAR_APP_USER_DATA: 'android.permission.CLEAR_APP_USER_DATA',
+ CONTROL_LOCATION_UPDATES: 'android.permission.CONTROL_LOCATION_UPDATES',
+ DELETE_CACHE_FILES: 'android.permission.DELETE_CACHE_FILES',
+ DELETE_PACKAGES: 'android.permission.DELETE_PACKAGES',
+ DEVICE_POWER: 'android.permission.DEVICE_POWER',
+ DIAGNOSTIC: 'android.permission.DIAGNOSTIC',
+ DISABLE_KEYGUARD: 'android.permission.DISABLE_KEYGUARD',
+ DUMP: 'android.permission.DUMP',
+ EXPAND_STATUS_BAR: 'android.permission.EXPAND_STATUS_BAR',
+ FACTORY_TEST: 'android.permission.FACTORY_TEST',
+ FLASHLIGHT: 'android.permission.FLASHLIGHT',
+ FORCE_BACK: 'android.permission.FORCE_BACK',
+ GET_ACCOUNTS: 'android.permission.GET_ACCOUNTS',
+ GET_PACKAGE_SIZE: 'android.permission.GET_PACKAGE_SIZE',
+ GET_TASKS: 'android.permission.GET_TASKS',
+ GET_TOP_ACTIVITY_INFO: 'android.permission.GET_TOP_ACTIVITY_INFO',
+ GLOBAL_SEARCH: 'android.permission.GLOBAL_SEARCH',
+ HARDWARE_TEST: 'android.permission.HARDWARE_TEST',
+ INJECT_EVENTS: 'android.permission.INJECT_EVENTS',
+ INSTALL_LOCATION_PROVIDER: 'android.permission.INSTALL_LOCATION_PROVIDER',
+ INSTALL_PACKAGES: 'android.permission.INSTALL_PACKAGES',
+ INSTALL_SHORTCUT: 'com.android.launcher.permission.INSTALL_SHORTCUT',
+ INTERNAL_SYSTEM_WINDOW: 'android.permission.INTERNAL_SYSTEM_WINDOW',
+ INTERNET: 'android.permission.INTERNET',
+ KILL_BACKGROUND_PROCESSES: 'android.permission.KILL_BACKGROUND_PROCESSES',
+ LOCATION_HARDWARE: 'android.permission.LOCATION_HARDWARE',
+ MANAGE_ACCOUNTS: 'android.permission.MANAGE_ACCOUNTS',
+ MANAGE_APP_TOKENS: 'android.permission.MANAGE_APP_TOKENS',
+ MANAGE_DOCUMENTS: 'android.permission.MANAGE_DOCUMENTS',
+ MASTER_CLEAR: 'android.permission.MASTER_CLEAR',
+ MEDIA_CONTENT_CONTROL: 'android.permission.MEDIA_CONTENT_CONTROL',
+ MODIFY_AUDIO_SETTINGS: 'android.permission.MODIFY_AUDIO_SETTINGS',
+ MODIFY_PHONE_STATE: 'android.permission.MODIFY_PHONE_STATE',
+ MOUNT_FORMAT_FILESYSTEMS: 'android.permission.MOUNT_FORMAT_FILESYSTEMS',
+ MOUNT_UNMOUNT_FILESYSTEMS: 'android.permission.MOUNT_UNMOUNT_FILESYSTEMS',
+ NFC: 'android.permission.NFC',
+ PERSISTENT_ACTIVITY: 'android.permission.PERSISTENT_ACTIVITY',
+ PROCESS_OUTGOING_CALLS: 'android.permission.PROCESS_OUTGOING_CALLS',
+ READ_CALENDAR: 'android.permission.READ_CALENDAR',
+ READ_CALL_LOG: 'android.permission.READ_CALL_LOG',
+ READ_CONTACTS: 'android.permission.READ_CONTACTS',
+ READ_EXTERNAL_STORAGE: 'android.permission.READ_EXTERNAL_STORAGE',
+ READ_FRAME_BUFFER: 'android.permission.READ_FRAME_BUFFER',
+ READ_HISTORY_BOOKMARKS: 'com.android.browser.permission.READ_HISTORY_BOOKMARKS',
+ READ_INPUT_STATE: 'android.permission.READ_INPUT_STATE',
+ READ_LOGS: 'android.permission.READ_LOGS',
+ READ_PHONE_STATE: 'android.permission.READ_PHONE_STATE',
+ READ_PROFILE: 'android.permission.READ_PROFILE',
+ READ_SMS: 'android.permission.READ_SMS',
+ READ_SOCIAL_STREAM: 'android.permission.READ_SOCIAL_STREAM',
+ READ_SYNC_SETTINGS: 'android.permission.READ_SYNC_SETTINGS',
+ READ_SYNC_STATS: 'android.permission.READ_SYNC_STATS',
+ READ_USER_DICTIONARY: 'android.permission.READ_USER_DICTIONARY',
+ READ_VOICEMAIL: 'com.android.voicemail.permission.READ_VOICEMAIL',
+ REBOOT: 'android.permission.REBOOT',
+ RECEIVE_BOOT_COMPLETED: 'android.permission.RECEIVE_BOOT_COMPLETED',
+ RECEIVE_MMS: 'android.permission.RECEIVE_MMS',
+ RECEIVE_SMS: 'android.permission.RECEIVE_SMS',
+ RECEIVE_WAP_PUSH: 'android.permission.RECEIVE_WAP_PUSH',
+ RECORD_AUDIO: 'android.permission.RECORD_AUDIO',
+ REORDER_TASKS: 'android.permission.REORDER_TASKS',
+ RESTART_PACKAGES: 'android.permission.RESTART_PACKAGES',
+ SEND_RESPOND_VIA_MESSAGE: 'android.permission.SEND_RESPOND_VIA_MESSAGE',
+ SEND_SMS: 'android.permission.SEND_SMS',
+ SET_ACTIVITY_WATCHER: 'android.permission.SET_ACTIVITY_WATCHER',
+ SET_ALARM: 'com.android.alarm.permission.SET_ALARM',
+ SET_ALWAYS_FINISH: 'android.permission.SET_ALWAYS_FINISH',
+ SET_ANIMATION_SCALE: 'android.permission.SET_ANIMATION_SCALE',
+ SET_DEBUG_APP: 'android.permission.SET_DEBUG_APP',
+ SET_ORIENTATION: 'android.permission.SET_ORIENTATION',
+ SET_POINTER_SPEED: 'android.permission.SET_POINTER_SPEED',
+ SET_PREFERRED_APPLICATIONS: 'android.permission.SET_PREFERRED_APPLICATIONS',
+ SET_PROCESS_LIMIT: 'android.permission.SET_PROCESS_LIMIT',
+ SET_TIME: 'android.permission.SET_TIME',
+ SET_TIME_ZONE: 'android.permission.SET_TIME_ZONE',
+ SET_WALLPAPER: 'android.permission.SET_WALLPAPER',
+ SET_WALLPAPER_HINTS: 'android.permission.SET_WALLPAPER_HINTS',
+ SIGNAL_PERSISTENT_PROCESSES: 'android.permission.SIGNAL_PERSISTENT_PROCESSES',
+ STATUS_BAR: 'android.permission.STATUS_BAR',
+ SUBSCRIBED_FEEDS_READ: 'android.permission.SUBSCRIBED_FEEDS_READ',
+ SUBSCRIBED_FEEDS_WRITE: 'android.permission.SUBSCRIBED_FEEDS_WRITE',
+ SYSTEM_ALERT_WINDOW: 'android.permission.SYSTEM_ALERT_WINDOW',
+ TRANSMIT_IR: 'android.permission.TRANSMIT_IR',
+ UNINSTALL_SHORTCUT: 'com.android.launcher.permission.UNINSTALL_SHORTCUT',
+ UPDATE_DEVICE_STATS: 'android.permission.UPDATE_DEVICE_STATS',
+ USE_CREDENTIALS: 'android.permission.USE_CREDENTIALS',
+ USE_SIP: 'android.permission.USE_SIP',
+ VIBRATE: 'android.permission.VIBRATE',
+ WAKE_LOCK: 'android.permission.WAKE_LOCK',
+ WRITE_APN_SETTINGS: 'android.permission.WRITE_APN_SETTINGS',
+ WRITE_CALENDAR: 'android.permission.WRITE_CALENDAR',
+ WRITE_CALL_LOG: 'android.permission.WRITE_CALL_LOG',
+ WRITE_CONTACTS: 'android.permission.WRITE_CONTACTS',
+ WRITE_EXTERNAL_STORAGE: 'android.permission.WRITE_EXTERNAL_STORAGE',
+ WRITE_GSERVICES: 'android.permission.WRITE_GSERVICES',
+ WRITE_HISTORY_BOOKMARKS: 'com.android.browser.permission.WRITE_HISTORY_BOOKMARKS',
+ WRITE_PROFILE: 'android.permission.WRITE_PROFILE',
+ WRITE_SECURE_SETTINGS: 'android.permission.WRITE_SECURE_SETTINGS',
+ WRITE_SETTINGS: 'android.permission.WRITE_SETTINGS',
+ WRITE_SMS: 'android.permission.WRITE_SMS',
+ WRITE_SOCIAL_STREAM: 'android.permission.WRITE_SOCIAL_STREAM',
+ WRITE_SYNC_SETTINGS: 'android.permission.WRITE_SYNC_SETTINGS',
+ WRITE_USER_DICTIONARY: 'android.permission.WRITE_USER_DICTIONARY',
+ WRITE_VOICEMAIL: 'com.android.voicemail.permission.WRITE_VOICEMAIL',
+ };
+
+ /**
+ * Check permission
+ * @param permission {string} The name of the permission
+ * @return {Promise} Returns a promise
+ */
+ @Cordova()
+ checkPermission(permission: string): Promise { return; }
+
+ /**
+ * Request permission
+ * @param permission {string} The name of the permission to request
+ * @return {Promise}
+ */
+ @Cordova()
+ requestPermission(permission: string): Promise { return; }
+
+ /**
+ * Request permissions
+ * @param permissions {Array} An array with permissions
+ * @return {Promise} Returns a promise
+ */
+ @Cordova()
+ requestPermissions(permissions: string[]): Promise { return; }
+
+ /**
+ * This function still works now, will not support in the future.
+ * @param permission {string} The name of the permission
+ * @return {Promise} Returns a promise
+ */
+ @Cordova()
+ hasPermission(permission: string): Promise { return; }
+
+}
diff --git a/src/@ionic-native/plugins/app-minimize/index.ts b/src/@ionic-native/plugins/app-minimize/index.ts
new file mode 100644
index 000000000..06879444e
--- /dev/null
+++ b/src/@ionic-native/plugins/app-minimize/index.ts
@@ -0,0 +1,42 @@
+import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+
+/**
+ * @name App Minimize
+ * @description
+ * AppMinimize is a plugin to minimize the application on android devices
+ *
+ * @usage
+ * ```typescript
+ * import { AppMinimize } from '@ionic-native/app-minimize';
+ *
+ *
+ * constructor(private appMinimize: AppMinimize) { }
+ *
+ * ...
+ *
+ * this.plugin.minimize().then(
+ * success => console.log('Closed'),
+ * err => console.log('Something went wrong')
+ * );
+ *
+ * ```
+ */
+@Plugin({
+ pluginName: 'AppMinimize',
+ plugin: 'https://github.com/tomloprod/cordova-plugin-appminimize.git',
+ pluginRef: 'plugins.appMinimize',
+ repo: 'https://github.com/tomloprod/cordova-plugin-appminimize',
+ platforms: ['Android']
+})
+@Injectable()
+export class AppMinimize extends IonicNativePlugin {
+
+ /**
+ * Minimizes the application
+ * @return {Promise}
+ */
+ @Cordova()
+ minimize(): Promise { return; }
+
+}
diff --git a/src/@ionic-native/plugins/app-preferences/index.ts b/src/@ionic-native/plugins/app-preferences/index.ts
index 95019a69e..0d86ce7e2 100644
--- a/src/@ionic-native/plugins/app-preferences/index.ts
+++ b/src/@ionic-native/plugins/app-preferences/index.ts
@@ -11,11 +11,12 @@ import { Injectable } from '@angular/core';
* ```typescript
* import { AppPreferences } from '@ionic-native/app-preferences';
*
- * constructor(private appPreferences: AppPreferences) {
+ * constructor(private appPreferences: AppPreferences) { }
*
- * this.appPreferences.fetch('key').then((res) => { console.log(res); });
+ * ...
+ *
+ * this.appPreferences.fetch('key').then((res) => { console.log(res); });
*
- * }
* ```
*
*/
@@ -46,13 +47,13 @@ export class AppPreferences extends IonicNativePlugin {
*
* @param {string} dict Dictionary for key (OPTIONAL)
* @param {string} key Key
- * @param {string} value Value
+ * @param {any} value Value
* @return {Promise} Returns a promise
*/
@Cordova({
callbackOrder: 'reverse'
})
- store(dict: string, key: string, value?: string): Promise {
+ store(dict: string, key: string, value?: any): Promise {
return;
}
diff --git a/src/@ionic-native/plugins/app-rate/index.ts b/src/@ionic-native/plugins/app-rate/index.ts
index 992b37888..99317a02a 100644
--- a/src/@ionic-native/plugins/app-rate/index.ts
+++ b/src/@ionic-native/plugins/app-rate/index.ts
@@ -1,9 +1,6 @@
import { Injectable } from '@angular/core';
import { Cordova, CordovaProperty, Plugin, IonicNativePlugin } from '@ionic-native/core';
-
-declare var window;
-
export interface AppRatePreferences {
/**
@@ -110,12 +107,24 @@ export interface AppUrls {
* constructor(private appRate: AppRate) { }
*
* ...
+ * // set certain preferences
+ * this.appRate.preferences.storeAppURL = {
+ * ios: '',
+ * android: 'market://details?id=',
+ * windows: 'ms-windows-store://review/?ProductId='
+ * };
*
- * this.appRate.preferences.storeAppURL = {
- * ios: '',
+ * this.appRate.promptForRating(true);
+ *
+ * // or, override the whole preferences object
+ * this.appRate.preferences = {
+ * usesUntilPrompt: 3,
+ * storeAppURL: {
+ * ios: '',
* android: 'market://details?id=',
- * windows: 'ms-windows-store://review/?ProductId='
- * };
+ * windows: 'ms-windows-store://review/?ProductId='
+ * }
+ * };
*
* this.appRate.promptForRating(false);
* ```
diff --git a/src/@ionic-native/plugins/app-update/index.ts b/src/@ionic-native/plugins/app-update/index.ts
index 4ef0c92fa..3b2158ac6 100644
--- a/src/@ionic-native/plugins/app-update/index.ts
+++ b/src/@ionic-native/plugins/app-update/index.ts
@@ -19,7 +19,7 @@ import { Injectable } from '@angular/core';
*
* Then use the following code:
*
- * ```
+ * ```typescript
* import { AppUpdate } from '@ionic-native/app-update';
*
* constructor(private appUpdate: AppUpdate) {
@@ -28,8 +28,6 @@ import { Injectable } from '@angular/core';
* this.appUpdate.checkAppUpdate(updateUrl);
*
* }
- *
- *
* ```
*
* The plugin will compare the app version and update it automatically if the API has a newer version to install.
@@ -53,4 +51,3 @@ export class AppUpdate extends IonicNativePlugin {
})
checkAppUpdate(updateUrl: string): Promise { return; }
}
-
diff --git a/src/@ionic-native/plugins/appodeal/index.ts b/src/@ionic-native/plugins/appodeal/index.ts
index f6ac8046b..5821ce7ce 100644
--- a/src/@ionic-native/plugins/appodeal/index.ts
+++ b/src/@ionic-native/plugins/appodeal/index.ts
@@ -8,7 +8,7 @@ import { Injectable } from '@angular/core';
* Plugin to serve ads through native Appodeal SDKs
*
* @usage
- * ```
+ * ```typescript
* import { Appodeal } from '@ionic-native/appodeal';
*
* constructor(private appodeal: Appodeal) {
@@ -18,9 +18,6 @@ import { Injectable } from '@angular/core';
* appodeal.show(appodeal.AD_TYPES.REWARDED_VIDEO);
*
* }
- *
- *
- *
* ```
*/
@Plugin({
@@ -28,7 +25,7 @@ import { Injectable } from '@angular/core';
plugin: 'https://github.com/appodeal/appodeal-cordova-plugin',
pluginRef: 'Appodeal',
repo: 'https://github.com/appodeal/appodeal-cordova-plugin.git',
- platforms: [ 'iOS', 'Android' ]
+ platforms: ['iOS', 'Android']
})
@Injectable()
export class Appodeal extends IonicNativePlugin {
@@ -49,7 +46,7 @@ export class Appodeal extends IonicNativePlugin {
* @param {number} adType
*/
@Cordova()
- initialize(appKey: string, adType: number): void {};
+ initialize(appKey: string, adType: number): void { };
/**
* check if SDK has been initialized
@@ -76,21 +73,21 @@ export class Appodeal extends IonicNativePlugin {
showWithPlacement(
adType: number,
placement: any
- ): Promise { return; };
+ ): Promise { return; };
/**
* hide ad of specified type
* @param {number} adType
*/
@Cordova()
- hide(adType: number): void {};
+ hide(adType: number): void { };
/**
* confirm use of ads of specified type
* @param {number} adType
*/
@Cordova()
- confirm(adType: number): void {};
+ confirm(adType: number): void { };
/**
* check if ad of specified type has been loaded
@@ -114,69 +111,69 @@ export class Appodeal extends IonicNativePlugin {
* @param autoCache
*/
@Cordova()
- setAutoCache(adType: number, autoCache: any): void {};
+ setAutoCache(adType: number, autoCache: any): void { };
/**
* forcefully cache an ad by type
* @param {number} adType
*/
@Cordova()
- cache(adType: number): void {};
+ cache(adType: number): void { };
/**
*
* @param {boolean} set
*/
@Cordova()
- setOnLoadedTriggerBoth(set: boolean): void {};
+ setOnLoadedTriggerBoth(set: boolean): void { };
/**
* enable or disable Smart Banners
* @param {boolean} enabled
*/
@Cordova()
- setSmartBanners(enabled: boolean): void {};
+ setSmartBanners(enabled: boolean): void { };
/**
* enable or disable banner backgrounds
* @param {boolean} enabled
*/
@Cordova()
- setBannerBackground(enabled: boolean): void {};
+ setBannerBackground(enabled: boolean): void { };
/**
* enable or disable banner animations
* @param {boolean} enabled
*/
@Cordova()
- setBannerAnimation(enabled: boolean): void {};
+ setBannerAnimation(enabled: boolean): void { };
/**
*
* @param value
*/
@Cordova()
- set728x90Banners(value: any): void {};
+ set728x90Banners(value: any): void { };
/**
* enable or disable logging
* @param {boolean} logging
*/
@Cordova()
- setLogging(logging: boolean): void {};
+ setLogging(logging: boolean): void { };
/**
* enable or disable testing mode
* @param {boolean} testing
*/
@Cordova()
- setTesting(testing: boolean): void {};
+ setTesting(testing: boolean): void { };
/**
* reset device ID
*/
@Cordova()
- resetUUID(): void {};
+ resetUUID(): void { };
/**
* get version of Appdeal SDK
@@ -190,7 +187,7 @@ export class Appodeal extends IonicNativePlugin {
* @param {number} adType
*/
@Cordova()
- disableNetwork(network?: string, adType?: number): void {};
+ disableNetwork(network?: string, adType?: number): void { };
/**
*
@@ -198,54 +195,54 @@ export class Appodeal extends IonicNativePlugin {
* @param {number} adType
*/
@Cordova()
- disableNetworkType(network?: string, adType?: number): void {};
+ disableNetworkType(network?: string, adType?: number): void { };
/**
* disable Location permissions for Appodeal SDK
*/
@Cordova()
- disableLocationPermissionCheck(): void {};
+ disableLocationPermissionCheck(): void { };
/**
* disable Storage permissions for Appodeal SDK
*/
@Cordova()
- disableWriteExternalStoragePermissionCheck(): void {};
+ disableWriteExternalStoragePermissionCheck(): void { };
/**
* enable event listeners
* @param {boolean} enabled
*/
@Cordova()
- enableInterstitialCallbacks(enabled: boolean): void {};
+ enableInterstitialCallbacks(enabled: boolean): void { };
/**
* enable event listeners
* @param {boolean} enabled
*/
@Cordova()
- enableSkippableVideoCallbacks(enabled: boolean): void {};
+ enableSkippableVideoCallbacks(enabled: boolean): void { };
/**
* enable event listeners
* @param {boolean} enabled
*/
@Cordova()
- enableNonSkippableVideoCallbacks(enabled: boolean): void {};
+ enableNonSkippableVideoCallbacks(enabled: boolean): void { };
/**
* enable event listeners
* @param {boolean} enabled
*/
@Cordova()
- enableBannerCallbacks(enabled: boolean): void {};
+ enableBannerCallbacks(enabled: boolean): void { };
/**
* enable event listeners
* @param {boolean} enabled
*/
@Cordova()
- enableRewardedVideoCallbacks(enabled: boolean): void {};
+ enableRewardedVideoCallbacks(enabled: boolean): void { };
/**
*
@@ -253,7 +250,7 @@ export class Appodeal extends IonicNativePlugin {
* @param {boolean} value
*/
@Cordova()
- setCustomBooleanRule(name: string, value: boolean): void {};
+ setCustomBooleanRule(name: string, value: boolean): void { };
/**
*
@@ -261,7 +258,7 @@ export class Appodeal extends IonicNativePlugin {
* @param {number} value
*/
@Cordova()
- setCustomIntegerRule(name: string, value: number): void {};
+ setCustomIntegerRule(name: string, value: number): void { };
/**
* set rule with float value
@@ -269,7 +266,7 @@ export class Appodeal extends IonicNativePlugin {
* @param {number} value
*/
@Cordova()
- setCustomDoubleRule(name: string, value: number): void {};
+ setCustomDoubleRule(name: string, value: number): void { };
/**
* set rule with string value
@@ -277,77 +274,77 @@ export class Appodeal extends IonicNativePlugin {
* @param {string} value
*/
@Cordova()
- setCustomStringRule(name: string, value: string): void {};
+ setCustomStringRule(name: string, value: string): void { };
/**
* set ID preference in Appodeal for current user
* @param id
*/
@Cordova()
- setUserId(id: any): void {};
+ setUserId(id: any): void { };
/**
* set Email preference in Appodeal for current user
* @param email
*/
@Cordova()
- setEmail(email: any): void {};
+ setEmail(email: any): void { };
/**
* set Birthday preference in Appodeal for current user
* @param birthday
*/
@Cordova()
- setBirthday(birthday: any): void {};
+ setBirthday(birthday: any): void { };
/**
* et Age preference in Appodeal for current user
* @param age
*/
@Cordova()
- setAge(age: any): void {};
+ setAge(age: any): void { };
/**
* set Gender preference in Appodeal for current user
* @param gender
*/
@Cordova()
- setGender(gender: any): void {};
+ setGender(gender: any): void { };
/**
* set Occupation preference in Appodeal for current user
* @param occupation
*/
@Cordova()
- setOccupation(occupation: any): void {};
+ setOccupation(occupation: any): void { };
/**
* set Relation preference in Appodeal for current user
* @param relation
*/
@Cordova()
- setRelation(relation: any): void {};
+ setRelation(relation: any): void { };
/**
* set Smoking preference in Appodeal for current user
* @param smoking
*/
@Cordova()
- setSmoking(smoking: any): void {};
+ setSmoking(smoking: any): void { };
/**
* set Alcohol preference in Appodeal for current user
* @param alcohol
*/
@Cordova()
- setAlcohol(alcohol: any): void {};
+ setAlcohol(alcohol: any): void { };
/**
* set Interests preference in Appodeal for current user
* @param interests
*/
@Cordova()
- setInterests(interests: any): void {};
+ setInterests(interests: any): void { };
@Cordova({
eventObservable: true,
diff --git a/src/@ionic-native/plugins/autostart/index.ts b/src/@ionic-native/plugins/autostart/index.ts
new file mode 100644
index 000000000..e57c0d829
--- /dev/null
+++ b/src/@ionic-native/plugins/autostart/index.ts
@@ -0,0 +1,47 @@
+import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+
+/**
+ * @name Autostart
+ * @description
+ * This plugin will start automatically your Android app after the every boot or the auto-update of your application.
+ * You can enable or disable the autostart function in your app.
+ *
+ * @usage
+ * ```typescript
+ * import { Autostart } from '@ionic-native/autostart';
+ *
+ *
+ * constructor(private autostart: Autostart) { }
+ *
+ * ...
+ *
+ * this.autostart.enable();
+ *
+ * this.autostart.disable();
+ *
+ * ```
+ */
+@Plugin({
+ pluginName: 'Autostart',
+ plugin: 'cordova-plugin-autostart',
+ pluginRef: 'cordova.plugins.autoStart',
+ repo: 'https://github.com/ToniKorin/cordova-plugin-autostart',
+ platforms: ['Android']
+})
+@Injectable()
+export class Autostart extends IonicNativePlugin {
+
+ /**
+ * Enable the automatic startup after the boot
+ */
+ @Cordova({ sync: true })
+ enable(): void { }
+
+ /**
+ * Disable the automatic startup after the boot
+ */
+ @Cordova({ sync: true })
+ disable(): void { }
+
+}
diff --git a/src/@ionic-native/plugins/background-fetch/index.ts b/src/@ionic-native/plugins/background-fetch/index.ts
index 2812ab1dd..67bcae52a 100644
--- a/src/@ionic-native/plugins/background-fetch/index.ts
+++ b/src/@ionic-native/plugins/background-fetch/index.ts
@@ -1,9 +1,6 @@
import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
-declare var window;
-
-
export interface BackgroundFetchConfig {
/**
diff --git a/src/@ionic-native/plugins/background-geolocation/index.ts b/src/@ionic-native/plugins/background-geolocation/index.ts
index b48b9c806..fc7e94e4f 100644
--- a/src/@ionic-native/plugins/background-geolocation/index.ts
+++ b/src/@ionic-native/plugins/background-geolocation/index.ts
@@ -2,8 +2,6 @@ import { Injectable } from '@angular/core';
import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
import { Observable } from 'rxjs/Observable';
-declare var window;
-
export interface BackgroundGeolocationResponse {
/**
@@ -448,13 +446,13 @@ export class BackgroundGeolocation extends IonicNativePlugin {
/**
* Display app settings to change permissions
*/
- @Cordova({sync: true})
+ @Cordova({ sync: true })
showAppSettings(): void { }
/**
* Display device location settings
*/
- @Cordova({sync: true})
+ @Cordova({ sync: true })
showLocationSettings(): void { }
/**
diff --git a/src/@ionic-native/plugins/background-mode/index.ts b/src/@ionic-native/plugins/background-mode/index.ts
index 37c90164b..9455d13c6 100644
--- a/src/@ionic-native/plugins/background-mode/index.ts
+++ b/src/@ionic-native/plugins/background-mode/index.ts
@@ -148,7 +148,16 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- moveToBackground(): void {}
+ moveToBackground(): void { }
+
+ /**
+ * Enable GPS-tracking in background (Android).
+ */
+ @Cordova({
+ platforms: ['Android'],
+ sync: true
+ })
+ disableWebViewOptimizations (): void { }
/**
* Android allows to programmatically move from background to foreground.
@@ -157,7 +166,7 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- moveToForeground(): void {}
+ moveToForeground(): void { }
/**
* Override the back button on Android to go to background instead of closing the app.
@@ -166,7 +175,7 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- overrideBackButton(): void {}
+ overrideBackButton(): void { }
/**
* Exclude the app from the recent task list works on Android 5.0+.
@@ -175,7 +184,7 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- excludeFromTaskList(): void {}
+ excludeFromTaskList(): void { }
/**
* The method works async instead of isActive() or isEnabled().
@@ -192,7 +201,7 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- wakeUp(): void {}
+ wakeUp(): void { }
/**
* Turn screen on and show app even locked
@@ -201,6 +210,6 @@ export class BackgroundMode extends IonicNativePlugin {
platforms: ['Android'],
sync: true
})
- unlock(): void {}
+ unlock(): void { }
}
diff --git a/src/@ionic-native/plugins/backlight/index.ts b/src/@ionic-native/plugins/backlight/index.ts
index a9dd268fc..ab9c638da 100644
--- a/src/@ionic-native/plugins/backlight/index.ts
+++ b/src/@ionic-native/plugins/backlight/index.ts
@@ -9,7 +9,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
* This plugin adds turning on/off the device backlight.
*
* @usage
- * ```
+ * ```typescript
* import { Backlight } from '@ionic-native/backlight';
*
* constructor(private backlight: Backlight) { }
diff --git a/src/@ionic-native/plugins/barcode-scanner/index.ts b/src/@ionic-native/plugins/barcode-scanner/index.ts
index 1d4eb4b94..388fdf2d0 100644
--- a/src/@ionic-native/plugins/barcode-scanner/index.ts
+++ b/src/@ionic-native/plugins/barcode-scanner/index.ts
@@ -1,7 +1,6 @@
import { Injectable } from '@angular/core';
import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
-
export interface BarcodeScannerOptions {
/**
@@ -56,6 +55,12 @@ export interface BarcodeScannerOptions {
}
+export interface BarcodeScanResult {
+ format: 'QR_CODE' | 'DATA_MATRIX' | 'UPC_E' | 'UPC_A' | 'EAN_8' | 'EAN_13' | 'CODE_128' | 'CODE_39' | 'CODE_93' | 'CODABAR' | 'ITF' | 'RSS14' | 'RSS_EXPANDED' | 'PDF417' | 'AZTEC' | 'MSI';
+ cancelled: boolean;
+ text: string;
+}
+
/**
* @name Barcode Scanner
* @description
@@ -80,6 +85,7 @@ export interface BarcodeScannerOptions {
* ```
* @interfaces
* BarcodeScannerOptions
+ * BarcodeScanResult
*/
@Plugin({
pluginName: 'BarcodeScanner',
@@ -111,7 +117,7 @@ export class BarcodeScanner extends IonicNativePlugin {
@Cordova({
callbackOrder: 'reverse'
})
- scan(options?: BarcodeScannerOptions): Promise { return; }
+ scan(options?: BarcodeScannerOptions): Promise { return; }
/**
* Encodes data into a barcode.
diff --git a/src/@ionic-native/plugins/base64-to-gallery/index.ts b/src/@ionic-native/plugins/base64-to-gallery/index.ts
index 7c0b51fa1..0acc4da06 100644
--- a/src/@ionic-native/plugins/base64-to-gallery/index.ts
+++ b/src/@ionic-native/plugins/base64-to-gallery/index.ts
@@ -40,7 +40,7 @@ export class Base64ToGallery extends IonicNativePlugin {
successIndex: 2,
errorIndex: 3
})
- base64ToGallery(data: string, options?: {prefix?: string; mediaScanner?: boolean}): Promise {
+ base64ToGallery(data: string, options?: { prefix?: string; mediaScanner?: boolean }): Promise {
return;
}
diff --git a/src/@ionic-native/plugins/ble/index.ts b/src/@ionic-native/plugins/ble/index.ts
index 409947c5e..eb35c4789 100644
--- a/src/@ionic-native/plugins/ble/index.ts
+++ b/src/@ionic-native/plugins/ble/index.ts
@@ -35,59 +35,59 @@ import { Observable } from 'rxjs/Observable';
*
* ```typescript
* {
- * "name": "Battery Demo",
- * "id": "20:FF:D0:FF:D1:C0",
- * "advertising": [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],
- * "rssi": -55
+ * 'name': 'Battery Demo',
+ * 'id': '20:FF:D0:FF:D1:C0',
+ * 'advertising': [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],
+ * 'rssi': -55
* }
* ```
* After connecting, the peripheral object also includes service, characteristic and descriptor information.
*
* ```typescript
* {
- * "name": "Battery Demo",
- * "id": "20:FF:D0:FF:D1:C0",
- * "advertising": [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],
- * "rssi": -55,
- * "services": [
- * "1800",
- * "1801",
- * "180f"
+ * 'name': 'Battery Demo',
+ * 'id': '20:FF:D0:FF:D1:C0',
+ * 'advertising': [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121],
+ * 'rssi': -55,
+ * 'services': [
+ * '1800',
+ * '1801',
+ * '180f'
* ],
- * "characteristics": [
+ * 'characteristics': [
* {
- * "service": "1800",
- * "characteristic": "2a00",
- * "properties": [
- * "Read"
+ * 'service': '1800',
+ * 'characteristic': '2a00',
+ * 'properties': [
+ * 'Read'
* ]
* },
* {
- * "service": "1800",
- * "characteristic": "2a01",
- * "properties": [
- * "Read"
+ * 'service': '1800',
+ * 'characteristic': '2a01',
+ * 'properties': [
+ * 'Read'
* ]
* },
* {
- * "service": "1801",
- * "characteristic": "2a05",
- * "properties": [
- * "Read"
+ * 'service': '1801',
+ * 'characteristic': '2a05',
+ * 'properties': [
+ * 'Read'
* ]
* },
* {
- * "service": "180f",
- * "characteristic": "2a19",
- * "properties": [
- * "Read"
+ * 'service': '180f',
+ * 'characteristic': '2a19',
+ * 'properties': [
+ * 'Read'
* ],
- * "descriptors": [
+ * 'descriptors': [
* {
- * "uuid": "2901"
+ * 'uuid': '2901'
* },
* {
- * "uuid": "2904"
+ * 'uuid': '2904'
* }
* ]
* }
@@ -104,10 +104,10 @@ import { Observable } from 'rxjs/Observable';
*
* ```typescript
* {
- * "name": "demo",
- * "id": "00:1A:7D:DA:71:13",
- * "advertising": ArrayBuffer,
- * "rssi": -37
+ * 'name': 'demo',
+ * 'id': '00:1A:7D:DA:71:13',
+ * 'advertising': ArrayBuffer,
+ * 'rssi': -37
* }
* ```
*
@@ -119,24 +119,24 @@ import { Observable } from 'rxjs/Observable';
*
* ```typescript
* {
- * "name": "demo",
- * "id": "D8479A4F-7517-BCD3-91B5-3302B2F81802",
- * "advertising": {
- * "kCBAdvDataChannel": 37,
- * "kCBAdvDataServiceData": {
- * "FED8": {
- * "byteLength": 7 // data not shown
+ * 'name': 'demo',
+ * 'id': 'D8479A4F-7517-BCD3-91B5-3302B2F81802',
+ * 'advertising': {
+ * 'kCBAdvDataChannel': 37,
+ * 'kCBAdvDataServiceData': {
+ * 'FED8': {
+ * 'byteLength': 7 // data not shown
* }
* },
- * "kCBAdvDataLocalName": "demo",
- * "kCBAdvDataServiceUUIDs": ["FED8"],
- * "kCBAdvDataManufacturerData": {
- * "byteLength": 7 // data not shown
+ * 'kCBAdvDataLocalName': 'demo',
+ * 'kCBAdvDataServiceUUIDs': ['FED8'],
+ * 'kCBAdvDataManufacturerData': {
+ * 'byteLength': 7 // data not shown
* },
- * "kCBAdvDataTxPowerLevel": 32,
- * "kCBAdvDataIsConnectable": true
+ * 'kCBAdvDataTxPowerLevel': 32,
+ * 'kCBAdvDataIsConnectable': true
* },
- * "rssi": -53
+ * 'rssi': -53
* }
* ```
*
@@ -230,7 +230,7 @@ export class BLE extends IonicNativePlugin {
clearFunction: 'stopScan',
clearWithArgs: false
})
- startScanWithOptions(services: string[], options: {reportDuplicates?: boolean} | any): Observable { return; }
+ startScanWithOptions(services: string[], options: { reportDuplicates?: boolean } | any): Observable { return; }
/**
* Stop a scan started by `startScan`.
@@ -306,14 +306,14 @@ export class BLE extends IonicNativePlugin {
* // send 1 byte to switch a light on
* var data = new Uint8Array(1);
* data[0] = 1;
- * BLE.write(device_id, "FF10", "FF11", data.buffer);
+ * BLE.write(device_id, 'FF10', 'FF11', data.buffer);
*
* // send a 3 byte value with RGB color
* var data = new Uint8Array(3);
* data[0] = 0xFF; // red
* data[0] = 0x00; // green
* data[0] = 0xFF; // blue
- * BLE.write(device_id, "ccc0", "ccc1", data.buffer);
+ * BLE.write(device_id, 'ccc0', 'ccc1', data.buffer);
*
* // send a 32 bit integer
* var data = new Uint32Array(1);
@@ -357,7 +357,7 @@ export class BLE extends IonicNativePlugin {
*
* @usage
* ```
- * BLE.startNotification(device_id, "FF10", "FF11").subscribe(buffer => {
+ * BLE.startNotification(device_id, 'FF10', 'FF11').subscribe(buffer => {
* console.log(String.fromCharCode.apply(null, new Uint8Array(buffer));
* });
* ```
diff --git a/src/@ionic-native/plugins/bluetooth-serial/index.ts b/src/@ionic-native/plugins/bluetooth-serial/index.ts
index 2ecc59983..ec5e3f336 100644
--- a/src/@ionic-native/plugins/bluetooth-serial/index.ts
+++ b/src/@ionic-native/plugins/bluetooth-serial/index.ts
@@ -13,7 +13,7 @@ import { Observable } from 'rxjs/Observable';
*
*
* // Write a string
- * this.bluetoothSerial.write("hello world").then(success, failure);
+ * this.bluetoothSerial.write('hello world').then(success, failure);
*
* // Array of int or bytes
* this.bluetoothSerial.write([186, 220, 222]).then(success, failure);
diff --git a/src/@ionic-native/plugins/brightness/index.ts b/src/@ionic-native/plugins/brightness/index.ts
index e7a2b4b37..d6a4aa677 100644
--- a/src/@ionic-native/plugins/brightness/index.ts
+++ b/src/@ionic-native/plugins/brightness/index.ts
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
+
/**
* @name Brightness
* @description
diff --git a/src/@ionic-native/plugins/broadcaster/index.ts b/src/@ionic-native/plugins/broadcaster/index.ts
index b7fe65520..8aabbb902 100644
--- a/src/@ionic-native/plugins/broadcaster/index.ts
+++ b/src/@ionic-native/plugins/broadcaster/index.ts
@@ -8,7 +8,7 @@ import { Observable } from 'rxjs/Observable';
* This plugin adds exchanging events between native code and your app.
*
* @usage
- * ```
+ * ```typescript
* import { Broadcaster } from '@ionic-native/broadcaster';
*
* constructor(private broadcaster: Broadcaster) { }
@@ -16,7 +16,7 @@ import { Observable } from 'rxjs/Observable';
* ...
*
* // Listen to events from Native
- * this.broadcaster.addEventListener('eventName').then((event) => console.log(event));
+ * this.broadcaster.addEventListener('eventName').subscribe((event) => console.log(event));
*
* // Send event to Native
* this.broadcaster.fireNativeEvent('eventName', {}).then(() => console.log('success'));
diff --git a/src/@ionic-native/plugins/browser-tab/index.ts b/src/@ionic-native/plugins/browser-tab/index.ts
index 03e8dd763..d41848c07 100644
--- a/src/@ionic-native/plugins/browser-tab/index.ts
+++ b/src/@ionic-native/plugins/browser-tab/index.ts
@@ -7,7 +7,7 @@ import { Injectable } from '@angular/core';
* This plugin provides an interface to in-app browser tabs that exist on some mobile platforms, specifically [Custom Tabs](http://developer.android.com/tools/support-library/features.html#custom-tabs) on Android (including the [Chrome Custom Tabs](https://developer.chrome.com/multidevice/android/customtabs) implementation), and [SFSafariViewController](https://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/) on iOS.
*
* @usage
- * ```
+ * ```typescript
* import { BrowserTab } from '@ionic-native/browser-tab';
*
* constructor(private browserTab: BrowserTab) {
diff --git a/src/@ionic-native/plugins/calendar/index.ts b/src/@ionic-native/plugins/calendar/index.ts
index 8094b267f..329df3666 100644
--- a/src/@ionic-native/plugins/calendar/index.ts
+++ b/src/@ionic-native/plugins/calendar/index.ts
@@ -59,7 +59,7 @@ export interface CalendarOptions {
*
*
* @usage
- * ```
+ * ```typescript
* import { Calendar } from '@ionic-native/calendar';
*
* constructor(private calendar: Calendar) { }
diff --git a/src/@ionic-native/plugins/call-number/index.ts b/src/@ionic-native/plugins/call-number/index.ts
index 4d4d06e29..b7be20acf 100644
--- a/src/@ionic-native/plugins/call-number/index.ts
+++ b/src/@ionic-native/plugins/call-number/index.ts
@@ -6,7 +6,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
* Call a number directly from your Cordova/Ionic application.
*
* @usage
- * ```
+ * ```typescript
* import { CallNumber } from '@ionic-native/call-number';
*
* constructor(private callNumber: CallNumber) { }
diff --git a/src/@ionic-native/plugins/camera-preview/index.ts b/src/@ionic-native/plugins/camera-preview/index.ts
index b8f29a8bb..0700fbe94 100644
--- a/src/@ionic-native/plugins/camera-preview/index.ts
+++ b/src/@ionic-native/plugins/camera-preview/index.ts
@@ -39,12 +39,12 @@ export interface CameraPreviewOptions {
}
export interface CameraPreviewPictureOptions {
- /** The width in pixels, default 0 */
- width?: number;
- /** The height in pixels, default 0 */
- height?: number;
- /** The picture quality, 0 - 100, default 85 */
- quality?: number;
+ /** The width in pixels, default 0 */
+ width?: number;
+ /** The height in pixels, default 0 */
+ height?: number;
+ /** The picture quality, 0 - 100, default 85 */
+ quality?: number;
}
/**
@@ -57,7 +57,7 @@ export interface CameraPreviewPictureOptions {
*
* @usage
* ```typescript
- * import { CameraPreview, PictureOptions, CameraPreviewOptions, CameraPreviewDimensions } from '@ionic-native/camera-preview';
+ * import { CameraPreview, CameraPreviewPictureOptions, CameraPreviewOptions, CameraPreviewDimensions } from '@ionic-native/camera-preview';
*
* constructor(private cameraPreview: CameraPreview) { }
*
@@ -93,7 +93,7 @@ export interface CameraPreviewPictureOptions {
*
*
* // picture options
- * const pictureOpts: PictureOptions = {
+ * const pictureOpts: CameraPreviewPictureOptions = {
* width: 1280,
* height: 1280,
* quality: 85
@@ -134,7 +134,18 @@ export interface CameraPreviewPictureOptions {
@Injectable()
export class CameraPreview extends IonicNativePlugin {
- EXPOSURE_MODES = {
+ FOCUS_MODE = {
+ FIXED: 'fixed',
+ AUTO: 'auto',
+ CONTINUOUS: 'continuous', // IOS Only
+ CONTINUOUS_PICTURE: 'continuous-picture', // Android Only
+ CONTINUOUS_VIDEO: 'continuous-video', // Android Only
+ EDOF: 'edof', // Android Only
+ INFINITY: 'infinity', // Android Only
+ MACRO: 'macro' // Android Only
+ };
+
+ EXPOSURE_MODE = {
LOCK: 'lock', // IOS Only
AUTO: 'auto', // IOS Only
CONTINUOUS: 'continuous',
@@ -240,10 +251,10 @@ export class CameraPreview extends IonicNativePlugin {
})
setZoom(zoom?: number): Promise { return; }
-/**
- * Get the maximum zoom (Android)
- * @return {Promise}
- */
+ /**
+ * Get the maximum zoom (Android)
+ * @return {Promise}
+ */
@Cordova()
getMaxZoom(): Promise { return; }
@@ -265,6 +276,38 @@ export class CameraPreview extends IonicNativePlugin {
})
setPreviewSize(dimensions?: CameraPreviewDimensions): Promise { return; }
+ /**
+ * Get focus mode
+ * @return {Promise}
+ */
+ @Cordova()
+ getFocusMode(): Promise { return; }
+
+ /**
+ * Set the focus mode
+ * @param [focusMode] {string} 'fixed', 'auto', 'continuous-picture', 'continuous-video' (iOS & Android), 'edof', 'infinity', 'macro' (Android Only)
+ * @return {Promise}
+ */
+ @Cordova({
+ successIndex: 1,
+ errorIndex: 2
+ })
+ setFocusMode(focusMode?: string): Promise { return; }
+
+ /**
+ * Get supported focus modes
+ * @return {Promise}
+ */
+ @Cordova()
+ getSupportedFocusModes(): Promise { return; }
+
+ /**
+ * Get the current flash mode
+ * @return {Promise}
+ */
+ @Cordova()
+ getFlashMode(): Promise { return; }
+
/**
* Set the flashmode
* @param [flashMode] {string} 'off' (iOS & Android), 'on' (iOS & Android), 'auto' (iOS & Android), 'torch' (Android)
@@ -276,13 +319,6 @@ export class CameraPreview extends IonicNativePlugin {
})
setFlashMode(flashMode?: string): Promise { return; }
- /**
- * Get supported picture sizes
- * @return {Promise}
- */
- @Cordova()
- getSupportedPictureSizes(): Promise { return; }
-
/**
* Get supported flash modes
* @return {Promise}
@@ -290,6 +326,13 @@ export class CameraPreview extends IonicNativePlugin {
@Cordova()
getSupportedFlashModes(): Promise { return; }
+ /**
+ * Get supported picture sizes
+ * @return {Promise}
+ */
+ @Cordova()
+ getSupportedPictureSizes(): Promise { return; }
+
/**
* Get exposure mode
* @return {Promise}
@@ -340,4 +383,13 @@ export class CameraPreview extends IonicNativePlugin {
@Cordova()
getExposureCompensationRange(): Promise { return; }
+ /**
+ * Set specific focus point. Note, this assumes the camera is full-screen.
+ * @param xPoint {number}
+ * @param yPoint {number}
+ * @return {Promise}
+ */
+ @Cordova()
+ tapToFocus(xPoint: number, yPoint: number): Promise { return; }
+
}
diff --git a/src/@ionic-native/plugins/card-io/index.ts b/src/@ionic-native/plugins/card-io/index.ts
index ab54349ec..8163be018 100644
--- a/src/@ionic-native/plugins/card-io/index.ts
+++ b/src/@ionic-native/plugins/card-io/index.ts
@@ -133,7 +133,7 @@ export interface CardIOResponse {
* @name Card IO
* @description
* @usage
- * ```
+ * ```typescript
* import { CardIO } from '@ionic-native/card-io';
*
* constructor(private cardIO: CardIO) { }
diff --git a/src/@ionic-native/plugins/code-push/index.ts b/src/@ionic-native/plugins/code-push/index.ts
index b12908925..59b5591cf 100644
--- a/src/@ionic-native/plugins/code-push/index.ts
+++ b/src/@ionic-native/plugins/code-push/index.ts
@@ -109,8 +109,8 @@ interface LocalPackage_Static {
}
/* tslint:enable */
-declare var RemotePackage: RemotePackage_Static;
-declare var LocalPackage: LocalPackage_Static;
+declare const RemotePackage: RemotePackage_Static;
+declare const LocalPackage: LocalPackage_Static;
/**
* Defines the JSON format of the current package information file.
diff --git a/src/@ionic-native/plugins/contacts/index.ts b/src/@ionic-native/plugins/contacts/index.ts
index 586c98f7e..4e17d4a00 100644
--- a/src/@ionic-native/plugins/contacts/index.ts
+++ b/src/@ionic-native/plugins/contacts/index.ts
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { CordovaInstance, InstanceProperty, Plugin, getPromise, InstanceCheck, checkAvailability, CordovaCheck, IonicNativePlugin } from '@ionic-native/core';
-declare var window: any,
+declare const window: any,
navigator: any;
export type ContactFieldType = '*' | 'addresses' | 'birthday' | 'categories' | 'country' | 'department' | 'displayName' | 'emails' | 'familyName' | 'formatted' | 'givenName' | 'honorificPrefix' | 'honorificSuffix' | 'id' | 'ims' | 'locality' | 'middleName' | 'name' | 'nickname' | 'note' | 'organizations' | 'phoneNumbers' | 'photos' | 'postalCode' | 'region' | 'streetAddress' | 'title' | 'urls';
@@ -49,6 +49,7 @@ export interface IContactProperties {
/** An array of web pages associated with the contact. */
urls?: IContactField[];
+
}
/**
@@ -71,6 +72,8 @@ export class Contact implements IContactProperties {
@InstanceProperty categories: IContactField[];
@InstanceProperty urls: IContactField[];
+ [key: string]: any;
+
constructor() {
if (checkAvailability('navigator.contacts', 'create', 'Contacts') === true) {
this._objectInstance = navigator.contacts.create();
@@ -79,7 +82,7 @@ export class Contact implements IContactProperties {
@InstanceCheck()
clone(): Contact {
- let newContact = new Contact();
+ let newContact: any = new Contact();
for (let prop in this) {
if (prop === 'id') return;
newContact[prop] = this[prop];
@@ -92,8 +95,8 @@ export class Contact implements IContactProperties {
@InstanceCheck()
save(): Promise {
- return getPromise((resolve, reject) => {
- this._objectInstance.save((contact) => {
+ return getPromise((resolve: Function, reject: Function) => {
+ this._objectInstance.save((contact: any) => {
this._objectInstance = contact;
resolve(this);
}, reject);
@@ -114,7 +117,7 @@ export interface IContactError {
/**
* @hidden
*/
-export declare var ContactError: {
+export declare const ContactError: {
new (code: number): IContactError;
UNKNOWN_ERROR: number;
INVALID_ARGUMENT_ERROR: number;
@@ -145,16 +148,16 @@ export interface IContactName {
*/
export class ContactName implements IContactName {
constructor(public formatted?: string,
- public familyName?: string,
- public givenName?: string,
- public middleName?: string,
- public honorificPrefix?: string,
- public honorificSuffix?: string) {}
+ public familyName?: string,
+ public givenName?: string,
+ public middleName?: string,
+ public honorificPrefix?: string,
+ public honorificSuffix?: string) { }
}
export interface IContactField {
/** A string that indicates what type of field this is, home for example. */
- type?: string;
+ type?: string;
/** The value of the field, such as a phone number or email address. */
value?: string;
/** Set to true if this ContactField contains the user's preferred value. */
@@ -166,15 +169,15 @@ export interface IContactField {
*/
export class ContactField implements IContactField {
constructor(public type?: string,
- public value?: string,
- public pref?: boolean) {}
+ public value?: string,
+ public pref?: boolean) { }
}
export interface IContactAddress {
/** Set to true if this ContactAddress contains the user's preferred value. */
pref?: boolean;
/** A string indicating what type of field this is, home for example. */
- type?: string;
+ type?: string;
/** The full address formatted for display. */
formatted?: string;
/** The full street address. */
@@ -194,20 +197,20 @@ export interface IContactAddress {
*/
export class ContactAddress implements IContactAddress {
constructor(public pref?: boolean,
- public type?: string,
- public formatted?: string,
- public streetAddress?: string,
- public locality?: string,
- public region?: string,
- public postalCode?: string,
- public country?: string) {}
+ public type?: string,
+ public formatted?: string,
+ public streetAddress?: string,
+ public locality?: string,
+ public region?: string,
+ public postalCode?: string,
+ public country?: string) { }
}
export interface IContactOrganization {
/** Set to true if this ContactOrganization contains the user's preferred value. */
pref?: boolean;
/** A string that indicates what type of field this is, home for example. */
- type?: string;
+ type?: string;
/** The name of the organization. */
name?: string;
/** The department the contract works for. */
@@ -226,7 +229,7 @@ export class ContactOrganization implements IContactOrganization {
public department?: string,
public title?: string,
public pref?: boolean
- ) {}
+ ) { }
}
/** Search options to filter navigator.contacts. */
@@ -248,9 +251,9 @@ export interface IContactFindOptions {
*/
export class ContactFindOptions implements IContactFindOptions {
constructor(public filter?: string,
- public multiple?: boolean,
- public desiredFields?: string[],
- public hasPhoneNumber?: boolean) {}
+ public multiple?: boolean,
+ public desiredFields?: string[],
+ public hasPhoneNumber?: boolean) { }
}
/**
@@ -312,8 +315,8 @@ export class Contacts extends IonicNativePlugin {
*/
@CordovaCheck()
find(fields: ContactFieldType[], options?: IContactFindOptions): Promise {
- return getPromise((resolve, reject) => {
- navigator.contacts.find(fields, (contacts) => {
+ return getPromise((resolve: Function, reject: Function) => {
+ navigator.contacts.find(fields, (contacts: any[]) => {
resolve(contacts.map(processContact));
}, reject, options);
});
@@ -325,8 +328,8 @@ export class Contacts extends IonicNativePlugin {
*/
@CordovaCheck()
pickContact(): Promise {
- return getPromise((resolve, reject) => {
- navigator.contacts.pickContact((contact) => resolve(processContact(contact)), reject);
+ return getPromise((resolve: Function, reject: Function) => {
+ navigator.contacts.pickContact((contact: any) => resolve(processContact(contact)), reject);
});
}
@@ -335,7 +338,7 @@ export class Contacts extends IonicNativePlugin {
/**
* @hidden
*/
-function processContact(contact) {
+function processContact(contact: any) {
let newContact = new Contact();
for (let prop in contact) {
if (typeof contact[prop] === 'function') continue;
diff --git a/src/@ionic-native/plugins/couchbase-lite/index.ts b/src/@ionic-native/plugins/couchbase-lite/index.ts
index cd48254a6..8d843e208 100644
--- a/src/@ionic-native/plugins/couchbase-lite/index.ts
+++ b/src/@ionic-native/plugins/couchbase-lite/index.ts
@@ -8,7 +8,7 @@ import { Injectable } from '@angular/core';
* Plugin to install Couchbase Lite in your PhoneGap app on iOS or Android
*
* @usage
- * ```
+ * ```typescript
* import { CouchbaseLite } from '@ionic-native/couchbase-lite';
*
* constructor(private couchbase: CouchbaseLite) {
@@ -38,6 +38,6 @@ export class CouchbaseLite extends IonicNativePlugin {
@Cordova({
callbackStyle: 'node'
})
- getURL(): Promise { return; }
+ getURL(): Promise { return; }
}
diff --git a/src/@ionic-native/plugins/crop/index.ts b/src/@ionic-native/plugins/crop/index.ts
index f411de3fc..52c5c041e 100644
--- a/src/@ionic-native/plugins/crop/index.ts
+++ b/src/@ionic-native/plugins/crop/index.ts
@@ -5,7 +5,7 @@ import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
* @name Crop
* @description Crops images
* @usage
- * ```
+ * ```typescript
* import { Crop } from '@ionic-native/crop';
*
* constructor(private crop: Crop) { }
@@ -14,8 +14,8 @@ import { Cordova, Plugin, IonicNativePlugin } from '@ionic-native/core';
*
* this.crop.crop('path/to/image.jpg', {quality: 75})
* .then(
- * newImage => console.log("new image path is: " + newImage),
- * error => console.error("Error cropping image", error)
+ * newImage => console.log('new image path is: ' + newImage),
+ * error => console.error('Error cropping image', error)
* );
* ```
*/
@@ -38,6 +38,6 @@ export class Crop extends IonicNativePlugin {
@Cordova({
callbackOrder: 'reverse'
})
- crop(pathToImage: string, options?: {quality: number}): Promise { return; }
+ crop(pathToImage: string, options?: { quality: number }): Promise { return; }
}
diff --git a/src/@ionic-native/plugins/deeplinks/index.ts b/src/@ionic-native/plugins/deeplinks/index.ts
index cea92ba02..f48dcf0ab 100644
--- a/src/@ionic-native/plugins/deeplinks/index.ts
+++ b/src/@ionic-native/plugins/deeplinks/index.ts
@@ -98,7 +98,7 @@ export class Deeplinks extends IonicNativePlugin {
@Cordova({
observable: true
})
- route(paths): Observable { return; }
+ route(paths: any): Observable { return; }
/**
*
@@ -121,6 +121,6 @@ export class Deeplinks extends IonicNativePlugin {
@Cordova({
observable: true
})
- routeWithNavController(navController, paths): Observable { return; }
+ routeWithNavController(navController: any, paths: any): Observable { return; }
}
diff --git a/src/@ionic-native/plugins/device-feedback/index.ts b/src/@ionic-native/plugins/device-feedback/index.ts
index 066d18ab1..5246e4e6d 100644
--- a/src/@ionic-native/plugins/device-feedback/index.ts
+++ b/src/@ionic-native/plugins/device-feedback/index.ts
@@ -7,7 +7,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
* Plugin that lets you provide haptic or acoustic feedback on Android devices.
*
* @usage
- * ```
+ * ```typescript
* import { DeviceFeedback } from '@ionic-native/device-feedback';
*
* constructor(private deviceFeedback: DeviceFeedback) { }
diff --git a/src/@ionic-native/plugins/device/index.ts b/src/@ionic-native/plugins/device/index.ts
index 92a8cb57b..e2efd7e92 100644
--- a/src/@ionic-native/plugins/device/index.ts
+++ b/src/@ionic-native/plugins/device/index.ts
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { CordovaProperty, Plugin, IonicNativePlugin } from '@ionic-native/core';
-declare var window: any;
+declare const window: any;
/**
* @name Device
diff --git a/src/@ionic-native/plugins/diagnostic/index.ts b/src/@ionic-native/plugins/diagnostic/index.ts
index fb9b0119f..4937ff72c 100644
--- a/src/@ionic-native/plugins/diagnostic/index.ts
+++ b/src/@ionic-native/plugins/diagnostic/index.ts
@@ -144,10 +144,12 @@ export class Diagnostic extends IonicNativePlugin {
/**
* Checks if the device has a camera. On Android this returns true if the device has a camera. On iOS this returns true if both the device has a camera AND the application is authorized to use it. On Windows 10 Mobile this returns true if both the device has a rear-facing camera AND the
* application is authorized to use it.
+ * @param {boolean} [externalStorage] Android only: If true, checks permission for READ_EXTERNAL_STORAGE in addition to CAMERA run-time permission.
+ * cordova-plugin-camera@2.2+ requires both of these permissions. Defaults to true.
* @returns {Promise}
*/
- @Cordova()
- isCameraAvailable(): Promise { return; }
+ @Cordova({ callbackOrder: 'reverse' })
+ isCameraAvailable( externalStorage?: boolean ): Promise { return; }
/**
* Checks if the device has Bluetooth capabilities and if so that Bluetooth is switched on (same on Android, iOS and Windows 10 Mobile)
@@ -251,24 +253,30 @@ export class Diagnostic extends IonicNativePlugin {
/**
* Checks if the application is authorized to use the camera.
* Note for Android: this is intended for Android 6 / API 23 and above. Calling on Android 5 / API 22 and below will always return TRUE as permissions are already granted at installation time.
+ * @param {boolean} [externalStorage] Android only: If true, checks permission for READ_EXTERNAL_STORAGE in addition to CAMERA run-time permission.
+ * cordova-plugin-camera@2.2+ requires both of these permissions. Defaults to true.
* @returns {Promise}
*/
- @Cordova({ platforms: ['Android', 'iOS'] })
- isCameraAuthorized(): Promise { return; }
+ @Cordova({ platforms: ['Android', 'iOS'], callbackOrder: 'reverse' })
+ isCameraAuthorized( externalStorage?: boolean ): Promise { return; }
/**
* Returns the camera authorization status for the application.
+ * @param {boolean} [externalStorage] Android only: If true, checks permission for READ_EXTERNAL_STORAGE in addition to CAMERA run-time permission.
+ * cordova-plugin-camera@2.2+ requires both of these permissions. Defaults to true.
* @returns {Promise}
*/
- @Cordova({ platforms: ['Android', 'iOS'] })
- getCameraAuthorizationStatus(): Promise { return; }
+ @Cordova({ platforms: ['Android', 'iOS'], callbackOrder: 'reverse' })
+ getCameraAuthorizationStatus( externalStorage?: boolean ): Promise { return; }
/**
* Requests camera authorization for the application.
+ * @param {boolean} [externalStorage] Android only: If true, requests permission for READ_EXTERNAL_STORAGE in addition to CAMERA run-time permission.
+ * cordova-plugin-camera@2.2+ requires both of these permissions. Defaults to true.
* @returns {Promise}
*/
- @Cordova({ platforms: ['Android', 'iOS'] })
- requestCameraAuthorization(): Promise { return; }
+ @Cordova({ platforms: ['Android', 'iOS'], callbackOrder: 'reverse' })
+ requestCameraAuthorization( externalStorage?: boolean ): Promise { return; }
/**
* Checks if the application is authorized to use the microphone.
@@ -614,10 +622,10 @@ export class Diagnostic extends IonicNativePlugin {
/**
* Returns the authorization status for the application to use the Camera Roll in Photos app.
- * @returns {Promise}
+ * @returns {Promise}
*/
@Cordova({ platforms: ['iOS'] })
- getCameraRollAuthorizationStatus(): Promise { return; }
+ getCameraRollAuthorizationStatus(): Promise { return; }
/**
* Requests camera roll authorization for the application.
diff --git a/src/@ionic-native/plugins/dialogs/index.ts b/src/@ionic-native/plugins/dialogs/index.ts
index 72fc98d3e..04ae9166a 100644
--- a/src/@ionic-native/plugins/dialogs/index.ts
+++ b/src/@ionic-native/plugins/dialogs/index.ts
@@ -75,7 +75,7 @@ export class Dialogs extends IonicNativePlugin {
successIndex: 1,
errorIndex: 4
})
- confirm(message, title?: string, buttonLabels?: string[]): Promise { return; }
+ confirm(message: string, title?: string, buttonLabels?: string[]): Promise { return; }
/**
* Displays a native dialog box that is more customizable than the browser's prompt function.
diff --git a/src/@ionic-native/plugins/document-viewer/index.ts b/src/@ionic-native/plugins/document-viewer/index.ts
new file mode 100644
index 000000000..aec4abb64
--- /dev/null
+++ b/src/@ionic-native/plugins/document-viewer/index.ts
@@ -0,0 +1,102 @@
+import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+
+export interface DocumentViewerOptions {
+ title: string;
+ documentView: {
+ closeLabel: string;
+ };
+ navigationView: {
+ closeLabel: string;
+ };
+ email: {
+ enabled: boolean;
+ };
+ print: {
+ enabled: boolean;
+ };
+ openWith: {
+ enabled: boolean;
+ };
+ bookmarks: {
+ enabled: boolean;
+ };
+ search: {
+ enabled: boolean;
+ };
+ autoClose: {
+ onPause: boolean;
+ };
+}
+
+/**
+ * @name Document Viewer
+ * @description
+ * This plugin offers a slim API to view PDF files which are either stored in the apps assets folder (/www/*) or in any other file system directory available via the cordova file plugin.
+ *
+ * @usage
+ * ```typescript
+ * import { DocumentViewer } from '@ionic-native/document-viewer';
+ *
+ *
+ * constructor(private document: DocumentViewer) { }
+ *
+ * ...
+ * const options: DocumentViewerOptions = {
+ * title: 'My PDF'
+ * }
+ *
+ * this.document.viewDocument('assets/myFile.pdf', 'application/pdf', options)
+ *
+ * ```
+ *
+ * @interfaces
+ * DocumentViewerOptions
+ */
+@Plugin({
+ pluginName: 'Document Viewer',
+ plugin: 'cordova-plugin-document-viewer',
+ pluginRef: 'SitewaertsDocumentViewer',
+ repo: 'https://github.com/sitewaerts/cordova-plugin-document-viewer',
+ platforms: ['Android', 'iOS', 'Windows']
+})
+@Injectable()
+export class DocumentViewer extends IonicNativePlugin {
+
+ /**
+ * Displays the email composer pre-filled with data.
+ *
+ * @returns {Promise} Resolves promise when the EmailComposer has been opened
+ */
+ @Cordova()
+ getSupportInfo(): Promise { return; }
+
+ /**
+ * Check if the document can be shown
+ *
+ * @param url {string} Url to the file
+ * @param contentType {string} Content type of the file
+ * @param options {Array} options
+ * @param [onPossible] {Function}
+ * @param [onMissingApp] {Function}
+ * @param [onImpossible] {Function}
+ * @param [onError] {Function}
+ */
+ @Cordova({ sync: true })
+ canViewDocument(url: string, contentType: string, options: DocumentViewerOptions, onPossible?: Function, onMissingApp?: Function, onImpossible?: Function, onError?: Function): void { }
+
+ /**
+ * Opens the file
+ *
+ * @param url {string} Url to the file
+ * @param contentType {string} Content type of the file
+ * @param options {Array} options
+ * @param [onShow] {Function}
+ * @param [onClose] {Function}
+ * @param [onMissingApp] {Function}
+ * @param [onError] {Function}
+ */
+ @Cordova({ sync: true })
+ viewDocument(url: string, contentType: string, options: Array, onShow?: Function, onClose?: Function, onMissingApp?: Function, onError?: Function): void { }
+
+}
diff --git a/src/@ionic-native/plugins/email-composer/index.ts b/src/@ionic-native/plugins/email-composer/index.ts
index dc9612653..fb21df3d7 100644
--- a/src/@ionic-native/plugins/email-composer/index.ts
+++ b/src/@ionic-native/plugins/email-composer/index.ts
@@ -1,7 +1,11 @@
import { Injectable } from '@angular/core';
import { Cordova, Plugin, CordovaCheck, IonicNativePlugin } from '@ionic-native/core';
-declare var cordova: any;
+interface Cordova {
+ plugins: CordovaPlugins & { email: any };
+}
+
+declare const cordova: Cordova;
export interface EmailComposerOptions {
@@ -25,14 +29,11 @@ export interface EmailComposerOptions {
/**
- * @beta
* @name Email Composer
* @description
*
* Requires Cordova plugin: cordova-plugin-email-composer. For more info, please see the [Email Composer plugin docs](https://github.com/hypery2k/cordova-email-plugin).
*
- * DISCLAIMER: This plugin is experiencing issues with the latest versions of Cordova. Use at your own risk. Functionality is not guaranteed. Please stay tuned for a more stable version.
- * A good alternative to this plugin is the social sharing plugin.
*
* @usage
* ```typescript
@@ -91,7 +92,7 @@ export class EmailComposer extends IonicNativePlugin {
isAvailable(app?: string): Promise {
return new Promise((resolve, reject) => {
if (app) {
- cordova.plugins.email.isAvailable(app, (isAvailable) => {
+ cordova.plugins.email.isAvailable(app, (isAvailable: boolean) => {
if (isAvailable) {
resolve();
} else {
@@ -99,7 +100,7 @@ export class EmailComposer extends IonicNativePlugin {
}
});
} else {
- cordova.plugins.email.isAvailable((isAvailable) => {
+ cordova.plugins.email.isAvailable((isAvailable: boolean) => {
if (isAvailable) {
resolve();
} else {
diff --git a/src/@ionic-native/plugins/facebook/index.ts b/src/@ionic-native/plugins/facebook/index.ts
index 174fb0389..f5dc71f06 100644
--- a/src/@ionic-native/plugins/facebook/index.ts
+++ b/src/@ionic-native/plugins/facebook/index.ts
@@ -104,6 +104,8 @@ export interface FacebookLoginResponse {
* .catch(e => console.log('Error logging into Facebook', e));
*
*
+ * this.fb.logEvent(this.fb.EVENTS.EVENT_NAME_ADDED_TO_CART);
+ *
* ```
*
*/
@@ -119,6 +121,41 @@ export interface FacebookLoginResponse {
@Injectable()
export class Facebook extends IonicNativePlugin {
+ EVENTS: {
+ EVENT_NAME_ACTIVATED_APP: 'fb_mobile_activate_app',
+ EVENT_NAME_DEACTIVATED_APP: 'fb_mobile_deactivate_app',
+ EVENT_NAME_SESSION_INTERRUPTIONS: 'fb_mobile_app_interruptions',
+ EVENT_NAME_TIME_BETWEEN_SESSIONS: 'fb_mobile_time_between_sessions',
+ EVENT_NAME_COMPLETED_REGISTRATION: 'fb_mobile_complete_registration',
+ EVENT_NAME_VIEWED_CONTENT: 'fb_mobile_content_view',
+ EVENT_NAME_SEARCHED: 'fb_mobile_search',
+ EVENT_NAME_RATED: 'fb_mobile_rate',
+ EVENT_NAME_COMPLETED_TUTORIAL: 'fb_mobile_tutorial_completion',
+ EVENT_NAME_PUSH_TOKEN_OBTAINED: 'fb_mobile_obtain_push_token',
+ EVENT_NAME_ADDED_TO_CART: 'fb_mobile_add_to_cart',
+ EVENT_NAME_ADDED_TO_WISHLIST: 'fb_mobile_add_to_wishlist',
+ EVENT_NAME_INITIATED_CHECKOUT: 'fb_mobile_initiated_checkout',
+ EVENT_NAME_ADDED_PAYMENT_INFO: 'fb_mobile_add_payment_info',
+ EVENT_NAME_PURCHASED: 'fb_mobile_purchase',
+ EVENT_NAME_ACHIEVED_LEVEL: 'fb_mobile_level_achieved',
+ EVENT_NAME_UNLOCKED_ACHIEVEMENT: 'fb_mobile_achievement_unlocked',
+ EVENT_NAME_SPENT_CREDITS: 'fb_mobile_spent_credits',
+ EVENT_PARAM_CURRENCY: 'fb_currency',
+ EVENT_PARAM_REGISTRATION_METHOD: 'fb_registration_method',
+ EVENT_PARAM_CONTENT_TYPE: 'fb_content_type',
+ EVENT_PARAM_CONTENT_ID: 'fb_content_id',
+ EVENT_PARAM_SEARCH_STRING: 'fb_search_string',
+ EVENT_PARAM_SUCCESS: 'fb_success',
+ EVENT_PARAM_MAX_RATING_VALUE: 'fb_max_rating_value',
+ EVENT_PARAM_PAYMENT_INFO_AVAILABLE: 'fb_payment_info_available',
+ EVENT_PARAM_NUM_ITEMS: 'fb_num_items',
+ EVENT_PARAM_LEVEL: 'fb_level',
+ EVENT_PARAM_DESCRIPTION: 'fb_description',
+ EVENT_PARAM_SOURCE_APPLICATION: 'fb_mobile_launch_source',
+ EVENT_PARAM_VALUE_YES: '1',
+ EVENT_PARAM_VALUE_NO: '0'
+ };
+
/**
* Browser wrapper
* @param {number} appId Your Facebook AppID from their dashboard
@@ -135,16 +172,17 @@ export class Facebook extends IonicNativePlugin {
*
* ```typescript
* {
- * status: "connected",
+ * status: 'connected',
* authResponse: {
* session_key: true,
- * accessToken: "kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn",
+ * accessToken: 'kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn',
* expiresIn: 5183979,
- * sig: "...",
- * secret: "...",
- * userID: "634565435"
+ * sig: '...',
+ * secret: '...',
+ * userID: '634565435'
* }
* }
+ *
* ```
*
* @param {string[]} permissions List of [permissions](https://developers.facebook.com/docs/facebook-login/permissions) this app has upon logging in.
@@ -174,13 +212,13 @@ export class Facebook extends IonicNativePlugin {
* ```
* {
* authResponse: {
- * userID: "12345678912345",
- * accessToken: "kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn",
+ * userID: '12345678912345',
+ * accessToken: 'kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn',
* session_Key: true,
- * expiresIn: "5183738",
- * sig: "..."
+ * expiresIn: '5183738',
+ * sig: '...'
* },
- * status: "connected"
+ * status: 'connected'
* }
* ```
*
@@ -204,10 +242,10 @@ export class Facebook extends IonicNativePlugin {
*
* ```
* {
- * method: "share",
- * href: "http://example.com",
- * caption: "Such caption, very feed.",
- * description: "Much description",
+ * method: 'share',
+ * href: 'http://example.com',
+ * caption: 'Such caption, very feed.',
+ * description: 'Much description',
* picture: 'http://example.com/image.png'
* }
* ```
diff --git a/src/@ionic-native/plugins/fcm/index.ts b/src/@ionic-native/plugins/fcm/index.ts
new file mode 100644
index 000000000..4b0a52c0f
--- /dev/null
+++ b/src/@ionic-native/plugins/fcm/index.ts
@@ -0,0 +1,118 @@
+import { Plugin, IonicNativePlugin, Cordova } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+
+export interface NotificationData {
+
+ /**
+ * Determines whether the notification was pressed or not
+ */
+
+ wasTapped: boolean;
+
+ /**
+ * Notification data hash item
+ */
+
+ [name: string]: any;
+
+}
+
+/**
+ * @name FCM
+ * @description
+ * Provides basic functionality for Firebase Cloud Messaging
+ *
+ * @usage
+ * ```typescript
+ * import { FCM } from 'ionic-native';
+ *
+ * constructor(private fcm: FCM) {}
+ *
+ * ...
+ *
+ * fcm.subscribeToTopic('marketing');
+ *
+ * fcm.getToken().then(token=>{
+ * backend.registerToken(token);
+ * })
+ *
+ * fcm.onNotification().subscribe(data=>{
+ * if(data.wasPressed){
+ * console.log("Received in background");
+ * } else {
+ * console.log("Received in foreground");
+ * };
+ * })
+ *
+ * fcm.onTokenRefresh().subscribe(token=>{
+ * backend.registerToken(token);
+ * })
+ *
+ * fcm.unsubscribeFromTopic('marketing');
+ *
+ * ```
+ * @interfaces
+ * NotificationData
+ */
+@Plugin({
+ pluginName: 'FCM',
+ plugin: 'cordova-plugin-fcm',
+ pluginRef: 'FCMPlugin',
+ repo: 'https://github.com/fechanique/cordova-plugin-fcm',
+ platforms: ['iOS', 'Android']
+})
+@Injectable()
+export class FCM extends IonicNativePlugin {
+
+ /**
+ * Get's device's current registration id
+ *
+ * @returns {Promise} Returns a Promise that resolves with the registration id token
+ */
+ @Cordova()
+ getToken(): Promise { return; }
+
+ /**
+ * Event firing on the token refresh
+ *
+ * @returns {Observable} Returns an Observable that notifies with the change of device's registration id
+ */
+ @Cordova({
+ observable: true
+ })
+ onTokenRefresh(): Observable { return; }
+
+ /**
+ * Subscribes you to a [topic](https://firebase.google.com/docs/notifications/android/console-topics)
+ *
+ * @param {string} topic Topic to be subscribed to
+ *
+ * @returns {Promise} Returns a promise resolving in result of subscribing to a topic
+ */
+ @Cordova()
+ subscribeToTopic(topic: string): Promise { return; }
+
+ /**
+ * Unubscribes you from a [topic](https://firebase.google.com/docs/notifications/android/console-topics)
+ *
+ * @param {string} topic Topic to be unsubscribed from
+ *
+ * @returns {Promise} Returns a promise resolving in result of unsubscribing from a topic
+ */
+ @Cordova()
+ unsubscribeFromTopic(topic: string): Promise { return; }
+
+ /**
+ * Watch for incoming notifications
+ *
+ * @returns {Observable} returns an object with data from the notification
+ */
+ @Cordova({
+ observable: true,
+ successIndex: 0,
+ errorIndex: 2
+ })
+ onNotification(): Observable { return; }
+
+}
diff --git a/src/@ionic-native/plugins/file-chooser/index.ts b/src/@ionic-native/plugins/file-chooser/index.ts
index ae35b0197..15b2a347a 100644
--- a/src/@ionic-native/plugins/file-chooser/index.ts
+++ b/src/@ionic-native/plugins/file-chooser/index.ts
@@ -8,7 +8,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
* Opens the file picker on Android for the user to select a file, returns a file URI.
*
* @usage
- * ```
+ * ```typescript
* import { FileChooser } from '@ionic-native/file-chooser';
*
* constructor(private fileChooser: FileChooser) { }
@@ -23,7 +23,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
*/
@Plugin({
pluginName: 'FileChooser',
- plugin: 'http://github.com/don/cordova-filechooser.git',
+ plugin: 'https://github.com/don/cordova-filechooser.git',
pluginRef: 'fileChooser',
repo: 'https://github.com/don/cordova-filechooser',
platforms: ['Android']
diff --git a/src/@ionic-native/plugins/file-encryption/index.ts b/src/@ionic-native/plugins/file-encryption/index.ts
new file mode 100644
index 000000000..345cdb2e3
--- /dev/null
+++ b/src/@ionic-native/plugins/file-encryption/index.ts
@@ -0,0 +1,52 @@
+import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
+import { Injectable } from '@angular/core';
+
+/**
+ * @name File Encryption
+ * @description
+ * Simple file encryption for Cordova.
+ *
+ * @usage
+ * ```typescript
+ * import { FileEncryption } from '@ionic-native/file-encryption';
+ *
+ *
+ * constructor(private fileEncryption: FileEncryption) { }
+ *
+ * ...
+ *
+ * this.fileEncryption.decrypt('assets/json/topSecret.json', 'secretKey');
+ *
+ * this.fileEncryption.encrypt('assets/json/topSecret.json', 'secretKey');
+ *
+ * ```
+ */
+@Plugin({
+ pluginName: 'FileEncryption',
+ plugin: 'cordova-safe',
+ pluginRef: 'cordova.plugins.disusered',
+ repo: 'https://github.com/disusered/cordova-safe',
+ platforms: ['Android', 'iOS']
+})
+@Injectable()
+export class FileEncryption extends IonicNativePlugin {
+
+ /**
+ * Enrcypt a file
+ * @param file {string} A string representing a local URI
+ * @param key {string} A key for the crypto operations
+ * @return {Promise} Returns a promise that resolves when something happens
+ */
+ @Cordova()
+ encrypt(file: string, key: string): Promise { return; }
+
+ /**
+ * Decrypt a file
+ * @param file {string} A string representing a local URI
+ * @param key {string} A key for the crypto operations
+ * @return {Promise} Returns a promise that resolves when something happens
+ */
+ @Cordova()
+ decrypt(file: string, key: string): Promise { return; }
+
+}
diff --git a/src/@ionic-native/plugins/file-opener/index.ts b/src/@ionic-native/plugins/file-opener/index.ts
index d1f5917dc..1250e1c7d 100644
--- a/src/@ionic-native/plugins/file-opener/index.ts
+++ b/src/@ionic-native/plugins/file-opener/index.ts
@@ -7,7 +7,7 @@ import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
* This plugin will open a file on your device file system with its default application.
*
* @usage
- * ```
+ * ```typescript
* import { FileOpener } from '@ionic-native/file-opener';
*
* constructor(private fileOpener: FileOpener) { }
@@ -41,7 +41,7 @@ export class FileOpener extends IonicNativePlugin {
successName: 'success',
errorName: 'error'
})
- open(filePath: string, fileMIMEType: string): Promise {return; }
+ open(filePath: string, fileMIMEType: string): Promise { return; }
/**
* Uninstalls a package
@@ -53,7 +53,7 @@ export class FileOpener extends IonicNativePlugin {
successName: 'success',
errorName: 'error'
})
- uninstall(packageId: string): Promise {return; }
+ uninstall(packageId: string): Promise { return; }
/**
* Check if an app is already installed
@@ -65,6 +65,6 @@ export class FileOpener extends IonicNativePlugin {
successName: 'success',
errorName: 'error'
})
- appIsInstalled(packageId: string): Promise {return; }
+ appIsInstalled(packageId: string): Promise { return; }
}
diff --git a/src/@ionic-native/plugins/file-path/index.ts b/src/@ionic-native/plugins/file-path/index.ts
index 2154eaa83..29dc9b719 100644
--- a/src/@ionic-native/plugins/file-path/index.ts
+++ b/src/@ionic-native/plugins/file-path/index.ts
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
-declare var window: any;
+declare const window: any;
/**
* @name File Path
@@ -10,7 +10,7 @@ declare var window: any;
* This plugin allows you to resolve the native filesystem path for Android content URIs and is based on code in the aFileChooser library.
*
* @usage
- * ```
+ * ```typescript
* import { FilePath } from '@ionic-native/file-path';
*
* constructor(private filePath: FilePath) { }
@@ -39,6 +39,6 @@ export class FilePath extends IonicNativePlugin {
* @returns {Promise}
*/
@Cordova()
- resolveNativePath(path: string): Promise {return; }
+ resolveNativePath(path: string): Promise { return; }
}
diff --git a/src/@ionic-native/plugins/file/index.ts b/src/@ionic-native/plugins/file/index.ts
index ef18ab0c7..12d06a550 100644
--- a/src/@ionic-native/plugins/file/index.ts
+++ b/src/@ionic-native/plugins/file/index.ts
@@ -1,158 +1,398 @@
import { Injectable } from '@angular/core';
import { CordovaProperty, Plugin, CordovaCheck, IonicNativePlugin } from '@ionic-native/core';
-declare var window: any;
-declare var cordova: any;
-
-/** This interface represents a file system. */
-export interface FileSystem {
- /* The name of the file system, unique across the list of exposed file systems. */
+export interface IFile extends Blob {
+ /**
+ * Name of the file, without path information
+ */
name: string;
- /** The root directory of the file system. */
- root: DirectoryEntry;
+ /**
+ * Last modified date
+ */
+ lastModified: number;
+ /**
+ * Last modified date
+ */
+ lastModifiedDate: number;
+ /**
+ * Size in bytes
+ */
+ size: number;
+ /**
+ * File mime type
+ */
+ type: string;
+ localURL: string;
+ start: number;
+ end: number;
+ /**
+ * Returns a "slice" of the file. Since Cordova Files don't contain the actual
+ * content, this really returns a File with adjusted start and end.
+ * Slices of slices are supported.
+ * @param start {Number} The index at which to start the slice (inclusive).
+ * @param end {Number} The index at which to end the slice (exclusive).
+ */
+ slice(start: number, end: number): Blob;
+}
+
+export interface LocalFileSystem {
+
+ /**
+ * Used for storage with no guarantee of persistence.
+ */
+ TEMPORARY: number;
+
+ /**
+ * Used for storage that should not be removed by the user agent without application or user permission.
+ */
+ PERSISTENT: number;
+
+ /**
+ * Requests a filesystem in which to store application data.
+ * @param type Whether the filesystem requested should be persistent, as defined above. Use one of TEMPORARY or PERSISTENT.
+ * @param size This is an indicator of how much storage space, in bytes, the application expects to need.
+ * @param successCallback The callback that is called when the user agent provides a filesystem.
+ * @param errorCallback A callback that is called when errors happen, or when the request to obtain the filesystem is denied.
+ */
+ requestFileSystem(type: number, size: number, successCallback: FileSystemCallback, errorCallback?: ErrorCallback): void;
+
+ /**
+ * Allows the user to look up the Entry for a file or directory referred to by a local URL.
+ * @param url A URL referring to a local file in a filesystem accessable via this API.
+ * @param successCallback A callback that is called to report the Entry to which the supplied URL refers.
+ * @param errorCallback A callback that is called when errors happen, or when the request to obtain the Entry is denied.
+ */
+ resolveLocalFileSystemURL(url: string, successCallback: EntryCallback, errorCallback?: ErrorCallback): void;
+
+ /**
+ * see requestFileSystem.
+ */
+ webkitRequestFileSystem(type: number, size: number, successCallback: FileSystemCallback, errorCallback?: ErrorCallback): void;
+}
+
+export interface Metadata {
+ /**
+ * This is the time at which the file or directory was last modified.
+ * @readonly
+ */
+ modificationTime: Date;
+
+ /**
+ * The size of the file, in bytes. This must return 0 for directories.
+ * @readonly
+ */
+ size: number;
+}
+
+export interface Flags {
+ /**
+ * Used to indicate that the user wants to create a file or directory if it was not previously there.
+ */
+ create?: boolean;
+
+ /**
+ * By itself, exclusive must have no effect. Used with create, it must cause getFile and getDirectory to fail if the target path already exists.
+ */
+ exclusive?: boolean;
}
/**
- * An abstract interface representing entries in a file system,
- * each of which may be a File or DirectoryEntry.
+ * This export interface represents a file system.
*/
-export interface Entry {
- /** Entry is a file. */
- isFile: boolean;
- /** Entry is a directory. */
- isDirectory: boolean;
- /** The name of the entry, excluding the path leading to it. */
+export interface FileSystem {
+ /**
+ * This is the name of the file system. The specifics of naming filesystems is unspecified, but a name must be unique across the list of exposed file systems.
+ * @readonly
+ */
name: string;
- /** The full absolute path from the root to the entry. */
- fullPath: string;
- /** The file system on which the entry resides. */
- filesystem: FileSystem;
- nativeURL: string;
+
+ /**
+ * The root directory of the file system.
+ * @readonly
+ */
+ root: DirectoryEntry;
+
+ toJSON(): string;
+
+ encodeURIPath(path: string): string;
+
+}
+
+export interface Entry {
+
+ /**
+ * Entry is a file.
+ */
+ isFile: boolean;
+
+ /**
+ * Entry is a directory.
+ */
+ isDirectory: boolean;
+
/**
* Look up metadata about this entry.
* @param successCallback A callback that is called with the time of the last modification.
- * @param errorCallback A callback that is called when errors happen.
+ * @param errorCallback ErrorCallback A callback that is called when errors happen.
*/
- getMetadata(successCallback: (metadata: Metadata) => void,
- errorCallback?: (error: FileError) => void): void;
+ getMetadata(successCallback: MetadataCallback, errorCallback?: ErrorCallback): void;
+
+ /**
+ * Set the metadata of the entry.
+ * @param successCallback {Function} is called with a Metadata object
+ * @param errorCallback {Function} is called with a FileError
+ * @param metadataObject {Metadata} keys and values to set
+ */
+ setMetadata(successCallback: MetadataCallback, errorCallback: ErrorCallback, metadataObject: Metadata): void;
+
+ /**
+ * The name of the entry, excluding the path leading to it.
+ */
+ name: string;
+
+ /**
+ * The full absolute path from the root to the entry.
+ */
+ fullPath: string;
+
+ /**
+ * The file system on which the entry resides.
+ */
+ filesystem: FileSystem;
+
+ /**
+ * an alternate URL which can be used by native webview controls, for example media players.
+ */
+ nativeURL: string;
+
/**
* Move an entry to a different location on the file system. It is an error to try to:
- * move a directory inside itself or to any child at any depth;move an entry into its parent if a name different from its current one isn't provided;
- * move a file to a path occupied by a directory;
- * move a directory to a path occupied by a file;
- * move any element to a path occupied by a directory which is not empty.
+ *
+ *
+ *
move a directory inside itself or to any child at any depth;
+ *
move an entry into its parent if a name different from its current one isn't provided;
+ *
move a file to a path occupied by a directory;
+ *
move a directory to a path occupied by a file;
+ *
move any element to a path occupied by a directory which is not empty.
+ *
+ *
* A move of a file on top of an existing file must attempt to delete and replace that file.
* A move of a directory on top of an existing empty directory must attempt to delete and replace that directory.
- * @param parent The directory to which to move the entry.
- * @param newName The new name of the entry. Defaults to the Entry's current name if unspecified.
- * @param successCallback A callback that is called with the Entry for the new location.
- * @param errorCallback A callback that is called when errors happen.
*/
- moveTo(parent: DirectoryEntry,
- newName?: string,
- successCallback?: (entry: Entry) => void,
- errorCallback?: (error: FileError) => void): void;
+ moveTo(parent: DirectoryEntry, newName?: string, successCallback?: EntryCallback, errorCallback?: ErrorCallback): void;
+
/**
* Copy an entry to a different location on the file system. It is an error to try to:
- * copy a directory inside itself or to any child at any depth;
- * copy an entry into its parent if a name different from its current one isn't provided;
- * copy a file to a path occupied by a directory;
- * copy a directory to a path occupied by a file;
- * copy any element to a path occupied by a directory which is not empty.
- * A copy of a file on top of an existing file must attempt to delete and replace that file.
- * A copy of a directory on top of an existing empty directory must attempt to delete and replace that directory.
+ *
+ *
+ *
copy a directory inside itself or to any child at any depth;
+ *
copy an entry into its parent if a name different from its current one isn't provided;
+ *
copy a file to a path occupied by a directory;
+ *
copy a directory to a path occupied by a file;
+ *
copy any element to a path occupied by a directory which is not empty.
+ *
A copy of a file on top of an existing file must attempt to delete and replace that file.
+ *
A copy of a directory on top of an existing empty directory must attempt to delete and replace that directory.
+ *
+ *
* Directory copies are always recursive--that is, they copy all contents of the directory.
- * @param parent The directory to which to move the entry.
- * @param newName The new name of the entry. Defaults to the Entry's current name if unspecified.
- * @param successCallback A callback that is called with the Entry for the new object.
- * @param errorCallback A callback that is called when errors happen.
*/
- copyTo(parent: DirectoryEntry,
- newName?: string,
- successCallback?: (entry: Entry) => void,
- errorCallback?: (error: FileError) => void): void;
+ copyTo(parent: DirectoryEntry, newName?: string, successCallback?: EntryCallback, errorCallback?: ErrorCallback): void;
+
/**
- * Returns a URL that can be used as the src attribute of a