Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
device.service.ts 980 B
import { Injectable } from '@angular/core';
import NoSleep from 'nosleep.js';
import { LogService } from 'player/modules/logging/services/log.service';

@Injectable({
  providedIn: 'root'
})
export class DeviceService {
  private readonly isTouch!: boolean;
  private hasHardwareKeyboard: boolean = false;
  private noSleep!: NoSleep; // Cannot be instanced in a constructor, must be instanced by a user event

  constructor() {
    this.isTouch = (('ontouchstart' in window) || (navigator && navigator.maxTouchPoints > 0));
  }

  dontSleep(): void {
    if (this.isTouch && (!this.noSleep || !this.noSleep.isEnabled )) {
      this.noSleep = new NoSleep();
      this.noSleep.enable().then(() => {},
        () => LogService.error('player: enabling noSleep instance failed'));
    }
  }

  get isMobileWithoutHardwareKeyboard(): boolean {
    return this.isTouch && !this.hasHardwareKeyboard;
  }

  registerHardwareKeyboard(): void {
    this.hasHardwareKeyboard = true;
  }
}