WIP search
This commit is contained in:
parent
a26adc11f8
commit
d815d717e2
@ -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
|
||||
|
||||
}
|
||||
17
app/src/main/java/com/isolaatti/search/Module.kt
Normal file
17
app/src/main/java/com/isolaatti/search/Module.kt
Normal 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)
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
21
app/src/main/java/com/isolaatti/search/data/SearchDao.kt
Normal file
21
app/src/main/java/com/isolaatti/search/data/SearchDao.kt
Normal 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>>
|
||||
}
|
||||
@ -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
|
||||
)
|
||||
@ -0,0 +1,8 @@
|
||||
package com.isolaatti.search.domain
|
||||
|
||||
import com.isolaatti.utils.Resource
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface SearchRepository {
|
||||
|
||||
}
|
||||
@ -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 {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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() {
|
||||
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
Loading…
x
Reference in New Issue
Block a user