0
0
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:
Christine Emrich 2021-01-23 19:43:56 +01:00
parent b58d44d434
commit 4520d4b620
5 changed files with 46 additions and 41 deletions

View File

@ -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()) }
}

View File

@ -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"
}
}

View File

@ -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) =

View File

@ -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()
}
}

View File

@ -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()
}
}
}