public void fetch() {
   ChumbyLog.i(TAG + ".fetch()");
   if (!XAPI.hasNetwork()) {
     ChumbyLog.i(TAG + ".fetch(): no network, skipping");
   }
   String[] pathItems = {"notify", "list"};
   Properties params = new Properties();
   if (lastTimeStamp != null) {
     // ChumbyLog.i(TAG+".fetch(): sending timeStamp "+lastTimeStamp);
     params.put("timestamp", lastTimeStamp);
   }
   Handler xmlHandler =
       new Handler() {
         public void handleMessage(Message message) {
           // ChumbyLog.i("NotificationEvents(): "+message);
           switch (message.what) {
             case XMLHelper.DID_SUCCEED:
               {
                 Document document = (Document) message.obj;
                 parseResponse(document);
                 break;
               }
             case XMLHelper.DID_ERROR:
               {
                 Exception e = (Exception) message.obj;
                 e.printStackTrace();
                 break;
               }
           }
         }
       };
   XAPI.request(pathItems, params, XAPI.GET, true, xmlHandler);
 }
 private void parseResponse(Document document) {
   // ChumbyLog.i(TAG+".parseResponse()");
   // ChumbyLog.i(XMLHelper.nodeToString(document));
   Element notificationsNode = XMLUtil.firstChildOfType(document, "notifications");
   if (notificationsNode != null) {
     lastTimeStamp = notificationsNode.getAttribute("timestamp");
     // ChumbyLog.i(TAG+".parseResponse(): new lastTimeStamp: "+lastTimeStamp);
     ArrayList<Element> notificationNodes =
         XMLUtil.childrenOfType(notificationsNode, "notification");
     for (int i = 0; i < notificationNodes.size(); i++) {
       Element notificationNode = notificationNodes.get(i);
       NotificationType type = NotificationType.parse(notificationNode.getAttribute("type"));
       ChumbyLog.i(TAG + ".parseResponse(): processing notification " + type.toString());
       if (type == NotificationType.PROFILE) {
         ChannelNotification notification = new ChannelNotification();
         notification.parse(notificationNode);
         NotificationAction action = notification.action;
         if (action == NotificationAction.CREATE) {
           dispatchEvent(new Event(PROFILE_CREATED, notification));
         } else if (action == NotificationAction.DELETE) {
           dispatchEvent(new Event(PROFILE_DELETED, notification));
         } else if (action == NotificationAction.UPDATE) {
           dispatchEvent(new Event(PROFILE_UPDATED, notification));
         } else {
           ChumbyLog.w(
               TAG
                   + ".parseResponse() unknown action "
                   + action.toString()
                   + " for "
                   + type.toString());
         }
       } else if (type == NotificationType.CHUM) {
         ChumNotification notification = new ChumNotification();
         notification.parse(notificationNode);
         NotificationAction action = notification.action;
         if (action == NotificationAction.CREATE) {
           dispatchEvent(new Event(CHUM_CREATED, notification));
         } else if (action == NotificationAction.DELETE) {
           dispatchEvent(new Event(CHUM_DELETED, notification));
         } else if (action == NotificationAction.UPDATE) {
           dispatchEvent(new Event(CHUM_UPDATED, notification));
         } else {
           ChumbyLog.w(
               TAG
                   + ".parseResponse() unknown action "
                   + action.toString()
                   + " for "
                   + type.toString());
         }
       } else if (type == NotificationType.DEVICE) {
         DeviceNotification notification = new DeviceNotification();
         notification.parse(notificationNode);
         NotificationAction action = notification.action;
         if (notification.id.equals(Chumby.getInstance().guid)) {
           if (action == NotificationAction.CREATE) {
             dispatchEvent(new Event(DEVICE_CREATED, notification));
           } else if (action == NotificationAction.DELETE) {
             dispatchEvent(new Event(DEVICE_DELETED, notification));
           } else if (action == NotificationAction.UPDATE) {
             dispatchEvent(new Event(DEVICE_UPDATED, notification));
           } else {
             ChumbyLog.w(
                 TAG
                     + ".parseResponse() unknown action "
                     + action.toString()
                     + " for "
                     + type.toString());
           }
         } else {
           ChumbyLog.w(TAG + ".parseResponse(): device id mismatch:" + notification.id);
         }
       } else if (type == NotificationType.MESSAGE) {
         MessageNotification notification = new MessageNotification();
         notification.parse(notificationNode);
         NotificationAction action = notification.action;
         if (action == NotificationAction.CREATE) {
           dispatchEvent(new Event(MESSAGE_CREATED, notification));
         } else if (action == NotificationAction.DELETE) {
           dispatchEvent(new Event(MESSAGE_DELETED, notification));
         } else {
           ChumbyLog.w(
               TAG
                   + ".parseResponse() unknown action "
                   + action.toString()
                   + " for "
                   + type.toString());
         }
       } else if (type == NotificationType.WIDGET_INSTANCE) {
         WidgetNotification notification = new WidgetNotification();
         notification.parse(notificationNode);
         NotificationAction action = notification.action;
         if (action == NotificationAction.CREATE) {
           dispatchEvent(new Event(WIDGET_CREATED, notification));
         } else if (action == NotificationAction.DELETE) {
           dispatchEvent(new Event(WIDGET_DELETED, notification));
         } else if (action == NotificationAction.UPDATE) {
           dispatchEvent(new Event(WIDGET_UPDATED, notification));
         } else {
           ChumbyLog.w(
               TAG
                   + ".parseResponse() unknown action "
                   + action.toString()
                   + " for "
                   + type.toString());
         }
       } else {
         ChumbyLog.w("NotificationEvents.parseResponse(): unhandled type " + type.toString());
       }
     }
   }
 }