public List<ToDoItem> getAllItems() {
    List<ToDoItem> items = new ArrayList<>();
    String items_select_all;

    if (today) {
      items_select_all =
          ("SELECT * FROM "
              + TABLE_TODO
              + " WHERE "
              + " (strftime('%j', 'now','localtime') - strftime('%j', datetime("
              + KEY_DUE_DATE
              + "/1000, 'unixepoch', 'localtime'))) = 0 "
              + " ORDER BY "
              + KEY_DUE_DATE
              + " DESC");
    } else if (hideOldItems()) {
      items_select_all =
          ("SELECT * FROM "
              + TABLE_TODO
              + " WHERE "
              + " (strftime('%j', 'now', 'localtime') - strftime('%j', datetime("
              + KEY_DUE_DATE
              + "/1000, 'unixepoch', 'localtime'))) < 3 "
              + " ORDER BY "
              + KEY_DUE_DATE
              + " DESC");
    } else {
      items_select_all =
          String.format("SELECT * FROM %s ORDER BY " + KEY_DUE_DATE + " DESC", TABLE_TODO);
    }

    SQLiteDatabase db = getReadableDatabase();
    if (db == null) return null;
    Cursor c = db.rawQuery(items_select_all, null);

    try {
      if (c.moveToFirst()) {
        do {
          ToDoItem newItem = new ToDoItem();
          newItem.description = c.getString(c.getColumnIndex(KEY_DESCRIPTION));
          newItem.id = c.getInt(c.getColumnIndex(KEY_ID));
          newItem.priority = c.getInt(c.getColumnIndex(KEY_PRIORITY));
          newItem.modifiedDate = c.getLong(c.getColumnIndex(KEY_MODIFIED_DATE));
          newItem.dueDate = c.getLong(c.getColumnIndex(KEY_DUE_DATE));
          newItem.createdDate = c.getLong(c.getColumnIndex(KEY_CREATED_DATE));
          items.add(newItem);
        } while (c.moveToNext());
      }

    } catch (Exception e) {
      Log.e(TAG, "Exception caught while parsing cursor: " + e);
    } finally {
      if (c != null && !c.isClosed()) c.close();
    }

    return items;
  }