2022-05-11 14:05:14 +02:00
|
|
|
// (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 { Injectable } from '@angular/core';
|
2022-06-20 18:19:18 +02:00
|
|
|
import { Platform } from '@ionic/angular';
|
2023-02-09 10:33:33 +01:00
|
|
|
import { Device, makeSingleton } from '@singletons';
|
2022-05-11 14:05:14 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Extend Ionic's Platform service.
|
|
|
|
*/
|
|
|
|
@Injectable({ providedIn: 'root' })
|
2022-06-20 18:19:18 +02:00
|
|
|
export class CorePlatformService extends Platform {
|
2022-05-11 14:05:14 +02:00
|
|
|
|
2023-02-09 10:33:33 +01:00
|
|
|
/**
|
|
|
|
* Get platform major version number.
|
|
|
|
*
|
|
|
|
* @returns The platform major number.
|
|
|
|
*/
|
|
|
|
getPlatformMajorVersion(): number {
|
|
|
|
if (!this.isMobile()) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return Number(Device.version?.split('.')[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the app is running in an Android mobile or tablet device.
|
|
|
|
*
|
|
|
|
* @returns Whether the app is running in an Android mobile or tablet device.
|
|
|
|
*/
|
|
|
|
isAndroid(): boolean {
|
|
|
|
return this.isMobile() && this.is('android');
|
|
|
|
}
|
|
|
|
|
2024-01-30 09:47:17 +01:00
|
|
|
/**
|
|
|
|
* Returns whether the user agent is controlled by automation. I.e. Behat testing.
|
|
|
|
*
|
|
|
|
* @returns True if the user agent is controlled by automation, false otherwise.
|
|
|
|
*/
|
|
|
|
isAutomated(): boolean {
|
|
|
|
return !!navigator.webdriver;
|
|
|
|
}
|
|
|
|
|
2023-02-09 10:33:33 +01:00
|
|
|
/**
|
|
|
|
* Checks if the app is running in an iOS mobile or tablet device.
|
|
|
|
*
|
|
|
|
* @returns Whether the app is running in an iOS mobile or tablet device.
|
|
|
|
*/
|
|
|
|
isIOS(): boolean {
|
|
|
|
return this.isMobile() && !this.is('android');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the app is running in an iPad device.
|
|
|
|
*
|
|
|
|
* @returns Whether the app is running in an iPad device.
|
|
|
|
*/
|
|
|
|
isIPad(): boolean {
|
|
|
|
return this.isIOS() && this.is('ipad');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if the app is running in an iPhone device.
|
|
|
|
*
|
|
|
|
* @returns Whether the app is running in an iPhone device.
|
|
|
|
*/
|
|
|
|
isIPhone(): boolean {
|
|
|
|
return this.isIOS() && this.is('iphone');
|
|
|
|
}
|
|
|
|
|
2022-05-11 14:05:14 +02:00
|
|
|
/**
|
|
|
|
* Checks if the app is running in a mobile or tablet device (Cordova).
|
|
|
|
*
|
2022-12-01 12:31:00 +01:00
|
|
|
* @returns Whether the app is running in a mobile or tablet device.
|
2022-05-11 14:05:14 +02:00
|
|
|
*/
|
|
|
|
isMobile(): boolean {
|
2022-06-20 18:19:18 +02:00
|
|
|
return this.is('cordova');
|
2022-05-11 14:05:14 +02:00
|
|
|
}
|
|
|
|
|
2023-02-21 12:18:43 +01:00
|
|
|
/**
|
|
|
|
* Check whether the device is configured to reduce motion.
|
|
|
|
*
|
|
|
|
* @returns Whether the device is configured to reduce motion.
|
|
|
|
*/
|
|
|
|
prefersReducedMotion(): boolean {
|
2024-02-01 13:46:10 +01:00
|
|
|
// Default to reduced motion in devices that don't support this CSS property.
|
|
|
|
return !window.matchMedia('(prefers-reduced-motion: no-preference)').matches;
|
2023-02-21 12:18:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks whether media capture is supported.
|
|
|
|
*
|
|
|
|
* @returns Whether media capture is supported.
|
|
|
|
*/
|
|
|
|
supportsMediaCapture(): boolean {
|
|
|
|
return 'mediaDevices' in navigator;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks whether web assembly is supported.
|
|
|
|
*
|
|
|
|
* @returns Whether web assembly is supported.
|
|
|
|
*/
|
|
|
|
supportsWebAssembly(): boolean {
|
|
|
|
return 'WebAssembly' in window;
|
|
|
|
}
|
|
|
|
|
2022-05-11 14:05:14 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export const CorePlatform = makeSingleton(CorePlatformService);
|