diff --git a/src/addon/block/myoverview/components/myoverview/myoverview.ts b/src/addon/block/myoverview/components/myoverview/myoverview.ts
index 7e1668566..f43e74707 100644
--- a/src/addon/block/myoverview/components/myoverview/myoverview.ts
+++ b/src/addon/block/myoverview/components/myoverview/myoverview.ts
@@ -65,7 +65,7 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem
protected prefetchIconsInitialized = false;
protected isDestroyed;
- protected updateSiteObserver;
+ protected downloadButtonObserver;
protected coursesObserver;
protected courseIds = [];
protected fetchContentDefaultError = 'Error getting my overview data.';
@@ -83,13 +83,12 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem
* Component being initialized.
*/
ngOnInit(): void {
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
-
- // Refresh the enabled flags if site is updated.
- this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
+ // Refresh the enabled flags if enabled.
+ this.downloadButtonObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_DASHBOARD_DOWNLOAD_ENABLED_CHANGED,
+ (data) => {
const wasEnabled = this.downloadAllCoursesEnabled;
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = data.enabled;
if (!wasEnabled && this.downloadAllCoursesEnabled && this.loaded) {
// Download all courses is enabled now, initialize it.
@@ -332,6 +331,6 @@ export class AddonBlockMyOverviewComponent extends CoreBlockBaseComponent implem
ngOnDestroy(): void {
this.isDestroyed = true;
this.coursesObserver && this.coursesObserver.off();
- this.updateSiteObserver && this.updateSiteObserver.off();
+ this.downloadButtonObserver && this.downloadButtonObserver.off();
}
}
diff --git a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts
index d81c2fc07..fe741aca6 100644
--- a/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts
+++ b/src/addon/block/recentlyaccessedcourses/components/recentlyaccessedcourses/recentlyaccessedcourses.ts
@@ -40,7 +40,7 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
protected prefetchIconsInitialized = false;
protected isDestroyed;
- protected updateSiteObserver;
+ protected downloadButtonObserver;
protected coursesObserver;
protected courseIds = [];
protected fetchContentDefaultError = 'Error getting recent courses data.';
@@ -58,19 +58,18 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
* Component being initialized.
*/
ngOnInit(): void {
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
-
- // Refresh the enabled flags if site is updated.
- this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
+ // Refresh the enabled flags if enabled.
+ this.downloadButtonObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_DASHBOARD_DOWNLOAD_ENABLED_CHANGED,
+ (data) => {
const wasEnabled = this.downloadAllCoursesEnabled;
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = data.enabled;
if (!wasEnabled && this.downloadAllCoursesEnabled && this.loaded) {
// Download all courses is enabled now, initialize it.
this.initPrefetchCoursesIcons();
}
- }, this.sitesProvider.getCurrentSiteId());
+ });
this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => {
this.refreshContent();
@@ -155,6 +154,6 @@ export class AddonBlockRecentlyAccessedCoursesComponent extends CoreBlockBaseCom
ngOnDestroy(): void {
this.isDestroyed = true;
this.coursesObserver && this.coursesObserver.off();
- this.updateSiteObserver && this.updateSiteObserver.off();
+ this.downloadButtonObserver && this.downloadButtonObserver.off();
}
}
diff --git a/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts b/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts
index 66d2945bb..651322c69 100644
--- a/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts
+++ b/src/addon/block/starredcourses/components/starredcourses/starredcourses.ts
@@ -40,7 +40,7 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
protected prefetchIconsInitialized = false;
protected isDestroyed;
- protected updateSiteObserver;
+ protected downloadButtonObserver;
protected coursesObserver;
protected courseIds = [];
protected fetchContentDefaultError = 'Error getting starred courses data.';
@@ -58,19 +58,18 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
* Component being initialized.
*/
ngOnInit(): void {
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
-
- // Refresh the enabled flags if site is updated.
- this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
+ // Refresh the enabled flags if enabled.
+ this.downloadButtonObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_DASHBOARD_DOWNLOAD_ENABLED_CHANGED,
+ (data) => {
const wasEnabled = this.downloadAllCoursesEnabled;
- this.downloadAllCoursesEnabled = !this.coursesProvider.isDownloadCoursesDisabledInSite();
+ this.downloadAllCoursesEnabled = data.enabled;
if (!wasEnabled && this.downloadAllCoursesEnabled && this.loaded) {
// Download all courses is enabled now, initialize it.
this.initPrefetchCoursesIcons();
}
- }, this.sitesProvider.getCurrentSiteId());
+ });
this.coursesObserver = this.eventsProvider.on(CoreCoursesProvider.EVENT_MY_COURSES_UPDATED, () => {
this.refreshContent();
@@ -155,6 +154,6 @@ export class AddonBlockStarredCoursesComponent extends CoreBlockBaseComponent im
ngOnDestroy(): void {
this.isDestroyed = true;
this.coursesObserver && this.coursesObserver.off();
- this.updateSiteObserver && this.updateSiteObserver.off();
+ this.downloadButtonObserver && this.downloadButtonObserver.off();
}
}
diff --git a/src/core/block/components/block/block.scss b/src/core/block/components/block/block.scss
index 28a9914d4..3fc6c57b8 100644
--- a/src/core/block/components/block/block.scss
+++ b/src/core/block/components/block/block.scss
@@ -20,4 +20,8 @@ ion-app.app-root core-block {
.item-divider .core-button-spinner {
margin: 0;
}
+
+ .item-divider .icon {
+ color: $black;
+ }
}
\ No newline at end of file
diff --git a/src/core/courses/pages/dashboard/dashboard.html b/src/core/courses/pages/dashboard/dashboard.html
index 4bf752f86..9d409ca54 100644
--- a/src/core/courses/pages/dashboard/dashboard.html
+++ b/src/core/courses/pages/dashboard/dashboard.html
@@ -1,4 +1,4 @@
-
+
@@ -6,6 +6,9 @@
+
+
+
diff --git a/src/core/courses/pages/dashboard/dashboard.ts b/src/core/courses/pages/dashboard/dashboard.ts
index 591b5fec5..150ad911a 100644
--- a/src/core/courses/pages/dashboard/dashboard.ts
+++ b/src/core/courses/pages/dashboard/dashboard.ts
@@ -49,6 +49,10 @@ export class CoreCoursesDashboardPage implements OnDestroy {
userId: number;
dashboardLoaded = false;
+ downloadEnabled: boolean;
+ downloadEnabledIcon = 'square-outline'; // Disabled by default.
+ downloadCourseEnabled: boolean;
+
protected isDestroyed;
protected updateSiteObserver;
@@ -64,10 +68,15 @@ export class CoreCoursesDashboardPage implements OnDestroy {
*/
ionViewDidLoad(): void {
this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
// Refresh the enabled flags if site is updated.
this.updateSiteObserver = this.eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
this.searchEnabled = !this.coursesProvider.isSearchCoursesDisabledInSite();
+ this.downloadCourseEnabled = !this.coursesProvider.isDownloadCourseDisabledInSite();
+
+ this.switchDownload(this.downloadEnabled);
+
this.loadSiteName();
}, this.sitesProvider.getCurrentSiteId());
@@ -174,6 +183,24 @@ export class CoreCoursesDashboardPage implements OnDestroy {
});
}
+ /**
+ * Toggle download enabled.
+ */
+ toggleDownload(): void {
+ this.switchDownload(!this.downloadEnabled);
+ }
+
+ /**
+ * Convenience function to switch download enabled.
+ *
+ * @param {boolean} enable If enable or disable.
+ */
+ protected switchDownload(enable: boolean): void {
+ this.downloadEnabled = this.downloadCourseEnabled && enable;
+ this.downloadEnabledIcon = this.downloadEnabled ? 'checkbox-outline' : 'square-outline';
+ this.eventsProvider.trigger(CoreCoursesProvider.EVENT_DASHBOARD_DOWNLOAD_ENABLED_CHANGED, {enabled: this.downloadEnabled});
+ }
+
/**
* Load fallback blocks to shown before 3.6 when dashboard blocks are not supported.
*/
diff --git a/src/core/courses/providers/courses.ts b/src/core/courses/providers/courses.ts
index 880010733..3ea3805c2 100644
--- a/src/core/courses/providers/courses.ts
+++ b/src/core/courses/providers/courses.ts
@@ -26,6 +26,7 @@ export class CoreCoursesProvider {
static ENROL_INVALID_KEY = 'CoreCoursesEnrolInvalidKey';
static EVENT_MY_COURSES_UPDATED = 'courses_my_courses_updated';
static EVENT_MY_COURSES_REFRESHED = 'courses_my_courses_refreshed';
+ static EVENT_DASHBOARD_DOWNLOAD_ENABLED_CHANGED = 'dashboard_download_enabled_changed';
protected ROOT_CACHE_KEY = 'mmCourses:';
protected logger;