Merge pull request #2521 from crazyserver/MOBILE-3534

MOBILE-3534 ionic: Fix check device during loading
main
Juan Leyva 2020-09-14 13:15:13 +02:00 committed by GitHub
commit 37b0447cfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 50 deletions

View File

@ -49,31 +49,33 @@ export class CoreSharedFilesModule {
// Register the handler. // Register the handler.
delegate.registerHandler(handler); delegate.registerHandler(handler);
if (appsProvider.isIOS()) { platform.ready().then(() => {
let lastCheck = 0; if (appsProvider.isIOS()) {
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);
}
});
}
} }
} }

View File

@ -392,7 +392,8 @@ 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() && this.device.platform.toLowerCase() == 'android'; return this.isMobile() &&
((this.device.platform && this.device.platform.toLowerCase() == 'android') || this.platform.is('android'));
} }
/** /**
@ -412,7 +413,8 @@ 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() && this.device.platform.toLowerCase() == 'ios'; return this.isMobile() &&
((this.device.platform && this.device.platform.toLowerCase() == 'ios') || this.platform.is('ios'));
} }
/** /**

View File

@ -81,28 +81,31 @@ export class CoreFileProvider {
this.logger = logger.getInstance('CoreFileProvider'); this.logger = logger.getInstance('CoreFileProvider');
if (appProvider.isAndroid() && !Object.getOwnPropertyDescriptor(FileReader.prototype, 'onloadend')) { platform.ready().then(() => {
// Cordova File plugin creates some getters and setter for FileReader, but Ionic's polyfills override them in Android. if (appProvider.isAndroid() && !Object.getOwnPropertyDescriptor(FileReader.prototype, 'onloadend')) {
// Create the getters and setters again. This code comes from FileReader.js in cordova-plugin-file. // Cordova File plugin creates some getters and setter for FileReader, but
this.defineGetterSetter(FileReader.prototype, 'readyState', function(): any { // Ionic's polyfills override them in Android.
return this._localURL ? this._readyState : this._realReader.readyState; // Create the getters and setters again. This code comes from FileReader.js in cordova-plugin-file.
}); 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');
} }
});
} }
/** /**

View File

@ -16,7 +16,7 @@ import { Injectable, NgZone } from '@angular/core';
import { Config, Platform, NavController } from 'ionic-angular'; import { Config, Platform, NavController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { Network } from '@ionic-native/network'; import { Network } from '@ionic-native/network';
import { CoreApp } from '../app'; import { CoreApp, CoreAppProvider } from '../app';
import { CoreFileProvider } from '../file'; import { CoreFileProvider } from '../file';
import { CoreLoggerProvider } from '../logger'; import { CoreLoggerProvider } from '../logger';
import { CoreSitesProvider } from '../sites'; import { CoreSitesProvider } from '../sites';
@ -47,6 +47,7 @@ export class CoreIframeUtilsProvider {
private utils: CoreUtilsProvider, private utils: CoreUtilsProvider,
private domUtils: CoreDomUtilsProvider, private domUtils: CoreDomUtilsProvider,
platform: Platform, platform: Platform,
appProvider: CoreAppProvider,
private translate: TranslateService, private translate: TranslateService,
private network: Network, private zone: NgZone, private network: Network, private zone: NgZone,
private config: Config, private config: Config,
@ -56,8 +57,8 @@ export class CoreIframeUtilsProvider {
const win = <WKUserScriptWindow> window; const win = <WKUserScriptWindow> window;
if (CoreApp.instance.isIOS() && win.WKUserScript) { platform.ready().then(() => {
platform.ready().then(() => { if (appProvider.isIOS() && win.WKUserScript) {
// 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');
@ -72,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));
}); }
} });
} }
/** /**