package com.khmelenko.lab.varis.widget; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.khmelenko.lab.varis.R; import com.khmelenko.lab.varis.converter.BuildStateHelper; import com.khmelenko.lab.varis.converter.TimeConverter; import com.khmelenko.lab.varis.network.response.Commit; import com.khmelenko.lab.varis.network.response.IBuildState; import com.khmelenko.lab.varis.network.response.RequestData; import com.khmelenko.lab.varis.util.DateTimeUtils; import butterknife.Bind; import butterknife.ButterKnife; /** * View with build info * * @author Dmytro Khmelenko */ public class BuildView extends LinearLayout { @Bind(R.id.build_indicator) View mIndicator; @Bind(R.id.build_number) TextView mTitle; @Bind(R.id.build_pull_request_title) TextView mPullRequest; @Bind(R.id.build_branch) TextView mBranch; @Bind(R.id.build_commit_message) TextView mCommitMessage; @Bind(R.id.build_commit_person) TextView mCommitPerson; @Bind(R.id.build_duration) TextView mDuration; @Bind(R.id.build_finished) TextView mFinished; public BuildView(Context context) { super(context); initializeViews(context); } public BuildView(Context context, AttributeSet attrs) { super(context, attrs); initializeViews(context); } public BuildView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initializeViews(context); } /** * Inflates the views in the layout. * * @param context the current context for the view. */ private void initializeViews(Context context) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.view_build, this); ButterKnife.bind(this, view); } /** * Sets build duration * * @param durationInMillis Duration */ public void setDuration(long durationInMillis) { if (durationInMillis != 0) { String duration = TimeConverter.durationToString(durationInMillis); duration = getContext().getString(R.string.build_duration, duration); mDuration.setText(duration); mDuration.setVisibility(VISIBLE); } else { mDuration.setVisibility(GONE); } } /** * Sets the message when the build was finished * * @param finishedAt String with the message when the build was finished */ public void setFinishedAt(String finishedAt) { if (!TextUtils.isEmpty(finishedAt)) { String formattedDate = DateTimeUtils.parseAndFormatDateTime(finishedAt); formattedDate = getContext().getString(R.string.build_finished_at, formattedDate); mFinished.setText(formattedDate); mFinished.setVisibility(VISIBLE); } else { mFinished.setVisibility(GONE); } } /** * Sets build state * * @param buildState Build state */ public void setState(IBuildState buildState) { if (buildState != null) { setTitle(getContext() .getString(R.string.build_build_number, buildState.getNumber(), buildState.getState())); setStateIndicator(buildState.getState()); setFinishedAt(buildState.getFinishedAt()); setDuration(buildState.getDuration()); } } /** * Sets commit data * * @param commit Last commit */ public void setCommit(Commit commit) { if (commit != null) { mBranch.setVisibility(VISIBLE); mBranch.setText(commit.getBranch()); mCommitMessage.setVisibility(VISIBLE); mCommitMessage.setText(commit.getMessage()); mCommitPerson.setVisibility(VISIBLE); mCommitPerson.setText(commit.getCommitterName()); } } /** * Sets title * * @param title Title */ public void setTitle(String title) { mTitle.setText(title); } /** * Sets state indicator * * @param state Build state */ public void setStateIndicator(String state) { if (!TextUtils.isEmpty(state)) { int buildColor = BuildStateHelper.getBuildColor(state); mIndicator.setBackgroundColor(buildColor); mTitle.setTextColor(buildColor); Drawable drawable = BuildStateHelper.getBuildImage(state); if (drawable != null) { mTitle.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); } } } /** * Sets the title for pull request * * @param title Title for Pull Request */ public void setPullRequestTitle(RequestData title) { mPullRequest.setVisibility(VISIBLE); mPullRequest.setText(title.getPullRequestTitle()); } }