diff --git a/app/src/main/java/com/isolaatti/database/AppDatabase.kt b/app/src/main/java/com/isolaatti/database/AppDatabase.kt index ac455fe..4179769 100644 --- a/app/src/main/java/com/isolaatti/database/AppDatabase.kt +++ b/app/src/main/java/com/isolaatti/database/AppDatabase.kt @@ -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 } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/Module.kt b/app/src/main/java/com/isolaatti/search/Module.kt new file mode 100644 index 0000000..545e4bf --- /dev/null +++ b/app/src/main/java/com/isolaatti/search/Module.kt @@ -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) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/data/SearchApi.kt b/app/src/main/java/com/isolaatti/search/data/SearchApi.kt index 276ab04..90b1d03 100644 --- a/app/src/main/java/com/isolaatti/search/data/SearchApi.kt +++ b/app/src/main/java/com/isolaatti/search/data/SearchApi.kt @@ -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) } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/data/SearchDao.kt b/app/src/main/java/com/isolaatti/search/data/SearchDao.kt new file mode 100644 index 0000000..938a7b5 --- /dev/null +++ b/app/src/main/java/com/isolaatti/search/data/SearchDao.kt @@ -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> +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/data/SearchHistoryEntity.kt b/app/src/main/java/com/isolaatti/search/data/SearchHistoryEntity.kt new file mode 100644 index 0000000..0bb5177 --- /dev/null +++ b/app/src/main/java/com/isolaatti/search/data/SearchHistoryEntity.kt @@ -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 +) diff --git a/app/src/main/java/com/isolaatti/search/domain/SearchRepository.kt b/app/src/main/java/com/isolaatti/search/domain/SearchRepository.kt new file mode 100644 index 0000000..81e4611 --- /dev/null +++ b/app/src/main/java/com/isolaatti/search/domain/SearchRepository.kt @@ -0,0 +1,8 @@ +package com.isolaatti.search.domain + +import com.isolaatti.utils.Resource +import kotlinx.coroutines.flow.Flow + +interface SearchRepository { + +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/presentation/SearchViewModel.kt b/app/src/main/java/com/isolaatti/search/presentation/SearchViewModel.kt index 29baccd..d4a0e80 100644 --- a/app/src/main/java/com/isolaatti/search/presentation/SearchViewModel.kt +++ b/app/src/main/java/com/isolaatti/search/presentation/SearchViewModel.kt @@ -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 { + + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/search/ui/SearchFragment.kt b/app/src/main/java/com/isolaatti/search/ui/SearchFragment.kt index 8beb789..f3e85bb 100644 --- a/app/src/main/java/com/isolaatti/search/ui/SearchFragment.kt +++ b/app/src/main/java/com/isolaatti/search/ui/SearchFragment.kt @@ -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() { + + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index da34425..fbac861 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -25,10 +25,15 @@ + \ No newline at end of file