WIP search

This commit is contained in:
erik-everardo 2024-03-24 21:06:08 -06:00
parent a26adc11f8
commit d815d717e2
9 changed files with 105 additions and 1 deletions

View File

@ -6,13 +6,16 @@ import com.isolaatti.audio.drafts.data.AudioDraftEntity
import com.isolaatti.audio.drafts.data.AudiosDraftsDao
import com.isolaatti.auth.data.local.UserInfoDao
import com.isolaatti.auth.data.local.UserInfoEntity
import com.isolaatti.search.data.SearchDao
import com.isolaatti.search.data.SearchHistoryEntity
import com.isolaatti.settings.data.KeyValueDao
import com.isolaatti.settings.data.KeyValueEntity
@Database(entities = [KeyValueEntity::class, UserInfoEntity::class, AudioDraftEntity::class], version = 5)
@Database(entities = [KeyValueEntity::class, UserInfoEntity::class, AudioDraftEntity::class, SearchHistoryEntity::class], version = 6)
abstract class AppDatabase : RoomDatabase() {
abstract fun keyValueDao(): KeyValueDao
abstract fun userInfoDao(): UserInfoDao
abstract fun audioDrafts(): AudiosDraftsDao
abstract fun searchHistoryDao(): SearchDao
}

View File

@ -0,0 +1,17 @@
package com.isolaatti.search
import com.isolaatti.connectivity.RetrofitClient
import com.isolaatti.search.data.SearchApi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
class Module {
@Provides
fun provideSearchApi(retrofitClient: RetrofitClient): SearchApi {
return retrofitClient.client.create(SearchApi::class.java)
}
}

View File

@ -1,4 +1,9 @@
package com.isolaatti.search.data
import retrofit2.http.GET
import retrofit2.http.Query
interface SearchApi {
@GET("Search/Quick")
fun quickSearch(@Query("q") query: String)
}

View File

@ -0,0 +1,21 @@
package com.isolaatti.search.data
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
@Dao
interface SearchDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertTerm(searchTerm: SearchHistoryEntity)
@Delete
fun deleteTerm(searchTerm: SearchHistoryEntity)
@Query("SELECT * FROM search_history ORDER BY time DESC")
fun getTerms(): LiveData<List<SearchHistoryEntity>>
}

View File

@ -0,0 +1,10 @@
package com.isolaatti.search.data
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "search_history")
data class SearchHistoryEntity(
@PrimaryKey val query: String,
val time: Long
)

View File

@ -0,0 +1,8 @@
package com.isolaatti.search.domain
import com.isolaatti.utils.Resource
import kotlinx.coroutines.flow.Flow
interface SearchRepository {
}

View File

@ -1,9 +1,20 @@
package com.isolaatti.search.presentation
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.isolaatti.search.data.SearchApi
import com.isolaatti.search.data.SearchDao
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class SearchViewModel @Inject constructor() : ViewModel() {
fun search(query: String) {
viewModelScope.launch {
}
}
}

View File

@ -4,12 +4,16 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.isolaatti.databinding.FragmentSearchBinding
import com.isolaatti.search.presentation.SearchViewModel
class SearchFragment : Fragment() {
lateinit var viewBinding: FragmentSearchBinding
private val viewModel: SearchViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
@ -19,4 +23,24 @@ class SearchFragment : Fragment() {
viewBinding = FragmentSearchBinding.inflate(inflater)
return viewBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupListeners()
setupObservers()
}
private fun setupListeners() {
viewBinding.searchView.editText.doAfterTextChanged { searchText ->
if(searchText != null) {
viewModel.search(searchText.toString())
}
}
}
private fun setupObservers() {
}
}

View File

@ -25,10 +25,15 @@
<com.google.android.material.search.SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="@string/searchbar_hint"
app:layout_anchor="@id/search_bar">
<!-- Search suggestions/results go here (ScrollView, RecyclerView, etc.). -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/search_history_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.google.android.material.search.SearchView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>