Эх сурвалжийг харах

chore: user can swipe to delete note item

beautusg 7 жил өмнө
parent
commit
d01da0e42e

+ 18 - 6
app/src/main/java/com/sduduzog/slimlauncher/adapters/NotesAdapter.kt

@@ -12,7 +12,8 @@ import com.sduduzog.slimlauncher.utils.OnShitDoneToNotesListener
 
 class NotesAdapter(private val listener: OnShitDoneToNotesListener) : RecyclerView.Adapter<NotesAdapter.ViewHolder>() , OnItemActionListener{
 
-    private var notes: List<Note> = listOf()
+    private val notes: MutableList<Note> = mutableListOf()
+    private var indexOfRemovedNote = 0
 
     override fun getItemCount(): Int = notes.size
 
@@ -25,7 +26,7 @@ class NotesAdapter(private val listener: OnShitDoneToNotesListener) : RecyclerVi
             holder.itemTitle.visibility = View.VISIBLE
         }
         holder.itemSnippet.text = note.body
-        holder.itemView.setOnClickListener { listener.onViewNote(note) }
+        holder.itemView.setOnClickListener { listener.onView(note) }
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -34,19 +35,30 @@ class NotesAdapter(private val listener: OnShitDoneToNotesListener) : RecyclerVi
     }
 
     fun setItems(list: List<Note>) {
-        this.notes = list
-        notifyDataSetChanged()
+        val size = notes.size
+        notes.clear()
+        notes.addAll(list)
+        if (size > list.size) {
+            notifyItemRemoved(indexOfRemovedNote)
+        } else notifyDataSetChanged()
     }
 
     override fun onViewIdle() {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        // do nothing
     }
 
     override fun onViewMoved(oldPosition: Int, newPosition: Int): Boolean {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        // do nothing
+        return false
     }
 
     override fun onViewSwiped(position: Int) {
+        indexOfRemovedNote = position
+        if (position < notes.size) {
+            val note = notes[position]
+            listener.onDelete(note)
+        } else
+            notifyDataSetChanged()
     }
 
     inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

+ 3 - 3
app/src/main/java/com/sduduzog/slimlauncher/data/AppRepository.kt

