class FlowModelsFragment : FlowBaseFragment() {
override fun getCicerone(): Cicerone<Router>? {
return App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MODELS_ROUTER)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
if (savedInstanceState == null)
getCicerone()?.router?.newRootScreen(Navigation.ModelsTabs)
}
override fun onBackPressed() {
currentFragment?.onBackPressed()
}
}
class ServerModelsFragment : BaseFragment(), ServerModelsView {
val recyclerAdapter = ServerModelsRecyclerAdapter()
@InjectPresenter
lateinit var mPresenter: ServerModelsPresenter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_server_models, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
with(recycler_view) {
val spanCount = 2
val spacing = 6.toPx()
adapter = recyclerAdapter
layoutManager = android.support.v7.widget.GridLayoutManager(activity,spanCount)
addItemDecoration(
mementomori.ru.autotuningar.ui.adapters.recycler.decorators.LocalModelsRecyclerDecorator(
spanCount,
spacing,
true
)
)
setHasFixedSize(true)
onItemClick {
//FullscreenModelPictureFragment.create(recyclerAdapter.modelsList[it]).show(fragmentManager,null)
}
}
mPresenter.loadModels()
}
override fun showNoInternetScreen() {
no_internet_root.visibility = View.VISIBLE
loading_root.visibility = View.GONE
retry_button.setOnClickListener {
mPresenter.loadModels()
}
}
override fun showLoadingView(){
no_internet_root.visibility = View.GONE
loading_root.visibility = View.VISIBLE
}
override fun showModels(models: List<ServerModel?>) {
no_internet_root.visibility = View.GONE
loading_root.visibility = View.GONE
recyclerAdapter.setData(models as List<ServerModel>)
}
}
class TabsModelsFragment : BaseFragment(){
private val mCicerone : Cicerone<Router>?
get() = App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MODELS_ROUTER)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_tabs_models, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
view_pager.adapter = ModelsFragmentPagerAdapter(childFragmentManager)
tab_layout.setupWithViewPager(view_pager)
}
override fun onBackPressed() {
mCicerone?.router?.exit()
}
}
@StateStrategyType(AddToEndSingleStrategy::class)
interface ServerModelsView : BaseView {
fun showModels(models : List<ServerModel?>)
fun showNoInternetScreen()
fun showLoadingView()
}
@InjectViewState
class ServerModelsPresenter : BasePresenter<ServerModelsView>() {
var modelsInteractor: ModelsInteractor = App.mAppComponent.getModelsInteractor()
@SuppressLint("CheckResult")
fun loadModels() {
modelsInteractor.getModelsFromServer().doOnSubscribe {
viewState.showLoadingView()
}.subscribe({
viewState.showModels(it)
}, {
if (it is NoInternetException) {
viewState.showNoInternetScreen()
} else
Timber.e(it)
})
}
}
class FlowMainFragment : FlowBaseFragment() {
override fun getCicerone(): Cicerone<Router>? {
return null
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_main_flow, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
AHBottomNavigationAdapter(activity!!, R.menu.main_bottom_menu).apply {
setupWithBottomNavigation(bottom_navigation)
}
with(bottom_navigation) {
showShadow()
accentColor = getColorFromResources(R.color.colorAccent)
inactiveColor = getColorFromResources(R.color.inactiveTab)
defaultBackgroundColor = getColorFromResources(R.color.colorMainBottomNavBackground)
titleState = com.aurelhubert.ahbottomnavigation.AHBottomNavigation.TitleState.ALWAYS_SHOW
setOnTabSelectedListener { position, wasSelected ->
if (!wasSelected) selectTab(
when (position) {
0 -> Navigation.FlowModels
else -> Navigation.FlowPhotos
}
)
true
}
}
selectTab( //попробовать добавить вручную
when (currentFragment?.tag) {
Navigation.FlowPhotos.screenKey -> Navigation.FlowPhotos
else -> Navigation.FlowModels
}
)
}
private fun selectTab(tab: SupportAppScreen) {
val currentFragment = currentFragment
val newFragment = childFragmentManager.findFragmentByTag(tab.screenKey)
if (currentFragment != null && newFragment != null && currentFragment == newFragment) return
childFragmentManager.beginTransaction().apply {
if (newFragment == null)
add(R.id.main_screen_container, tab.fragment, tab.screenKey)
currentFragment?.let {
hide(it)
it.userVisibleHint = false
}
newFragment?.let {
show(it)
it.userVisibleHint = true
}
}.commitNow()
}
override fun onBackPressed() {
currentFragment?.onBackPressed()
}
}
class MainActivity : AppCompatActivity(), MvpView {
private var navigator: Navigator? =
object : SupportAppNavigator(this, supportFragmentManager, R.id.container) {
override fun setupFragmentTransaction(
command: Command?,
currentFragment: Fragment?,
nextFragment: Fragment?,
fragmentTransaction: FragmentTransaction
) {
fragmentTransaction.setReorderingAllowed(true)
fragmentTransaction.setCustomAnimations(
R.anim.fade_in,
R.anim.fade_out,
R.anim.fade_in,
R.anim.fade_out
)
}
}
private val mCicerone: Cicerone<Router>?
get() = App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MAIN_ROUTER)
private val currentFragment: BaseFragment?
get() = supportFragmentManager.findFragmentById(R.id.container) as? BaseFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
App.mAppComponent.getModelsInteractor().getModelsFromAssetsAndSaveIfNeeds()
if (savedInstanceState == null)
mCicerone?.router?.newRootScreen(Navigation.FlowMain)
setStatusBarColor()
}
override fun onResumeFragments() {
super.onResumeFragments()
mCicerone?.navigatorHolder?.setNavigator(navigator)
}
override fun onPause() {
mCicerone?.navigatorHolder?.removeNavigator()
super.onPause()
}
override fun onBackPressed() {
currentFragment?.onBackPressed() ?: super.onBackPressed()
}
}
override fun getCicerone(): Cicerone<Router>? {
return App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MODELS_ROUTER)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
if (savedInstanceState == null)
getCicerone()?.router?.newRootScreen(Navigation.ModelsTabs)
}
override fun onBackPressed() {
currentFragment?.onBackPressed()
}
}
class ServerModelsFragment : BaseFragment(), ServerModelsView {
val recyclerAdapter = ServerModelsRecyclerAdapter()
@InjectPresenter
lateinit var mPresenter: ServerModelsPresenter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_server_models, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
with(recycler_view) {
val spanCount = 2
val spacing = 6.toPx()
adapter = recyclerAdapter
layoutManager = android.support.v7.widget.GridLayoutManager(activity,spanCount)
addItemDecoration(
mementomori.ru.autotuningar.ui.adapters.recycler.decorators.LocalModelsRecyclerDecorator(
spanCount,
spacing,
true
)
)
setHasFixedSize(true)
onItemClick {
//FullscreenModelPictureFragment.create(recyclerAdapter.modelsList[it]).show(fragmentManager,null)
}
}
mPresenter.loadModels()
}
override fun showNoInternetScreen() {
no_internet_root.visibility = View.VISIBLE
loading_root.visibility = View.GONE
retry_button.setOnClickListener {
mPresenter.loadModels()
}
}
override fun showLoadingView(){
no_internet_root.visibility = View.GONE
loading_root.visibility = View.VISIBLE
}
override fun showModels(models: List<ServerModel?>) {
no_internet_root.visibility = View.GONE
loading_root.visibility = View.GONE
recyclerAdapter.setData(models as List<ServerModel>)
}
}
class TabsModelsFragment : BaseFragment(){
private val mCicerone : Cicerone<Router>?
get() = App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MODELS_ROUTER)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_tabs_models, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
view_pager.adapter = ModelsFragmentPagerAdapter(childFragmentManager)
tab_layout.setupWithViewPager(view_pager)
}
override fun onBackPressed() {
mCicerone?.router?.exit()
}
}
@StateStrategyType(AddToEndSingleStrategy::class)
interface ServerModelsView : BaseView {
fun showModels(models : List<ServerModel?>)
fun showNoInternetScreen()
fun showLoadingView()
}
@InjectViewState
class ServerModelsPresenter : BasePresenter<ServerModelsView>() {
var modelsInteractor: ModelsInteractor = App.mAppComponent.getModelsInteractor()
@SuppressLint("CheckResult")
fun loadModels() {
modelsInteractor.getModelsFromServer().doOnSubscribe {
viewState.showLoadingView()
}.subscribe({
viewState.showModels(it)
}, {
if (it is NoInternetException) {
viewState.showNoInternetScreen()
} else
Timber.e(it)
})
}
}
class FlowMainFragment : FlowBaseFragment() {
override fun getCicerone(): Cicerone<Router>? {
return null
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_main_flow, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
AHBottomNavigationAdapter(activity!!, R.menu.main_bottom_menu).apply {
setupWithBottomNavigation(bottom_navigation)
}
with(bottom_navigation) {
showShadow()
accentColor = getColorFromResources(R.color.colorAccent)
inactiveColor = getColorFromResources(R.color.inactiveTab)
defaultBackgroundColor = getColorFromResources(R.color.colorMainBottomNavBackground)
titleState = com.aurelhubert.ahbottomnavigation.AHBottomNavigation.TitleState.ALWAYS_SHOW
setOnTabSelectedListener { position, wasSelected ->
if (!wasSelected) selectTab(
when (position) {
0 -> Navigation.FlowModels
else -> Navigation.FlowPhotos
}
)
true
}
}
selectTab( //попробовать добавить вручную
when (currentFragment?.tag) {
Navigation.FlowPhotos.screenKey -> Navigation.FlowPhotos
else -> Navigation.FlowModels
}
)
}
private fun selectTab(tab: SupportAppScreen) {
val currentFragment = currentFragment
val newFragment = childFragmentManager.findFragmentByTag(tab.screenKey)
if (currentFragment != null && newFragment != null && currentFragment == newFragment) return
childFragmentManager.beginTransaction().apply {
if (newFragment == null)
add(R.id.main_screen_container, tab.fragment, tab.screenKey)
currentFragment?.let {
hide(it)
it.userVisibleHint = false
}
newFragment?.let {
show(it)
it.userVisibleHint = true
}
}.commitNow()
}
override fun onBackPressed() {
currentFragment?.onBackPressed()
}
}
class MainActivity : AppCompatActivity(), MvpView {
private var navigator: Navigator? =
object : SupportAppNavigator(this, supportFragmentManager, R.id.container) {
override fun setupFragmentTransaction(
command: Command?,
currentFragment: Fragment?,
nextFragment: Fragment?,
fragmentTransaction: FragmentTransaction
) {
fragmentTransaction.setReorderingAllowed(true)
fragmentTransaction.setCustomAnimations(
R.anim.fade_in,
R.anim.fade_out,
R.anim.fade_in,
R.anim.fade_out
)
}
}
private val mCicerone: Cicerone<Router>?
get() = App.mAppComponent.getCiceroneHolder().getCicerone(Navigation.MAIN_ROUTER)
private val currentFragment: BaseFragment?
get() = supportFragmentManager.findFragmentById(R.id.container) as? BaseFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
App.mAppComponent.getModelsInteractor().getModelsFromAssetsAndSaveIfNeeds()
if (savedInstanceState == null)
mCicerone?.router?.newRootScreen(Navigation.FlowMain)
setStatusBarColor()
}
override fun onResumeFragments() {
super.onResumeFragments()
mCicerone?.navigatorHolder?.setNavigator(navigator)
}
override fun onPause() {
mCicerone?.navigatorHolder?.removeNavigator()
super.onPause()
}
override fun onBackPressed() {
currentFragment?.onBackPressed() ?: super.onBackPressed()
}
}