package com.alorma.github.ui.fragment.commit; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.BottomSheetDialogFragment; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; import com.alorma.github.R; import com.alorma.github.sdk.bean.info.CommitInfo; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.ui.activity.CommitDetailActivity; import com.alorma.github.ui.activity.ProfileActivity; import com.alorma.github.ui.fragment.BaseBottomSheetDialogFragment; import com.alorma.github.ui.utils.AvatarHelper; import com.alorma.github.ui.utils.UniversalImageLoaderUtils; import com.alorma.github.ui.view.ItemSingleLineAvatar; import core.User; import core.repositories.Commit; public class CommitDetailBottomSheetFragment extends BaseBottomSheetDialogFragment { private static final String REPOINFO = "REPOINFO"; private static final String COMMIT = "COMMIT"; public static CommitDetailBottomSheetFragment newInstance(RepoInfo repoInfo, Commit commit) { CommitDetailBottomSheetFragment fragment = new CommitDetailBottomSheetFragment(); Bundle args = new Bundle(); args.putParcelable(REPOINFO, repoInfo); args.putParcelable(COMMIT, commit); fragment.setArguments(args); return fragment; } @BindView(R.id.commitToolbar) Toolbar toolbar; @BindView(R.id.author) ItemSingleLineAvatar author; @BindView(R.id.committer) ItemSingleLineAvatar committer; @BindView(R.id.commit_message) TextView commitMessage; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); return inflater.inflate(R.layout.commit_detail_bottom_sheet, null, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.bind(this, view); if (getArguments() != null) { RepoInfo repoInfo = getArguments().getParcelable(REPOINFO); Commit commit = getArguments().getParcelable(COMMIT); if (commit != null) { fillToolbar(repoInfo, commit); fillUser(author, commit.author != null ? commit.author : commit.commit.author); fillUser(committer, commit.committer != null ? commit.committer : commit.commit.committer); commitMessage.setText(commit.commit.getMessage()); } } } private void fillToolbar(RepoInfo repoInfo, Commit commit) { toolbar.setTitle(commit.shortSha()); toolbar.inflateMenu(R.menu.commit_bottom_sheet); MenuItem expandItem = toolbar.getMenu().findItem(R.id.action_commit_expand); expandItem.setIcon(R.drawable.ic_expand_less_black_24dp); toolbar.setNavigationIcon(R.drawable.ic_close_black_24dp); toolbar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.action_commit_expand) { openCommit(repoInfo, commit); } return super.onOptionsItemSelected(item); }); toolbar.setNavigationOnClickListener(view -> dismiss()); } private void fillUser(ItemSingleLineAvatar singleLineAvatar, User user) { singleLineAvatar.getTextView().setText(user.getLogin() != null ? user.getLogin() : user.getEmail()); UniversalImageLoaderUtils.loadUserAvatar(singleLineAvatar.getImageView(), user.getLogin(), AvatarHelper.getAvatar(user)); if (user.getLogin() != null) { singleLineAvatar.setOnClickListener(view -> { Intent intent = ProfileActivity.createLauncherIntent(getActivity(), user); startActivity(intent); dismiss(); }); } } private void openCommit(RepoInfo repoInfo, Commit commit) { CommitInfo info = new CommitInfo(); info.repoInfo = repoInfo; info.sha = commit.sha; Intent intent = CommitDetailActivity.launchIntent(getActivity(), info); startActivity(intent); } }