@@ -14,7 +14,7 @@ class AppRepository(application: Application) {
     val apps: LiveData<List<HomeApp>>
         get() = _apps
 
-    fun add(app: HomeApp){
+    fun add(app: HomeApp) {
         AddAppAsyncTask(appDao).execute(app)
     }
 
@@ -22,7 +22,7 @@ class AppRepository(application: Application) {
         UpdateAppAsyncTask(appDao).execute(*list)
     }
 
-    fun remove(app: HomeApp){
+    fun remove(app: HomeApp) {
         RemoveAppAsyncTask(appDao).execute(app)
     }
 
@@ -42,7 +42,7 @@ class AppRepository(application: Application) {
         }
     }
 
-     private class RemoveAppAsyncTask(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
+    private class RemoveAppAsyncTask(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
 
         override fun doInBackground(vararg params: HomeApp): Void? {
             mAsyncTaskDao.remove(*params)

+ 0 - 14
app/src/main/java/com/sduduzog/slimlauncher/data/DataRepository.kt

@@ -22,10 +22,6 @@ class DataRepository(application: Application) {
         UpdateNoteAsyncTask(noteDao).execute(note)
     }
 
-    fun deleteNote(note: Note) {
-        DeleteNoteAsyncTask(noteDao).execute(note)
-    }
-
     private class SaveNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
 
         override fun doInBackground(vararg params: Note): Void? {
@@ -44,16 +40,6 @@ class DataRepository(application: Application) {
         }
     }
 
-    private class DeleteNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
-
-        override fun doInBackground(vararg params: Note): Void? {
-            val note = params[0]
-            mAsyncTaskDao.deleteNote(note)
-            return null
-        }
-    }
-
-
     companion object {
 
         @Volatile

+ 3 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/MainViewModel.kt

@@ -41,4 +41,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
     fun remove(app: HomeApp) {
         _appRepository.remove(app)
     }
+    fun remove(note: Note){
+        _noteRepository.remove(note)
+    }
 }

+ 2 - 2
app/src/main/java/com/sduduzog/slimlauncher/data/NoteDao.kt

@@ -14,8 +14,8 @@ interface NoteDao {
     fun saveNote(note: Note)
 
     @Update
-    fun updateNote(note: Note)
+    fun updateNote(vararg note: Note)
 
     @Delete
-    fun deleteNote(note: Note)
+    fun remove(vararg note: Note)
 }

+ 13 - 0
app/src/main/java/com/sduduzog/slimlauncher/data/NoteRepository.kt

@@ -1,6 +1,7 @@
 package com.sduduzog.slimlauncher.data
 
 import android.app.Application
+import android.os.AsyncTask
 import androidx.lifecycle.LiveData
 import com.sduduzog.slimlauncher.data.model.Note
 
@@ -12,4 +13,16 @@ class NoteRepository(application: Application) {
 
     val notes: LiveData<List<Note>>
         get() = _notes
+
+    fun remove(note: Note) {
+        RemoveNoteAsyncTask(noteDao).execute(note)
+    }
+
+    private class RemoveNoteAsyncTask(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
+
+        override fun doInBackground(vararg params: Note): Void? {
+            mAsyncTaskDao.remove(*params)
+            return null
+        }
+    }
 }

+ 5 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/main/NotesFragment.kt

@@ -12,11 +12,9 @@ import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.NotesAdapter
 import com.sduduzog.slimlauncher.data.MainViewModel
-import com.sduduzog.slimlauncher.data.model.HomeApp
 import com.sduduzog.slimlauncher.data.model.Note
 import com.sduduzog.slimlauncher.ui.BaseFragment
 import com.sduduzog.slimlauncher.utils.OnItemActionListener
-import com.sduduzog.slimlauncher.utils.OnLaunchAppListener
 import com.sduduzog.slimlauncher.utils.OnShitDoneToNotesListener
 import kotlinx.android.synthetic.main.notes_fragment.*
 
@@ -70,9 +68,13 @@ class NotesFragment : BaseFragment(), OnShitDoneToNotesListener {
     }
 
 
-    override fun onViewNote(note: Note) {
+    override fun onView(note: Note) {
         val bundle = Bundle()
         bundle.putSerializable("note", note)
         Navigation.findNavController(notes_fragment).navigate(R.id.action_notesFragment_to_noteFragment, bundle)
     }
+
+    override fun onDelete(note: Note) {
+        viewModel.remove(note)
+    }
 }

+ 1 - 14
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesListAdapter.kt

@@ -1,6 +1,5 @@
 package com.sduduzog.slimlauncher.ui.main.notes
 
-import android.graphics.Color
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -10,7 +9,6 @@ import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
 import androidx.recyclerview.widget.RecyclerView
-import com.google.android.material.snackbar.Snackbar
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.data.model.Note
 import com.sduduzog.slimlauncher.utils.OnItemActionListener
@@ -62,18 +60,7 @@ class NotesListAdapter(private val fragment: NotesListFragment) : RecyclerView.A
     }
 
     override fun onViewSwiped(position: Int) {
-        deletedFrom = position
-        if (position < notes.size) {
-            val note = notes[position]
-            viewModel.deleteNote(note)
-            Snackbar.make(fragment.view!!, "Note deleted successfully", Snackbar.LENGTH_LONG)
-                    .setActionTextColor(Color.WHITE)
-                    .setAction("UNDO") {
-                        viewModel.saveNote(note)
-                    }
-                    .show()
-        } else
-            notifyDataSetChanged()
+
     }
 
     override fun onViewIdle() {

+ 0 - 4
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NotesViewModel.kt

@@ -25,8 +25,4 @@ class NotesViewModel(application: Application) : AndroidViewModel(application) {
     fun updateNote(note: Note) {
         _repository.updateNote(note)
     }
-
-    fun deleteNote(note: Note) {
-        _repository.deleteNote(note)
-    }
 }

+ 2 - 1
app/src/main/java/com/sduduzog/slimlauncher/utils/OnShitDoneToNotesListener.kt

@@ -3,5 +3,6 @@ package com.sduduzog.slimlauncher.utils
 import com.sduduzog.slimlauncher.data.model.Note
 
 interface OnShitDoneToNotesListener{
-    fun onViewNote(note: Note)
+    fun onView(note: Note)
+    fun onDelete(note: Note)
 }

+ 1 - 0
app/src/main/res/layout/notes_fragment.xml

@@ -24,6 +24,7 @@
         android:id="@+id/notes_fragment_create_note"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
+        android:alpha="0.5"
         android:layout_marginTop="@dimen/_8sdp"
         android:padding="@dimen/_12sdp"
         android:text="@string/notes_fragment_create_new_note"