forked from EVOgeek/Vmeda.Online
		
	
						commit
						a93667c9f9
					
				| @ -13,7 +13,7 @@ | |||||||
| // limitations under the License.
 | // limitations under the License.
 | ||||||
| 
 | 
 | ||||||
| import { Component, OnInit, NgZone } from '@angular/core'; | import { Component, OnInit, NgZone } from '@angular/core'; | ||||||
| import { Platform, IonicApp } from 'ionic-angular'; | import { Config, Platform, IonicApp } from 'ionic-angular'; | ||||||
| import { Network } from '@ionic-native/network'; | import { Network } from '@ionic-native/network'; | ||||||
| import { CoreApp, CoreAppProvider } from '@providers/app'; | import { CoreApp, CoreAppProvider } from '@providers/app'; | ||||||
| import { CoreEventsProvider } from '@providers/events'; | import { CoreEventsProvider } from '@providers/events'; | ||||||
| @ -28,6 +28,7 @@ import { Keyboard } from '@ionic-native/keyboard'; | |||||||
| import { ScreenOrientation } from '@ionic-native/screen-orientation'; | import { ScreenOrientation } from '@ionic-native/screen-orientation'; | ||||||
| import { CoreLoginSitesPage } from '@core/login/pages/sites/sites'; | import { CoreLoginSitesPage } from '@core/login/pages/sites/sites'; | ||||||
| import { CoreWindow } from '@singletons/window'; | import { CoreWindow } from '@singletons/window'; | ||||||
|  | import { Device } from '@ionic-native/device'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
|     templateUrl: 'app.html' |     templateUrl: 'app.html' | ||||||
| @ -40,13 +41,62 @@ export class MoodleMobileApp implements OnInit { | |||||||
|     protected lastUrls = {}; |     protected lastUrls = {}; | ||||||
|     protected lastInAppUrl: string; |     protected lastInAppUrl: string; | ||||||
| 
 | 
 | ||||||
|     constructor(private platform: Platform, logger: CoreLoggerProvider, keyboard: Keyboard, private app: IonicApp, |     constructor( | ||||||
|             private eventsProvider: CoreEventsProvider, private loginHelper: CoreLoginHelperProvider, private zone: NgZone, |             private platform: Platform, | ||||||
|             private appProvider: CoreAppProvider, private langProvider: CoreLangProvider, private sitesProvider: CoreSitesProvider, |             logger: CoreLoggerProvider, | ||||||
|             private screenOrientation: ScreenOrientation, private urlSchemesProvider: CoreCustomURLSchemesProvider, |             keyboard: Keyboard, | ||||||
|             private utils: CoreUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private network: Network) { |             config: Config, | ||||||
|  |             device: Device, | ||||||
|  |             private app: IonicApp, | ||||||
|  |             private eventsProvider: CoreEventsProvider, | ||||||
|  |             private loginHelper: CoreLoginHelperProvider, | ||||||
|  |             private zone: NgZone, | ||||||
|  |             private appProvider: CoreAppProvider, | ||||||
|  |             private langProvider: CoreLangProvider, | ||||||
|  |             private sitesProvider: CoreSitesProvider, | ||||||
|  |             private screenOrientation: ScreenOrientation, | ||||||
|  |             private urlSchemesProvider: CoreCustomURLSchemesProvider, | ||||||
|  |             private utils: CoreUtilsProvider, | ||||||
|  |             private urlUtils: CoreUrlUtilsProvider, | ||||||
|  |             private network: Network | ||||||
|  |             ) { | ||||||
|         this.logger = logger.getInstance('AppComponent'); |         this.logger = logger.getInstance('AppComponent'); | ||||||
| 
 | 
 | ||||||
|  |         if (this.appProvider.isIOS() && !platform.is('ios')) { | ||||||
|  |             // Solve problem with wrong detected iPadOS.
 | ||||||
|  |             const platforms = platform.platforms(); | ||||||
|  |             const index = platforms.indexOf('core'); | ||||||
|  |             if (index > -1) { | ||||||
|  |                 platforms.splice(index, 1); | ||||||
|  |             } | ||||||
|  |             platforms.push('mobile'); | ||||||
|  |             platforms.push('ios'); | ||||||
|  |             platforms.push('ipad'); | ||||||
|  |             platforms.push('tablet'); | ||||||
|  | 
 | ||||||
|  |             app.setElementClass('app-root-ios', true); | ||||||
|  |             platform.ready().then(() => { | ||||||
|  |                 if (device.version) { | ||||||
|  |                     const [major, minor]: string[] = device.version.split('.', 2); | ||||||
|  |                     app.setElementClass('platform-ios' + major, true); | ||||||
|  |                     app.setElementClass('platform-ios' + major + '_' + minor, true); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             app._elementRef.nativeElement.classList.remove('app-root-md'); | ||||||
|  | 
 | ||||||
|  |             const iosConfig = config.getModeConfig('ios'); | ||||||
|  | 
 | ||||||
|  |             config.set('mode', 'ios'); | ||||||
|  | 
 | ||||||
|  |             Object.keys(iosConfig).forEach((key) => { | ||||||
|  |                 // Already overriden: pageTransition, do not change.
 | ||||||
|  |                 if (key != 'pageTransition') { | ||||||
|  |                     config.set('ios', key, iosConfig[key]); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         platform.ready().then(() => { |         platform.ready().then(() => { | ||||||
|             // Okay, so the platform is ready and our plugins are available.
 |             // Okay, so the platform is ready and our plugins are available.
 | ||||||
|             // Here you can do any higher level native things you might need.
 |             // Here you can do any higher level native things you might need.
 | ||||||
|  | |||||||
| @ -49,33 +49,31 @@ export class CoreSharedFilesModule { | |||||||
|         // Register the handler.
 |         // Register the handler.
 | ||||||
|         delegate.registerHandler(handler); |         delegate.registerHandler(handler); | ||||||
| 
 | 
 | ||||||
|         platform.ready().then(() => { |         if (appsProvider.isIOS()) { | ||||||
|             if (appsProvider.isIOS()) { |             let lastCheck = 0; | ||||||
|                 let lastCheck = 0; |  | ||||||
| 
 | 
 | ||||||
|                 // Check if there are new files at app start and when the app is resumed.
 |             // Check if there are new files at app start and when the app is resumed.
 | ||||||
|                 helper.searchIOSNewSharedFiles(); |             helper.searchIOSNewSharedFiles(); | ||||||
|                 platform.resume.subscribe(() => { |             platform.resume.subscribe(() => { | ||||||
|                     // Wait a bit to make sure that APP_LAUNCHED_URL is treated before this callback.
 |                 // Wait a bit to make sure that APP_LAUNCHED_URL is treated before this callback.
 | ||||||
|                     setTimeout(() => { |                 setTimeout(() => { | ||||||
|                         if (Date.now() - lastCheck < 1000) { |                     if (Date.now() - lastCheck < 1000) { | ||||||
|                             // Last check less than 1s ago, don't do anything.
 |                         // Last check less than 1s ago, don't do anything.
 | ||||||
|                             return; |                         return; | ||||||
|                         } |  | ||||||
| 
 |  | ||||||
|                         lastCheck = Date.now(); |  | ||||||
|                         helper.searchIOSNewSharedFiles(); |  | ||||||
|                     }, 200); |  | ||||||
|                 }); |  | ||||||
| 
 |  | ||||||
|                 eventsProvider.on(CoreEventsProvider.APP_LAUNCHED_URL, (url) => { |  | ||||||
|                     if (url && url.indexOf('file://') === 0) { |  | ||||||
|                         // We received a file in iOS, it's probably a shared file. Treat it.
 |  | ||||||
|                         lastCheck = Date.now(); |  | ||||||
|                         helper.searchIOSNewSharedFiles(url); |  | ||||||
|                     } |                     } | ||||||
|                 }); | 
 | ||||||
|             } |                     lastCheck = Date.now(); | ||||||
|         }); |                     helper.searchIOSNewSharedFiles(); | ||||||
|  |                 }, 200); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             eventsProvider.on(CoreEventsProvider.APP_LAUNCHED_URL, (url) => { | ||||||
|  |                 if (url && url.indexOf('file://') === 0) { | ||||||
|  |                     // We received a file in iOS, it's probably a shared file. Treat it.
 | ||||||
|  |                     lastCheck = Date.now(); | ||||||
|  |                     helper.searchIOSNewSharedFiles(url); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -17,7 +17,6 @@ import { Platform, App, NavController, MenuController } from 'ionic-angular'; | |||||||
| import { Keyboard } from '@ionic-native/keyboard'; | import { Keyboard } from '@ionic-native/keyboard'; | ||||||
| import { Network } from '@ionic-native/network'; | import { Network } from '@ionic-native/network'; | ||||||
| import { StatusBar } from '@ionic-native/status-bar'; | import { StatusBar } from '@ionic-native/status-bar'; | ||||||
| import { Device } from '@ionic-native/device'; |  | ||||||
| 
 | 
 | ||||||
| import { CoreDbProvider } from './db'; | import { CoreDbProvider } from './db'; | ||||||
| import { CoreLoggerProvider } from './logger'; | import { CoreLoggerProvider } from './logger'; | ||||||
| @ -179,7 +178,6 @@ export class CoreAppProvider { | |||||||
|             zone: NgZone, |             zone: NgZone, | ||||||
|             private menuCtrl: MenuController, |             private menuCtrl: MenuController, | ||||||
|             private statusBar: StatusBar, |             private statusBar: StatusBar, | ||||||
|             private device: Device, |  | ||||||
|             appRef: ApplicationRef) { |             appRef: ApplicationRef) { | ||||||
| 
 | 
 | ||||||
|         this.logger = logger.getInstance('CoreAppProvider'); |         this.logger = logger.getInstance('CoreAppProvider'); | ||||||
| @ -392,8 +390,7 @@ export class CoreAppProvider { | |||||||
|      * @return Whether the app is running in an Android mobile or tablet device. |      * @return Whether the app is running in an Android mobile or tablet device. | ||||||
|      */ |      */ | ||||||
|     isAndroid(): boolean { |     isAndroid(): boolean { | ||||||
|         return this.isMobile() && |         return this.isMobile() && this.platform.is('android'); | ||||||
|             ((this.device.platform && this.device.platform.toLowerCase() == 'android') || this.platform.is('android')); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -413,8 +410,7 @@ export class CoreAppProvider { | |||||||
|      * @return Whether the app is running in an iOS mobile or tablet device. |      * @return Whether the app is running in an iOS mobile or tablet device. | ||||||
|      */ |      */ | ||||||
|     isIOS(): boolean { |     isIOS(): boolean { | ||||||
|         return this.isMobile() && |         return this.isMobile() && !this.platform.is('android'); | ||||||
|             ((this.device.platform && this.device.platform.toLowerCase() == 'ios') || this.platform.is('ios')); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -572,7 +568,7 @@ export class CoreAppProvider { | |||||||
|      */ |      */ | ||||||
|     openKeyboard(): void { |     openKeyboard(): void { | ||||||
|         // Open keyboard is not supported in desktop and in iOS.
 |         // Open keyboard is not supported in desktop and in iOS.
 | ||||||
|         if (this.isMobile() && !this.isIOS()) { |         if (this.isAndroid()) { | ||||||
|             this.keyboard.show(); |             this.keyboard.show(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -81,31 +81,28 @@ export class CoreFileProvider { | |||||||
| 
 | 
 | ||||||
|         this.logger = logger.getInstance('CoreFileProvider'); |         this.logger = logger.getInstance('CoreFileProvider'); | ||||||
| 
 | 
 | ||||||
|         platform.ready().then(() => { |         if (appProvider.isAndroid() && !Object.getOwnPropertyDescriptor(FileReader.prototype, 'onloadend')) { | ||||||
|             if (appProvider.isAndroid() && !Object.getOwnPropertyDescriptor(FileReader.prototype, 'onloadend')) { |             // Cordova File plugin creates some getters and setter for FileReader, but Ionic's polyfills override them in Android.
 | ||||||
|                 // Cordova File plugin creates some getters and setter for FileReader, but
 |             // Create the getters and setters again. This code comes from FileReader.js in cordova-plugin-file.
 | ||||||
|                 // Ionic's polyfills override them in Android.
 |             this.defineGetterSetter(FileReader.prototype, 'readyState', function(): any { | ||||||
|                 // Create the getters and setters again. This code comes from FileReader.js in cordova-plugin-file.
 |                 return this._localURL ? this._readyState : this._realReader.readyState; | ||||||
|                 this.defineGetterSetter(FileReader.prototype, 'readyState', function(): any { |             }); | ||||||
|                     return this._localURL ? this._readyState : this._realReader.readyState; |  | ||||||
|                 }); |  | ||||||
| 
 | 
 | ||||||
|                 this.defineGetterSetter(FileReader.prototype, 'error', function(): any { |             this.defineGetterSetter(FileReader.prototype, 'error', function(): any { | ||||||
|                     return this._localURL ? this._error : this._realReader.error; |                 return this._localURL ? this._error : this._realReader.error; | ||||||
|                 }); |             }); | ||||||
| 
 | 
 | ||||||
|                 this.defineGetterSetter(FileReader.prototype, 'result', function(): any { |             this.defineGetterSetter(FileReader.prototype, 'result', function(): any { | ||||||
|                     return this._localURL ? this._result : this._realReader.result; |                 return this._localURL ? this._result : this._realReader.result; | ||||||
|                 }); |             }); | ||||||
| 
 | 
 | ||||||
|                 this.defineEvent('onloadstart'); |             this.defineEvent('onloadstart'); | ||||||
|                 this.defineEvent('onprogress'); |             this.defineEvent('onprogress'); | ||||||
|                 this.defineEvent('onload'); |             this.defineEvent('onload'); | ||||||
|                 this.defineEvent('onerror'); |             this.defineEvent('onerror'); | ||||||
|                 this.defineEvent('onloadend'); |             this.defineEvent('onloadend'); | ||||||
|                 this.defineEvent('onabort'); |             this.defineEvent('onabort'); | ||||||
|             } |         } | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -57,8 +57,8 @@ export class CoreIframeUtilsProvider { | |||||||
| 
 | 
 | ||||||
|         const win = <WKUserScriptWindow> window; |         const win = <WKUserScriptWindow> window; | ||||||
| 
 | 
 | ||||||
|         platform.ready().then(() => { |         if (appProvider.isIOS() && win.WKUserScript) { | ||||||
|             if (appProvider.isIOS() && win.WKUserScript) { |             platform.ready().then(() => { | ||||||
|                 // Inject code to the iframes because we cannot access the online ones.
 |                 // Inject code to the iframes because we cannot access the online ones.
 | ||||||
|                 const wwwPath = fileProvider.getWWWAbsolutePath(); |                 const wwwPath = fileProvider.getWWWAbsolutePath(); | ||||||
|                 const linksPath = textUtils.concatenatePaths(wwwPath, 'assets/js/iframe-treat-links.js'); |                 const linksPath = textUtils.concatenatePaths(wwwPath, 'assets/js/iframe-treat-links.js'); | ||||||
| @ -73,8 +73,8 @@ export class CoreIframeUtilsProvider { | |||||||
| 
 | 
 | ||||||
|                 // Handle post messages received by iframes.
 |                 // Handle post messages received by iframes.
 | ||||||
|                 window.addEventListener('message', this.handleIframeMessage.bind(this)); |                 window.addEventListener('message', this.handleIframeMessage.bind(this)); | ||||||
|             } |             }); | ||||||
|         }); |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user