// ==========================================================================
  @Override
  protected void finalize() throws Throwable {

    try {
      NOTIFICATIONS.information("clean up ControllerSplashScreen", false);
      destroyCurrentThread();
    } catch (Exception e) {
      NOTIFICATIONS.error("Unexpected error", e);
    } finally {
      super.finalize();
    }
  } // end finalize
  @Override
  protected void onHandleIntent(Intent intent) {
    Map<String, String> eventBody = new HashMap<>();
    try {
      // get caller data
      Bundle iArgs = intent.getExtras();
      // src
      String src = iArgs.getString(AppConstants.K.SRC.name());
      eventBody.put(AppConstants.K.SRC.name(), src);

      // srcID
      String srcID = iArgs.getString(AppConstants.K.SRC_ID.name());
      eventBody.put(AppConstants.K.SRC_ID.name(), srcID);

      String notifUID = iArgs.getString(AppConstants.K.NOTIF.name());
      eventBody.put(AppConstants.K.NOTIF.name(), notifUID);

      if (StringUtils.isNotBlank(notifUID)) {
        // LOCAL UPDATE
        ArrayList<ContentProviderOperation> delOps = new ArrayList<>();
        delOps.add(
            ContentProviderOperation.newDelete(SchemaNotifications.CONTENT_URI)
                .withSelection(SchemaNotifications.COLUMN_UID + "=?", new String[] {notifUID})
                .build());
        getContentResolver().applyBatch(AppConstants.API.CONTENT_AUTHORITY.getValue(), delOps);
      } else {
        return;
      }

      // REMOTE UPDATE
      String notifURI = StringUtils.join(new String[] {NOTIFICATIONS.getValue(), notifUID}, "/");

      // body part of request
      Map<String, String> reqBody = new HashMap<>();
      if (!Utils.isLoggedIn()) {
        // UNIQUE ID FOR THIS INSTALL
        reqBody.put(PARAMS.REF.getValue(), Utils.uniqueID());
      }

      ReqSetBody req = new ReqSetBody();
      req.setToken(Utils.getAppToken(false));
      req.setCmd(PARAMS.COMMAND.getValue());
      req.setBody(reqBody);

      // headers
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_JSON);
      headers.setAccept(RestClient.INSTANCE.jsonMediaType());

      HttpEntity<ReqSetBody> payloadEntity = new HttpEntity<>(req, headers);
      RestClient.INSTANCE.handle().exchange(notifURI, HttpMethod.POST, payloadEntity, Resp.class);
    } catch (Exception e) {
      // muted
    } finally {
      BusProvider.INSTANCE.getBus().post(new Events.SingleNotifsUPDATEEvent(eventBody));
    }
  }
  // ==========================================================================
  @Override
  public void destroyCurrentThread() {
    try {

      eventViewer = null;

    } catch (Exception e) {
      NOTIFICATIONS.error("Unexpected error", e);
    }
  }
  // ==========================================================================
  @Override
  public void setupInterface() {

    try {

      ss.setVisible(true);
      loader();
      ss.setVisible(false);

    } catch (Exception e) {
      NOTIFICATIONS.error("Imposible show splash screen", e);
    }
  } // end setupInterface
  // ==========================================================================
  private void loader() throws Exception {

    ControllerLogin cl = null;

    try {

      new DAO().getAll("Collectors");
      new DAO().getAll("Users");

      cl = new ControllerLogin();
      cl.setupInterface();

      new Context().getInitialContext();
      eventViewer = EventViewer.getInstance();
      eventViewer.setVisible(false);

    } catch (Exception e) {
      NOTIFICATIONS.error("Somethig is wrong in loader,<br>-Please report to administrator", e);
      System.exit(0);
    } finally {
      eventViewer = null;
      cl = null;
    }
  } // end loader