blob: 448554b62eb016e0cdea29a022cc07911dc43f47 [file] [log] [blame]
package org.apache.fineract.ui.online.groups.grouplist
import android.app.SearchManager
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.view.*
import androidx.appcompat.widget.SearchView
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import androidx.recyclerview.widget.LinearLayoutManager
import butterknife.ButterKnife
import butterknife.OnClick
import kotlinx.android.synthetic.main.fragment_group_list.*
import org.apache.fineract.R
import org.apache.fineract.data.models.Group
import org.apache.fineract.ui.adapters.GroupsAdapter
import org.apache.fineract.ui.base.FineractBaseActivity
import org.apache.fineract.ui.base.FineractBaseFragment
import org.apache.fineract.ui.base.OnItemClickListener
import org.apache.fineract.ui.online.groups.GroupAction
import org.apache.fineract.ui.online.groups.creategroup.CreateGroupActivity
import org.apache.fineract.ui.online.groups.groupdetails.GroupDetailsActivity
import org.apache.fineract.utils.Constants
import javax.inject.Inject
/*
* Created by saksham on 15/June/2019
*/
class GroupListFragment : FineractBaseFragment(), OnItemClickListener {
lateinit var rootView: View
lateinit var viewModel: GroupViewModel
@Inject
lateinit var adapter: GroupsAdapter
@Inject
lateinit var groupViewModelFactory: GroupViewModelFactory
lateinit var groupList: ArrayList<Group>
val searchedGroup: (ArrayList<Group>) -> Unit = { groups ->
adapter.setGroupList(groups)
}
companion object {
fun newInstance(): GroupListFragment {
return GroupListFragment()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
rootView = inflater.inflate(R.layout.fragment_group_list, container, false)
(activity as FineractBaseActivity).activityComponent.inject(this)
viewModel = ViewModelProviders.of(this,
groupViewModelFactory).get(GroupViewModel::class.java)
return rootView
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ButterKnife.bind(this, rootView)
adapter.setItemClickListener(this)
rvGroups.adapter = adapter
rvGroups.layoutManager = LinearLayoutManager(context)
viewModel.getGroups().observe(this,
Observer {
groupList = it
adapter.setGroupList(it)
})
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_group_search, menu)
val searchManager = activity?.getSystemService(Context.SEARCH_SERVICE) as SearchManager
val searchView = menu.findItem(R.id.group_search).actionView as SearchView
searchView.setSearchableInfo(searchManager.getSearchableInfo(activity?.componentName))
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
viewModel.searchGroup(groupList, query, searchedGroup)
return false
}
override fun onQueryTextChange(newText: String): Boolean {
if (TextUtils.isEmpty(newText)) {
adapter.setGroupList(groupList)
}
viewModel.searchGroup(groupList, newText, searchedGroup)
return true
}
})
}
override fun onItemClick(childView: View?, position: Int) {
val intent = Intent(context, GroupDetailsActivity::class.java).apply {
putExtra(Constants.GROUP, groupList[position])
}
startActivity(intent)
}
override fun onItemLongPress(childView: View?, position: Int) {
}
@OnClick(R.id.fabAddGroup)
fun addGroup() {
val intent = Intent(activity, CreateGroupActivity::class.java).apply {
putExtra(Constants.GROUP_ACTION, GroupAction.CREATE)
}
startActivity(intent)
}
}