Update: Wire the search bar

This commit is contained in:
machiav3lli 2022-02-27 01:40:08 +01:00
parent 891ad6bc6e
commit b047b5e814
5 changed files with 61 additions and 5 deletions

View File

@ -3,11 +3,13 @@ package com.looker.droidify.ui.activities
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.*
import android.view.Menu
import android.view.MenuItem
import android.view.inputmethod.InputMethodManager
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
@ -23,7 +25,6 @@ import com.looker.droidify.R
import com.looker.droidify.content.Preferences
import com.looker.droidify.databinding.ActivityMainXBinding
import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.screen.*
import com.looker.droidify.service.Connection
import com.looker.droidify.service.SyncService
import com.looker.droidify.ui.fragments.MainNavFragmentX
@ -52,6 +53,7 @@ class MainActivityX : AppCompatActivity() {
lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var navController: NavController
private val viewModel: MainActivityViewModelX by viewModels()
val menuSetup = MutableLiveData<Boolean>()
private val syncConnection = Connection(SyncService::class.java, onBind = { _, _ ->
navController.currentDestination?.let {
@ -126,6 +128,7 @@ class MainActivityX : AppCompatActivity() {
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
menuSetup.value = true
return super.onCreateOptionsMenu(menu)
}

View File

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Scaffold
import androidx.core.view.children
@ -17,9 +18,8 @@ import com.looker.droidify.entity.Section
import com.looker.droidify.ui.compose.ProductsVerticalRecycler
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.widget.FocusSearchView
// TODO add chips bar to navigate categories
class ExploreFragment : MainNavFragmentX() {
private lateinit var binding: FragmentExploreXBinding
@ -95,5 +95,21 @@ class ExploreFragment : MainNavFragmentX() {
)
}
}
mainActivityX.menuSetup.observe(viewLifecycleOwner) {
if (it != null) {
val searchView =
mainActivityX.toolbar.menu.findItem(R.id.toolbar_search).actionView as FocusSearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (isResumed) viewModel.setSearchQuery(newText.orEmpty())
return true
}
})
}
}
}
}

View File

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Scaffold
import com.google.android.material.composethemeadapter.MdcTheme
@ -15,6 +16,7 @@ import com.looker.droidify.ui.compose.ProductsHorizontalRecycler
import com.looker.droidify.ui.compose.ProductsVerticalRecycler
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.widget.FocusSearchView
class InstalledFragment : MainNavFragmentX() {
@ -97,5 +99,21 @@ class InstalledFragment : MainNavFragmentX() {
}
}
}
mainActivityX.menuSetup.observe(viewLifecycleOwner) {
if (it != null) {
val searchView =
mainActivityX.toolbar.menu.findItem(R.id.toolbar_search).actionView as FocusSearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (isResumed) viewModel.setSearchQuery(newText.orEmpty())
return true
}
})
}
}
}
}

View File

@ -4,9 +4,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.SearchView
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Scaffold
import com.google.android.material.composethemeadapter.MdcTheme
import com.looker.droidify.R
import com.looker.droidify.content.Preferences
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.databinding.FragmentLatestXBinding
@ -14,6 +16,7 @@ import com.looker.droidify.ui.compose.ProductsHorizontalRecycler
import com.looker.droidify.ui.compose.ProductsVerticalRecycler
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.widget.FocusSearchView
class LatestFragment : MainNavFragmentX() {
@ -79,5 +82,21 @@ class LatestFragment : MainNavFragmentX() {
}
}
}
mainActivityX.menuSetup.observe(viewLifecycleOwner) {
if (it != null) {
val searchView =
mainActivityX.toolbar.menu.findItem(R.id.toolbar_search).actionView as FocusSearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (isResumed) viewModel.setSearchQuery(newText.orEmpty())
return true
}
})
}
}
}
}

View File

@ -9,7 +9,7 @@ import com.looker.droidify.ui.activities.MainActivityX
import com.looker.droidify.ui.viewmodels.MainNavFragmentViewModelX
abstract class MainNavFragmentX : BaseNavFragment() {
private val mainActivityX: MainActivityX
protected val mainActivityX: MainActivityX
get() = requireActivity() as MainActivityX
val viewModel: MainNavFragmentViewModelX by viewModels {
MainNavFragmentViewModelX.Factory(mainActivityX.db, primarySource, secondarySource)