/** Do the autoconnect stuff */
  private void autoconnect() {
    // If we don't have any servers to go with.
    if (Atomic.getInstance().getServersAsArrayList().size() < 1) return;
    // Or we've done this already
    if (!doAutoconnect.getValue()) return;
    // We don't need to get this far.

    // Are we connected to the greater wide not-us?
    NetworkInfo ninf =
        ((ConnectivityManager) (this.getSystemService(Service.CONNECTIVITY_SERVICE)))
            .getActiveNetworkInfo();
    // If there's no way out, or we aren't actually connected,
    if (ninf == null || ninf.getState() != NetworkInfo.State.CONNECTED) {
      // We don't need to bother, but we should say something.
      Toast.makeText(this, "Autoconnect skipped due to network outage", Toast.LENGTH_LONG).show();
      return;
    }
    // Some slime...
    Log.d("ServerList", "Doing autoconnect");
    for (int idx = 0; idx < adapter.getCount(); idx++) {
      Server s = adapter.getItem(idx);
      if (s.getAutoconnect() && s.getStatus() == Status.DISCONNECTED) {
        ConnectServer(s);
      }
    }
  }
 /**
  * Delete server
  *
  * @param serverId
  */
 public void deleteServer(int serverId) {
   Database db = new Database(this);
   db.removeServerById(serverId);
   db.close();
   // make sure we don't accidentally reconnect it
   binder.getService().removeReconnection(serverId);
   Atomic.getInstance().removeServerById(serverId);
   adapter.loadServers();
 }
 @Override
 public void onBackPressed() {
   if (lastBackPress + 2000 > System.currentTimeMillis()) {
     ArrayList<Server> mServers = Atomic.getInstance().getServersAsArrayList();
     for (Server server : mServers) {
       if (binder.getService().hasConnection(server.getId())) {
         DisconnectServer(server);
       }
     }
     binder.getService().stopForegroundCompat(R.string.app_name);
     System.exit(0);
   } else {
     Toast.makeText(this, R.string.back_twice_exit, Toast.LENGTH_LONG).show();
     lastBackPress = System.currentTimeMillis();
   }
 }
  /**
   * Start activity to edit server with given id
   *
   * @param serverId The id of the server
   */
  private void editServer(int serverId) {
    Server server = Atomic.getInstance().getServerById(serverId);

    if (server.getStatus() != Status.DISCONNECTED) {
      Toast.makeText(
              this,
              getResources().getString(R.string.disconnect_before_editing),
              Toast.LENGTH_SHORT)
          .show();
    } else {
      Intent intent = new Intent(this, AddServerActivity.class);
      intent.setAction(AddServerActivity.ACTION_EDIT_SERVER);
      intent.putExtra(Extra.SERVER, serverId);
      startActivityForResult(intent, 0);
    }
  }
  /** On menu item selected */
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case R.id.add:
        startActivityForResult(new Intent(this, AddServerActivity.class), 0);
        break;
      case R.id.about:
        startActivity(new Intent(this, AboutActivity.class));
        break;
      case R.id.settings:
        startActivity(new Intent(this, SettingsActivity.class));
        break;
      case R.id.disconnect_all:
        ArrayList<Server> mServers = Atomic.getInstance().getServersAsArrayList();
        binder.getService().clearReconnectList();
        for (Server server : mServers) {
          DisconnectServer(server);
        }
        // ugly
        // binder.getService().stopForegroundCompat(R.string.app_name);
    }

    return true;
  }