package org.commcare.views.media; import android.animation.ObjectAnimator; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.view.animation.LinearInterpolator; import android.widget.ProgressBar; import org.commcare.dalvik.R; /** * Small audio playback button that shows progress via a circular progress bar * * @author Phillip Mates (pmates@dimagi.com) */ public class AudioPlaybackButton extends AudioPlaybackButtonBase { private ProgressBar progressBar; private ObjectAnimator animation; /** * Used by media inflater. */ public AudioPlaybackButton(Context context, AttributeSet attrs) { super(context, attrs); } /** * @param URI audio to load when play button pressed * @param viewId Id for the ListAdapter view that contains this button * @param visible Should the button be visible? */ public AudioPlaybackButton(Context context, String URI, ViewId viewId, boolean visible) { super(context, URI, viewId, visible); } @Override protected void setupView(Context context) { super.setupView(context); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { progressBar = (ProgressBar)findViewById(R.id.circular_progress_bar); final int startPosition = 0; final int progressBarMax = 500; animation = ObjectAnimator.ofInt(progressBar, "progress", startPosition, progressBarMax); } } @Override protected int getLayout() { return R.layout.small_audio_playback; } @Override protected void startProgressBar(int milliPosition, int milliDuration) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { resetProgressBar(); animation.setDuration(milliDuration); animation.setCurrentPlayTime(milliPosition); animation.setInterpolator(new LinearInterpolator()); animation.start(); } } @Override protected void resetProgressBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { animation.removeAllListeners(); animation.end(); animation.cancel(); progressBar.clearAnimation(); progressBar.setProgress(0); } } @Override protected void pauseProgressBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { animation.cancel(); } } }