package com.marverenic.music.view; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.TextView; import com.marverenic.music.R; import java.text.DecimalFormat; import java.util.concurrent.TimeUnit; /** * An extension of TextView used to display times * @see #setTime(int) */ public class TimeView extends TextView { private static final DecimalFormat DIGIT_FORMAT = new DecimalFormat("00"); public TimeView(Context context) { super(context); } public TimeView(Context context, AttributeSet attrs) { super(context, attrs); } public TimeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.TimeView, 0, 0); try { setTime(a.getInt(R.styleable.TimeView_time, 0)); } finally { a.recycle(); } } /** * Update this TextView to display a formatted time as mm:ss * @param time The time to format and display (in milliseconds) */ public void setTime(int time) { setText(getValue(getContext(), time)); } public static String getValue(Context context, int time) { int sec = (int) TimeUnit.SECONDS.convert(time, TimeUnit.MILLISECONDS) % 60; int min = (int) TimeUnit.MINUTES.convert(time, TimeUnit.MILLISECONDS) % 60; int hours = (int) TimeUnit.HOURS.convert(time, TimeUnit.MILLISECONDS); if (hours == 0) { return context.getString(R.string.format_time, min, DIGIT_FORMAT.format(sec)); } else { return context.getString(R.string.format_time_hours, hours, DIGIT_FORMAT.format(min), DIGIT_FORMAT.format(sec)); } } }