mirror of
https://github.com/mediathekview/zapp.git
synced 2024-09-19 20:02:17 +02:00
Move query suggestion handling into viewmodel
This commit is contained in:
parent
b58d44d434
commit
4520d4b620
@ -8,6 +8,7 @@ import de.christinecoenen.code.zapp.app.livestream.ui.detail.ChannelDetailActivi
|
||||
import de.christinecoenen.code.zapp.app.main.MainViewModel
|
||||
import de.christinecoenen.code.zapp.app.mediathek.api.MediathekApi
|
||||
import de.christinecoenen.code.zapp.app.mediathek.controller.downloads.DownloadController
|
||||
import de.christinecoenen.code.zapp.app.mediathek.repository.MediathekSearchSuggestionsProvider
|
||||
import de.christinecoenen.code.zapp.app.player.IPlaybackPositionRepository
|
||||
import de.christinecoenen.code.zapp.app.player.PersistedPlaybackPositionRepository
|
||||
import de.christinecoenen.code.zapp.app.player.Player
|
||||
@ -105,8 +106,9 @@ abstract class ZappApplicationBase : Application() {
|
||||
factory { SettingsRepository(androidContext()) }
|
||||
factory { Player(androidContext(), get()) }
|
||||
factory { JsonChannelList(androidContext()) }
|
||||
factory { MediathekSearchSuggestionsProvider(androidContext()) }
|
||||
|
||||
viewModel { MainViewModel(androidApplication()) }
|
||||
viewModel { MainViewModel(androidApplication(), get()) }
|
||||
viewModel { ChannelDetailActivityViewModel(get(), get()) }
|
||||
viewModel { DownloadsViewModel(get()) }
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ import androidx.core.view.isVisible
|
||||
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
|
||||
import de.christinecoenen.code.zapp.R
|
||||
import de.christinecoenen.code.zapp.app.about.ui.AboutActivity
|
||||
import de.christinecoenen.code.zapp.app.mediathek.repository.MediathekSearchSuggestionsProvider
|
||||
import de.christinecoenen.code.zapp.app.mediathek.ui.list.MediathekListFragment
|
||||
import de.christinecoenen.code.zapp.app.settings.ui.SettingsActivity
|
||||
import de.christinecoenen.code.zapp.databinding.ActivityMainBinding
|
||||
@ -26,8 +25,6 @@ class MainActivity : AppCompatActivity() {
|
||||
private var _binding: ActivityMainBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private var searchQuery: String? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
@ -54,6 +51,8 @@ class MainActivity : AppCompatActivity() {
|
||||
binding.search.clearFocus()
|
||||
binding.search.setOnQueryTextFocusChangeListener(::onSearchQueryTextFocusChangeListener)
|
||||
|
||||
viewModel.searchQuery.observe(this, ::onSearchQuerySubmitted)
|
||||
|
||||
binding.bottomNavigation.setOnNavigationItemSelectedListener(::onNavigationItemSelected)
|
||||
onPageSelected(binding.viewPager.currentItem)
|
||||
handleIntent(intent)
|
||||
@ -69,18 +68,6 @@ class MainActivity : AppCompatActivity() {
|
||||
handleIntent(intent)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putString(ARG_QUERY, searchQuery)
|
||||
}
|
||||
|
||||
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
|
||||
super.onRestoreInstanceState(savedInstanceState)
|
||||
|
||||
searchQuery = savedInstanceState.getString(ARG_QUERY)
|
||||
search(searchQuery)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.activity_main_toolbar, menu)
|
||||
return super.onCreateOptionsMenu(menu)
|
||||
@ -124,15 +111,11 @@ class MainActivity : AppCompatActivity() {
|
||||
binding.search.clearFocus()
|
||||
binding.search.setQuery(query, false)
|
||||
|
||||
search(query)
|
||||
|
||||
MediathekSearchSuggestionsProvider.saveQuery(this, query)
|
||||
viewModel.submitSearchQuery(query)
|
||||
}
|
||||
}
|
||||
|
||||
private fun search(query: String?) {
|
||||
searchQuery = query
|
||||
|
||||
private fun onSearchQuerySubmitted(query: String?) {
|
||||
val currentFragment = supportFragmentManager
|
||||
.findFragmentByTag("f" + binding.viewPager.currentItem)
|
||||
|
||||
@ -158,8 +141,4 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val ARG_QUERY = "ARG_QUERY"
|
||||
}
|
||||
}
|
||||
|
@ -2,18 +2,35 @@ package de.christinecoenen.code.zapp.app.main
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.preference.PreferenceManager
|
||||
import de.christinecoenen.code.zapp.R
|
||||
import de.christinecoenen.code.zapp.app.mediathek.repository.MediathekSearchSuggestionsProvider
|
||||
|
||||
|
||||
class MainViewModel(application: Application) : AndroidViewModel(application) {
|
||||
class MainViewModel(
|
||||
application: Application,
|
||||
private val mediathekSearchSuggestionsProvider: MediathekSearchSuggestionsProvider
|
||||
) : AndroidViewModel(application) {
|
||||
|
||||
val pageCount get() = PageType.values().size
|
||||
|
||||
private val searchQuerySource = MutableLiveData<String?>()
|
||||
var searchQuery: LiveData<String?> = searchQuerySource
|
||||
|
||||
init {
|
||||
PreferenceManager.setDefaultValues(application, R.xml.preferences, false)
|
||||
}
|
||||
|
||||
fun submitSearchQuery(query: String?) {
|
||||
searchQuerySource.postValue(query)
|
||||
|
||||
if (query != null) {
|
||||
mediathekSearchSuggestionsProvider.saveQuery(query)
|
||||
}
|
||||
}
|
||||
|
||||
fun getPageTypeAt(position: Int) = PageType.values()[position]
|
||||
|
||||
fun getPageTypeFromMenuResId(itemId: Int) =
|
||||
|
@ -4,26 +4,30 @@ import android.content.Context
|
||||
import android.content.SearchRecentSuggestionsProvider
|
||||
import android.provider.SearchRecentSuggestions
|
||||
|
||||
class MediathekSearchSuggestionsProvider : SearchRecentSuggestionsProvider() {
|
||||
class MediathekSearchSuggestionsProvider(
|
||||
private val applicationContext: Context? = null
|
||||
) : SearchRecentSuggestionsProvider() {
|
||||
|
||||
companion object {
|
||||
|
||||
private const val AUTHORITY = "de.christinecoenen.code.zapp.MediathekSearchSuggestionsProvider"
|
||||
private const val MODE = DATABASE_MODE_QUERIES
|
||||
|
||||
fun saveQuery(context: Context, query: String) {
|
||||
val suggestions = SearchRecentSuggestions(context, AUTHORITY, MODE)
|
||||
suggestions.saveRecentQuery(query, null)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun deleteAllQueries(context: Context) {
|
||||
val suggestions = SearchRecentSuggestions(context, AUTHORITY, MODE)
|
||||
suggestions.clearHistory()
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
constructor() : this(null)
|
||||
|
||||
init {
|
||||
setupSuggestions(AUTHORITY, MODE)
|
||||
}
|
||||
|
||||
fun saveQuery(query: String) {
|
||||
val suggestions = SearchRecentSuggestions(applicationContext ?: context, AUTHORITY, MODE)
|
||||
suggestions.saveRecentQuery(query, null)
|
||||
}
|
||||
|
||||
fun deleteAllQueries() {
|
||||
val suggestions = SearchRecentSuggestions(applicationContext ?: context, AUTHORITY, MODE)
|
||||
suggestions.clearHistory()
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,8 @@ package de.christinecoenen.code.zapp.app.settings.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.preference.PreferenceDialogFragmentCompat
|
||||
import de.christinecoenen.code.zapp.app.mediathek.repository.MediathekSearchSuggestionsProvider.Companion.deleteAllQueries
|
||||
import de.christinecoenen.code.zapp.app.mediathek.repository.MediathekSearchSuggestionsProvider
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
class DeleteSearchQueriesPreferenceDialog : PreferenceDialogFragmentCompat() {
|
||||
|
||||
@ -18,9 +19,11 @@ class DeleteSearchQueriesPreferenceDialog : PreferenceDialogFragmentCompat() {
|
||||
|
||||
}
|
||||
|
||||
private val mediathekSearchSuggestionsProvider: MediathekSearchSuggestionsProvider by inject()
|
||||
|
||||
override fun onDialogClosed(positiveResult: Boolean) {
|
||||
if (positiveResult) {
|
||||
deleteAllQueries(requireContext())
|
||||
mediathekSearchSuggestionsProvider.deleteAllQueries()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user