public static void alert(final GTGEvent event,final boolean isOn,final Object obj){
  int i;
synchronized (eventListeners) {
    if (event.isOn == isOn && obj == null)     return;
    event.isOn=isOn;
    event.obj=obj;
    localEventListeners.clear();
    localEventListeners.addAll(eventListeners.keySet());
    i=localEventListeners.size() - 1;
  }
  for (; i >= 0; i--) {
    GTGEventListener el;
    el=localEventListeners.get(i);
    if (event.isOn) {
      if (el.onGTGEvent(event)) {
        alert(event,false);
        break;
      }
    }
 else     el.offGTGEvent(event);
  }
  localEventListeners.clear();
}

public static void alert ( final GTGEvent event , final boolean isOn , final Object obj ) { int i ; synchronized ( eventListeners ) { if ( event . isOn == isOn && obj == null ) return ; event . isOn = isOn ; event . obj = obj ; localEventListeners . clear ( ) ; localEventListeners . addAll ( eventListeners . keySet ( ) ) ; i = localEventListeners . size ( ) - 1 ; } for ( ; i >= 0 ; i -- ) { GTGEventListener el ; el = localEventListeners . get ( i ) ; if ( event . isOn ) { if ( el . onGTGEvent ( event ) ) { alert ( event , false ) ; break ; } } else el . offGTGEvent ( event ) ; } localEventListeners . clear ( ) ; }
called when a major event has occurred , such as an internal error . is thread safe . cannot be called before setupifnecessary ( ) is run . < p > this is used to notify the application of a specific condition with the environment . note that events are sticky until handled . this can be used for two purposes , one is to ignore an event until a screen comes up that can handle it . the other is to display a constant message to the user and not remove it until the condition is lifted ( such as for low free space ) . for the second case , the boolean ison can turn off an event . < p > note that thread handling must be handled by the listener
