From 489094598a69889f785279a6f7f0474c42e72be9 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Thu, 28 Mar 2019 16:28:21 +0100 Subject: [PATCH] MOBILE-2915 core: Try to fix freezes when clicking push --- src/core/contentlinks/providers/helper.ts | 18 +++++++++++------- src/providers/local-notifications.ts | 17 ++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/core/contentlinks/providers/helper.ts b/src/core/contentlinks/providers/helper.ts index ad3d9b6f5..e36e5a20b 100644 --- a/src/core/contentlinks/providers/helper.ts +++ b/src/core/contentlinks/providers/helper.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, NgZone } from '@angular/core'; import { NavController } from 'ionic-angular'; import { TranslateService } from '@ngx-translate/core'; import { CoreAppProvider } from '@providers/app'; @@ -40,7 +40,7 @@ export class CoreContentLinksHelperProvider { private contentLinksDelegate: CoreContentLinksDelegate, private appProvider: CoreAppProvider, private domUtils: CoreDomUtilsProvider, private urlUtils: CoreUrlUtilsProvider, private translate: TranslateService, private initDelegate: CoreInitDelegate, eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, - private sitePluginsProvider: CoreSitePluginsProvider) { + private sitePluginsProvider: CoreSitePluginsProvider, private zone: NgZone) { this.logger = logger.getInstance('CoreContentLinksHelperProvider'); // Listen for app launched URLs. If we receive one, check if it's a content link. @@ -91,11 +91,15 @@ export class CoreContentLinksHelperProvider { */ goInSite(navCtrl: NavController, pageName: string, pageParams: any, siteId?: string): void { siteId = siteId || this.sitesProvider.getCurrentSiteId(); - if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) { - navCtrl.push(pageName, pageParams); - } else { - this.loginHelper.redirect(pageName, pageParams, siteId); - } + + // Execute the code in the Angular zone, so change detection doesn't stop working. + this.zone.run(() => { + if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) { + navCtrl.push(pageName, pageParams); + } else { + this.loginHelper.redirect(pageName, pageParams, siteId); + } + }); } /** diff --git a/src/providers/local-notifications.ts b/src/providers/local-notifications.ts index 6c6b7df7c..49ea21312 100644 --- a/src/providers/local-notifications.ts +++ b/src/providers/local-notifications.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Injectable } from '@angular/core'; +import { Injectable, NgZone } from '@angular/core'; import { Platform, Alert, AlertController } from 'ionic-angular'; import { LocalNotifications, ILocalNotification } from '@ionic-native/local-notifications'; import { Push } from '@ionic-native/push'; @@ -105,7 +105,7 @@ export class CoreLocalNotificationsProvider { constructor(logger: CoreLoggerProvider, private localNotifications: LocalNotifications, private platform: Platform, private appProvider: CoreAppProvider, private utils: CoreUtilsProvider, private configProvider: CoreConfigProvider, private textUtils: CoreTextUtilsProvider, private translate: TranslateService, private alertCtrl: AlertController, - eventsProvider: CoreEventsProvider, private push: Push) { + eventsProvider: CoreEventsProvider, private push: Push, private zone: NgZone) { this.logger = logger.getInstance('CoreLocalNotificationsProvider'); this.appDB = appProvider.getDB(); @@ -327,12 +327,15 @@ export class CoreLocalNotificationsProvider { * @param {any} data Data received by the notification. */ notifyClick(data: any): void { - const component = data.component; - if (component) { - if (this.observables[component]) { - this.observables[component].next(data); + // Execute the code in the Angular zone, so change detection doesn't stop working. + this.zone.run(() => { + const component = data.component; + if (component) { + if (this.observables[component]) { + this.observables[component].next(data); + } } - } + }); } /**