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.audio.drafts.data.AudiosDraftsDao
|
||||||
import com.isolaatti.auth.data.local.UserInfoDao
|
import com.isolaatti.auth.data.local.UserInfoDao
|
||||||
import com.isolaatti.auth.data.local.UserInfoEntity
|
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.KeyValueDao
|
||||||
import com.isolaatti.settings.data.KeyValueEntity
|
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 class AppDatabase : RoomDatabase() {
|
||||||
abstract fun keyValueDao(): KeyValueDao
|
abstract fun keyValueDao(): KeyValueDao
|
||||||
abstract fun userInfoDao(): UserInfoDao
|
abstract fun userInfoDao(): UserInfoDao
|
||||||
abstract fun audioDrafts(): AudiosDraftsDao
|
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
|
package com.isolaatti.search.data
|
||||||
|
|
||||||
|
import retrofit2.http.GET
|
||||||
|
import retrofit2.http.Query
|
||||||
|
|
||||||
interface SearchApi {
|
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
|
package com.isolaatti.search.presentation
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.ViewModel
|
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 dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class SearchViewModel @Inject constructor() : ViewModel() {
|
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.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.widget.doAfterTextChanged
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
import com.isolaatti.databinding.FragmentSearchBinding
|
import com.isolaatti.databinding.FragmentSearchBinding
|
||||||
|
import com.isolaatti.search.presentation.SearchViewModel
|
||||||
|
|
||||||
class SearchFragment : Fragment() {
|
class SearchFragment : Fragment() {
|
||||||
|
|
||||||
lateinit var viewBinding: FragmentSearchBinding
|
lateinit var viewBinding: FragmentSearchBinding
|
||||||
|
private val viewModel: SearchViewModel by viewModels()
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
@ -19,4 +23,24 @@ class SearchFragment : Fragment() {
|
|||||||
viewBinding = FragmentSearchBinding.inflate(inflater)
|
viewBinding = FragmentSearchBinding.inflate(inflater)
|
||||||
return viewBinding.root
|
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
|
<com.google.android.material.search.SearchView
|
||||||
|
android:id="@+id/search_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:hint="@string/searchbar_hint"
|
android:hint="@string/searchbar_hint"
|
||||||
app:layout_anchor="@id/search_bar">
|
app:layout_anchor="@id/search_bar">
|
||||||
<!-- Search suggestions/results go here (ScrollView, RecyclerView, etc.). -->
|
<!-- 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>
|
</com.google.android.material.search.SearchView>
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
Loading…
x
Reference in New Issue
Block a user