diff --git a/src/core/features/settings/pages/general/general.html b/src/core/features/settings/pages/general/general.html index feb5e33a30a..57fe64eeecb 100644 --- a/src/core/features/settings/pages/general/general.html +++ b/src/core/features/settings/pages/general/general.html @@ -75,7 +75,7 @@

{{ 'core.settings.general' | translate }}

- +

{{ 'core.settings.enableanalytics' | translate }}

{{ 'core.settings.enableanalyticsdescription' | translate }}

diff --git a/src/core/features/settings/pages/general/general.ts b/src/core/features/settings/pages/general/general.ts index de859cb2d5e..638b088ef50 100644 --- a/src/core/features/settings/pages/general/general.ts +++ b/src/core/features/settings/pages/general/general.ts @@ -44,7 +44,7 @@ export class CoreSettingsGeneralPage { selectedZoomLevel = CoreZoomLevel.NONE; richTextEditor = true; debugDisplay = false; - analyticsSupported = false; + analyticsAvailable = false; analyticsEnabled = false; colorSchemes: CoreColorScheme[] = []; selectedScheme: CoreColorScheme = CoreColorScheme.LIGHT; @@ -101,8 +101,8 @@ export class CoreSettingsGeneralPage { this.debugDisplay = await CoreConfig.get(CoreConstants.SETTINGS_DEBUG_DISPLAY, false); - this.analyticsSupported = CoreAnalytics.hasHandlers(); - if (this.analyticsSupported) { + this.analyticsAvailable = await CoreAnalytics.isAnalyticsAvailable(); + if (this.analyticsAvailable) { this.analyticsEnabled = await CoreConfig.get(CoreConstants.SETTINGS_ANALYTICS_ENABLED, true); } diff --git a/src/core/services/analytics.ts b/src/core/services/analytics.ts index e442a6a8948..71146ad8982 100644 --- a/src/core/services/analytics.ts +++ b/src/core/services/analytics.ts @@ -57,6 +57,29 @@ export class CoreAnalyticsService extends CoreDelegate { } } + /** + * Check if analytics is available for the app/site. + * + * @returns True if available, false otherwise. + */ + async isAnalyticsAvailable(): Promise { + if (Object.keys(this.enabledHandlers).length > 0) { + // There is an enabled handler, analytics is available. + return true; + } + + // Check if there is a handler that is enabled at app level (enabled handlers are only set when logged in). + const enabledList = await Promise.all(Object.values(this.handlers).map(handler => { + if (!handler.appLevelEnabled) { + return false; + } + + return handler.isEnabled(); + })); + + return enabledList.includes(true); + } + /** * Log an event for the current site. * @@ -108,6 +131,11 @@ export const CoreAnalytics = makeSingleton(CoreAnalyticsService); */ export interface CoreAnalyticsHandler extends CoreDelegateHandler { + /** + * If true it means that the handler is enabled or not for the whole app, it doesn't depend on the site. + */ + appLevelEnabled?: boolean; + /** * Log an event. *