11package com.hackware.mormont.notebook
22
3+
34import android.content.Intent
45import androidx.appcompat.app.AppCompatActivity
56import android.os.Bundle
67import android.os.Handler
8+ import android.util.Log
79import android.view.*
8- import android.widget.ListView
9- import android.widget.PopupMenu
10+ import android.widget.*
11+ import androidx.appcompat.widget.SearchView
12+ import androidx.lifecycle.Observer
13+ import androidx.recyclerview.widget.ItemTouchHelper
14+ import androidx.recyclerview.widget.LinearLayoutManager
15+ import androidx.recyclerview.widget.RecyclerView
1016import com.hackware.mormont.notebook.adapters.NoteListAdapter
17+ import com.hackware.mormont.notebook.adapters.SearchNoteListAdapter
1118import com.hackware.mormont.notebook.db.NotesDataBase
19+ import com.hackware.mormont.notebook.db.entity.NotesData
1220import org.wordpress.android.util.ToastUtils.showToast
21+ import java.util.*
22+ import kotlin.collections.ArrayList
1323
1424class MainActivity : AppCompatActivity (), PopupMenu.OnMenuItemClickListener {
1525
1626 private var mDb: NotesDataBase ? = null
17-
18- private lateinit var mListView: ListView
27+ private lateinit var searchView: SearchView
28+ private lateinit var recyclerView: RecyclerView
29+ private lateinit var viewManager : RecyclerView .LayoutManager
1930 private lateinit var mAdapter: NoteListAdapter
31+ private lateinit var mSearchAdapter: SearchNoteListAdapter
2032 private lateinit var mFab : View
21-
33+ private lateinit var mItems : ArrayList < NotesData >
2234 private lateinit var mDbWorkerThread: DbWorkerThread
2335
2436 private val mUiHandler = Handler ()
@@ -33,14 +45,52 @@ class MainActivity : AppCompatActivity(), PopupMenu.OnMenuItemClickListener {
3345 mDbWorkerThread = DbWorkerThread (" dbWorkerThread" )
3446 mDbWorkerThread.start()
3547
36- mListView = findViewById(R .id.listView)
48+ viewManager = LinearLayoutManager (this )
49+ recyclerView = findViewById(R .id.recycleView)
50+ recyclerView.layoutManager = viewManager
51+
3752 mDb = NotesDataBase .getInstance(this )
53+ loadDataInListView()
3854
3955 mFab.setOnClickListener { view ->
40- startActivity(Intent (this , Editor ::class .java))
56+ startActivity(Intent (this , Editor ::class .java))
4157 }
58+ setRecyclerViewItemTouchListener()
4259
43- loadDataInListView()
60+ }
61+
62+ private fun setRecyclerViewItemTouchListener () {
63+ val itemTouchCallback = object : ItemTouchHelper .SimpleCallback (0 ,
64+ ItemTouchHelper .LEFT or ItemTouchHelper .RIGHT ) {
65+ override fun onMove (
66+ recyclerView : RecyclerView ,
67+ viewHolder : RecyclerView .ViewHolder ,
68+ target : RecyclerView .ViewHolder
69+ ): Boolean {
70+ return false
71+ }
72+
73+ override fun onSwiped (viewHolder : RecyclerView .ViewHolder , direction : Int ) {
74+ val position = viewHolder.adapterPosition
75+ toDeleteElementFromDb(position)
76+ showToast(applicationContext, " Swipe Detected p:$position ))) " )
77+ }
78+ }
79+ val itemTouchHelper = ItemTouchHelper (itemTouchCallback)
80+ itemTouchHelper.attachToRecyclerView(recyclerView)
81+ }
82+
83+ private fun toDeleteElementFromDb (position : Int ) {
84+ val id = mItems[position].noteId
85+ val size = mItems.size
86+ Log .d(" test" , " $size , $position $" )
87+ mDbWorkerThread.postTask(Runnable {
88+ mDb?.notesDataDao()?.deleteNote(mItems[position])
89+ mUiHandler.post(Runnable {
90+ mItems.removeAt(position)
91+ recyclerView.adapter!! .notifyItemRemoved(position)
92+ })
93+ })
4494 }
4595
4696 override fun onResume () {
@@ -59,14 +109,44 @@ class MainActivity : AppCompatActivity(), PopupMenu.OnMenuItemClickListener {
59109 showPopup(findViewById(R .id.sett))
60110 true
61111 }
62- R .id.find -> {
63- true
112+ R .id.action_search -> {
113+ searchView = item.actionView as SearchView
114+ searchQueryTextListener(searchView)
64115 }
65116 else -> super .onOptionsItemSelected(item)
66117 }
67118 }
68119
69- private fun showPopup (v : View ): Boolean {
120+ private fun searchQueryTextListener (searchView : SearchView ): Boolean {
121+ searchView.queryHint = " Search notes"
122+ searchView.setOnQueryTextListener(object : SearchView .OnQueryTextListener {
123+ override fun onQueryTextChange (newText : String ): Boolean {
124+ getNotesFromDb(newText)
125+ return true
126+ }
127+
128+ override fun onQueryTextSubmit (query : String ): Boolean {
129+ getNotesFromDb(query)
130+ showToast(applicationContext, " Query Post" )
131+ return true
132+ }
133+ })
134+ return true
135+ }
136+
137+ fun getNotesFromDb (query : String ){
138+ val searchTextQuery = " %$query %"
139+ mDb!! .notesDataDao().getNotesForQuery(searchTextQuery)
140+ .observe(this ,
141+ Observer <List <NotesData >> { notes ->
142+ mItems = ArrayList (notes)
143+ mSearchAdapter = SearchNoteListAdapter (mItems)
144+ recyclerView.adapter = mSearchAdapter
145+ })
146+ }
147+
148+
149+ private fun showPopup (v : View ): Boolean {
70150 PopupMenu (this , v, Gravity .END ).apply {
71151 // MainActivity implements OnMenuItemClickListener
72152 setOnMenuItemClickListener(this @MainActivity)
@@ -90,11 +170,13 @@ class MainActivity : AppCompatActivity(), PopupMenu.OnMenuItemClickListener {
90170 if (notesData == null || notesData.size == 0 ){
91171 showToast(this , " NoData in Cashe..." )
92172 } else {
93- mAdapter = NoteListAdapter (this , ArrayList (notesData))
94- mListView.adapter = mAdapter
173+ mItems = ArrayList (notesData)
174+ mAdapter = NoteListAdapter (mItems)
175+ recyclerView.adapter = mAdapter
95176 }
96177 }
97178 }
98179 mDbWorkerThread.postTask(task)
99180 }
181+
100182}
0 commit comments