diff --git a/config.xml b/config.xml
index 5fa06d260..e6e17803f 100644
--- a/config.xml
+++ b/config.xml
@@ -104,7 +104,7 @@
-
+
diff --git a/gulpfile.js b/gulpfile.js
index 1fc070779..d68894aa8 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -292,9 +292,9 @@ var templatesSrc = [
'./src/components/**/*.html',
'./src/core/**/components/**/*.html',
'./src/core/**/component/**/*.html',
- // Only some addon components are injected to compile to decrease load time. Copy only the ones that are needed.
- './src/addon/mod/assign/components/**/*.html',
- './src/addon/mod/workshop/components/**/*.html'
+ // Copy all addon components because any component can be injected using extraImports.
+ './src/addon/**/components/**/*.html',
+ './src/addon/**/component/**/*.html'
],
templatesDest = './www/templates';
diff --git a/src/addon/mod/workshop/assessment/accumulative/component/accumulative.ts b/src/addon/mod/workshop/assessment/accumulative/component/accumulative.ts
index 98385f1f0..eabb8bf09 100644
--- a/src/addon/mod/workshop/assessment/accumulative/component/accumulative.ts
+++ b/src/addon/mod/workshop/assessment/accumulative/component/accumulative.ts
@@ -20,7 +20,7 @@ import { AddonModWorkshopAssessmentStrategyComponentBase } from '../../../classe
*/
@Component({
selector: 'addon-mod-workshop-assessment-strategy-accumulative',
- templateUrl: 'accumulative.html',
+ templateUrl: 'addon-mod-workshop-assessment-strategy-accumulative.html',
})
export class AddonModWorkshopAssessmentStrategyAccumulativeComponent extends AddonModWorkshopAssessmentStrategyComponentBase {
}
diff --git a/src/addon/mod/workshop/assessment/accumulative/component/accumulative.html b/src/addon/mod/workshop/assessment/accumulative/component/addon-mod-workshop-assessment-strategy-accumulative.html
similarity index 100%
rename from src/addon/mod/workshop/assessment/accumulative/component/accumulative.html
rename to src/addon/mod/workshop/assessment/accumulative/component/addon-mod-workshop-assessment-strategy-accumulative.html
diff --git a/src/addon/mod/workshop/assessment/comments/component/comments.html b/src/addon/mod/workshop/assessment/comments/component/addon-mod-workshop-assessment-strategy-comments.html
similarity index 100%
rename from src/addon/mod/workshop/assessment/comments/component/comments.html
rename to src/addon/mod/workshop/assessment/comments/component/addon-mod-workshop-assessment-strategy-comments.html
diff --git a/src/addon/mod/workshop/assessment/comments/component/comments.ts b/src/addon/mod/workshop/assessment/comments/component/comments.ts
index 2f963dc84..61a187536 100644
--- a/src/addon/mod/workshop/assessment/comments/component/comments.ts
+++ b/src/addon/mod/workshop/assessment/comments/component/comments.ts
@@ -20,7 +20,7 @@ import { AddonModWorkshopAssessmentStrategyComponentBase } from '../../../classe
*/
@Component({
selector: 'addon-mod-workshop-assessment-strategy-comments',
- templateUrl: 'comments.html',
+ templateUrl: 'addon-mod-workshop-assessment-strategy-comments.html',
})
export class AddonModWorkshopAssessmentStrategyCommentsComponent extends AddonModWorkshopAssessmentStrategyComponentBase {
}
diff --git a/src/addon/mod/workshop/assessment/numerrors/component/numerrors.html b/src/addon/mod/workshop/assessment/numerrors/component/addon-mod-workshop-assessment-strategy-numerrors.html
similarity index 100%
rename from src/addon/mod/workshop/assessment/numerrors/component/numerrors.html
rename to src/addon/mod/workshop/assessment/numerrors/component/addon-mod-workshop-assessment-strategy-numerrors.html
diff --git a/src/addon/mod/workshop/assessment/numerrors/component/numerrors.ts b/src/addon/mod/workshop/assessment/numerrors/component/numerrors.ts
index ead73dcaf..cffa93995 100644
--- a/src/addon/mod/workshop/assessment/numerrors/component/numerrors.ts
+++ b/src/addon/mod/workshop/assessment/numerrors/component/numerrors.ts
@@ -20,7 +20,7 @@ import { AddonModWorkshopAssessmentStrategyComponentBase } from '../../../classe
*/
@Component({
selector: 'addon-mod-workshop-assessment-strategy-numerrors',
- templateUrl: 'numerrors.html',
+ templateUrl: 'addon-mod-workshop-assessment-strategy-numerrors.html',
})
export class AddonModWorkshopAssessmentStrategyNumErrorsComponent extends AddonModWorkshopAssessmentStrategyComponentBase {
}
diff --git a/src/addon/mod/workshop/assessment/rubric/component/rubric.html b/src/addon/mod/workshop/assessment/rubric/component/addon-mod-workshop-assessment-strategy-rubric.html
similarity index 100%
rename from src/addon/mod/workshop/assessment/rubric/component/rubric.html
rename to src/addon/mod/workshop/assessment/rubric/component/addon-mod-workshop-assessment-strategy-rubric.html
diff --git a/src/addon/mod/workshop/assessment/rubric/component/rubric.ts b/src/addon/mod/workshop/assessment/rubric/component/rubric.ts
index d28b3f578..fda33b4d3 100644
--- a/src/addon/mod/workshop/assessment/rubric/component/rubric.ts
+++ b/src/addon/mod/workshop/assessment/rubric/component/rubric.ts
@@ -20,7 +20,7 @@ import { AddonModWorkshopAssessmentStrategyComponentBase } from '../../../classe
*/
@Component({
selector: 'addon-mod-workshop-assessment-strategy-rubric',
- templateUrl: 'rubric.html',
+ templateUrl: 'addon-mod-workshop-assessment-strategy-rubric.html',
})
export class AddonModWorkshopAssessmentStrategyRubricComponent extends AddonModWorkshopAssessmentStrategyComponentBase {
}
diff --git a/src/providers/utils/utils.ts b/src/providers/utils/utils.ts
index 36ff520d6..20122e7a8 100644
--- a/src/providers/utils/utils.ts
+++ b/src/providers/utils/utils.ts
@@ -756,17 +756,41 @@ export class CoreUtilsProvider {
this.iabInstance = this.iab.create(url, '_blank', options);
if (this.appProvider.isDesktop() || this.appProvider.isMobile()) {
+ let loadStopSubscription;
+ const loadStartUrls = [];
+
// Trigger global events when a url is loaded or the window is closed. This is to make it work like in Ionic 1.
const loadStartSubscription = this.iabInstance.on('loadstart').subscribe((event) => {
// Execute the callback in the Angular zone, so change detection doesn't stop working.
this.zone.run(() => {
+ // Store the last loaded URLs (max 10).
+ loadStartUrls.push(event.url);
+ if (loadStartUrls.length > 10) {
+ loadStartUrls.shift();
+ }
+
this.eventsProvider.trigger(CoreEventsProvider.IAB_LOAD_START, event);
});
});
+
+ if (this.platform.is('android')) {
+ // Load stop is needed with InAppBrowser v3. Custom URL schemes no longer trigger load start, simulate it.
+ loadStopSubscription = this.iabInstance.on('loadstop').subscribe((event) => {
+ // Execute the callback in the Angular zone, so change detection doesn't stop working.
+ this.zone.run(() => {
+ if (loadStartUrls.indexOf(event.url) == -1) {
+ // The URL was stopped but not started, probably a custom URL scheme.
+ this.eventsProvider.trigger(CoreEventsProvider.IAB_LOAD_START, event);
+ }
+ });
+ });
+ }
+
const exitSubscription = this.iabInstance.on('exit').subscribe((event) => {
// Execute the callback in the Angular zone, so change detection doesn't stop working.
this.zone.run(() => {
loadStartSubscription.unsubscribe();
+ loadStopSubscription && loadStopSubscription.unsubscribe();
exitSubscription.unsubscribe();
this.eventsProvider.trigger(CoreEventsProvider.IAB_EXIT, event);
});