MOBILE-3507 notifications: Support view rich text when clicked

main
Dani Palou 2020-09-15 12:03:31 +02:00
parent 5d3e75e220
commit 06ce5e765c
2 changed files with 26 additions and 27 deletions

View File

@ -14,6 +14,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CoreEventsProvider } from '@providers/events'; import { CoreEventsProvider } from '@providers/events';
import { CoreTextUtils } from '@providers/utils/text';
import { CoreUtilsProvider } from '@providers/utils/utils'; import { CoreUtilsProvider } from '@providers/utils/utils';
import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate'; import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate';
import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper'; import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper';
@ -60,38 +61,35 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications
* @param notification The notification to check. * @param notification The notification to check.
* @return Promise resolved when done. * @return Promise resolved when done.
*/ */
handleClick(notification: any): Promise<any> { async handleClick(notification: any): Promise<void> {
let promise;
if (notification.customdata.extendedtext) {
// Display the text in a modal.
return CoreTextUtils.instance.viewText(notification.title, notification.customdata.extendedtext, {
displayCopyButton: true,
modalOptions: { cssClass: 'core-modal-fullscreen' },
});
}
// Try to handle the appurl first. // Try to handle the appurl first.
if (notification.customdata && notification.customdata.appurl) { if (notification.customdata && notification.customdata.appurl) {
promise = this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true); if (this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true)) {
} else { // Link treated, stop.
promise = Promise.resolve(false); return;
}
} }
return promise.then((treated) => { // No appurl or cannot be handled by the app. Try to handle the contexturl now.
if (!treated) {
// No link or cannot be handled by the app. Try to handle the contexturl now.
if (notification.contexturl) { if (notification.contexturl) {
return this.linkHelper.handleLink(notification.contexturl); if (this.linkHelper.handleLink(notification.contexturl)) {
} else { // Link treated, stop.
return false; return;
} }
} }
return true; // No contexturl or cannot be handled by the app. Open the notifications page.
}).then((treated) => { await this.utils.ignoreErrors(this.notificationsProvider.invalidateNotificationsList(notification.site));
if (!treated) { await this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site);
// No link or cannot be handled by the app. Open the notifications page.
return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => {
// Ignore errors.
}).then(() => {
return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site);
});
}
});
} }
} }

View File

@ -14,7 +14,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
import { ModalController } from 'ionic-angular'; import { ModalController, ModalOptions } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { CoreLangProvider } from '../lang'; import { CoreLangProvider } from '../lang';
import { makeSingleton } from '@singletons/core.singletons'; import { makeSingleton } from '@singletons/core.singletons';
@ -1163,7 +1163,7 @@ export class CoreTextUtilsProvider {
Object.assign(params, options); Object.assign(params, options);
const modal = this.modalCtrl.create('CoreViewerTextPage', params); const modal = this.modalCtrl.create('CoreViewerTextPage', params, options.modalOptions);
modal.present(); modal.present();
} }
} }
@ -1181,6 +1181,7 @@ export type CoreTextUtilsViewTextOptions = {
instanceId?: number; // The instance ID related to the context. instanceId?: number; // The instance ID related to the context.
courseId?: number; // Course ID the text belongs to. It can be used to improve performance with filters. courseId?: number; // Course ID the text belongs to. It can be used to improve performance with filters.
displayCopyButton?: boolean; // Whether to display a button to copy the text. displayCopyButton?: boolean; // Whether to display a button to copy the text.
modalOptions?: ModalOptions; // Modal options.
}; };
export class CoreTextUtils extends makeSingleton(CoreTextUtilsProvider) {} export class CoreTextUtils extends makeSingleton(CoreTextUtilsProvider) {}