content: /*
   * Copyright (C) 2015 Actor LLC. <https://actor.im>
   */
  
  package im.actor.core.js.providers.notification;
  
  public class JsManagedNotification {
  
      public static native boolean isGranted()/*-{
          if (Notification.permission !== "granted") {
              Notification.requestPermission();
              return false;
          }
          return true;
      }-*/;
  
      public static native void show(String key, String title, String message, String avatarUrl)/*-{
  
          var showNotification = function(key, title, body, icon) {
              var n = new Notification(title, {
                  body: body,
                  tag: 'new-message',
                  icon: icon
              });
              n.onclick = function() {
                  $wnd.focus();
                  if (key !== null) {
                      $wnd.location.replace('#/im/' + key);
                  }
                  this.close();
              }
          };
  
          var MAX_DEFER = 300;
  
          var deferStart = null;
          var deferredShow = null;
  
          var createNotification = function(key, title, body, icon) {
              if (deferredShow === null) {
                  deferStart = Date.now();
              } else {
                  clearTimeout(deferredShow)
              }
  
              if (Date.now() - deferStart > MAX_DEFER) {
                  deferredShow = null;
                  deferStart = null;
                  showNotification(key, title, body, icon);
              } else {
                  deferredShow = setTimeout(function () {
                      showNotification(key, title, body, icon)
                  }, 300)
              }
          };
  
          createNotification(key, title, message, avatarUrl);
      }-*/;
  }
  