Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.mail.intranet.ui.businesstrip.component.list.page.base
- import android.os.Bundle
- import android.view.Menu
- import android.view.MenuItem
- import android.view.View
- import androidx.annotation.CallSuper
- import androidx.annotation.WorkerThread
- import androidx.recyclerview.widget.LinearLayoutManager
- import androidx.recyclerview.widget.RecyclerView
- import ru.mail.intranet.R
- import ru.mail.intranet.model.base.api.action.ApiFuture
- import ru.mail.intranet.model.base.api.result.component.error.ApiError
- import ru.mail.intranet.model.base.message.MESSAGE_CENTER
- import ru.mail.intranet.model.base.message.component.HandleTarget
- import ru.mail.intranet.model.base.message.component.Message
- import ru.mail.intranet.model.base.repository.businessTripRepository
- import ru.mail.intranet.model.base.util.getApiErrorText
- import ru.mail.intranet.model.base.util.processApiError
- import ru.mail.intranet.model.base.util.toast
- import ru.mail.intranet.model.businesstrip.data.BusinessTrip
- import ru.mail.intranet.ui.base.component.ErrorViewType
- import ru.mail.intranet.ui.base.page.BasePage
- import ru.mail.intranet.ui.base.util.addActionButton
- import ru.mail.intranet.ui.base.util.disableItemChangeAnimation
- import ru.mail.intranet.ui.businesstrip.BusinessTripRequestListActivity
- import ru.mail.intranet.ui.businesstrip.component.list.adapter.RequestListAdapter
- import ru.mail.intranet.ui.businesstrip.component.list.data.ActionList
- import ru.mail.intranet.ui.businesstrip.component.list.decoration.BusinessTripListItemDecoration
- import ru.mail.intranet.ui.businesstrip.component.list.item.RequestItem
- import ru.mail.intranet.ui.businesstrip.component.message.BusinessTripMessage
- import ru.mail.intranet.ui.businesstrip.component.util.matches
- import ru.mail.intranet.ui.common.dialog.alert.showAlertDialog
- import ru.mail.intranet.util.text.splitToWords
- import ru.mail.intranet.util.thread.runOnMainThread
- abstract class BusinessTripPage: BasePage<BusinessTripRequestListActivity>() {
- private lateinit var recyclerView: RecyclerView
- private lateinit var actionListView: View
- private lateinit var approveButton: View
- private lateinit var rejectButton: View
- // private var future: ApiFuture<*>? = null
- private var allItems: List<RequestItem>? = null
- private var selectAllButton: MenuItem? = null
- protected lateinit var adapter: RequestListAdapter
- private set
- protected abstract fun loadData(): ApiFuture<*>
- @CallSuper
- override fun onCreate(savedInstanceState: Bundle?) {
- setContentView(R.layout.page_business_trip_list)
- recyclerView = findViewById(R.id.page_business_trip_list_recycler)
- actionListView = findViewById(R.id.page_business_trip_list_action)
- approveButton = findViewById(R.id.page_business_trip_list_approve_group)
- rejectButton = findViewById(R.id.page_business_trip_list_reject_group)
- recyclerView.disableItemChangeAnimation()
- recyclerView.layoutManager = LinearLayoutManager(activity)
- adapter = RequestListAdapter(activity,
- { countSelectedItems, actionList ->
- toggleActionMenu(
- countSelectedItems > 0,
- actionList
- )
- },
- {
- showErrorView()
- })
- approveButton.setOnClickListener {
- val size = adapter.collectSelectedRequestList().size
- activity.showAlertDialog(
- activity.resources.getQuantityString(
- R.plurals.confirm_business_trip_approve,
- size
- )
- ) { resultPositive ->
- if (resultPositive) {
- val requestNumberList =
- adapter.collectSelectedRequestList().map { it.requestNumber }
- adapter.toggleRefreshingState(
- requestNumberList,
- true
- )
- activity.businessTripRepository.approveBusinessTripList(requestNumberList)
- }
- }
- }
- rejectButton.setOnClickListener {
- val size = adapter.collectSelectedRequestList().size
- activity.showAlertDialog(
- activity.resources.getQuantityString(
- R.plurals.confirm_business_trip_reject,
- size
- )
- ) { resultPositive ->
- if (resultPositive) {
- val requestNumberList =
- adapter.collectSelectedRequestList().map { it.requestNumber }
- adapter.toggleRefreshingState(
- requestNumberList,
- true
- )
- activity.businessTripRepository.rejectBusinessTripList(requestNumberList)
- }
- }
- }
- recyclerView.addItemDecoration(
- BusinessTripListItemDecoration(
- activity,
- adapter
- )
- )
- recyclerView.adapter = adapter
- isRefreshEnabled = true
- hasSearch = true
- hasOptionsMenu = true
- showProgressView(false)
- // future = loadData()
- loadData()
- MESSAGE_CENTER.registerHandler(
- this,
- BusinessTripMessage.MC_REFRESH_REQUEST,
- HandleTarget.MAIN_THREAD
- )
- }
- override fun onSearchQueryChanged(query: String?) = false
- override fun onSearch(query: String?) {
- val allItems = allItems ?: return
- if (query.isNullOrBlank()) {
- runOnMainThread {
- adapter.setItemsRaw(allItems)
- }
- return
- }
- val words = query.splitToWords()
- val filtered = ArrayList<RequestItem>()
- for (item in allItems) {
- val trip = item.businessTrip
- var matches = true
- for (word in words) {
- if (!trip.matches(word)) {
- matches = false
- break
- }
- }
- if (matches) {
- filtered.add(item)
- }
- }
- runOnMainThread {
- adapter.setItemsRaw(filtered)
- }
- }
- override fun onSearchFieldVisibilityChanged(visible: Boolean) {
- val allItems = allItems
- if (!visible && allItems != null) {
- adapter.setItemsRaw(allItems)
- }
- }
- override fun onRefresh() {
- // future?.cancel()
- // future = loadData()
- loadData().cancel()
- loadData()
- }
- override fun onDestroy() {
- MESSAGE_CENTER.unregisterHandler(this)
- loadData().cancel()
- // future?.cancel()
- }
- override fun onCreateOptionsMenu(menu: Menu) {
- super.onCreateOptionsMenu(menu)
- val selectAllButton = menu.addActionButton(
- activity,
- R.string.select_all,
- R.drawable.ic_select_all,
- R.color.menu_action
- ) {
- adapter.toggleSelectionAll()
- }
- selectAllButton.isVisible = false
- this.selectAllButton = selectAllButton
- }
- protected open fun onBusinessTripUpdateSuccess(businessTrip: BusinessTrip) {
- adapter.updateBusinessTrip(businessTrip)
- }
- override fun onHandleMessage(message: Message) {
- when {
- message.containsExtra(BusinessTripMessage.EXTRA_BUSINESS_TRIP) -> {
- val businessTrip =
- message.getExtra<BusinessTrip>(BusinessTripMessage.EXTRA_BUSINESS_TRIP)
- onBusinessTripUpdateSuccess(businessTrip)
- }
- message.containsExtra(BusinessTripMessage.EXTRA_BUSINESS_TRIP_NUMBER) -> {
- val requestNumber =
- message.getExtra<Long>(BusinessTripMessage.EXTRA_BUSINESS_TRIP_NUMBER)
- adapter.toggleRefreshingState(
- requestNumber,
- false
- )
- }
- }
- }
- @WorkerThread
- protected fun processBusinessTripList(businessTripList: List<BusinessTrip>?) {
- val items = businessTripList?.map { RequestItem(it) }
- allItems = items
- runOnMainThread {
- if (items.isNullOrEmpty()) {
- showErrorView(
- text = activity.getString(R.string.business_trip_no_requests),
- type = ErrorViewType.INFO,
- image = activity.getDrawable(R.drawable.ic_business_trip_no_history),
- retryText = activity.getString(R.string.business_trip_update)
- ) {
- // future?.cancel()
- // future = loadData()
- loadData().cancel()
- loadData()
- showProgressView(false)
- hideErrorView()
- }
- } else {
- isRefreshing = false
- adapter.setItemsRaw(items)
- }
- hideProgressView()
- }
- }
- @WorkerThread
- protected fun processBusinessTripListError(error: ApiError?) = processApiError(
- activity,
- error,
- true
- ) {
- runOnMainThread {
- if (adapter.isEmpty()) {
- showErrorView(
- text = activity.getApiErrorText(error),
- animate = false,
- image = activity.getDrawable(R.drawable.ic_reserve_request_error)
- ) {
- // future?.cancel()
- // future = loadData()
- loadData().cancel()
- loadData()
- showProgressView(false)
- hideErrorView()
- }
- } else {
- activity.toast(error)
- }
- isRefreshing = false
- hideProgressView()
- }
- }
- private fun toggleActionMenu(
- visible: Boolean,
- actionList: ActionList
- ) {
- if (visible) {
- approveButton.visibility = View.GONE
- rejectButton.visibility = View.GONE
- if (actionList.canApprove) {
- approveButton.visibility = View.VISIBLE
- }
- if (actionList.canReject) {
- rejectButton.visibility = View.VISIBLE
- }
- actionListView.visibility = View.VISIBLE
- selectAllButton?.isVisible = true
- } else {
- actionListView.visibility = View.GONE
- selectAllButton?.isVisible = false
- }
- }
- private fun showErrorView() {
- showErrorView(
- text = activity.getString(R.string.business_trip_no_requests),
- type = ErrorViewType.INFO,
- image = activity.getDrawable(R.drawable.ic_business_trip_no_history),
- retryText = activity.getString(R.string.business_trip_update)
- ) {
- // future?.cancel()
- // future = loadData()
- loadData().cancel()
- loadData()
- hideErrorView()
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement