private void removeCompletedTasks() {
    ArrayList<Long> removedTaskIds = new ArrayList<>();
    for (int i = 0, count = mTaskAdapter.getCount(); i < count; ) {
      Task task = mTaskAdapter.getItem(i);
      if (task.getDone()) {
        removedTaskIds.add(task.getId());
        mTaskAdapter.remove(task);
        count--;
      } else {
        i++;
      }
    }
    if (removedTaskIds.isEmpty()) return;

    boolean first = true;
    String idsStr = "";
    for (long id : removedTaskIds) {
      if (first) {
        first = false;
      } else {
        idsStr += ",";
      }
      idsStr += "" + id;
    }
    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    db.delete(Task.TABLE_NAME, String.format("%s IN (%s)", Task._ID, idsStr), new String[] {});
    db.close();
  }
  private void onButtonClick() {
    String text = mEditText.getText().toString();
    if (!text.isEmpty()) {
      mEditText.setText("");
      Task task = new Task().setText(text);
      mTaskAdapter.insert(task, 0);

      SQLiteDatabase db = mDbHelper.getReadableDatabase();
      ContentValues values = new ContentValues();
      values.put(Task.COLUMN_TEXT, task.getText());
      values.put(Task.COLUMN_DONE, task.getDone());
      long taskId = db.insert(Task.TABLE_NAME, null, values);
      task.setId(taskId);
      db.close();
    }
  }
  private void onListItemClick(int position) {
    TasksAdapter adapter = (TasksAdapter) mListView.getAdapter();
    Task task = adapter.getItem(position);
    task.toggleDone();
    adapter.notifyDataSetChanged();

    SQLiteDatabase db = mDbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(Task.COLUMN_DONE, task.getDone());

    db.update(
        Task.TABLE_NAME,
        values,
        String.format("%s = ?", Task._ID),
        new String[] {"" + task.getId()});
    db.close();
  }