Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.jetredsbytes.togglclient.presentation.switcher
- import android.view.View
- import android.view.ViewGroup
- import com.jetredsbytes.togglclient.R
- import dagger.android.DaggerActivity
- import kotlinx.android.synthetic.main.error_screen.view.*
- class StateViewSwitcher(activity: DaggerActivity) {
- private lateinit var mainView: View
- private val states = HashMap<StateView, ViewInfo>()
- private val layoutInflater = activity.layoutInflater
- private lateinit var container: ViewGroup
- fun initMainView(view: View) = apply {
- this.mainView = view
- this.container = mainView.parent as ViewGroup
- states[StateView.STATE_MAIN] = ViewInfo(0, mainView)
- }
- fun switchToError(errorMessage: String, listener: StateSwitcherEvent.OnErrorEvent) {
- val errorView = layoutInflater.inflate(R.layout.error_screen, container, false)
- errorView.tvError.text = errorMessage
- errorView.btnRetry.setOnClickListener {
- listener.onRetryButtonClick()
- }
- addViewState(StateView.STATE_ERROR, errorView)
- switchToError()
- }
- fun switchToLoading() {
- val loadingView = layoutInflater.inflate(R.layout.loading_screen, container, false)
- addViewState(StateView.STATE_LOADING, loadingView)
- switchToState(StateView.STATE_LOADING)
- show(loadingView)
- }
- fun switchToMain() = switchToState(StateView.STATE_MAIN)
- private fun switchToEmpty() = switchToState(StateView.STATE_EMPTY)
- private fun switchToSearchResultsEmpty() = switchToState(StateView.STATE_NOT_FOUND)
- private fun switchToError() = switchToState(StateView.STATE_ERROR)
- private fun inflateStateView(layout: Int) = layoutInflater.inflate(layout, container, false)
- private fun addViewState(state: StateView, stateView: View) {
- stateView.visibility = View.GONE
- states[state] = ViewInfo(0, stateView)
- }
- private fun switchToState(state: StateView) {
- val viewInfo = states[state] ?: return
- if (viewInfo.view == null) {
- viewInfo.view = layoutInflater.inflate(viewInfo.layoutId, container, false)
- }
- val nextView = viewInfo.view
- if (nextView == null || nextView == mainView) return
- if (nextView.parent != container) container.addView(nextView)
- show(nextView)
- }
- private fun show(nextView: View) {
- mainView.visibility = View.GONE
- nextView.visibility = View.VISIBLE
- mainView = nextView
- }
- private class ViewInfo(var layoutId: Int, var view: View?)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement