Skip to content

Commit

Permalink
Move search menu item to dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
emansih committed Jan 10, 2022
1 parent 9228155 commit 3457ffc
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 85 deletions.
59 changes: 0 additions & 59 deletions app/src/main/java/xyz/hisname/fireflyiii/ui/HomeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,15 @@

package xyz.hisname.fireflyiii.ui

import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.database.MatrixCursor
import android.os.Bundle
import android.view.Menu
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SearchView
import androidx.biometric.BiometricPrompt
import androidx.core.os.bundleOf
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout
Expand Down Expand Up @@ -600,10 +594,6 @@ class HomeActivity: BaseActivity(){
|| fragment is ListTagsFragment
|| fragment is CurrencyListFragment
|| fragment is BudgetListFragment)
val menuItem = binding.activityToolbar.menu.findItem(R.id.appWideSearch)
if(menuItem != null){
menuItem.isVisible = fragment is DashboardFragment
}
}
}
supportFragmentManager.addFragmentOnAttachListener { _, fragment ->
Expand All @@ -616,10 +606,6 @@ class HomeActivity: BaseActivity(){
|| fragment is CurrencyListFragment
|| fragment is BudgetListFragment)
binding.addTransactionExtended.isVisible = fragment is DashboardFragment
val menuItem = binding.activityToolbar.menu.findItem(R.id.appWideSearch)
if(menuItem != null){
menuItem.isVisible = fragment is DashboardFragment
}
}
drawerToggle.setToolbarNavigationClickListener {
onBackPressed()
Expand All @@ -640,49 +626,4 @@ class HomeActivity: BaseActivity(){
super.onSaveInstanceState(binding.slider.saveInstanceState(outState))
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.search_menu, menu)
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
val search = menu.findItem(R.id.appWideSearch).actionView as SearchView
val columns = arrayOf("_id", "text", "subtext", "currency")
search.setOnSearchClickListener {
search.setBackgroundColor(getCompatColor(R.color.md_white_1000))
binding.activityBaseRoot.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
drawerToggle.isDrawerIndicatorEnabled = false
searchActivated = true
}
search.setOnCloseListener {
search.setBackgroundColor(getCompatColor(R.color.colorPrimary))
binding.activityBaseRoot.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
drawerToggle.isDrawerIndicatorEnabled = true
searchActivated = false
false
}
search.setSearchableInfo(searchManager.getSearchableInfo(componentName))
search.setOnQueryTextListener(object: SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String): Boolean {
return true
}

override fun onQueryTextChange(newText: String): Boolean {
homeViewModel.searchFirefly(newText).observe(this@HomeActivity){ items ->
val cursor = MatrixCursor(columns)
val temp = arrayOf<Any>(0, "", "", "")
items.forEachIndexed { i, s ->
temp[0] = items[i].id
temp[1] = items[i].name
temp[2] = items[i].type ?: ""
temp[3] = items[i].currencySymbol ?: ""
cursor.addRow(temp)
}
val adapter = SearchAdapter(this@HomeActivity, cursor, supportFragmentManager)
search.suggestionsAdapter = adapter
}
return true
}
})
return super.onCreateOptionsMenu(menu)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@
package xyz.hisname.fireflyiii.ui.base

import android.content.Context
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import xyz.hisname.fireflyiii.R
import xyz.hisname.fireflyiii.ui.transaction.details.TransactionDetailsFragment
import xyz.hisname.fireflyiii.util.extension.consume

