forked from EVOgeek/Vmeda.Online
		
	MOBILE-4081 core: Consolidate Platform services
This commit is contained in:
		
							parent
							
								
									f1f7ee02de
								
							
						
					
					
						commit
						ed50d3d76a
					
				@ -32,7 +32,7 @@ import { AddonCalendarEventDBRecord, AddonCalendarReminderDBRecord, EVENTS_TABLE
 | 
				
			|||||||
import { CoreCourses } from '@features/courses/services/courses';
 | 
					import { CoreCourses } from '@features/courses/services/courses';
 | 
				
			||||||
import { ContextLevel, CoreConstants } from '@/core/constants';
 | 
					import { ContextLevel, CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { CoreWSError } from '@classes/errors/wserror';
 | 
					import { CoreWSError } from '@classes/errors/wserror';
 | 
				
			||||||
import { ApplicationInit, makeSingleton, Translate, Platform } from '@singletons';
 | 
					import { ApplicationInit, makeSingleton, Translate } from '@singletons';
 | 
				
			||||||
import { AddonCalendarOfflineEventDBRecord } from './database/calendar-offline';
 | 
					import { AddonCalendarOfflineEventDBRecord } from './database/calendar-offline';
 | 
				
			||||||
import { AddonCalendarMainMenuHandlerService } from './handlers/mainmenu';
 | 
					import { AddonCalendarMainMenuHandlerService } from './handlers/mainmenu';
 | 
				
			||||||
import { SafeUrl } from '@angular/platform-browser';
 | 
					import { SafeUrl } from '@angular/platform-browser';
 | 
				
			||||||
@ -41,6 +41,7 @@ import { AddonCalendarFilter } from './calendar-helper';
 | 
				
			|||||||
import { AddonCalendarSyncEvents, AddonCalendarSyncProvider } from './calendar-sync';
 | 
					import { AddonCalendarSyncEvents, AddonCalendarSyncProvider } from './calendar-sync';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { CoreText } from '@singletons/text';
 | 
					import { CoreText } from '@singletons/text';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ROOT_CACHE_KEY = 'mmaCalendar:';
 | 
					const ROOT_CACHE_KEY = 'mmaCalendar:';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1429,7 +1430,7 @@ export class AddonCalendarProvider {
 | 
				
			|||||||
     * @return Promise resolved when all the notifications have been scheduled.
 | 
					     * @return Promise resolved when all the notifications have been scheduled.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async scheduleAllSitesEventsNotifications(): Promise<void> {
 | 
					    async scheduleAllSitesEventsNotifications(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const notificationsEnabled = CoreLocalNotifications.isAvailable();
 | 
					        const notificationsEnabled = CoreLocalNotifications.isAvailable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,11 +28,12 @@ import { ActivatedRoute, Params } from '@angular/router';
 | 
				
			|||||||
import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifications/services/pushnotifications';
 | 
					import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifications/services/pushnotifications';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { Subscription } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
import { Translate, Platform } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { IonRefresher } from '@ionic/angular';
 | 
					import { IonRefresher } from '@ionic/angular';
 | 
				
			||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
import { CoreScreen } from '@services/screen';
 | 
					import { CoreScreen } from '@services/screen';
 | 
				
			||||||
import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager';
 | 
					import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Page that displays the list of discussions.
 | 
					 * Page that displays the list of discussions.
 | 
				
			||||||
@ -114,7 +115,7 @@ export class AddonMessagesDiscussions35Page implements OnInit, OnDestroy {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Refresh the view when the app is resumed.
 | 
					        // Refresh the view when the app is resumed.
 | 
				
			||||||
        this.appResumeSubscription = Platform.resume.subscribe(() => {
 | 
					        this.appResumeSubscription = CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            if (!this.loaded) {
 | 
					            if (!this.loaded) {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ import {
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUser } from '@features/user/services/user';
 | 
					import { CoreUser } from '@features/user/services/user';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { Platform, Translate } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { Subscription } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifications/services/pushnotifications';
 | 
					import { CorePushNotificationsNotificationBasicData } from '@features/pushnotifications/services/pushnotifications';
 | 
				
			||||||
import { ActivatedRoute, Params } from '@angular/router';
 | 
					import { ActivatedRoute, Params } from '@angular/router';
 | 
				
			||||||
@ -37,6 +37,7 @@ import { CoreUtils } from '@services/utils/utils';
 | 
				
			|||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
import { CoreScreen } from '@services/screen';
 | 
					import { CoreScreen } from '@services/screen';
 | 
				
			||||||
import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager';
 | 
					import { CoreMainMenuDeepLinkManager } from '@features/mainmenu/classes/deep-link-manager';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Page that displays the list of conversations, including group conversations.
 | 
					 * Page that displays the list of conversations, including group conversations.
 | 
				
			||||||
@ -176,7 +177,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Refresh the view when the app is resumed.
 | 
					        // Refresh the view when the app is resumed.
 | 
				
			||||||
        this.appResumeSubscription = Platform.resume.subscribe(() => {
 | 
					        this.appResumeSubscription = CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            if (!this.loaded) {
 | 
					            if (!this.loaded) {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -16,9 +16,10 @@ import { Injectable } from '@angular/core';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { CoreCourse } from '@features/course/services/course';
 | 
					import { CoreCourse } from '@features/course/services/course';
 | 
				
			||||||
import { CoreCourseModuleData } from '@features/course/services/course-helper';
 | 
					import { CoreCourseModuleData } from '@features/course/services/course-helper';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreSites } from '@services/sites';
 | 
					import { CoreSites } from '@services/sites';
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { makeSingleton, Platform } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { AddonModLti, AddonModLtiLti } from './lti';
 | 
					import { AddonModLti, AddonModLtiLti } from './lti';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,7 +39,7 @@ export class AddonModLtiHelperProvider {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    watchPendingCompletions(): void {
 | 
					    watchPendingCompletions(): void {
 | 
				
			||||||
        Platform.resume.subscribe(() => {
 | 
					        CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            // User went back to the app, check pending completions.
 | 
					            // User went back to the app, check pending completions.
 | 
				
			||||||
            for (const moduleId in this.pendingCheckCompletion) {
 | 
					            for (const moduleId in this.pendingCheckCompletion) {
 | 
				
			||||||
                const data = this.pendingCheckCompletion[moduleId];
 | 
					                const data = this.pendingCheckCompletion[moduleId];
 | 
				
			||||||
 | 
				
			|||||||
@ -19,9 +19,9 @@ import { CoreCourseContentsPage } from '@features/course/pages/contents/contents
 | 
				
			|||||||
import { IonContent } from '@ionic/angular';
 | 
					import { IonContent } from '@ionic/angular';
 | 
				
			||||||
import { CoreGroupInfo, CoreGroups } from '@services/groups';
 | 
					import { CoreGroupInfo, CoreGroups } from '@services/groups';
 | 
				
			||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					 | 
				
			||||||
import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
					import { CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { Subscription } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
import { AddonModWorkshopModuleHandlerService } from '../../services/handlers/module';
 | 
					import { AddonModWorkshopModuleHandlerService } from '../../services/handlers/module';
 | 
				
			||||||
@ -119,7 +119,7 @@ export class AddonModWorkshopIndexComponent extends CoreCourseModuleMainActivity
 | 
				
			|||||||
        }, this.siteId);
 | 
					        }, this.siteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Since most actions will take the user out of the app, we should refresh the view when the app is resumed.
 | 
					        // Since most actions will take the user out of the app, we should refresh the view when the app is resumed.
 | 
				
			||||||
        this.appResumeSubscription = Platform.resume.subscribe(() => {
 | 
					        this.appResumeSubscription = CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            this.showLoadingAndRefresh(true);
 | 
					            this.showLoadingAndRefresh(true);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ import { BackButtonEvent, ScrollDetail } from '@ionic/core';
 | 
				
			|||||||
import { CoreLang } from '@services/lang';
 | 
					import { CoreLang } from '@services/lang';
 | 
				
			||||||
import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
					import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { NgZone, Platform, SplashScreen, Translate } from '@singletons';
 | 
					import { NgZone, SplashScreen, Translate } from '@singletons';
 | 
				
			||||||
import { CoreNetwork } from '@services/network';
 | 
					import { CoreNetwork } from '@services/network';
 | 
				
			||||||
import { CoreApp, CoreAppProvider } from '@services/app';
 | 
					import { CoreApp, CoreAppProvider } from '@services/app';
 | 
				
			||||||
import { CoreSites } from '@services/sites';
 | 
					import { CoreSites } from '@services/sites';
 | 
				
			||||||
@ -33,6 +33,7 @@ import { CoreConstants } from '@/core/constants';
 | 
				
			|||||||
import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
 | 
					import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreDom } from '@singletons/dom';
 | 
					import { CoreDom } from '@singletons/dom';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MOODLE_VERSION_PREFIX = 'version-';
 | 
					const MOODLE_VERSION_PREFIX = 'version-';
 | 
				
			||||||
const MOODLEAPP_VERSION_PREFIX = 'moodleapp-';
 | 
					const MOODLEAPP_VERSION_PREFIX = 'moodleapp-';
 | 
				
			||||||
@ -181,7 +182,7 @@ export class AppComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Platform.resume.subscribe(() => {
 | 
					        CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            // Wait a second before setting it to false since in iOS there could be some frozen WS calls.
 | 
					            // Wait a second before setting it to false since in iOS there could be some frozen WS calls.
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
                if (CoreLoginHelper.isWaitingForBrowser()) {
 | 
					                if (CoreLoginHelper.isWaitingForBrowser()) {
 | 
				
			||||||
@ -305,7 +306,7 @@ export class AppComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
     * Async init function on platform ready.
 | 
					     * Async init function on platform ready.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected async onPlatformReady(): Promise<void> {
 | 
					    protected async onPlatformReady(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Refresh online status when changes.
 | 
					        // Refresh online status when changes.
 | 
				
			||||||
        CoreNetwork.onChange().subscribe(() => {
 | 
					        CoreNetwork.onChange().subscribe(() => {
 | 
				
			||||||
 | 
				
			|||||||
@ -14,13 +14,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { createAnimation } from '@ionic/angular';
 | 
					import { createAnimation } from '@ionic/angular';
 | 
				
			||||||
import { Animation } from '@ionic/core';
 | 
					import { Animation } from '@ionic/core';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Sliding transition for lateral modals.
 | 
					 * Sliding transition for lateral modals.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function CoreModalLateralTransitionEnter(baseEl: HTMLElement): Animation {
 | 
					export function CoreModalLateralTransitionEnter(baseEl: HTMLElement): Animation {
 | 
				
			||||||
    const OFF_RIGHT = Platform.isRTL ? '-100%' : '100%';
 | 
					    const OFF_RIGHT = CorePlatform.isRTL ? '-100%' : '100%';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const otherAnimations: Animation[] = [];
 | 
					    const otherAnimations: Animation[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -51,7 +51,7 @@ export function CoreModalLateralTransitionEnter(baseEl: HTMLElement): Animation
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function CoreModalLateralTransitionLeave(baseEl: HTMLElement): Animation {
 | 
					export function CoreModalLateralTransitionLeave(baseEl: HTMLElement): Animation {
 | 
				
			||||||
    const OFF_RIGHT = Platform.isRTL ? '-100%' : '100%';
 | 
					    const OFF_RIGHT = CorePlatform.isRTL ? '-100%' : '100%';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const otherAnimations: Animation[] = [];
 | 
					    const otherAnimations: Animation[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -14,9 +14,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { SQLiteObject } from '@ionic-native/sqlite/ngx';
 | 
					import { SQLiteObject } from '@ionic-native/sqlite/ngx';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { SQLite, Platform } from '@singletons';
 | 
					import { SQLite } from '@singletons';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
import { CoreDB } from '@services/db';
 | 
					import { CoreDB } from '@services/db';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type SQLiteDBColumnType = 'INTEGER' | 'REAL' | 'TEXT' | 'BLOB';
 | 
					type SQLiteDBColumnType = 'INTEGER' | 'REAL' | 'TEXT' | 'BLOB';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1157,7 +1158,7 @@ export class SQLiteDB {
 | 
				
			|||||||
     * @returns Database.
 | 
					     * @returns Database.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected async createDatabase(): Promise<SQLiteObject> {
 | 
					    protected async createDatabase(): Promise<SQLiteObject> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return SQLite.create({ name: this.name, location: 'default' });
 | 
					        return SQLite.create({ name: this.name, location: 'default' });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ import { IonSlides } from '@ionic/angular';
 | 
				
			|||||||
import { BackButtonEvent } from '@ionic/core';
 | 
					import { BackButtonEvent } from '@ionic/core';
 | 
				
			||||||
import { Subscription } from 'rxjs';
 | 
					import { Subscription } from 'rxjs';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Platform, Translate } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { CoreSettingsHelper } from '@features/settings/services/settings-helper';
 | 
					import { CoreSettingsHelper } from '@features/settings/services/settings-helper';
 | 
				
			||||||
import { CoreAriaRoleTab, CoreAriaRoleTabFindable } from './aria-role-tab';
 | 
					import { CoreAriaRoleTab, CoreAriaRoleTabFindable } from './aria-role-tab';
 | 
				
			||||||
import { CoreEventObserver } from '@singletons/events';
 | 
					import { CoreEventObserver } from '@singletons/events';
 | 
				
			||||||
@ -39,6 +39,7 @@ import { CoreError } from './errors/error';
 | 
				
			|||||||
import { CorePromisedValue } from './promised-value';
 | 
					import { CorePromisedValue } from './promised-value';
 | 
				
			||||||
import { AsyncComponent } from './async-component';
 | 
					import { AsyncComponent } from './async-component';
 | 
				
			||||||
import { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
					import { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Class to abstract some common code for tabs.
 | 
					 * Class to abstract some common code for tabs.
 | 
				
			||||||
@ -105,12 +106,12 @@ export class CoreTabsBaseComponent<T extends CoreTabBase> implements OnInit, Aft
 | 
				
			|||||||
     * @inheritdoc
 | 
					     * @inheritdoc
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async ngOnInit(): Promise<void> {
 | 
					    async ngOnInit(): Promise<void> {
 | 
				
			||||||
        this.direction = Platform.isRTL ? 'rtl' : 'ltr';
 | 
					        this.direction = CorePlatform.isRTL ? 'rtl' : 'ltr';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Change the side when the language changes.
 | 
					        // Change the side when the language changes.
 | 
				
			||||||
        this.subscriptions.push(Translate.onLangChange.subscribe(() => {
 | 
					        this.subscriptions.push(Translate.onLangChange.subscribe(() => {
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
                this.direction = Platform.isRTL ? 'rtl' : 'ltr';
 | 
					                this.direction = CorePlatform.isRTL ? 'rtl' : 'ltr';
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }));
 | 
					        }));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Component, Input } from '@angular/core';
 | 
					import { Component, Input } from '@angular/core';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const enum ScrollPosition {
 | 
					const enum ScrollPosition {
 | 
				
			||||||
    START = 'start',
 | 
					    START = 'start',
 | 
				
			||||||
@ -89,14 +89,14 @@ export class CoreHorizontalScrollControlsComponent {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (scrollLeft === 0) {
 | 
					        if (scrollLeft === 0) {
 | 
				
			||||||
            return Platform.isRTL ? ScrollPosition.END : ScrollPosition.START;
 | 
					            return CorePlatform.isRTL ? ScrollPosition.END : ScrollPosition.START;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!Platform.isRTL && this.target.scrollWidth - scrollLeft === this.target.clientWidth) {
 | 
					        if (!CorePlatform.isRTL && this.target.scrollWidth - scrollLeft === this.target.clientWidth) {
 | 
				
			||||||
            return ScrollPosition.END;
 | 
					            return ScrollPosition.END;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Platform.isRTL && this.target.scrollWidth + scrollLeft === this.target.clientWidth) {
 | 
					        if (CorePlatform.isRTL && this.target.scrollWidth + scrollLeft === this.target.clientWidth) {
 | 
				
			||||||
            return ScrollPosition.START;
 | 
					            return ScrollPosition.START;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@ import { CoreIframeUtils, CoreIframeUtilsProvider } from '@services/utils/iframe
 | 
				
			|||||||
import { CoreTextUtils } from '@services/utils/text';
 | 
					import { CoreTextUtils } from '@services/utils/text';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { CoreSite } from '@classes/site';
 | 
					import { CoreSite } from '@classes/site';
 | 
				
			||||||
import { NgZone, Platform, Translate } from '@singletons';
 | 
					import { NgZone, Translate } from '@singletons';
 | 
				
			||||||
import { CoreExternalContentDirective } from './external-content';
 | 
					import { CoreExternalContentDirective } from './external-content';
 | 
				
			||||||
import { CoreLinkDirective } from './link';
 | 
					import { CoreLinkDirective } from './link';
 | 
				
			||||||
import { CoreFilter, CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter';
 | 
					import { CoreFilter, CoreFilterFilter, CoreFilterFormatTextOptions } from '@features/filter/services/filter';
 | 
				
			||||||
@ -49,6 +49,7 @@ import { CoreText } from '@singletons/text';
 | 
				
			|||||||
import { CoreDom } from '@singletons/dom';
 | 
					import { CoreDom } from '@singletons/dom';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { CoreRefreshContext, CORE_REFRESH_CONTEXT } from '@/core/utils/refresh-context';
 | 
					import { CoreRefreshContext, CORE_REFRESH_CONTEXT } from '@/core/utils/refresh-context';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Directive to format text rendered. It renders the HTML and treats all links and media, using CoreLinkDirective
 | 
					 * Directive to format text rendered. It renders the HTML and treats all links and media, using CoreLinkDirective
 | 
				
			||||||
@ -615,7 +616,7 @@ export class CoreFormatTextDirective implements OnChanges, OnDestroy, AsyncCompo
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    if (refreshOnResume && this.refreshContext) {
 | 
					                    if (refreshOnResume && this.refreshContext) {
 | 
				
			||||||
                        // Refresh the context when the app is resumed.
 | 
					                        // Refresh the context when the app is resumed.
 | 
				
			||||||
                        CoreSubscriptions.once(Platform.resume, () => {
 | 
					                        CoreSubscriptions.once(CorePlatform.resume, () => {
 | 
				
			||||||
                            NgZone.run(async () => {
 | 
					                            NgZone.run(async () => {
 | 
				
			||||||
                                this.refreshContext?.refreshContext();
 | 
					                                this.refreshContext?.refreshContext();
 | 
				
			||||||
                            });
 | 
					                            });
 | 
				
			||||||
 | 
				
			|||||||
@ -17,8 +17,9 @@ import { CoreSwipeNavigationItemsManager } from '@classes/items-management/swipe
 | 
				
			|||||||
import { CoreSwipeNavigationTourComponent } from '@components/swipe-navigation-tour/swipe-navigation-tour';
 | 
					import { CoreSwipeNavigationTourComponent } from '@components/swipe-navigation-tour/swipe-navigation-tour';
 | 
				
			||||||
import { CoreUserTours } from '@features/usertours/services/user-tours';
 | 
					import { CoreUserTours } from '@features/usertours/services/user-tours';
 | 
				
			||||||
import { Gesture, GestureDetail } from '@ionic/angular';
 | 
					import { Gesture, GestureDetail } from '@ionic/angular';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreScreen } from '@services/screen';
 | 
					import { CoreScreen } from '@services/screen';
 | 
				
			||||||
import { GestureController, Platform } from '@singletons';
 | 
					import { GestureController } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ACTIVATION_THRESHOLD = 150;
 | 
					const ACTIVATION_THRESHOLD = 150;
 | 
				
			||||||
const SWIPE_FRICTION = 0.6;
 | 
					const SWIPE_FRICTION = 0.6;
 | 
				
			||||||
@ -105,7 +106,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Platform.isRTL
 | 
					        CorePlatform.isRTL
 | 
				
			||||||
            ? this.manager?.navigateToPreviousItem()
 | 
					            ? this.manager?.navigateToPreviousItem()
 | 
				
			||||||
            : this.manager?.navigateToNextItem();
 | 
					            : this.manager?.navigateToNextItem();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -118,7 +119,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Platform.isRTL
 | 
					        CorePlatform.isRTL
 | 
				
			||||||
            ? this.manager?.navigateToNextItem()
 | 
					            ? this.manager?.navigateToNextItem()
 | 
				
			||||||
            : this.manager?.navigateToPreviousItem();
 | 
					            : this.manager?.navigateToPreviousItem();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -131,7 +132,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
 | 
				
			|||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Platform.isRTL
 | 
					        return CorePlatform.isRTL
 | 
				
			||||||
            ? await this.manager.hasNextItem()
 | 
					            ? await this.manager.hasNextItem()
 | 
				
			||||||
            : await this.manager.hasPreviousItem();
 | 
					            : await this.manager.hasPreviousItem();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -144,7 +145,7 @@ export class CoreSwipeNavigationDirective implements AfterViewInit, OnDestroy {
 | 
				
			|||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Platform.isRTL
 | 
					        return CorePlatform.isRTL
 | 
				
			||||||
            ? await this.manager.hasPreviousItem()
 | 
					            ? await this.manager.hasPreviousItem()
 | 
				
			||||||
            : await this.manager.hasNextItem();
 | 
					            : await this.manager.hasNextItem();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,6 @@ import {
 | 
				
			|||||||
} from '@angular/core';
 | 
					} from '@angular/core';
 | 
				
			||||||
import { JitCompilerFactory } from '@angular/platform-browser-dynamic';
 | 
					import { JitCompilerFactory } from '@angular/platform-browser-dynamic';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    Platform,
 | 
					 | 
				
			||||||
    ActionSheetController,
 | 
					    ActionSheetController,
 | 
				
			||||||
    AlertController,
 | 
					    AlertController,
 | 
				
			||||||
    LoadingController,
 | 
					    LoadingController,
 | 
				
			||||||
@ -156,6 +155,7 @@ import { ADDON_PRIVATEFILES_SERVICES } from '@addons/privatefiles/privatefiles.m
 | 
				
			|||||||
import { AddonModAssignComponentsModule } from '@addons/mod/assign/components/components.module';
 | 
					import { AddonModAssignComponentsModule } from '@addons/mod/assign/components/components.module';
 | 
				
			||||||
import { AddonModWorkshopComponentsModule } from '@addons/mod/workshop/components/components.module';
 | 
					import { AddonModWorkshopComponentsModule } from '@addons/mod/workshop/components/components.module';
 | 
				
			||||||
import { CorePromisedValue } from '@classes/promised-value';
 | 
					import { CorePromisedValue } from '@classes/promised-value';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service to provide functionalities regarding compiling dynamic HTML and Javascript.
 | 
					 * Service to provide functionalities regarding compiling dynamic HTML and Javascript.
 | 
				
			||||||
@ -168,7 +168,7 @@ export class CoreCompileProvider {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Other Ionic/Angular providers that don't depend on where they are injected.
 | 
					    // Other Ionic/Angular providers that don't depend on where they are injected.
 | 
				
			||||||
    protected readonly OTHER_SERVICES: unknown[] = [
 | 
					    protected readonly OTHER_SERVICES: unknown[] = [
 | 
				
			||||||
        TranslateService, HttpClient, Platform, DomSanitizer, ActionSheetController, AlertController, LoadingController,
 | 
					        TranslateService, HttpClient, DomSanitizer, ActionSheetController, AlertController, LoadingController,
 | 
				
			||||||
        ModalController, PopoverController, ToastController, FormBuilder,
 | 
					        ModalController, PopoverController, ToastController, FormBuilder,
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -345,9 +345,11 @@ export class CoreCompileProvider {
 | 
				
			|||||||
        instance['moment'] = moment;
 | 
					        instance['moment'] = moment;
 | 
				
			||||||
        instance['Md5'] = Md5;
 | 
					        instance['Md5'] = Md5;
 | 
				
			||||||
        instance['Network'] = CoreNetwork.instance; // @deprecated on 4.1, plugins should use CoreNetworkService instead.
 | 
					        instance['Network'] = CoreNetwork.instance; // @deprecated on 4.1, plugins should use CoreNetworkService instead.
 | 
				
			||||||
 | 
					        instance['Platform'] = CorePlatform.instance; // @deprecated on 4.1, plugins should use CorePlatform instead.
 | 
				
			||||||
        instance['CoreSyncBaseProvider'] = CoreSyncBaseProvider;
 | 
					        instance['CoreSyncBaseProvider'] = CoreSyncBaseProvider;
 | 
				
			||||||
        instance['CoreArray'] = CoreArray;
 | 
					        instance['CoreArray'] = CoreArray;
 | 
				
			||||||
        instance['CoreComponentsRegistry'] = CoreComponentsRegistry;
 | 
					        instance['CoreComponentsRegistry'] = CoreComponentsRegistry;
 | 
				
			||||||
 | 
					        instance['CorePlatform'] = CorePlatform.instance;
 | 
				
			||||||
        instance['CoreDom'] = CoreDom;
 | 
					        instance['CoreDom'] = CoreDom;
 | 
				
			||||||
        instance['CoreForms'] = CoreForms;
 | 
					        instance['CoreForms'] = CoreForms;
 | 
				
			||||||
        instance['CoreText'] = CoreText;
 | 
					        instance['CoreText'] = CoreText;
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ import {
 | 
				
			|||||||
    CoreCourseOptionsMenuHandlerToDisplay,
 | 
					    CoreCourseOptionsMenuHandlerToDisplay,
 | 
				
			||||||
} from '@features/course/services/course-options-delegate';
 | 
					} from '@features/course/services/course-options-delegate';
 | 
				
			||||||
import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
					import { CoreCourseHelper } from '@features/course/services/course-helper';
 | 
				
			||||||
import { ActionSheetController, ModalController, NgZone, Platform, Translate } from '@singletons';
 | 
					import { ActionSheetController, ModalController, NgZone, Translate } from '@singletons';
 | 
				
			||||||
import { CoreCoursesSelfEnrolPasswordComponent } from '../../../courses/components/self-enrol-password/self-enrol-password';
 | 
					import { CoreCoursesSelfEnrolPasswordComponent } from '../../../courses/components/self-enrol-password/self-enrol-password';
 | 
				
			||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
@ -39,6 +39,7 @@ import { Subscription } from 'rxjs';
 | 
				
			|||||||
import { CoreColors } from '@singletons/colors';
 | 
					import { CoreColors } from '@singletons/colors';
 | 
				
			||||||
import { CoreText } from '@singletons/text';
 | 
					import { CoreText } from '@singletons/text';
 | 
				
			||||||
import { CorePromisedValue } from '@classes/promised-value';
 | 
					import { CorePromisedValue } from '@classes/promised-value';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ENROL_BROWSER_METHODS = ['fee', 'paypal'];
 | 
					const ENROL_BROWSER_METHODS = ['fee', 'paypal'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -84,7 +85,7 @@ export class CoreCourseSummaryPage implements OnInit, OnDestroy {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
        // Refresh the view when the app is resumed.
 | 
					        // Refresh the view when the app is resumed.
 | 
				
			||||||
        this.appResumeSubscription = Platform.resume.subscribe(() => {
 | 
					        this.appResumeSubscription = CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            if (!this.waitingForBrowserEnrol || !this.dataLoaded) {
 | 
					            if (!this.waitingForBrowserEnrol || !this.dataLoaded) {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ import { CoreTimeUtils } from '@services/utils/time';
 | 
				
			|||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { CoreSiteWSPreSets, CoreSite } from '@classes/site';
 | 
					import { CoreSiteWSPreSets, CoreSite } from '@classes/site';
 | 
				
			||||||
import { CoreConstants } from '@/core/constants';
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { makeSingleton, Platform, Translate } from '@singletons';
 | 
					import { makeSingleton, Translate } from '@singletons';
 | 
				
			||||||
import { CoreStatusWithWarningsWSResponse, CoreWSExternalFile, CoreWSExternalWarning } from '@services/ws';
 | 
					import { CoreStatusWithWarningsWSResponse, CoreWSExternalFile, CoreWSExternalWarning } from '@services/ws';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -52,6 +52,7 @@ import { asyncInstance, AsyncInstance } from '@/core/utils/async-instance';
 | 
				
			|||||||
import { CoreDatabaseTable } from '@classes/database/database-table';
 | 
					import { CoreDatabaseTable } from '@classes/database/database-table';
 | 
				
			||||||
import { CoreDatabaseCachingStrategy } from '@classes/database/database-table-proxy';
 | 
					import { CoreDatabaseCachingStrategy } from '@classes/database/database-table-proxy';
 | 
				
			||||||
import { SQLiteDB } from '@classes/sqlitedb';
 | 
					import { SQLiteDB } from '@classes/sqlitedb';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ROOT_CACHE_KEY = 'mmCourse:';
 | 
					const ROOT_CACHE_KEY = 'mmCourse:';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -173,7 +174,7 @@ export class CoreCourseProvider {
 | 
				
			|||||||
     * Initialize.
 | 
					     * Initialize.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    initialize(): void {
 | 
					    initialize(): void {
 | 
				
			||||||
        Platform.resume.subscribe(() => {
 | 
					        CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            // Run the handler the app is open to keep user in online status.
 | 
					            // Run the handler the app is open to keep user in online status.
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
                CoreCronDelegate.forceCronHandlerExecution(CoreCourseLogCronHandler.name);
 | 
					                CoreCronDelegate.forceCronHandlerExecution(CoreCourseLogCronHandler.name);
 | 
				
			||||||
 | 
				
			|||||||
@ -33,7 +33,7 @@ import { CoreFilepool } from '@services/filepool';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUrlUtils } from '@services/utils/url';
 | 
					import { CoreUrlUtils } from '@services/utils/url';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { Platform, Translate } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { CoreEventFormActionData, CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
					import { CoreEventFormActionData, CoreEventObserver, CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { CoreEditorOffline } from '../../services/editor-offline';
 | 
					import { CoreEditorOffline } from '../../services/editor-offline';
 | 
				
			||||||
import { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
					import { CoreComponentsRegistry } from '@singletons/components-registry';
 | 
				
			||||||
@ -155,7 +155,7 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterViewInit,
 | 
				
			|||||||
        this.canScanQR = CoreUtils.canScanQR();
 | 
					        this.canScanQR = CoreUtils.canScanQR();
 | 
				
			||||||
        this.isPhone = CoreScreen.isMobile;
 | 
					        this.isPhone = CoreScreen.isMobile;
 | 
				
			||||||
        this.toolbarHidden = this.isPhone;
 | 
					        this.toolbarHidden = this.isPhone;
 | 
				
			||||||
        this.direction = Platform.isRTL ? 'rtl' : 'ltr';
 | 
					        this.direction = CorePlatform.isRTL ? 'rtl' : 'ltr';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -269,7 +269,7 @@ export class CoreEditorRichTextEditorComponent implements OnInit, AfterViewInit,
 | 
				
			|||||||
        // Change the side when the language changes.
 | 
					        // Change the side when the language changes.
 | 
				
			||||||
        this.languageChangedSubscription = Translate.onLangChange.subscribe(() => {
 | 
					        this.languageChangedSubscription = Translate.onLangChange.subscribe(() => {
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
                this.direction = Platform.isRTL ? 'rtl' : 'ltr';
 | 
					                this.direction = CorePlatform.isRTL ? 'rtl' : 'ltr';
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ import { CoreFile, CoreFileProvider } from '@services/file';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreMimetypeUtils } from '@services/utils/mimetype';
 | 
					import { CoreMimetypeUtils } from '@services/utils/mimetype';
 | 
				
			||||||
import { CoreTimeUtils } from '@services/utils/time';
 | 
					import { CoreTimeUtils } from '@services/utils/time';
 | 
				
			||||||
import { Platform, ModalController, Media, Translate } from '@singletons';
 | 
					import { ModalController, Media, Translate } from '@singletons';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
import { CoreCaptureError } from '@classes/errors/captureerror';
 | 
					import { CoreCaptureError } from '@classes/errors/captureerror';
 | 
				
			||||||
import { CoreCanceledError } from '@classes/errors/cancelederror';
 | 
					import { CoreCanceledError } from '@classes/errors/cancelederror';
 | 
				
			||||||
@ -119,7 +119,7 @@ export class CoreEmulatorCaptureMediaComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
        this.isCordovaAudioCapture = CorePlatform.isMobile() && this.isAudio;
 | 
					        this.isCordovaAudioCapture = CorePlatform.isMobile() && this.isAudio;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (this.isCordovaAudioCapture) {
 | 
					        if (this.isCordovaAudioCapture) {
 | 
				
			||||||
            this.extension = Platform.is('ios') ? 'wav' : 'aac';
 | 
					            this.extension = CorePlatform.is('ios') ? 'wav' : 'aac';
 | 
				
			||||||
            this.returnDataUrl = false;
 | 
					            this.returnDataUrl = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -153,7 +153,7 @@ export class CoreEmulatorCaptureMediaComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
        // Now create the media instance.
 | 
					        // Now create the media instance.
 | 
				
			||||||
        let absolutePath = CoreText.concatenatePaths(CoreFile.getBasePathInstant(), this.filePath);
 | 
					        let absolutePath = CoreText.concatenatePaths(CoreFile.getBasePathInstant(), this.filePath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (Platform.is('ios')) {
 | 
					        if (CorePlatform.is('ios')) {
 | 
				
			||||||
            // In iOS we need to remove the file:// part.
 | 
					            // In iOS we need to remove the file:// part.
 | 
				
			||||||
            absolutePath = absolutePath.replace(/^file:\/\//, '');
 | 
					            absolutePath = absolutePath.replace(/^file:\/\//, '');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			|||||||
import { CoreMimetypeUtils } from '@services/utils/mimetype';
 | 
					import { CoreMimetypeUtils } from '@services/utils/mimetype';
 | 
				
			||||||
import { CoreTextUtils } from '@services/utils/text';
 | 
					import { CoreTextUtils } from '@services/utils/text';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { makeSingleton, Translate, Camera, Chooser, Platform, ActionSheetController } from '@singletons';
 | 
					import { makeSingleton, Translate, Camera, Chooser, ActionSheetController } from '@singletons';
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { CoreCanceledError } from '@classes/errors/cancelederror';
 | 
					import { CoreCanceledError } from '@classes/errors/cancelederror';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
@ -644,8 +644,8 @@ export class CoreFileUploaderHelperProvider {
 | 
				
			|||||||
            options.popoverOptions = {
 | 
					            options.popoverOptions = {
 | 
				
			||||||
                x: 10,
 | 
					                x: 10,
 | 
				
			||||||
                y: 10,
 | 
					                y: 10,
 | 
				
			||||||
                width: Platform.width() - 200,
 | 
					                width: CorePlatform.width() - 200,
 | 
				
			||||||
                height: Platform.height() - 200,
 | 
					                height: CorePlatform.height() - 200,
 | 
				
			||||||
                arrowDir: Camera.PopoverArrowDirection.ARROW_ANY,
 | 
					                arrowDir: Camera.PopoverArrowDirection.ARROW_ANY,
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -17,10 +17,11 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
					import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
				
			||||||
import { Translate, Platform } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { CoreWSExternalWarning } from '@services/ws';
 | 
					import { CoreWSExternalWarning } from '@services/ws';
 | 
				
			||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
import { CoreForms } from '@singletons/form';
 | 
					import { CoreForms } from '@singletons/form';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Page to recover a forgotten password.
 | 
					 * Page to recover a forgotten password.
 | 
				
			||||||
@ -55,7 +56,7 @@ export class CoreLoginForgottenPasswordPage implements OnInit {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.siteUrl = siteUrl;
 | 
					        this.siteUrl = siteUrl;
 | 
				
			||||||
        this.autoFocus = Platform.is('tablet');
 | 
					        this.autoFocus = CorePlatform.is('tablet');
 | 
				
			||||||
        this.myForm = this.formBuilder.group({
 | 
					        this.myForm = this.formBuilder.group({
 | 
				
			||||||
            field: ['username', Validators.required],
 | 
					            field: ['username', Validators.required],
 | 
				
			||||||
            value: [CoreNavigator.getRouteParam<string>('username') || '', Validators.required],
 | 
					            value: [CoreNavigator.getRouteParam<string>('username') || '', Validators.required],
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ import { CoreTextUtils } from '@services/utils/text';
 | 
				
			|||||||
import { CoreConfig } from '@services/config';
 | 
					import { CoreConfig } from '@services/config';
 | 
				
			||||||
import { CoreConstants } from '@/core/constants';
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { CoreSite, CoreSiteInfo } from '@classes/site';
 | 
					import { CoreSite, CoreSiteInfo } from '@classes/site';
 | 
				
			||||||
import { makeSingleton, Badge, Push, Device, Translate, Platform, ApplicationInit, NgZone } from '@singletons';
 | 
					import { makeSingleton, Badge, Push, Device, Translate, ApplicationInit, NgZone } from '@singletons';
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -153,7 +153,7 @@ export class CorePushNotificationsProvider {
 | 
				
			|||||||
     * @return Promise resolved when done.
 | 
					     * @return Promise resolved when done.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected async initializeDefaultChannel(): Promise<void> {
 | 
					    protected async initializeDefaultChannel(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Create the default channel.
 | 
					        // Create the default channel.
 | 
				
			||||||
        this.createDefaultChannel();
 | 
					        this.createDefaultChannel();
 | 
				
			||||||
 | 
				
			|||||||
@ -15,10 +15,10 @@
 | 
				
			|||||||
import { Component, OnInit } from '@angular/core';
 | 
					import { Component, OnInit } from '@angular/core';
 | 
				
			||||||
import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
 | 
					import { CoreSitePlugins } from '@features/siteplugins/services/siteplugins';
 | 
				
			||||||
import { CoreUserTours } from '@features/usertours/services/user-tours';
 | 
					import { CoreUserTours } from '@features/usertours/services/user-tours';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreSites } from '@services/sites';
 | 
					import { CoreSites } from '@services/sites';
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Page that displays the developer options.
 | 
					 * Page that displays the developer options.
 | 
				
			||||||
@ -45,7 +45,7 @@ export class CoreSettingsDevPage implements OnInit {
 | 
				
			|||||||
    siteId: string | undefined;
 | 
					    siteId: string | undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async ngOnInit(): Promise<void> {
 | 
					    async ngOnInit(): Promise<void> {
 | 
				
			||||||
        this.rtl = Platform.isRTL;
 | 
					        this.rtl = CorePlatform.isRTL;
 | 
				
			||||||
        this.RTLChanged();
 | 
					        this.RTLChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.forceSafeAreaMargins = document.documentElement.classList.contains('force-safe-area-margins');
 | 
					        this.forceSafeAreaMargins = document.documentElement.classList.contains('force-safe-area-margins');
 | 
				
			||||||
 | 
				
			|||||||
@ -16,7 +16,7 @@ import { CoreApp } from '@services/app';
 | 
				
			|||||||
import { Component, OnDestroy } from '@angular/core';
 | 
					import { Component, OnDestroy } from '@angular/core';
 | 
				
			||||||
import { CoreConstants } from '@/core/constants';
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { CoreLocalNotifications } from '@services/local-notifications';
 | 
					import { CoreLocalNotifications } from '@services/local-notifications';
 | 
				
			||||||
import { Device, Platform, Translate, NgZone } from '@singletons';
 | 
					import { Device, Translate, NgZone } from '@singletons';
 | 
				
			||||||
import { CoreLang } from '@services/lang';
 | 
					import { CoreLang } from '@services/lang';
 | 
				
			||||||
import { CoreFile } from '@services/file';
 | 
					import { CoreFile } from '@services/file';
 | 
				
			||||||
import { CoreSites } from '@services/sites';
 | 
					import { CoreSites } from '@services/sites';
 | 
				
			||||||
@ -110,7 +110,7 @@ export class CoreSettingsDeviceInfoPage implements OnDestroy {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (CorePlatform.isMobile()) {
 | 
					        if (CorePlatform.isMobile()) {
 | 
				
			||||||
            this.deviceInfo.deviceType = Platform.is('tablet') ? 'tablet' : 'phone';
 | 
					            this.deviceInfo.deviceType = CorePlatform.is('tablet') ? 'tablet' : 'phone';
 | 
				
			||||||
            if (CoreApp.isAndroid()) {
 | 
					            if (CoreApp.isAndroid()) {
 | 
				
			||||||
                this.deviceInfo.deviceOs = 'android';
 | 
					                this.deviceInfo.deviceOs = 'android';
 | 
				
			||||||
                this.deviceOsTranslated = 'Android';
 | 
					                this.deviceOsTranslated = 'Android';
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ import { CoreFile } from '@services/file';
 | 
				
			|||||||
import { CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigator } from '@services/navigator';
 | 
				
			||||||
import { CoreSites } from '@services/sites';
 | 
					import { CoreSites } from '@services/sites';
 | 
				
			||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { AlertController, ApplicationInit, makeSingleton, Platform, Translate } from '@singletons';
 | 
					import { AlertController, ApplicationInit, makeSingleton, Translate } from '@singletons';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { CoreSharedFilesListModalComponent } from '../components/list-modal/list-modal';
 | 
					import { CoreSharedFilesListModalComponent } from '../components/list-modal/list-modal';
 | 
				
			||||||
@ -31,6 +31,7 @@ import { CoreSharedFiles } from './sharedfiles';
 | 
				
			|||||||
import { SHAREDFILES_PAGE_NAME } from '../sharedfiles.module';
 | 
					import { SHAREDFILES_PAGE_NAME } from '../sharedfiles.module';
 | 
				
			||||||
import { CoreSharedFilesChooseSitePage } from '../pages/choose-site/choose-site';
 | 
					import { CoreSharedFilesChooseSitePage } from '../pages/choose-site/choose-site';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Helper service to share files with the app.
 | 
					 * Helper service to share files with the app.
 | 
				
			||||||
@ -57,7 +58,7 @@ export class CoreSharedFilesHelperProvider {
 | 
				
			|||||||
        // Check if there are new files at app start and when the app is resumed.
 | 
					        // Check if there are new files at app start and when the app is resumed.
 | 
				
			||||||
        this.searchIOSNewSharedFiles();
 | 
					        this.searchIOSNewSharedFiles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Platform.resume.subscribe(() => {
 | 
					        CorePlatform.resume.subscribe(() => {
 | 
				
			||||||
            // Wait a bit to make sure that APP_LAUNCHED_URL is treated before this callback.
 | 
					            // Wait a bit to make sure that APP_LAUNCHED_URL is treated before this callback.
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
                if (Date.now() - lastCheck < 1000) {
 | 
					                if (Date.now() - lastCheck < 1000) {
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreStyles, renderInlineStyles } from '@/core/utils/style-helpers';
 | 
					import { CoreStyles, renderInlineStyles } from '@/core/utils/style-helpers';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreUserToursAlignment, CoreUserToursSide } from '../services/user-tours';
 | 
					import { CoreUserToursAlignment, CoreUserToursSide } from '../services/user-tours';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ARROW_HEIGHT = 22;
 | 
					const ARROW_HEIGHT = 22;
 | 
				
			||||||
@ -54,8 +54,12 @@ export class CoreUserToursPopoverLayout {
 | 
				
			|||||||
            [CoreUserToursSide.Bottom]: this.calculateWrapperBottomSideStyles,
 | 
					            [CoreUserToursSide.Bottom]: this.calculateWrapperBottomSideStyles,
 | 
				
			||||||
            [CoreUserToursSide.Right]: this.calculateWrapperRightSideStyles,
 | 
					            [CoreUserToursSide.Right]: this.calculateWrapperRightSideStyles,
 | 
				
			||||||
            [CoreUserToursSide.Left]: this.calculateWrapperLeftSideStyles,
 | 
					            [CoreUserToursSide.Left]: this.calculateWrapperLeftSideStyles,
 | 
				
			||||||
            [CoreUserToursSide.Start]: Platform.isRTL ? this.calculateWrapperRightSideStyles : this.calculateWrapperLeftSideStyles,
 | 
					            [CoreUserToursSide.Start]: CorePlatform.isRTL
 | 
				
			||||||
            [CoreUserToursSide.End]: Platform.isRTL ? this.calculateWrapperLeftSideStyles : this.calculateWrapperRightSideStyles,
 | 
					                ? this.calculateWrapperRightSideStyles
 | 
				
			||||||
 | 
					                : this.calculateWrapperLeftSideStyles,
 | 
				
			||||||
 | 
					            [CoreUserToursSide.End]: CorePlatform.isRTL
 | 
				
			||||||
 | 
					                ? this.calculateWrapperLeftSideStyles
 | 
				
			||||||
 | 
					                : this.calculateWrapperRightSideStyles,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        sideHandlers[this.side].call(this);
 | 
					        sideHandlers[this.side].call(this);
 | 
				
			||||||
@ -69,11 +73,11 @@ export class CoreUserToursPopoverLayout {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private calculateWrapperHorizontalAlignmentStyles(): void {
 | 
					    private calculateWrapperHorizontalAlignmentStyles(): void {
 | 
				
			||||||
        const horizontalAlignmentHandlers: Record<CoreUserToursAlignment, () => void> ={
 | 
					        const horizontalAlignmentHandlers: Record<CoreUserToursAlignment, () => void> ={
 | 
				
			||||||
            [CoreUserToursAlignment.Start]: Platform.isRTL
 | 
					            [CoreUserToursAlignment.Start]: CorePlatform.isRTL
 | 
				
			||||||
                ? this.calculateWrapperRightAlignmentStyles
 | 
					                ? this.calculateWrapperRightAlignmentStyles
 | 
				
			||||||
                : this.calculateWrapperLeftAlignmentStyles,
 | 
					                : this.calculateWrapperLeftAlignmentStyles,
 | 
				
			||||||
            [CoreUserToursAlignment.Center]: this.calculateWrapperCenterHorizontalAlignmentStyles,
 | 
					            [CoreUserToursAlignment.Center]: this.calculateWrapperCenterHorizontalAlignmentStyles,
 | 
				
			||||||
            [CoreUserToursAlignment.End]: Platform.isRTL
 | 
					            [CoreUserToursAlignment.End]: CorePlatform.isRTL
 | 
				
			||||||
                ? this.calculateWrapperLeftAlignmentStyles
 | 
					                ? this.calculateWrapperLeftAlignmentStyles
 | 
				
			||||||
                : this.calculateWrapperRightAlignmentStyles,
 | 
					                : this.calculateWrapperRightAlignmentStyles,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
				
			|||||||
@ -13,14 +13,14 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CorePlatform } from '@services/platform';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { NativeHttp, Platform } from '@singletons';
 | 
					import { NativeHttp } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function(): Promise<void> {
 | 
					export default async function(): Promise<void> {
 | 
				
			||||||
    if (!CorePlatform.isMobile()) {
 | 
					    if (!CorePlatform.isMobile()) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await Platform.ready();
 | 
					    await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NativeHttp.setHeader('*', 'User-Agent', navigator.userAgent);
 | 
					    NativeHttp.setHeader('*', 'User-Agent', navigator.userAgent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -13,11 +13,11 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreApp } from '@services/app';
 | 
					import { CoreApp } from '@services/app';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
import { CoreIframeUtils } from '@services/utils/iframe';
 | 
					import { CoreIframeUtils } from '@services/utils/iframe';
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function(): Promise<void> {
 | 
					export default async function(): Promise<void> {
 | 
				
			||||||
    await Platform.ready();
 | 
					    await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!CoreApp.isIOS() || !('WKUserScript' in window)) {
 | 
					    if (!CoreApp.isIOS() || !('WKUserScript' in window)) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
				
			|||||||
@ -12,10 +12,10 @@
 | 
				
			|||||||
// See the License for the specific language governing permissions and
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function(): Promise<void> {
 | 
					export default async function(): Promise<void> {
 | 
				
			||||||
    await Platform.ready();
 | 
					    await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!window.cordova?.InAppBrowser) {
 | 
					    if (!window.cordova?.InAppBrowser) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
				
			|||||||
@ -12,8 +12,8 @@
 | 
				
			|||||||
// See the License for the specific language governing permissions and
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Platform } from '@singletons';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function(): Promise<void> {
 | 
					export default async function(): Promise<void> {
 | 
				
			||||||
    await Platform.ready();
 | 
					    await CorePlatform.ready();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,7 @@ import { CoreDB } from '@services/db';
 | 
				
			|||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { SQLiteDB, SQLiteDBTableSchema } from '@classes/sqlitedb';
 | 
					import { SQLiteDB, SQLiteDBTableSchema } from '@classes/sqlitedb';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { makeSingleton, Keyboard, StatusBar, Platform, Device } from '@singletons';
 | 
					import { makeSingleton, Keyboard, StatusBar, Device } from '@singletons';
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { CoreColors } from '@singletons/colors';
 | 
					import { CoreColors } from '@singletons/colors';
 | 
				
			||||||
import { DBNAME, SCHEMA_VERSIONS_TABLE_NAME, SCHEMA_VERSIONS_TABLE_SCHEMA, SchemaVersionsDBEntry } from '@services/database/app';
 | 
					import { DBNAME, SCHEMA_VERSIONS_TABLE_NAME, SCHEMA_VERSIONS_TABLE_SCHEMA, SchemaVersionsDBEntry } from '@services/database/app';
 | 
				
			||||||
@ -227,7 +227,7 @@ export class CoreAppProvider {
 | 
				
			|||||||
     * @return Whether the app is running in an Android mobile or tablet device.
 | 
					     * @return Whether the app is running in an Android mobile or tablet device.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    isAndroid(): boolean {
 | 
					    isAndroid(): boolean {
 | 
				
			||||||
        return CorePlatform.isMobile() && Platform.is('android');
 | 
					        return CorePlatform.isMobile() && CorePlatform.is('android');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -246,7 +246,7 @@ export class CoreAppProvider {
 | 
				
			|||||||
     * @return Whether the app is running in an iOS mobile or tablet device.
 | 
					     * @return Whether the app is running in an iOS mobile or tablet device.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    isIOS(): boolean {
 | 
					    isIOS(): boolean {
 | 
				
			||||||
        return CorePlatform.isMobile() && !Platform.is('android');
 | 
					        return CorePlatform.isMobile() && !CorePlatform.is('android');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -322,7 +322,7 @@ export class CoreAppProvider {
 | 
				
			|||||||
     * @return Whether the app the current window is wider than a mobile.
 | 
					     * @return Whether the app the current window is wider than a mobile.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    isWide(): boolean {
 | 
					    isWide(): boolean {
 | 
				
			||||||
        return Platform.width() > 768;
 | 
					        return CorePlatform.width() > 768;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -490,7 +490,7 @@ export class CoreAppProvider {
 | 
				
			|||||||
            deferred = null;
 | 
					            deferred = null;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        resumeSubscription = Platform.resume.subscribe(stopWaiting);
 | 
					        resumeSubscription = CorePlatform.resume.subscribe(stopWaiting);
 | 
				
			||||||
        timeoutId = timeout ? window.setTimeout(stopWaiting, timeout) : null;
 | 
					        timeoutId = timeout ? window.setTimeout(stopWaiting, timeout) : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await deferred;
 | 
					        await deferred;
 | 
				
			||||||
 | 
				
			|||||||
@ -17,8 +17,9 @@ import { Injectable } from '@angular/core';
 | 
				
			|||||||
import { SQLiteDB } from '@classes/sqlitedb';
 | 
					import { SQLiteDB } from '@classes/sqlitedb';
 | 
				
			||||||
import { SQLiteDBMock } from '@features/emulator/classes/sqlitedb';
 | 
					import { SQLiteDBMock } from '@features/emulator/classes/sqlitedb';
 | 
				
			||||||
import { CoreBrowser } from '@singletons/browser';
 | 
					import { CoreBrowser } from '@singletons/browser';
 | 
				
			||||||
import { makeSingleton, SQLite, Platform } from '@singletons';
 | 
					import { makeSingleton, SQLite } from '@singletons';
 | 
				
			||||||
import { CoreAppProvider } from './app';
 | 
					import { CoreAppProvider } from './app';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableNameRegex = new RegExp([
 | 
					const tableNameRegex = new RegExp([
 | 
				
			||||||
    '^SELECT.*FROM ([^ ]+)',
 | 
					    '^SELECT.*FROM ([^ ]+)',
 | 
				
			||||||
@ -208,7 +209,7 @@ export class CoreDbProvider {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    getDB(name: string, forceNew?: boolean): SQLiteDB {
 | 
					    getDB(name: string, forceNew?: boolean): SQLiteDB {
 | 
				
			||||||
        if (this.dbInstances[name] === undefined || forceNew) {
 | 
					        if (this.dbInstances[name] === undefined || forceNew) {
 | 
				
			||||||
            if (Platform.is('cordova')) {
 | 
					            if (CorePlatform.is('cordova')) {
 | 
				
			||||||
                this.dbInstances[name] = new SQLiteDB(name);
 | 
					                this.dbInstances[name] = new SQLiteDB(name);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                this.dbInstances[name] = new SQLiteDBMock(name);
 | 
					                this.dbInstances[name] = new SQLiteDBMock(name);
 | 
				
			||||||
@ -241,7 +242,7 @@ export class CoreDbProvider {
 | 
				
			|||||||
                    location: 'default',
 | 
					                    location: 'default',
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else if (Platform.is('cordova')) {
 | 
					        } else if (CorePlatform.is('cordova')) {
 | 
				
			||||||
            return SQLite.deleteDatabase({
 | 
					            return SQLite.deleteDatabase({
 | 
				
			||||||
                name,
 | 
					                name,
 | 
				
			||||||
                location: 'default',
 | 
					                location: 'default',
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@ import { CoreConstants } from '@/core/constants';
 | 
				
			|||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { makeSingleton, File, Zip, Platform, WebView } from '@singletons';
 | 
					import { makeSingleton, File, Zip, WebView } from '@singletons';
 | 
				
			||||||
import { CoreFileEntry } from '@services/file-helper';
 | 
					import { CoreFileEntry } from '@services/file-helper';
 | 
				
			||||||
import { CoreText } from '@singletons/text';
 | 
					import { CoreText } from '@singletons/text';
 | 
				
			||||||
import { CorePlatform } from '@services/platform';
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
@ -137,7 +137,7 @@ export class CoreFileProvider {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (CoreApp.isAndroid()) {
 | 
					        if (CoreApp.isAndroid()) {
 | 
				
			||||||
            this.basePath = File.externalApplicationStorageDirectory || this.basePath;
 | 
					            this.basePath = File.externalApplicationStorageDirectory || this.basePath;
 | 
				
			||||||
 | 
				
			|||||||
@ -19,10 +19,11 @@ import { LangChangeEvent } from '@ngx-translate/core';
 | 
				
			|||||||
import { CoreAppProvider } from '@services/app';
 | 
					import { CoreAppProvider } from '@services/app';
 | 
				
			||||||
import { CoreConfig } from '@services/config';
 | 
					import { CoreConfig } from '@services/config';
 | 
				
			||||||
import { CoreSubscriptions } from '@singletons/subscriptions';
 | 
					import { CoreSubscriptions } from '@singletons/subscriptions';
 | 
				
			||||||
import { makeSingleton, Translate, Platform, Http } from '@singletons';
 | 
					import { makeSingleton, Translate, Http } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as moment from 'moment';
 | 
					import * as moment from 'moment';
 | 
				
			||||||
import { CoreSite } from '../classes/site';
 | 
					import { CoreSite } from '../classes/site';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Service to handle language features, like changing the current language.
 | 
					 * Service to handle language features, like changing the current language.
 | 
				
			||||||
@ -57,7 +58,7 @@ export class CoreLangProvider {
 | 
				
			|||||||
     * Init language.
 | 
					     * Init language.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected async initializeCurrentLanguage(): Promise<void> {
 | 
					    protected async initializeCurrentLanguage(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let language: string;
 | 
					        let language: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@ import { SQLiteDB } from '@classes/sqlitedb';
 | 
				
			|||||||
import { CoreQueueRunner } from '@classes/queue-runner';
 | 
					import { CoreQueueRunner } from '@classes/queue-runner';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
import { CoreConstants } from '@/core/constants';
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { makeSingleton, NgZone, Platform, Translate, LocalNotifications, Push } from '@singletons';
 | 
					import { makeSingleton, NgZone, Translate, LocalNotifications, Push } from '@singletons';
 | 
				
			||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    APP_SCHEMA,
 | 
					    APP_SCHEMA,
 | 
				
			||||||
@ -34,6 +34,7 @@ import {
 | 
				
			|||||||
    CodeRequestsQueueItem,
 | 
					    CodeRequestsQueueItem,
 | 
				
			||||||
} from '@services/database/local-notifications';
 | 
					} from '@services/database/local-notifications';
 | 
				
			||||||
import { CorePromisedValue } from '@classes/promised-value';
 | 
					import { CorePromisedValue } from '@classes/promised-value';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Service to handle local notifications.
 | 
					 * Service to handle local notifications.
 | 
				
			||||||
@ -68,7 +69,7 @@ export class CoreLocalNotificationsProvider {
 | 
				
			|||||||
     * Init some properties.
 | 
					     * Init some properties.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async initialize(): Promise<void> {
 | 
					    async initialize(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!this.isAvailable()) {
 | 
					        if (!this.isAvailable()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
				
			|||||||
@ -13,13 +13,14 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Injectable } from '@angular/core';
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
import { makeSingleton, Platform } from '@singletons';
 | 
					import { Platform } from '@ionic/angular';
 | 
				
			||||||
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Extend Ionic's Platform service.
 | 
					 * Extend Ionic's Platform service.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Injectable({ providedIn: 'root' })
 | 
					@Injectable({ providedIn: 'root' })
 | 
				
			||||||
export class CorePlatformService {
 | 
					export class CorePlatformService extends Platform {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Checks if the app is running in a mobile or tablet device (Cordova).
 | 
					     * Checks if the app is running in a mobile or tablet device (Cordova).
 | 
				
			||||||
@ -27,7 +28,7 @@ export class CorePlatformService {
 | 
				
			|||||||
     * @return Whether the app is running in a mobile or tablet device.
 | 
					     * @return Whether the app is running in a mobile or tablet device.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    isMobile(): boolean {
 | 
					    isMobile(): boolean {
 | 
				
			||||||
        return Platform.is('cordova');
 | 
					        return this.is('cordova');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,8 +16,9 @@ import { Injectable } from '@angular/core';
 | 
				
			|||||||
import { BehaviorSubject, Observable } from 'rxjs';
 | 
					import { BehaviorSubject, Observable } from 'rxjs';
 | 
				
			||||||
import { distinctUntilChanged, map } from 'rxjs/operators';
 | 
					import { distinctUntilChanged, map } from 'rxjs/operators';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { makeSingleton, Platform } from '@singletons';
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Screen breakpoints.
 | 
					 * Screen breakpoints.
 | 
				
			||||||
@ -120,7 +121,7 @@ export class CoreScreenService {
 | 
				
			|||||||
     * Watch orientation changes.
 | 
					     * Watch orientation changes.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async watchOrientation(): Promise<void> {
 | 
					    async watchOrientation(): Promise<void> {
 | 
				
			||||||
        await Platform.ready();
 | 
					        await CorePlatform.ready();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        screen.orientation.addEventListener('change', () => {
 | 
					        screen.orientation.addEventListener('change', () => {
 | 
				
			||||||
            CoreEvents.trigger(CoreEvents.ORIENTATION_CHANGE, { orientation: this.orientation });
 | 
					            CoreEvents.trigger(CoreEvents.ORIENTATION_CHANGE, { orientation: this.orientation });
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,6 @@ import { HttpClient } from '@angular/common/http';
 | 
				
			|||||||
import { DomSanitizer as DomSanitizerService } from '@angular/platform-browser';
 | 
					import { DomSanitizer as DomSanitizerService } from '@angular/platform-browser';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
    Platform as PlatformService,
 | 
					 | 
				
			||||||
    AngularDelegate as AngularDelegateService,
 | 
					    AngularDelegate as AngularDelegateService,
 | 
				
			||||||
    AlertController as AlertControllerService,
 | 
					    AlertController as AlertControllerService,
 | 
				
			||||||
    LoadingController as LoadingControllerService,
 | 
					    LoadingController as LoadingControllerService,
 | 
				
			||||||
@ -202,7 +201,6 @@ export const Device = makeSingleton(DeviceService);
 | 
				
			|||||||
// Convert some Angular and Ionic injectables to singletons.
 | 
					// Convert some Angular and Ionic injectables to singletons.
 | 
				
			||||||
export const NgZone = makeSingleton(NgZoneService);
 | 
					export const NgZone = makeSingleton(NgZoneService);
 | 
				
			||||||
export const Http = makeSingleton(HttpClient);
 | 
					export const Http = makeSingleton(HttpClient);
 | 
				
			||||||
export const Platform = makeSingleton(PlatformService);
 | 
					 | 
				
			||||||
export const ActionSheetController = makeSingleton(ActionSheetControllerService);
 | 
					export const ActionSheetController = makeSingleton(ActionSheetControllerService);
 | 
				
			||||||
export const AngularDelegate = makeSingleton(AngularDelegateService);
 | 
					export const AngularDelegate = makeSingleton(AngularDelegateService);
 | 
				
			||||||
export const AlertController = makeSingleton(AlertControllerService);
 | 
					export const AlertController = makeSingleton(AlertControllerService);
 | 
				
			||||||
 | 
				
			|||||||
@ -19,12 +19,13 @@ import { Observable, Subject } from 'rxjs';
 | 
				
			|||||||
import { sep } from 'path';
 | 
					import { sep } from 'path';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreSingletonProxy, Platform, Translate } from '@singletons';
 | 
					import { CoreSingletonProxy, Translate } from '@singletons';
 | 
				
			||||||
import { CoreTextUtilsProvider } from '@services/utils/text';
 | 
					import { CoreTextUtilsProvider } from '@services/utils/text';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { TranslatePipeStub } from './stubs/pipes/translate';
 | 
					import { TranslatePipeStub } from './stubs/pipes/translate';
 | 
				
			||||||
import { CoreExternalContentDirectiveStub } from './stubs/directives/core-external-content';
 | 
					import { CoreExternalContentDirectiveStub } from './stubs/directives/core-external-content';
 | 
				
			||||||
import { CoreNetwork } from '@services/network';
 | 
					import { CoreNetwork } from '@services/network';
 | 
				
			||||||
 | 
					import { CorePlatform } from '@services/platform';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
abstract class WrapperComponent<U> {
 | 
					abstract class WrapperComponent<U> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -37,7 +38,12 @@ type ServiceInjectionToken = AbstractType<unknown> | Type<unknown> | string;
 | 
				
			|||||||
let testBedInitialized = false;
 | 
					let testBedInitialized = false;
 | 
				
			||||||
const textUtils = new CoreTextUtilsProvider();
 | 
					const textUtils = new CoreTextUtilsProvider();
 | 
				
			||||||
const DEFAULT_SERVICE_SINGLETON_MOCKS: [CoreSingletonProxy, Record<string, unknown>][] = [
 | 
					const DEFAULT_SERVICE_SINGLETON_MOCKS: [CoreSingletonProxy, Record<string, unknown>][] = [
 | 
				
			||||||
    [Platform, mock({ is: () => false, ready: () => Promise.resolve(), resume: new Subject<void>() })],
 | 
					    [CorePlatform, mock({
 | 
				
			||||||
 | 
					        is: () => false,
 | 
				
			||||||
 | 
					        isMobile: () => false,
 | 
				
			||||||
 | 
					        ready: () => Promise.resolve(),
 | 
				
			||||||
 | 
					        resume: new Subject<void>(),
 | 
				
			||||||
 | 
					    })],
 | 
				
			||||||
    [CoreNetwork, { onChange: () => new Observable() }],
 | 
					    [CoreNetwork, { onChange: () => new Observable() }],
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user