package org.greenrobot.greendao.rxexample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import com.jakewharton.rxbinding.widget.RxTextView; import com.jakewharton.rxbinding.widget.TextViewAfterTextChangeEvent; import org.greenrobot.greendao.rx.RxDao; import org.greenrobot.greendao.rx.RxQuery; import java.text.DateFormat; import java.util.Date; import java.util.List; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; public class MainActivity extends AppCompatActivity { private EditText editText; private View addNoteButton; private RxDao<Note, Long> noteDao; private RxQuery<Note> notesQuery; private NotesAdapter notesAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setUpViews(); // get the Rx variant of the note DAO DaoSession daoSession = ((App) getApplication()).getDaoSession(); noteDao = daoSession.getNoteDao().rx(); // query all notes, sorted a-z by their text notesQuery = daoSession.getNoteDao().queryBuilder().orderAsc(NoteDao.Properties.Text).rx(); updateNotes(); } private void updateNotes() { notesQuery.list() .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<List<Note>>() { @Override public void call(List<Note> notes) { notesAdapter.setNotes(notes); } }); } protected void setUpViews() { RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerViewNotes); //noinspection ConstantConditions recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); notesAdapter = new NotesAdapter(noteClickListener); recyclerView.setAdapter(notesAdapter); addNoteButton = findViewById(R.id.buttonAdd); editText = (EditText) findViewById(R.id.editTextNote); //noinspection ConstantConditions RxTextView.editorActions(editText).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Integer>() { @Override public void call(Integer actionId) { if (actionId == EditorInfo.IME_ACTION_DONE) { addNote(); } } }); RxTextView.afterTextChangeEvents(editText).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<TextViewAfterTextChangeEvent>() { @Override public void call(TextViewAfterTextChangeEvent textViewAfterTextChangeEvent) { boolean enable = textViewAfterTextChangeEvent.editable().length() > 0; addNoteButton.setEnabled(enable); } }); } public void onAddButtonClick(View view) { addNote(); } private void addNote() { String noteText = editText.getText().toString(); editText.setText(""); final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); String comment = "Added on " + df.format(new Date()); Note note = new Note(null, noteText, comment, new Date(), NoteType.TEXT); noteDao.insert(note) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Note>() { @Override public void call(Note note) { Log.d("DaoExample", "Inserted new note, ID: " + note.getId()); updateNotes(); } }); } NotesAdapter.NoteClickListener noteClickListener = new NotesAdapter.NoteClickListener() { @Override public void onNoteClick(int position) { Note note = notesAdapter.getNote(position); final Long noteId = note.getId(); noteDao.deleteByKey(noteId) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Log.d("DaoExample", "Deleted note, ID: " + noteId); updateNotes(); } }); } }; }