abstract class BaseDetailFragment: BaseFragment(){
Expand Down Expand Up @@ -51,4 +54,11 @@ abstract class BaseDetailFragment: BaseFragment(){
}
else -> super.onOptionsItemSelected(item)
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
if(this.javaClass != TransactionDetailsFragment::class.java){
inflater.inflate(R.menu.detail_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}
}
}
18 changes: 0 additions & 18 deletions app/src/main/java/xyz/hisname/fireflyiii/ui/base/BaseFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ package xyz.hisname.fireflyiii.ui.base
import android.os.Bundle
import android.view.*
import android.widget.FrameLayout
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
Expand All @@ -30,8 +29,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import xyz.hisname.fireflyiii.R
import xyz.hisname.fireflyiii.repository.GlobalViewModel
import xyz.hisname.fireflyiii.ui.dashboard.DashboardFragment
import xyz.hisname.fireflyiii.ui.transaction.details.TransactionDetailsFragment
import xyz.hisname.fireflyiii.util.animation.CircularReveal
import xyz.hisname.fireflyiii.util.extension.bindView
import xyz.hisname.fireflyiii.util.extension.getViewModel
Expand All @@ -58,19 +55,4 @@ abstract class BaseFragment: Fragment() {

protected fun isDarkMode() = globalViewModel.isDark


override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
// TODO: Remove this...
if(this.javaClass != TransactionDetailsFragment::class.java
&& this.javaClass != DashboardFragment::class.java){
inflater.inflate(R.menu.detail_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}
if(this.javaClass != DashboardFragment::class.java){
setHasOptionsMenu(true)
requireActivity().findViewById<Toolbar>(R.id.activity_toolbar)
.menu.findItem(R.id.appWideSearch).isVisible = false
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,18 @@
package xyz.hisname.fireflyiii.ui.dashboard

import android.animation.ObjectAnimator
import android.app.SearchManager
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.database.MatrixCursor
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.view.*
import android.view.animation.DecelerateInterpolator
import android.widget.FrameLayout
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.graphics.BlendModeColorFilterCompat
Expand Down Expand Up @@ -57,6 +58,7 @@ import com.mikepenz.iconics.utils.sizeDp
import xyz.hisname.fireflyiii.R
import xyz.hisname.fireflyiii.databinding.FragmentDashboardBinding
import xyz.hisname.fireflyiii.repository.models.transaction.Transactions
import xyz.hisname.fireflyiii.ui.SearchAdapter
import xyz.hisname.fireflyiii.ui.base.BaseFragment
import xyz.hisname.fireflyiii.ui.bills.BillsBottomSheet
import xyz.hisname.fireflyiii.ui.budget.BudgetListFragment
Expand All @@ -81,6 +83,7 @@ class DashboardFragment: BaseFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
fragmentDashboardBinding = FragmentDashboardBinding.inflate(inflater, container, false)
val view = binding.root
setHasOptionsMenu(true)
return view
}

Expand Down Expand Up @@ -444,4 +447,35 @@ class DashboardFragment: BaseFragment() {
}
}
}

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.search_menu, menu)
val searchManager = requireContext().getSystemService(Context.SEARCH_SERVICE) as SearchManager
val search = menu.findItem(R.id.appWideSearch).actionView as SearchView
val columns = arrayOf("_id", "text", "subtext", "currency")
search.setSearchableInfo(searchManager.getSearchableInfo(requireActivity().componentName))
search.setOnQueryTextListener(object: SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String): Boolean {
return true
}

override fun onQueryTextChange(newText: String): Boolean {
dashboardView.searchFirefly(newText).observe(viewLifecycleOwner){ items ->
val cursor = MatrixCursor(columns)
val temp = arrayOf<Any>(0, "", "", "")
items.forEachIndexed { i, s ->
temp[0] = items[i].id
temp[1] = items[i].name
temp[2] = items[i].type ?: ""
temp[3] = items[i].currencySymbol ?: ""
cursor.addRow(temp)
}
val adapter = SearchAdapter(requireActivity(), cursor, parentFragmentManager)
search.suggestionsAdapter = adapter
}
return true
}
})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,12 @@ import kotlinx.coroutines.*
import timber.log.Timber
import xyz.hisname.fireflyiii.data.local.dao.AppDatabase
import xyz.hisname.fireflyiii.data.local.pref.SimpleData
import xyz.hisname.fireflyiii.data.remote.firefly.api.BudgetService
import xyz.hisname.fireflyiii.data.remote.firefly.api.CurrencyService
import xyz.hisname.fireflyiii.data.remote.firefly.api.SummaryService
import xyz.hisname.fireflyiii.data.remote.firefly.api.TransactionService
import xyz.hisname.fireflyiii.data.remote.firefly.api.*
import xyz.hisname.fireflyiii.repository.BaseViewModel
import xyz.hisname.fireflyiii.repository.SearchRepository
import xyz.hisname.fireflyiii.repository.budget.BudgetRepository
import xyz.hisname.fireflyiii.repository.currency.CurrencyRepository
import xyz.hisname.fireflyiii.repository.models.search.SearchModelItem
import xyz.hisname.fireflyiii.repository.models.transaction.Transactions
import xyz.hisname.fireflyiii.repository.transaction.TransactionLimitSource
import xyz.hisname.fireflyiii.repository.transaction.TransactionRepository
Expand Down Expand Up @@ -66,6 +65,20 @@ class DashboardViewModel(application: Application): BaseViewModel(application) {
transactionDao, genericService().create(TransactionService::class.java)
)

private val searchRepository by lazy {
SearchRepository(AppDatabase.getInstance(application, getUniqueHash()).transactionDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).tagsDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).piggyDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).currencyDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).budgetListDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).budgetLimitDao(),
AppDatabase.getInstance(application, getUniqueHash()).billDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).accountDataDao(),
AppDatabase.getInstance(application, getUniqueHash()).categoryDataDao(),
genericService().create(SearchService::class.java),
genericService().create(TransactionService::class.java))
}

private lateinit var currencyCode: String
val currencySymbol: MutableLiveData<String> = MutableLiveData()
val networthValue: MutableLiveData<String> = MutableLiveData()
Expand Down Expand Up @@ -347,4 +360,13 @@ class DashboardViewModel(application: Application): BaseViewModel(application) {
TransactionLimitSource(5, transactionDao)
}.flow.cachedIn(viewModelScope).asLiveData()
}


fun searchFirefly(query: String): LiveData<List<SearchModelItem>>{
val searchedItems = MutableLiveData<List<SearchModelItem>>()
viewModelScope.launch(Dispatchers.IO){
searchedItems.postValue(searchRepository.searchEverywhere(query))
}
return searchedItems
}
}

0 comments on commit 3457ffc

Please sign in to comment.