package com.fastaccess.ui.modules.repos.pull_requests; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.view.View; import android.widget.TextView; import com.annimon.stream.Stream; import com.fastaccess.R; import com.fastaccess.data.dao.FragmentPagerAdapterModel; import com.fastaccess.data.dao.TabsCountStateModel; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.ViewHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseFragment; import com.fastaccess.ui.widgets.SpannableBuilder; import com.fastaccess.ui.widgets.ViewPagerView; import java.util.HashSet; import butterknife.BindView; import icepick.State; /** * Created by Kosh on 31 Dec 2016, 1:36 AM */ public class RepoPullRequestPagerFragment extends BaseFragment<RepoPullRequestPagerMvp.View, RepoPullRequestPagerPresenter> implements RepoPullRequestPagerMvp.View { public static final String TAG = RepoPullRequestPagerFragment.class.getSimpleName(); @BindView(R.id.tabs) TabLayout tabs; @BindView(R.id.pager) ViewPagerView pager; @State HashSet<TabsCountStateModel> counts = new HashSet<>(); public static RepoPullRequestPagerFragment newInstance(@NonNull String repoId, @NonNull String login) { RepoPullRequestPagerFragment view = new RepoPullRequestPagerFragment(); view.setArguments(Bundler.start() .put(BundleConstant.ID, repoId) .put(BundleConstant.EXTRA, login) .end()); return view; } @Override protected int fragmentLayout() { return R.layout.centered_tabbed_viewpager; } @Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { String repoId = getArguments().getString(BundleConstant.ID); String login = getArguments().getString(BundleConstant.EXTRA); if (login == null || repoId == null) throw new NullPointerException("repoId || login is null???"); pager.setAdapter(new FragmentsPagerAdapter(getChildFragmentManager(), FragmentPagerAdapterModel.buildForRepoPullRequest(getContext(), login, repoId))); tabs.setupWithViewPager(pager); if (savedInstanceState != null && !counts.isEmpty()) { Stream.of(counts).forEach(this::updateCount); } } @NonNull @Override public RepoPullRequestPagerPresenter providePresenter() { return new RepoPullRequestPagerPresenter(); } @Override public void onSetBadge(int tabIndex, int count) { TabsCountStateModel model = new TabsCountStateModel(); model.setTabIndex(tabIndex); model.setCount(count); counts.add(model); if (tabs != null) { updateCount(model); } } private void updateCount(@NonNull TabsCountStateModel model) { TextView tv = ViewHelper.getTabTextView(tabs, model.getTabIndex()); tv.setText(SpannableBuilder.builder() .append(model.getTabIndex() == 0 ? getString(R.string.opened) : getString(R.string.closed)) .append(" ") .append("(") .bold(String.valueOf(model.getCount())) .append(")")); } @Override public int getCurrentItem() { return pager != null ? pager.getCurrentItem() : 0; } }