2017-10-30 15:40:50 +00:00
|
|
|
// (C) Copyright 2015 Martin Dougiamas
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
import { NgModule } from '@angular/core';
|
|
|
|
import { Platform } from 'ionic-angular';
|
|
|
|
|
2018-01-08 08:21:51 +00:00
|
|
|
// Ionic Native services.
|
2018-02-23 13:44:17 +00:00
|
|
|
import { Badge } from '@ionic-native/badge';
|
2018-01-08 08:21:51 +00:00
|
|
|
import { Camera } from '@ionic-native/camera';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { Clipboard } from '@ionic-native/clipboard';
|
2018-02-23 13:44:17 +00:00
|
|
|
import { Device } from '@ionic-native/device';
|
2017-11-08 13:48:34 +00:00
|
|
|
import { File } from '@ionic-native/file';
|
2018-05-11 07:25:37 +00:00
|
|
|
import { FileOpener } from '@ionic-native/file-opener';
|
2017-11-09 12:00:08 +00:00
|
|
|
import { FileTransfer } from '@ionic-native/file-transfer';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { Globalization } from '@ionic-native/globalization';
|
2017-12-08 12:45:30 +00:00
|
|
|
import { InAppBrowser } from '@ionic-native/in-app-browser';
|
2018-01-11 07:27:11 +00:00
|
|
|
import { Keyboard } from '@ionic-native/keyboard';
|
2017-11-14 14:43:03 +00:00
|
|
|
import { LocalNotifications } from '@ionic-native/local-notifications';
|
2018-01-08 08:21:51 +00:00
|
|
|
import { MediaCapture } from '@ionic-native/media-capture';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { Network } from '@ionic-native/network';
|
2018-02-23 13:44:17 +00:00
|
|
|
import { Push } from '@ionic-native/push';
|
2018-01-11 07:27:11 +00:00
|
|
|
import { SplashScreen } from '@ionic-native/splash-screen';
|
|
|
|
import { StatusBar } from '@ionic-native/status-bar';
|
|
|
|
import { SQLite } from '@ionic-native/sqlite';
|
2018-05-11 09:15:53 +00:00
|
|
|
import { WebIntent } from '@ionic-native/web-intent';
|
2017-11-08 13:48:34 +00:00
|
|
|
import { Zip } from '@ionic-native/zip';
|
2017-11-09 12:00:08 +00:00
|
|
|
|
2018-01-08 08:21:51 +00:00
|
|
|
// Services that Mock Ionic Native in browser an desktop.
|
2018-04-09 09:44:12 +00:00
|
|
|
import { BadgeMock } from './providers/badge';
|
2018-01-08 08:21:51 +00:00
|
|
|
import { CameraMock } from './providers/camera';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { ClipboardMock } from './providers/clipboard';
|
2017-11-09 12:00:08 +00:00
|
|
|
import { FileMock } from './providers/file';
|
2018-05-11 07:25:37 +00:00
|
|
|
import { FileOpenerMock } from './providers/file-opener';
|
2017-11-09 12:00:08 +00:00
|
|
|
import { FileTransferMock } from './providers/file-transfer';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { GlobalizationMock } from './providers/globalization';
|
2017-12-08 12:45:30 +00:00
|
|
|
import { InAppBrowserMock } from './providers/inappbrowser';
|
2017-11-14 14:43:03 +00:00
|
|
|
import { LocalNotificationsMock } from './providers/local-notifications';
|
2018-01-08 08:21:51 +00:00
|
|
|
import { MediaCaptureMock } from './providers/media-capture';
|
2017-10-30 15:40:50 +00:00
|
|
|
import { NetworkMock } from './providers/network';
|
2018-04-09 09:44:12 +00:00
|
|
|
import { PushMock } from './providers/push';
|
2017-11-08 13:48:34 +00:00
|
|
|
import { ZipMock } from './providers/zip';
|
2017-10-30 15:40:50 +00:00
|
|
|
|
2017-11-21 15:35:41 +00:00
|
|
|
import { CoreEmulatorHelperProvider } from './providers/helper';
|
2018-01-08 08:21:51 +00:00
|
|
|
import { CoreEmulatorCaptureHelperProvider } from './providers/capture-helper';
|
2018-03-01 15:55:49 +00:00
|
|
|
import { CoreAppProvider } from '@providers/app';
|
|
|
|
import { CoreFileProvider } from '@providers/file';
|
|
|
|
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
|
|
|
import { CoreUrlUtilsProvider } from '@providers/utils/url';
|
|
|
|
import { CoreUtilsProvider } from '@providers/utils/utils';
|
|
|
|
import { CoreInitDelegate } from '@providers/init';
|
2017-11-08 13:48:34 +00:00
|
|
|
|
2018-02-13 13:38:04 +00:00
|
|
|
// List of Ionic Native providers.
|
|
|
|
export const IONIC_NATIVE_PROVIDERS = [
|
2018-06-08 07:03:48 +00:00
|
|
|
Badge,
|
2018-02-13 13:38:04 +00:00
|
|
|
Camera,
|
|
|
|
Clipboard,
|
2018-06-08 07:03:48 +00:00
|
|
|
Device,
|
2018-02-13 13:38:04 +00:00
|
|
|
File,
|
2018-06-08 07:03:48 +00:00
|
|
|
FileOpener,
|
2018-02-13 13:38:04 +00:00
|
|
|
FileTransfer,
|
|
|
|
Globalization,
|
|
|
|
InAppBrowser,
|
|
|
|
Keyboard,
|
|
|
|
LocalNotifications,
|
|
|
|
MediaCapture,
|
|
|
|
Network,
|
2018-06-08 07:03:48 +00:00
|
|
|
Push,
|
2018-02-13 13:38:04 +00:00
|
|
|
SplashScreen,
|
|
|
|
StatusBar,
|
|
|
|
SQLite,
|
2018-06-08 07:03:48 +00:00
|
|
|
WebIntent,
|
2018-02-13 13:38:04 +00:00
|
|
|
Zip
|
|
|
|
];
|
|
|
|
|
2018-01-08 08:21:51 +00:00
|
|
|
/**
|
|
|
|
* This module handles the emulation of Cordova plugins in browser and desktop.
|
|
|
|
*
|
|
|
|
* It includes the "mock" of all the Ionic Native services that should be supported in browser and desktop,
|
|
|
|
* otherwise those features would only work in a Cordova environment.
|
|
|
|
*
|
|
|
|
* This module also determines if the app should use the original service or the mock. In each of the "useFactory"
|
|
|
|
* functions we check if the app is running in mobile or not, and then provide the right service to use.
|
|
|
|
*/
|
2017-10-30 15:40:50 +00:00
|
|
|
@NgModule({
|
|
|
|
declarations: [
|
|
|
|
],
|
|
|
|
imports: [
|
|
|
|
],
|
|
|
|
providers: [
|
2018-04-09 09:44:12 +00:00
|
|
|
{
|
|
|
|
provide: Badge,
|
|
|
|
deps: [CoreAppProvider],
|
|
|
|
useFactory: (appProvider: CoreAppProvider): Badge => {
|
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
|
|
|
return appProvider.isMobile() ? new Badge() : new BadgeMock(appProvider);
|
|
|
|
}
|
|
|
|
},
|
2017-11-21 15:35:41 +00:00
|
|
|
CoreEmulatorHelperProvider,
|
2018-01-08 08:21:51 +00:00
|
|
|
CoreEmulatorCaptureHelperProvider,
|
|
|
|
{
|
|
|
|
provide: Camera,
|
|
|
|
deps: [CoreAppProvider, CoreEmulatorCaptureHelperProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider, captureHelper: CoreEmulatorCaptureHelperProvider): Camera => {
|
2018-01-08 08:21:51 +00:00
|
|
|
return appProvider.isMobile() ? new Camera() : new CameraMock(captureHelper);
|
|
|
|
}
|
|
|
|
},
|
2017-10-30 15:40:50 +00:00
|
|
|
{
|
|
|
|
provide: Clipboard,
|
|
|
|
deps: [CoreAppProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider): Clipboard => {
|
2017-10-30 15:40:50 +00:00
|
|
|
return appProvider.isMobile() ? new Clipboard() : new ClipboardMock(appProvider);
|
|
|
|
}
|
|
|
|
},
|
2018-02-23 13:44:17 +00:00
|
|
|
Device,
|
2017-11-08 13:48:34 +00:00
|
|
|
{
|
|
|
|
provide: File,
|
|
|
|
deps: [CoreAppProvider, CoreTextUtilsProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider, textUtils: CoreTextUtilsProvider): File => {
|
2017-11-08 13:48:34 +00:00
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
|
|
|
return appProvider.isMobile() ? new File() : new FileMock(appProvider, textUtils);
|
|
|
|
}
|
|
|
|
},
|
2018-05-11 07:25:37 +00:00
|
|
|
{
|
|
|
|
provide: FileOpener,
|
|
|
|
deps: [CoreAppProvider],
|
|
|
|
useFactory: (appProvider: CoreAppProvider): FileOpener => {
|
|
|
|
return appProvider.isMobile() ? new FileOpener() : new FileOpenerMock(appProvider);
|
|
|
|
}
|
|
|
|
},
|
2017-11-09 12:00:08 +00:00
|
|
|
{
|
|
|
|
provide: FileTransfer,
|
|
|
|
deps: [CoreAppProvider, CoreFileProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider, fileProvider: CoreFileProvider): FileTransfer => {
|
2017-11-09 12:00:08 +00:00
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
|
|
|
return appProvider.isMobile() ? new FileTransfer() : new FileTransferMock(appProvider, fileProvider);
|
|
|
|
}
|
|
|
|
},
|
2017-10-30 15:40:50 +00:00
|
|
|
{
|
|
|
|
provide: Globalization,
|
|
|
|
deps: [CoreAppProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider): Globalization => {
|
2017-10-30 15:40:50 +00:00
|
|
|
return appProvider.isMobile() ? new Globalization() : new GlobalizationMock(appProvider);
|
|
|
|
}
|
|
|
|
},
|
2017-12-08 12:45:30 +00:00
|
|
|
{
|
|
|
|
provide: InAppBrowser,
|
|
|
|
deps: [CoreAppProvider, CoreFileProvider, CoreUrlUtilsProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider, fileProvider: CoreFileProvider, urlUtils: CoreUrlUtilsProvider)
|
|
|
|
: InAppBrowser => {
|
2017-12-08 12:45:30 +00:00
|
|
|
return !appProvider.isDesktop() ? new InAppBrowser() : new InAppBrowserMock(appProvider, fileProvider, urlUtils);
|
|
|
|
}
|
|
|
|
},
|
2018-01-11 07:27:11 +00:00
|
|
|
Keyboard,
|
2017-11-14 14:43:03 +00:00
|
|
|
{
|
|
|
|
provide: LocalNotifications,
|
2018-05-30 08:59:43 +00:00
|
|
|
deps: [CoreAppProvider, CoreUtilsProvider, CoreTextUtilsProvider],
|
|
|
|
useFactory: (appProvider: CoreAppProvider, utils: CoreUtilsProvider, txtUtils: CoreTextUtilsProvider)
|
|
|
|
: LocalNotifications => {
|
2017-11-14 14:43:03 +00:00
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
2018-05-30 08:59:43 +00:00
|
|
|
return appProvider.isMobile() ? new LocalNotifications() : new LocalNotificationsMock(appProvider, utils, txtUtils);
|
2017-11-14 14:43:03 +00:00
|
|
|
}
|
|
|
|
},
|
2018-01-08 08:21:51 +00:00
|
|
|
{
|
|
|
|
provide: MediaCapture,
|
|
|
|
deps: [CoreAppProvider, CoreEmulatorCaptureHelperProvider],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (appProvider: CoreAppProvider, captureHelper: CoreEmulatorCaptureHelperProvider): MediaCapture => {
|
2018-01-08 08:21:51 +00:00
|
|
|
return appProvider.isMobile() ? new MediaCapture() : new MediaCaptureMock(captureHelper);
|
|
|
|
}
|
|
|
|
},
|
2017-10-30 15:40:50 +00:00
|
|
|
{
|
|
|
|
provide: Network,
|
|
|
|
deps: [Platform],
|
2018-01-29 09:05:20 +00:00
|
|
|
useFactory: (platform: Platform): Network => {
|
2017-10-30 15:40:50 +00:00
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
|
|
|
return platform.is('cordova') ? new Network() : new NetworkMock();
|
|
|
|
}
|
2017-11-06 16:17:11 +00:00
|
|
|
},
|
2018-04-09 09:44:12 +00:00
|
|
|
{
|
|
|
|
provide: Push,
|
|
|
|
deps: [CoreAppProvider],
|
|
|
|
useFactory: (appProvider: CoreAppProvider): Push => {
|
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
|
|
|
return appProvider.isMobile() ? new Push() : new PushMock(appProvider);
|
|
|
|
}
|
|
|
|
},
|
2018-01-11 07:27:11 +00:00
|
|
|
SplashScreen,
|
|
|
|
StatusBar,
|
|
|
|
SQLite,
|
2018-05-11 09:15:53 +00:00
|
|
|
WebIntent,
|
2017-11-08 13:48:34 +00:00
|
|
|
{
|
|
|
|
provide: Zip,
|
2018-04-26 07:59:00 +00:00
|
|
|
deps: [CoreAppProvider, File, CoreTextUtilsProvider],
|
|
|
|
useFactory: (appProvider: CoreAppProvider, file: File, textUtils: CoreTextUtilsProvider): Zip => {
|
2017-11-08 13:48:34 +00:00
|
|
|
// Use platform instead of CoreAppProvider to prevent circular dependencies.
|
2018-04-26 07:59:00 +00:00
|
|
|
return appProvider.isMobile() ? new Zip() : new ZipMock(file, textUtils);
|
2017-11-08 13:48:34 +00:00
|
|
|
}
|
|
|
|
},
|
2017-10-30 15:40:50 +00:00
|
|
|
]
|
|
|
|
})
|
|
|
|
export class CoreEmulatorModule {
|
2017-11-21 15:35:41 +00:00
|
|
|
constructor(appProvider: CoreAppProvider, initDelegate: CoreInitDelegate, helper: CoreEmulatorHelperProvider) {
|
2018-01-29 09:05:20 +00:00
|
|
|
const win = <any> window; // Convert the "window" to "any" type to be able to use non-standard properties.
|
2017-10-30 15:40:50 +00:00
|
|
|
|
|
|
|
// Emulate Custom URL Scheme plugin in desktop apps.
|
|
|
|
if (appProvider.isDesktop()) {
|
2017-11-08 13:48:34 +00:00
|
|
|
require('electron').ipcRenderer.on('mmAppLaunched', (event, url) => {
|
|
|
|
if (typeof win.handleOpenURL != 'undefined') {
|
|
|
|
win.handleOpenURL(url);
|
|
|
|
}
|
2017-10-30 15:40:50 +00:00
|
|
|
});
|
|
|
|
}
|
2017-11-08 13:48:34 +00:00
|
|
|
|
|
|
|
if (!appProvider.isMobile()) {
|
|
|
|
// Register an init process to load the Mocks that need it.
|
|
|
|
initDelegate.registerProcess(helper);
|
|
|
|
}
|
2017-10-30 15:40:50 +00:00
|
|
|
}
|
|
|
|
}
|