diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java index 7a60c5337..84f082d74 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java @@ -8,6 +8,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.design.widget.Snackbar; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; @@ -300,10 +301,22 @@ public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewH @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.RIGHT) { - DBNote dbNote = (DBNote) adapter.getItem(viewHolder.getAdapterPosition()); + final DBNote dbNote = (DBNote) adapter.getItem(viewHolder.getAdapterPosition()); db.deleteNoteAndSync((dbNote).getId()); adapter.remove(dbNote); + refreshList(); Log.v("Note", "Item deleted through swipe ----------------------------------------------"); + Snackbar.make(swipeRefreshLayout, R.string.action_note_deleted, Snackbar.LENGTH_LONG) + .setAction(R.string.action_undo, new View.OnClickListener() { + @Override + public void onClick(View v) { + db.addNoteAndSync(dbNote); + refreshList(); + Snackbar.make(swipeRefreshLayout, R.string.action_note_restored, Snackbar.LENGTH_SHORT) + .show(); + } + }) + .show(); } } }); @@ -474,7 +487,7 @@ public boolean onNoteLongClick(int position, View v) { @Override public void onBackPressed() { - if (searchView.isIconified()) { + if (searchView==null || searchView.isIconified()) { super.onBackPressed(); } else { searchView.setIconified(true); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java index 50a1ae85b..0c93941c4 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java @@ -102,8 +102,19 @@ public Context getContext() { */ @SuppressWarnings("UnusedReturnValue") public long addNoteAndSync(String content) { - DBNote note = new DBNote(0, 0, Calendar.getInstance(), NoteUtil.generateNoteTitle(content), content, false, DBStatus.LOCAL_EDITED); - long id = addNote(note); + OwnCloudNote note = new OwnCloudNote(0, Calendar.getInstance(), NoteUtil.generateNoteTitle(content), content, false); + return addNoteAndSync(note); + } + + /** + * Creates a new Note in the Database and adds a Synchronization Flag. + * + * @param note Note + */ + @SuppressWarnings("UnusedReturnValue") + public long addNoteAndSync(OwnCloudNote note) { + DBNote dbNote = new DBNote(0, 0, note.getModified(), note.getTitle(), note.getContent(), note.isFavorite(), DBStatus.LOCAL_EDITED); + long id = addNote(dbNote); getNoteServerSyncHelper().scheduleSync(true); return id; } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java index 6090f9163..70405df2b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java @@ -222,7 +222,11 @@ private void pushLocalChanges() { // if note is not new, try to edit it. if (note.getRemoteId()>0) { Log.d(getClass().getSimpleName(), " ...try to edit"); - remoteNote = client.editNote(note); + try { + remoteNote = client.editNote(note); + } catch(FileNotFoundException e) { + // Note does not exists anymore + } } // However, the note may be deleted on the server meanwhile; or was never synchronized -> (re)create // Please note, thas dbHelper.updateNote() realizes an optimistic conflict resolution, which is required for parallel changes of this Note from the UI. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 372649627..ac92c1023 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -12,6 +12,9 @@ Gespeichert Abbrechen Notiz auswählen + Notiz wurde gelöscht + Notiz wurde wiederhergestellt + Rückgängig Über Löschen Kopieren diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 530a9fe79..e37328719 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,9 @@ Cancel About Select note + Note is deleted + Note is restored + Undo Delete Copy Edit