import { BatteryStatus, IBatteryInstrumentation } from '@lenovo-software/lsa-clients-common'; import { Logger } from '../common/logger'; export class BatteryInstrumentation implements IBatteryInstrumentation { private logger = Logger.getInstance(); private batteryStatus: BatteryStatus = new BatteryStatus(); constructor() { // Start battery instrumentation this.startBatteryInstrumentation(); } public async getCurrentBatteryStatus(): Promise { this.logger.logMessage(`Current battery status.: ${JSON.stringify(this.batteryStatus)}`); return Promise.resolve(this.batteryStatus); } /** * Starts battery instrumentation and bind battery listeners */ private async startBatteryInstrumentation(): Promise { if ('getBattery' in navigator) { // @ts-ignore const battery = await navigator.getBattery(); //returns BatteryManager this.monitorBattery(battery); this.logger.logMessage(`Battery instrumentation started.`); } else { // Battery not supported or battery no present this.logger.logMessage(`Battery not supported or battery no present`); } } /** * Updates battery status values * * @param battery */ private updateBatteryStatus(battery: any): void { this.batteryStatus.charging = battery.charging; this.batteryStatus.level = battery.level * 100; this.batteryStatus.dischargingTime = battery.dischargingTime; } /** * Function to monitor battery events and update the states of battery * * @param battery Battery Information * */ private monitorBattery(battery: any): void { this.updateBatteryStatus(battery); // Monitor for futher updates. battery.addEventListener('levelchange', () => this.updateBatteryStatus(battery)); battery.addEventListener('chargingchange', () => this.updateBatteryStatus(battery)); battery.addEventListener('dischargingtimechange', () => this.updateBatteryStatus(battery)); } }