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 { 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,46 @@ 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;
// Try to handle the appurl first. if (notification.customdata.extendedtext) {
if (notification.customdata && notification.customdata.appurl) { // Display the text in a modal.
promise = this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true); return CoreTextUtils.instance.viewText(notification.title, notification.customdata.extendedtext, {
} else { displayCopyButton: true,
promise = Promise.resolve(false); 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) { return;
// No link or cannot be handled by the app. Try to handle the contexturl now.
if (notification.contexturl) { case 'browser':
return this.linkHelper.handleLink(notification.contexturl); return this.utils.openInBrowser(notification.customdata.appurl);
} else {
return false; default:
} if (this.linkHelper.handleLink(notification.customdata.appurl, undefined, undefined, true)) {
// Link treated, stop.
return;
}
} }
}
return true; // No appurl or cannot be handled by the app. Try to handle the contexturl now.
}).then((treated) => { if (notification.contexturl) {
if (this.linkHelper.handleLink(notification.contexturl)) {
if (!treated) { // Link treated, stop.
// No link or cannot be handled by the app. Open the notifications page. return;
return this.notificationsProvider.invalidateNotificationsList(notification.site).catch(() => {
// Ignore errors.
}).then(() => {
return this.linkHelper.goInSite(undefined, 'AddonNotificationsListPage', undefined, notification.site);
});
} }
}); }
// 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; localNotif.icon = notification.image;
// This feature isn't supported by the official plugin, we use a fork. // This feature isn't supported by the official plugin, we use a fork.
(<any> localNotif).iconType = data['image-type']; (<any> localNotif).iconType = data['image-type'];
localNotif.summary = data.summaryText;
if (data.picture) {
localNotif.attachments = [data.picture];
}
} }
Promise.all(promises).then(() => { Promise.all(promises).then(() => {

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) {}