Merge pull request #2539 from dpalou/MOBILE-3507

Mobile 3507
main
Juan Leyva 2020-09-22 13:38:31 +02:00 committed by GitHub
commit 72baa77fc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 28 deletions

View File

@ -14,6 +14,7 @@
import { Injectable } from '@angular/core';
import { CoreEventsProvider } from '@providers/events';
import { CoreTextUtils } from '@providers/utils/text';
import { CoreUtilsProvider } from '@providers/utils/utils';
import { CorePushNotificationsClickHandler } from '@core/pushnotifications/providers/delegate';
import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper';
@ -60,38 +61,46 @@ export class AddonNotificationsPushClickHandler implements CorePushNotifications
* @param notification The notification to check.
* @return Promise resolved when done.
*/
handleClick(notification: any): Promise<any> {
let promise;
async handleClick(notification: any): Promise<void> {
// Try to handle the appurl first.
if (notification.customdata && notification.customdata.appurl) {
promise = this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true);
} else {
promise = Promise.resolve(false);
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' },
});
}
return promise.then((treated) => {
// Try to handle the appurl.
if (notification.customdata && notification.customdata.appurl) {
switch (notification.customdata.appurlopenin) {
case 'inappbrowser':
this.utils.openInApp(notification.customdata.appurl);
if (!treated) {
// No link or cannot be handled by the app. Try to handle the contexturl now.
if (notification.contexturl) {
return this.linkHelper.handleLink(notification.contexturl);
} else {
return false;
}
return;
case 'browser':
return this.utils.openInBrowser(notification.customdata.appurl);
default:
if (this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true)) {
// Link treated, stop.
return;
}
}
}
return true;
}).then((treated) => {
if (!treated) {
// 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);
});
// No appurl or cannot be handled by the app. Try to handle the contexturl now.
if (notification.contexturl) {
if (this.linkHelper.handleLink(notification.contexturl)) {
// Link treated, stop.
return;
}
});
}
// No contexturl or cannot be handled by the app. Open the notifications page.
await this.utils.ignoreErrors(this.notificationsProvider.invalidateNotificationsList(notification.site));
await this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site);
}
}

View File

@ -527,6 +527,12 @@ export class CorePushNotificationsProvider {
localNotif.icon = notification.image;
// This feature isn't supported by the official plugin, we use a fork.
(<any> localNotif).iconType = data['image-type'];
localNotif.summary = data.summaryText;
if (data.picture) {
localNotif.attachments = [data.picture];
}
}
Promise.all(promises).then(() => {

View File

@ -14,7 +14,7 @@
import { Injectable } from '@angular/core';
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 { CoreLangProvider } from '../lang';
import { makeSingleton } from '@singletons/core.singletons';
@ -1163,7 +1163,7 @@ export class CoreTextUtilsProvider {
Object.assign(params, options);
const modal = this.modalCtrl.create('CoreViewerTextPage', params);
const modal = this.modalCtrl.create('CoreViewerTextPage', params, options.modalOptions);
modal.present();
}
}
@ -1181,6 +1181,7 @@ export type CoreTextUtilsViewTextOptions = {
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.
displayCopyButton?: boolean; // Whether to display a button to copy the text.
modalOptions?: ModalOptions; // Modal options.
};
export class CoreTextUtils extends makeSingleton(CoreTextUtilsProvider) {}