MOBILE-3833 core: Extract constructor initializers
parent
ae351a49b2
commit
8a5ccf1d71
|
@ -24,7 +24,7 @@ import { AddonModLtiListLinkHandler } from './services/handlers/list-link';
|
|||
import { AddonModLtiModuleHandler, AddonModLtiModuleHandlerService } from './services/handlers/module';
|
||||
import { AddonModLtiPrefetchHandler } from './services/handlers/prefetch';
|
||||
import { AddonModLtiProvider } from './services/lti';
|
||||
import { AddonModLtiHelperProvider } from './services/lti-helper';
|
||||
import { AddonModLtiHelper, AddonModLtiHelperProvider } from './services/lti-helper';
|
||||
|
||||
export const ADDON_MOD_LTI_SERVICES: Type<unknown>[] = [
|
||||
AddonModLtiProvider,
|
||||
|
@ -44,6 +44,7 @@ const routes: Routes = [
|
|||
AddonModLtiComponentsModule,
|
||||
],
|
||||
providers: [
|
||||
{ provide: APP_INITIALIZER, multi: true, useValue: () => AddonModLtiHelper.watchPendingCompletions() },
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
multi: true,
|
||||
|
|
|
@ -31,6 +31,13 @@ export class AddonModLtiHelperProvider {
|
|||
protected pendingCheckCompletion: {[moduleId: string]: {courseId: number; module: CoreCourseModule}} = {};
|
||||
|
||||
constructor() {
|
||||
// Clear pending completion on logout.
|
||||
CoreEvents.on(CoreEvents.LOGOUT, () => {
|
||||
this.pendingCheckCompletion = {};
|
||||
});
|
||||
}
|
||||
|
||||
watchPendingCompletions(): void {
|
||||
Platform.resume.subscribe(() => {
|
||||
// User went back to the app, check pending completions.
|
||||
for (const moduleId in this.pendingCheckCompletion) {
|
||||
|
@ -39,11 +46,6 @@ export class AddonModLtiHelperProvider {
|
|||
CoreCourse.checkModuleCompletion(data.courseId, data.module.completiondata);
|
||||
}
|
||||
});
|
||||
|
||||
// Clear pending completion on logout.
|
||||
CoreEvents.on(CoreEvents.LOGOUT, () => {
|
||||
this.pendingCheckCompletion = {};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -65,7 +65,7 @@ export class CoreSettingsHelperProvider {
|
|||
protected colorSchemes: CoreColorScheme[] = [];
|
||||
protected currentColorScheme = CoreColorScheme.LIGHT;
|
||||
|
||||
constructor() {
|
||||
async initialize(): Promise<void> {
|
||||
this.prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
|
||||
|
||||
if (!CoreConstants.CONFIG.forceColorScheme) {
|
||||
|
@ -94,6 +94,11 @@ export class CoreSettingsHelperProvider {
|
|||
|
||||
// Listen for changes to the prefers-color-scheme media query.
|
||||
this.prefersDark.addEventListener && this.prefersDark.addEventListener('change', this.toggleDarkModeListener.bind(this));
|
||||
|
||||
// Init zoom level.
|
||||
await this.upgradeZoomLevel();
|
||||
|
||||
this.initDomSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -17,7 +17,7 @@ import { Routes } from '@angular/router';
|
|||
|
||||
import { AppRoutingModule } from '@/app/app-routing.module';
|
||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
|
||||
import { CoreSettingsHelperProvider } from './services/settings-helper';
|
||||
import { CoreSettingsHelper, CoreSettingsHelperProvider } from './services/settings-helper';
|
||||
import { CoreSettingsDelegateService } from './services/settings-delegate';
|
||||
|
||||
export const CORE_SETTINGS_SERVICES: Type<unknown>[] = [
|
||||
|
@ -49,15 +49,7 @@ const mainMenuMoreRoutes: Routes = [
|
|||
CoreMainMenuTabRoutingModule.forChild(mainMenuMoreRoutes),
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
provide: APP_INITIALIZER,
|
||||
multi: true,
|
||||
deps: [CoreSettingsHelperProvider],
|
||||
useFactory: (helper: CoreSettingsHelperProvider) => async () => {
|
||||
await helper.upgradeZoomLevel();
|
||||
helper.initDomSettings();
|
||||
},
|
||||
},
|
||||
{ provide: APP_INITIALIZER, multi: true, useValue: () => CoreSettingsHelper.initialize() },
|
||||
],
|
||||
})
|
||||
export class CoreSettingsModule {}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { CoreFilepool } from '@services/filepool';
|
||||
import { CoreLang } from '@services/lang';
|
||||
import { CoreLocalNotifications } from '@services/local-notifications';
|
||||
|
||||
export default async function(): Promise<void> {
|
||||
await Promise.all([
|
||||
CoreFilepool.initialize(),
|
||||
CoreLang.initialize(),
|
||||
CoreLocalNotifications.initialize(),
|
||||
]);
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { CoreApp } from '@services/app';
|
||||
import { CoreIframeUtils } from '@services/utils/iframe';
|
||||
import { Platform } from '@singletons';
|
||||
|
||||
export default async function(): Promise<void> {
|
||||
if (!CoreApp.isIOS() || !('WKUserScript' in window)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await Platform.ready();
|
||||
await CoreIframeUtils.injectiOSScripts(window);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { CoreCronDelegate } from '@services/cron';
|
||||
import { Network, NgZone } from '@singletons';
|
||||
|
||||
export default function(): void {
|
||||
// When the app is re-connected, start network handlers that were stopped.
|
||||
Network.onConnect().subscribe(() => {
|
||||
// Execute the callback in the Angular zone, so change detection doesn't stop working.
|
||||
NgZone.run(() => CoreCronDelegate.startNetworkHandlers());
|
||||
});
|
||||
}
|
|
@ -12,7 +12,7 @@
|
|||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import { Injectable, NgZone } from '@angular/core';
|
||||
import { Injectable } from '@angular/core';
|
||||
|
||||
import { CoreApp } from '@services/app';
|
||||
import { CoreConfig } from '@services/config';
|
||||
|
@ -21,7 +21,7 @@ import { CoreConstants } from '@/core/constants';
|
|||
import { SQLiteDB } from '@classes/sqlitedb';
|
||||
import { CoreError } from '@classes/errors/error';
|
||||
|
||||
import { makeSingleton, Network } from '@singletons';
|
||||
import { makeSingleton } from '@singletons';
|
||||
import { CoreLogger } from '@singletons/logger';
|
||||
import { APP_SCHEMA, CRON_TABLE_NAME, CronDBEntry } from '@services/database/cron';
|
||||
|
||||
|
@ -44,17 +44,9 @@ export class CoreCronDelegateService {
|
|||
protected appDB: Promise<SQLiteDB>;
|
||||
protected resolveAppDB!: (appDB: SQLiteDB) => void;
|
||||
|
||||
constructor(zone: NgZone) {
|
||||
constructor() {
|
||||
this.appDB = new Promise(resolve => this.resolveAppDB = resolve);
|
||||
this.logger = CoreLogger.getInstance('CoreCronDelegate');
|
||||
|
||||
// When the app is re-connected, start network handlers that were stopped.
|
||||
Network.onConnect().subscribe(() => {
|
||||
// Execute the callback in the Angular zone, so change detection doesn't stop working.
|
||||
zone.run(() => {
|
||||
this.startNetworkHandlers();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -97,8 +97,24 @@ export class CoreFilepoolProvider {
|
|||
constructor() {
|
||||
this.appDB = new Promise(resolve => this.resolveAppDB = resolve);
|
||||
this.logger = CoreLogger.getInstance('CoreFilepoolProvider');
|
||||
}
|
||||
|
||||
this.init();
|
||||
/**
|
||||
* Initialize queue.
|
||||
*/
|
||||
async initialize(): Promise<void> {
|
||||
// Waiting for the app to be ready to start processing the queue.
|
||||
await ApplicationInit.donePromise;
|
||||
|
||||
this.checkQueueProcessing();
|
||||
|
||||
// Start queue when device goes online.
|
||||
Network.onConnect().subscribe(() => {
|
||||
// Execute the callback in the Angular zone, so change detection doesn't stop working.
|
||||
NgZone.run(() => {
|
||||
this.checkQueueProcessing();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -114,24 +130,6 @@ export class CoreFilepoolProvider {
|
|||
this.resolveAppDB(CoreApp.getDB());
|
||||
}
|
||||
|
||||
/**
|
||||
* Init some properties.
|
||||
*/
|
||||
protected async init(): Promise<void> {
|
||||
// Waiting for the app to be ready to start processing the queue.
|
||||
await ApplicationInit.donePromise;
|
||||
|
||||
this.checkQueueProcessing();
|
||||
|
||||
// Start queue when device goes online.
|
||||
Network.onConnect().subscribe(() => {
|
||||
// Execute the callback in the Angular zone, so change detection doesn't stop working.
|
||||
NgZone.run(() => {
|
||||
this.checkQueueProcessing();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Link a file with a component.
|
||||
*
|
||||
|
|
|
@ -37,13 +37,11 @@ export class CoreLangProvider {
|
|||
protected customStringsRaw?: string;
|
||||
protected sitePluginsStrings: CoreLanguageObject = {}; // Strings defined by site plugins.
|
||||
|
||||
constructor() {
|
||||
async initialize(): Promise<void> {
|
||||
// Set fallback language and language to use until the app determines the right language to use.
|
||||
Translate.setDefaultLang(this.fallbackLanguage);
|
||||
Translate.use(this.defaultLanguage);
|
||||
|
||||
this.initLanguage();
|
||||
|
||||
Translate.onLangChange.subscribe((event: LangChangeEvent) => {
|
||||
document.documentElement.setAttribute('lang', event.lang);
|
||||
|
||||
|
@ -51,12 +49,14 @@ export class CoreLangProvider {
|
|||
dir = dir.indexOf('rtl') != -1 ? 'rtl' : 'ltr';
|
||||
document.documentElement.setAttribute('dir', dir);
|
||||
});
|
||||
|
||||
await this.initializeCurrentLanguage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Init language.
|
||||
*/
|
||||
protected async initLanguage(): Promise<void> {
|
||||
protected async initializeCurrentLanguage(): Promise<void> {
|
||||
await Platform.ready();
|
||||
|
||||
let language: string;
|
||||
|
@ -68,7 +68,7 @@ export class CoreLangProvider {
|
|||
language = await this.getCurrentLanguage();
|
||||
}
|
||||
|
||||
return this.changeCurrentLanguage(language);
|
||||
await this.changeCurrentLanguage(language);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -62,27 +62,12 @@ export class CoreLocalNotificationsProvider {
|
|||
this.appDB = new Promise(resolve => this.resolveAppDB = resolve);
|
||||
this.logger = CoreLogger.getInstance('CoreLocalNotificationsProvider');
|
||||
this.queueRunner = new CoreQueueRunner(10);
|
||||
|
||||
this.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize database.
|
||||
*/
|
||||
async initializeDatabase(): Promise<void> {
|
||||
try {
|
||||
await CoreApp.createTablesFromSchema(APP_SCHEMA);
|
||||
} catch (e) {
|
||||
// Ignore errors.
|
||||
}
|
||||
|
||||
this.resolveAppDB(CoreApp.getDB());
|
||||
}
|
||||
|
||||
/**
|
||||
* Init some properties.
|
||||
*/
|
||||
protected async init(): Promise<void> {
|
||||
async initialize(): Promise<void> {
|
||||
await Platform.ready();
|
||||
|
||||
if (!this.isAvailable()) {
|
||||
|
@ -131,6 +116,19 @@ export class CoreLocalNotificationsProvider {
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize database.
|
||||
*/
|
||||
async initializeDatabase(): Promise<void> {
|
||||
try {
|
||||
await CoreApp.createTablesFromSchema(APP_SCHEMA);
|
||||
} catch (e) {
|
||||
// Ignore errors.
|
||||
}
|
||||
|
||||
this.resolveAppDB(CoreApp.getDB());
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel a local notification.
|
||||
*
|
||||
|
|
|
@ -25,7 +25,7 @@ import { CoreTextUtils } from '@services/utils/text';
|
|||
import { CoreUrlUtils } from '@services/utils/url';
|
||||
import { CoreUtils, PromiseDefer } from '@services/utils/utils';
|
||||
|
||||
import { makeSingleton, Network, Platform, NgZone, Translate, Diagnostic } from '@singletons';
|
||||
import { makeSingleton, Network, NgZone, Translate, Diagnostic } from '@singletons';
|
||||
import { CoreLogger } from '@singletons/logger';
|
||||
import { CoreUrl } from '@singletons/url';
|
||||
import { CoreWindow } from '@singletons/window';
|
||||
|
@ -52,11 +52,6 @@ export class CoreIframeUtilsProvider {
|
|||
|
||||
constructor() {
|
||||
this.logger = CoreLogger.getInstance('CoreUtilsProvider');
|
||||
|
||||
if (CoreApp.isIOS() && 'WKUserScript' in window) {
|
||||
// eslint-disable-next-line promise/catch-or-return
|
||||
Platform.ready().then(() => this.injectiOSScripts(window));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -558,7 +553,7 @@ export class CoreIframeUtilsProvider {
|
|||
*
|
||||
* @param userScriptWindow Window.
|
||||
*/
|
||||
private injectiOSScripts(userScriptWindow: WKUserScriptWindow) {
|
||||
injectiOSScripts(userScriptWindow: WKUserScriptWindow): void {
|
||||
const wwwPath = CoreFile.getWWWAbsolutePath();
|
||||
const linksPath = CoreTextUtils.concatenatePaths(wwwPath, 'assets/js/iframe-treat-links.js');
|
||||
|
||||
|
|
Loading…
Reference in New Issue