package com.fastaccess.ui.modules.main; import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import com.fastaccess.App; import com.fastaccess.R; import com.fastaccess.data.dao.model.Login; import com.fastaccess.helper.RxHelper; import com.fastaccess.provider.rest.RestProvider; import com.fastaccess.ui.base.mvp.presenter.BasePresenter; import com.fastaccess.ui.modules.feeds.FeedsFragment; import com.fastaccess.ui.modules.main.issues.pager.MyIssuesPagerFragment; import com.fastaccess.ui.modules.main.pullrequests.pager.MyPullsPagerFragment; import com.fastaccess.ui.modules.user.UserPagerActivity; import static com.fastaccess.helper.ActivityHelper.getVisibleFragment; import static com.fastaccess.helper.AppHelper.getFragmentByTag; /** * Created by Kosh on 09 Nov 2016, 7:53 PM */ class MainPresenter extends BasePresenter<MainMvp.View> implements MainMvp.Presenter { MainPresenter() { manageSubscription(RxHelper.getObserver(RestProvider.getUserService().getUser()) .flatMap(login -> login.update(login)) .subscribe(login -> { if (login != null) { sendToView(MainMvp.View::onUpdateDrawerMenuHeader); } }, Throwable::printStackTrace/*fail silently*/)); } @Override public boolean canBackPress(@NonNull DrawerLayout drawerLayout) { return !drawerLayout.isDrawerOpen(GravityCompat.START); } @SuppressWarnings("ConstantConditions") @Override public void onModuleChanged(@NonNull FragmentManager fragmentManager, @MainMvp.NavigationType int type) { Fragment currentVisible = getVisibleFragment(fragmentManager); FeedsFragment homeView = (FeedsFragment) getFragmentByTag(fragmentManager, FeedsFragment.TAG); MyPullsPagerFragment pullRequestView = (MyPullsPagerFragment) getFragmentByTag(fragmentManager, MyPullsPagerFragment.TAG); MyIssuesPagerFragment issuesView = (MyIssuesPagerFragment) getFragmentByTag(fragmentManager, MyIssuesPagerFragment.TAG); switch (type) { case MainMvp.PROFILE: UserPagerActivity.startActivity(App.getInstance().getApplicationContext(), Login.getUser().getLogin()); break; case MainMvp.FEEDS: if (homeView == null) { onAddAndHide(fragmentManager, FeedsFragment.newInstance(), currentVisible); } else { onShowHideFragment(fragmentManager, homeView, currentVisible); } break; case MainMvp.PULL_REQUESTS: if (pullRequestView == null) { onAddAndHide(fragmentManager, MyPullsPagerFragment.newInstance(), currentVisible); } else { onShowHideFragment(fragmentManager, pullRequestView, currentVisible); } break; case MainMvp.ISSUES: if (issuesView == null) { onAddAndHide(fragmentManager, MyIssuesPagerFragment.newInstance(), currentVisible); } else { onShowHideFragment(fragmentManager, issuesView, currentVisible); } break; } } @Override public void onShowHideFragment(@NonNull FragmentManager fragmentManager, @NonNull Fragment toShow, @NonNull Fragment toHide) { toHide.onHiddenChanged(true); fragmentManager .beginTransaction() .hide(toHide) .show(toShow) .commit(); toShow.onHiddenChanged(false); } @Override public void onAddAndHide(@NonNull FragmentManager fragmentManager, @NonNull Fragment toAdd, @NonNull Fragment toHide) { toHide.onHiddenChanged(true); fragmentManager .beginTransaction() .hide(toHide) .add(R.id.container, toAdd, toAdd.getClass().getSimpleName()) .commit(); toAdd.onHiddenChanged(false); } @Override public void onMenuItemSelect(@IdRes int id, int position, boolean fromUser) { if (getView() != null) { getView().onNavigationChanged(position); } } @Override public void onMenuItemReselect(@IdRes int id, int position, boolean fromUser) {} }