package com.fastaccess.ui.modules.repos.code.commit.details; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.fastaccess.R; import com.fastaccess.data.dao.FragmentPagerAdapterModel; import com.fastaccess.data.dao.NameParser; import com.fastaccess.data.dao.model.Commit; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ParseDateFormat; import com.fastaccess.provider.scheme.SchemeParser; import com.fastaccess.provider.timeline.HtmlHelper; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.repos.RepoPagerActivity; import com.fastaccess.ui.modules.repos.code.commit.details.comments.CommitCommentsFragments; import com.fastaccess.ui.widgets.AvatarLayout; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ViewPagerView; import com.fastaccess.ui.widgets.dialog.MessageDialogView; import java.util.Date; import butterknife.BindView; import butterknife.OnClick; /** * Created by Kosh on 10 Dec 2016, 9:23 AM */ public class CommitPagerActivity extends BaseActivity<CommitPagerMvp.View, CommitPagerPresenter> implements CommitPagerMvp.View { @BindView(R.id.avatarLayout) AvatarLayout avatarLayout; @BindView(R.id.headerTitle) FontTextView title; @BindView(R.id.size) FontTextView size; @BindView(R.id.date) FontTextView date; @BindView(R.id.tabs) TabLayout tabs; @BindView(R.id.pager) ViewPagerView pager; @BindView(R.id.fab) FloatingActionButton fab; @BindView(R.id.changes) FontTextView changes; @BindView(R.id.addition) FontTextView addition; @BindView(R.id.deletion) FontTextView deletion; @BindView(R.id.coordinatorLayout) CoordinatorLayout coordinatorLayout; @BindView(R.id.detailsIcon) View detailsIcon; public static Intent createIntent(@NonNull Context context, @NonNull String repoId, @NonNull String login, @NonNull String sha) { return createIntent(context, repoId, login, sha, false); } public static Intent createIntent(@NonNull Context context, @NonNull String repoId, @NonNull String login, @NonNull String sha, boolean showRepoBtn) { Intent intent = new Intent(context, CommitPagerActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.ID, sha) .put(BundleConstant.EXTRA, login) .put(BundleConstant.EXTRA_TWO, repoId) .put(BundleConstant.EXTRA_THREE, showRepoBtn) .end()); return intent; } public static void createIntentForOffline(@NonNull Context context, @NonNull Commit commitModel) { SchemeParser.launchUri(context, Uri.parse(commitModel.getHtmlUrl())); } @OnClick(R.id.detailsIcon) void onTitleClick() { if (getPresenter().getCommit() != null && !InputHelper.isEmpty(getPresenter().getCommit().getGitCommit().getMessage())) MessageDialogView.newInstance(getString(R.string.details), getPresenter().getCommit().getGitCommit().getMessage(), true) .show(getSupportFragmentManager(), MessageDialogView.TAG); } @OnClick(R.id.fab) void onAddComment() { if (pager == null || pager.getAdapter() == null) return; CommitCommentsFragments view = (CommitCommentsFragments) pager.getAdapter().instantiateItem(pager, 1); if (view != null) { view.onStartNewComment(); } } @Override protected int layout() { return R.layout.commit_pager_activity; } @Override protected boolean isTransparent() { return true; } @Override protected boolean canBack() { return true; } @Override protected boolean isSecured() { return false; } @NonNull @Override public CommitPagerPresenter providePresenter() { return new CommitPagerPresenter(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(""); if (savedInstanceState == null) { getPresenter().onActivityCreated(getIntent()); } else { if (getPresenter().isApiCalled()) onSetup(); } if (getPresenter().showToRepoBtn()) showNavToRepoItem(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.share_menu, menu); menu.findItem(R.id.browser).setVisible(true); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onNavToRepoClicked(); return true; } else if (item.getItemId() == R.id.share) { if (getPresenter().getCommit() != null) ActivityHelper.shareUrl(this, getPresenter().getCommit().getHtmlUrl()); return true; } else if (item.getItemId() == R.id.browser) { if (getPresenter().getCommit() != null) ActivityHelper.startCustomTab(this, getPresenter().getCommit().getHtmlUrl()); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } @Override public void onSetup() { hideProgress(); if (getPresenter().getCommit() == null) { return; } supportInvalidateOptionsMenu(); Commit commit = getPresenter().getCommit(); String login = commit.getAuthor() != null ? commit.getAuthor().getLogin() : commit.getGitCommit().getAuthor().getName(); String avatar = commit.getAuthor() != null ? commit.getAuthor().getAvatarUrl() : null; Date dateValue = commit.getGitCommit().getAuthor().getDate(); HtmlHelper.htmlIntoTextView(title, commit.getGitCommit().getMessage()); detailsIcon.setVisibility(View.VISIBLE); size.setVisibility(View.GONE); date.setText(ParseDateFormat.getTimeAgo(dateValue)); avatarLayout.setUrl(avatar, login); addition.setText(String.valueOf(commit.getStats() != null ? commit.getStats().getAdditions() : 0)); deletion.setText(String.valueOf(commit.getStats() != null ? commit.getStats().getDeletions() : 0)); changes.setText(String.valueOf(commit.getFiles() != null ? commit.getFiles().size() : 0)); pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForCommit(this, commit))); tabs.setupWithViewPager(pager); pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); hideShowFab(); } }); hideShowFab(); TabLayout.Tab tabOne = tabs.getTabAt(0); TabLayout.Tab tabTwo = tabs.getTabAt(1); if (tabOne != null && commit.getFiles() != null) { tabOne.setText(getString(R.string.commits) + " (" + commit.getFiles().size() + ")"); } if (tabTwo != null && commit.getGitCommit() != null && commit.getGitCommit().getCommentCount() > 0) { tabTwo.setText(getString(R.string.comments) + " (" + commit.getGitCommit().getCommentCount() + ")"); } } @Override public void onFinishActivity() { hideProgress(); finish(); } @Override public void onBackPressed() { super.onBackPressed(); } @Override protected void onNavToRepoClicked() { NameParser nameParser = new NameParser(""); nameParser.setName(getPresenter().getRepoId()); nameParser.setUsername(getPresenter().getLogin()); RepoPagerActivity.startRepoPager(this, nameParser); finish(); } private void hideShowFab() { if (pager.getCurrentItem() == 1) { fab.show(); } else { fab.hide(); } } }